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

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

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

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

Но для того, чтобы зациклить этот процесс для нескольких переменных среды, я ссылаюсь на переменные по положению их столбца во фрейме данных (который находится в форме объекта каперса для 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]'

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


person cflax    schedule 31.08.2018    source источник
comment
Приведите пример того, что такое caperobject. Тебе будет легче помочь.   -  person patL    schedule 05.09.2018


Ответы (1)


Ваше решение состоит в том, чтобы использовать caperobject$data[,2] ~ caperobject$data[,5], потому что класс comparative.data представляет собой список со значениями свойств, расположенными в списке 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).

person nya    schedule 18.09.2018
comment
Спасибо, например, использование caperobject$data[, 2] вместо caperobject[, 2] полностью решило проблему. - person cflax; 05.10.2018