Как указать год для вложенного случайного эффекта?

Я новичок в 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 году в реальном кадре данных? Я как раз нахожусь в процессе настройки своей модели и начал со случайных эффектов.

опыты за каждый год не подлежат обмену? То есть можно ли напрямую сравнивать «эксперимент (раунд) 1 в год 1» с «раундом 1 в год 2»?

Ben Bolker 02.05.2024 16:28

Измените код, чтобы его можно было легко воспроизвести (например, предоставьте код для создания фрейма данных, чтобы другие могли легко его запустить). См. эту ссылку: stackoverflow.com/help/minimal-reproducible-example.

ajerneck 02.05.2024 16:58

Спасибо за ваши комментарии! Эксперименты независимы друг от друга, их не следует считать повторным измерением. Но они выполняются в одном и том же месте.

Liv 02.05.2024 18:10
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите, чтобы значения Round были устранены по годам, вы можете сделать это:

 lmer(Outcome ~ Variable + (1|Site/Square) +
   + (1|Year:Site:Square:Round), data = example)

Однако это вызовет следующую ошибку:

Ошибка: количество уровней каждого фактора группировки должно быть < количества наблюдений (проблемы: Год:Участок:Площадь:Круглый)

это происходит потому, что для любой комбинации «Год/Место/Квадрат/Круг» в наборе данных имеется только одно наблюдение. Это означает, что дисперсия, связанная с этим случайным эффектом, смешивается с остаточной дисперсией (другими словами, эти две дисперсии совместно неидентифицируются). (Есть другое объяснение этому здесь.)

Если ваш реальный набор данных (вы сказали, что у вас «большой набор данных») содержит более одного наблюдения за комбинацию «Год/Место/Квадрат/Раунд», то это не будет проблемой.

Я бы также сказал, что рассматривать Site как случайный эффект, если есть только два уровня, вряд ли будет хорошо работать. (Опять же, возможно, в вашем реальном наборе данных есть больше сайтов.)

Спасибо @Ben Bolker за этот уточняющий ответ. Это приводит к той же ошибке в моем «реальном» наборе данных, поскольку у меня есть только одно наблюдение на самом низком уровне. Думаю, мне нужно убрать соответствующий «Раунд» как случайный эффект из моей модели. Если я это сделаю, он работает нормально, поэтому я возьму его оттуда. Так что еще раз спасибо!

Liv 06.05.2024 14:35

Другие вопросы по теме