Я новичок в R и настраиваю модель смешанного эффекта с помощью lmer. У меня большой набор данных, и я хочу включить в него три вложенных случайных эффекта. У меня есть данные за два года, 2021 и 2022 годы, и каждый год проводятся раунды экспериментов, которые называются экспериментами 1, 2 и 3 и так далее каждый год. Проблема в том, что для случайных эффектов количество раундов эксперимента рассчитывается неправильно, поскольку нумерация экспериментов одинакова для каждого года. Как я могу включить «год» для случайных эффектов, чтобы количество групп было правильным?
Это пример настройки моего df:
example<-data.frame("Site" = c(1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2),
"Square" = c(1,1,1,2,2,2,1,1,1,2,2,2,1,1,1,2,2,2,1,1,1,2,2,2),
"Round" = c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3),
"Year" = c(2021,2021,2021,2021,2021,2021,2022,2022,2022,2022,2022,2022,2021,2021,2021,2021,2021,2021,2022,2022,2022,2022,2022,2022),
"Variable" = c(2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1),
"Outcome" = c(20,10,39,22,25,29,13,15,12,10,9,15,40,33,42,29,35,50,25,23,22,26,24,23))
Вот мой код, в котором я хочу исследовать результат, предсказанный переменной (фиксированный эффект) с Site , Square и Round как вложенные случайные эффекты:
model8<-lmer(Outcome ~ Variable + (1|Site/Square/Round),
data=example)
summary(model8)
И вот результат:
boundary (singular) fit: see help('isSingular')
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Outcome ~ Variable + (1 | Site/Square/Round)
Data: example
REML criterion at convergence: 150.7
Scaled residuals:
Min 1Q Median 3Q Max
-2.44099 -0.39914 -0.02029 0.45294 2.26577
Random effects:
Groups Name Variance Std.Dev.
Round:(Square:Site) (Intercept) 0.00 0.000
Square:Site (Intercept) 0.00 0.000
Site (Intercept) 78.12 8.838
Residual 37.96 6.161
Number of obs: 24, groups: Round:(Square:Site), 12; Square:Site, 4; Site, 2
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 5.000 7.408 1.813 0.675 0.575
Variable 13.083 2.515 21.000 5.201 3.73e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr)
Variable -0.509
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
Пожалуйста, не обращайте внимания на ошибку сингулярности, это всего лишь пример. Посмотрите на количество наблюдений:
Number of obs: 24, groups: Round:(Square:Site), 12; Square:Site, 4; Site, 2
Здесь количество раундов неверно, оно должно быть 24 (как и количество наблюдений). Как указать год для раунда случайных эффектов? Это вообще возможно или я на неправильном пути? Площадки и квадраты из года в год одинаковы, но раунды уникальны для каждого года/набора данных. Или просто проще изменить раунды на 1, 2, 3 в 2021 году, а затем на 4,5,6 в 2022 году в реальном кадре данных? Я как раз нахожусь в процессе настройки своей модели и начал со случайных эффектов.
Измените код, чтобы его можно было легко воспроизвести (например, предоставьте код для создания фрейма данных, чтобы другие могли легко его запустить). См. эту ссылку: stackoverflow.com/help/minimal-reproducible-example.
Спасибо за ваши комментарии! Эксперименты независимы друг от друга, их не следует считать повторным измерением. Но они выполняются в одном и том же месте.
Если вы хотите, чтобы значения Round
были устранены по годам, вы можете сделать это:
lmer(Outcome ~ Variable + (1|Site/Square) +
+ (1|Year:Site:Square:Round), data = example)
Однако это вызовет следующую ошибку:
Ошибка: количество уровней каждого фактора группировки должно быть < количества наблюдений (проблемы: Год:Участок:Площадь:Круглый)
это происходит потому, что для любой комбинации «Год/Место/Квадрат/Круг» в наборе данных имеется только одно наблюдение. Это означает, что дисперсия, связанная с этим случайным эффектом, смешивается с остаточной дисперсией (другими словами, эти две дисперсии совместно неидентифицируются). (Есть другое объяснение этому здесь.)
Если ваш реальный набор данных (вы сказали, что у вас «большой набор данных») содержит более одного наблюдения за комбинацию «Год/Место/Квадрат/Раунд», то это не будет проблемой.
Я бы также сказал, что рассматривать Site
как случайный эффект, если есть только два уровня, вряд ли будет хорошо работать. (Опять же, возможно, в вашем реальном наборе данных есть больше сайтов.)
Спасибо @Ben Bolker за этот уточняющий ответ. Это приводит к той же ошибке в моем «реальном» наборе данных, поскольку у меня есть только одно наблюдение на самом низком уровне. Думаю, мне нужно убрать соответствующий «Раунд» как случайный эффект из моей модели. Если я это сделаю, он работает нормально, поэтому я возьму его оттуда. Так что еще раз спасибо!
опыты за каждый год не подлежат обмену? То есть можно ли напрямую сравнивать «эксперимент (раунд) 1 в год 1» с «раундом 1 в год 2»?