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)
,