Ошибки в коде модели смешанных эффектов: «(p <- ncol(X)) == ncol (Y) неверно" и "переменные длины отличаются"

#r #error-handling #lme4

#r #обработка ошибок #lme4

Вопрос:

Я довольно новичок в R-кодировании и впервые пытаюсь запустить модель смешанных эффектов. Моя модель направлена на изучение влияния тенденций популяций одного вида на тенденции численности другого вида с течением времени (год включается в качестве фиксированного эффекта), при этом состояние является случайным эффектом (поскольку данные сообщаются по штату, но я рассматриваю только континентальные эффекты).).

Вот фрагмент настройки моих данных (таблица с именем IGP):

  species  state Count_yr    population_value
1       A    AL     1970             0.1615
2       B    AL     1970             0.1981
3       C    AL     1970             0.2162
4       A    KY     1971             0.2096
5       B    KY     1971             0.2118
6       C    KY     1971             0.2784
 

Я разделил данные, чтобы разделить все три вида (1 подмножество для A, 1 подмножество для B, 1 подмножество для C) следующим образом:

 A <- subset(IGP, IGP$species=="A")
B <- subset(IGP, IGP$species=="B")
C <- subset(IGP, IGP$species=="C")
 

Все работало нормально для линейной модели, ориентированной только на один вид:

 Alm <- lm(A$population_value ~ A$Count_yr A$state)
 

Но при создании модели смешанных эффектов с включением всех 3 видов возникают проблемы
:

 lmer<-lmer(A$population_value ~ B$Count_yr*B$population_value   
           C$Count_yr*C$population_value   (1|state)
 

Во-первых, я получал ошибку «переменные длины отличаются», поэтому я вошел и вручную добавил NAs в течение многих лет и / или состояний, в которых не было значений данных для одного из видов. Я проверил, чтобы убедиться, что во всех годах было одинаковое количество точек данных, и во всех штатах было одинаковое количество точек данных, поэтому я не думаю, что после этого возникла проблема.
Однако, как только я добавил NA, я начал получать ошибку «(p <- ncol (X)) == ncol (Y) неверно», что, по-видимому, связано со значениями NA в столбцах факторов. Отказавшись от рекомендаций в других сообщениях, я использовал na.omit, чтобы исправить проблему, но затем я снова получил ошибку «переменные длины отличаются» (похоже, бесконечный цикл, который я пока не знаю, как исправить).
Если бы кто-нибудь мог подсказать мне, как мне поступить, я был бы очень благодарен! Я не очень разбираюсь в статистике или кодировании, поэтому, пожалуйста, дайте мне знать, если есть какая-либо другая информация, которую я мог бы добавить к сообщению, чтобы прояснить ситуацию. Заранее спасибо!

Комментарии:

1. Не совсем понятно, чего вы пытаетесь достичь с помощью полной модели. Вы пытаетесь предсказать популяцию видов A по популяциям видов B и C ? В этом случае мое предложение состояло бы в том, чтобы преобразовать ваши данные из «длинного формата» в «широкий формат» (используя, например pivot_wider() , из tidyr пакета).

2. Спасибо за ваше предложение! Я пытаюсь выяснить, влияет ли на популяцию A увеличение численности видов B или видов C. Мы уже знаем численность популяции для всех 3 видов, но мы хотим посмотреть, влияют ли общие тенденции видов B или C на виды A. Что изменение формата повлияет на данные? Просто реорганизуйте столбцы / строки, или функция pivot_wider делает что-то еще?

Ответ №1:

Я думаю, вам следует преобразовать ваши данные из длинного формата в широкий. tidyr::pivot_wider() это один из способов сделать это (но есть и другие, например reshape , в базе R или plyr::melt() / cast() ).

Образец данных в длинной форме:

 dd <- expand.grid(species=c("A","B","C"),
                  state=c("AL","KY","TN"),
                  Count_yr=1970:1974)
set.seed(101)
dd$pop <- rnorm(nrow(dd))
 

Преобразовать в широкий:

 ddw <- tidyr::pivot_wider(dd, id_cols=c(state,Count_yr), 
              names_from=species, values_from=pop,
                          names_prefix="pop_")
names(ddw)
## [1] "state"    "Count_yr" "pop_A"     "pop_B"     "pop_C"
 

Подходящая модель:

 library(lme4)
lmer(pop_A ~ scale(Count_yr)*(pop_B pop_C)   (1|state), data=ddw)
 

Комментарии:

1. Ты самый лучший!! Большое вам спасибо за вашу помощь, новый формат отлично сработал!