PGLS возвращает ошибку при обращении к переменным по положению их столбца в объекте caper

Я выполняю PGLS между признаком и 21 переменной среды для клады видов растений. Я использую цикл, чтобы сделать это 21 раз, один раз для каждой из переменных среды, и извлечь значения p и некоторые другие значения в матрицу результатов.

Когда обычно несут каждый PGLS индивидуально я буду ссылаться на переменные по именам их столбцов, например:

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

Но для того, чтобы зациклить этот процесс для нескольких переменных среды, я обращаюсь к переменным по их положению столбца во фрейме данных (который находится в форме объекта caper для PGLS) вместо имени их столбца:

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

Это возвращает ошибку:

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

Это не проблема при выполнении линейной регрессии с использованием исходного фрейма данных - ссылка на переменные по имени их столбца приводит к этой ошибке только при использовании объекта Caper в качестве данных с использованием PGLS, Разве этот способ ссылки на имена столбцов не работает для объектов Caper? Есть ли другой способ, которым я мог бы обратиться к именам столбцов, чтобы я мог включить их в PGLS loop?

1 ответ

Ваше решение заключается в использовании 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.

Хорошей практикой в ​​проблемах с форматом данных является проверка того, как данные хранятся с str(caperobject),

Другие вопросы по тегам