Анализ продольных данных с помощью модели смешанных эффектов в R

#r #lme4 #mixed-models

#r #lme4 #смешанные модели

Вопрос:

Я пытаюсь проанализировать некоторые смоделированные продольные данные в R, используя модель ( lme4 пакет) со смешанными эффектами.

Смоделированные данные: 25 испытуемых должны выполнить 2 задания в 5 последовательных временных точках.

 #Simulate longitudinal data
N    <- 25
t    <- 5
x    <- rep(1:t,N)

#task1
beta1 <- 4
e1    <- rnorm(N*t, mean = 0, sd = 1.5)
y1    <- 1   x * beta1   e1

#task2
beta2 <- 1.5
e2    <- rnorm(N*t, mean = 0, sd = 1)
y2    <- 1   x * beta2   e2

data1 <- data.frame(id=factor(rep(1:N, each=t)), day = x, y = y1, task=rep(c("task1"),length(y1)))
data2 <- data.frame(id=factor(rep(1:N, each=t)), day = x, y = y2, task=rep(c("task2"),length(y2)))
data <- rbind(data1, data2)
  

Вопрос1: Как проанализировать, как субъект изучает каждую задачу?

 library(lme4)
m1 <- lmer(y ~ day   (1 | id), data=data1)
summary(m1)

...
Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)   1.2757     0.3561 123.0000   3.582 0.000489 ***
day           3.9299     0.1074 123.0000  36.603  < 2e-16 ***
  

С ranef(m1) помощью я получаю случайный перехват для каждого субъекта, который, я думаю, отражает базовое значение для каждого субъекта в day = 1. Но я не понимаю, как я могу определить, как человек изучает задачу, или отличаются ли субъекты тем, как они изучают задачу.

Вопрос2: Как я могу проанализировать, отличается ли способ обучения испытуемых между задачами 1 и задачой 2.

Ответ №1:

Я подробно остановился на вашем примере, чтобы кратко ответить на ваши вопросы, но я могу порекомендовать прочитать главу 15 Snijders amp; Bosker (2012) или книгу Singer amp; Willet (2003) для лучшего объяснения. В вашей модели день рассматривается как непрерывная переменная, поскольку у вас есть панельные данные (т. Е. Все измеряются в один и тот же день), а день не имеет никакого значения, кроме указания различных случаев измерения, может быть, лучше рассматривать день как фактор (т. Е. Использовать Фиктивные переменные). Однако сейчас я продолжу с вашим примером

Ваша первая модель (я думаю, вам нужны данные в потоке data1) дает фиксированный линейный наклон (т.Е. Средний наклон, никакой разницы в задачах, никакой разницы между отдельными лицами). Фиксированный перехват — это производительность, когда day равен 0, что не имеет никакого значения, поэтому вы можете рассмотреть возможность центрирования эффекта day для лучшей интерпретации (или действительно использовать манекены). Случайный эффект дает индивидуальное отклонение от этого перехвата, которое в вашем примере оценивается в 0,00, поэтому отдельные люди практически не отличаются друг от друга по своему исходному положению.

 m1 <- lmer(y ~ day   (1 | id), data=data)
summary(m1)
Random effects:
 Groups   Name        Variance Std.Dev.
 id       (Intercept)  0.00    0.000   
 Residual             18.54    4.306   
Number of obs: 250, groups:  id, 25
  

Мы можем расширить эту модель, добавив взаимодействие с task. Это означает, что фиксированный наклон отличается для задач task1 и task2, которые, как я полагаю, отвечают на вопрос 2 (вы также можете использовать update() для обновления своей модели)

 m2 <- lmer(y ~ day*task   (1|id), data = data)
summary(m2)
  

Эффект дня в этой модели — это фиксированный наклон вашей эталонной категории (task1), а взаимодействие — разница между наклоном task1 и task2. Фиксированный эффект задачи — это разница в перехвате.
соответствие модели можно оценить с помощью теста на отклонение, прочитайте Snijders amp; Boskers (2012) для объяснения оценок ML и REML.

 anova(m1,m2)
  

Чтобы добавить случайный эффект для роста отдельных лиц, мы можем снова обновить модель, которая отвечает на вопрос 1

 m3 <- lmer(y ~ day*task   (day|id), data = data)
summary(m3)
ranef(m3)
  

Случайные эффекты указывают на индивидуальные отклонения в наклоне и пересечении. Сводка распределения случайных эффектов включена в сводку модели (такая же, как для m1).
Наконец, я думаю, вы могли бы добавить случайный эффект во взаимодействие между ежедневными задачами, чтобы оценить, отличаются ли отдельные люди в росте производительности при выполнении задач1 и задач2. Но это очень сильно зависит от ваших данных и производительности предыдущих моделей.

 m4 <- lmer(y ~ day*task   (day*task|id), data = data)
summary(m4)
ranef(m4)
  

Надеюсь, это поможет. Книги, которые я рекомендовал, безусловно, должны. Оба предоставляют отличные примеры и объяснение теории (к сожалению, примеров R нет). Если вы выберете модель с фиксированным событием (эффект дня, выраженный чайниками) nlme , пакет предоставляет отличные возможности для управления ковариационной структурой случайных эффектов. Хорошая документация по пакету предоставлена Pinheiro amp; Bates (2000).