PGLS returns 在 caper 对象中通过变量的列位置引用变量时出错

PGLS returns an error when referring to variables by their column position in a caper object

我正在对一个植物进化枝的一个性状和 21 个环境变量之间进行 PGLS。我正在使用循环执行此操作 21 次,每个环境变量一次,并将 p 值和其他一些值提取到结果矩阵中。

通常单独携带每个 PGLS 时,我将通过列名引用变量,例如:

pgls(**trait1**~**meanrainfall**, data=caperobject)

但是为了针对多个环境变量循环此过程,我通过变量在数据框中的列位置(以 PGLS 的 caper 对象的形式)而不是列名称来引用变量:

pgls(**caperobject[,2]**~**caperobject[,5]**, data=caperobject)

这个returns错误:

Error in model.frame.default(formula, data$data, na.action = na.pass) : invalid type (list) for variable 'caperobject[, 2]'

当运行使用原始数据框进行线性回归时,这不是问题——仅当使用 caper 对象作为使用 [=11 的数据时,通过列名引用变量才会产生此错误=].这种引用列名的方式是否不适用于 Caper 对象?有没有其他方法可以引用列名,以便将它们合并到 PGLS loop?

您的解决方案是使用 caperobject$data[,2] ~ caperobject$data[,5],因为 comparative.data class 是一个列表,特征值位于列表 data 中。这是一个例子:

library(ape)
library(caper)

# generate random data
seed <- 245937
tr <- rtree(10)
dat <- data.frame(taxa = tr$tip.label, 
                  trait1 = rTraitCont(tr, root.value = 3), 
                  meanrainfall = rnorm(10, 50, 10))

# prepare a comparative.data structure 
caperobject <- comparative.data(tr, dat, taxa, vcv = TRUE, vcv.dim = 3)

# run PGLS
pgls(trait1 ~ meanrainfall, data = caperobject)
pgls(caperobject$data[, 1] ~ caperobject$data[, 2], data = caperobject)

截距 = 3.13 和斜率 = -0.003 的两个选项 return 相同。

解决数据格式问题的一个好习惯是检查数据是如何存储的str(caperobject)