#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. Ты самый лучший!! Большое вам спасибо за вашу помощь, новый формат отлично сработал!