#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).