首页 文章

使用R中的混合效应模型分析纵向数据

提问于
浏览
0

我尝试使用混合效应模型( lme4 包)分析R中的一些模拟纵向数据 .

模拟数据:25名受试者必须在5个连续时间点执行2项任务 .

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

Question1 :如何分析主题如何学习每项任务?

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) 我得到每个科目的随机截距,我认为这反映了每个科目在每天= 1的基线值 . 但我不明白我怎么能告诉个人如何学习任务,或者科目是否有所不同他们如何学习任务 .

Question2: 如何分析主题在task1和task2之间的学习方式是否有所不同 .

1 回答

  • 2

    我扩展了您的示例以简要回答您的问题,但我建议您阅读Snijders & Bosker (2012)的第15章或Singer & Willet (2003)的书籍以获得更好的解释 . 在您的模型中,日被视为连续变量,因为您有面板数据(即每个人都在同一天进行测量),除了指示不同的测量时间之外,日没有意义,将日视为一个因素可能更好(即使用虚拟变量) . 但是,现在我将继续你的例子

    你的第一个模型(我想你想要data1的数据读取)给出一个固定的线性斜率(即平均斜率,任务没有差异,个体之间没有差异) . 固定截距是当天为0时的表现,没有任何意义所以你可能想要考虑将日的效果集中在一起以获得更好的解释(或者确实使用假人) . 随机效应给出了这个截距的个体偏差,在你的例子中估计方差为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
    

    我们可以通过添加与任务的交互来扩展此模型 . 意味着task1和task2的固定斜率不同,我回答问题2(您也可以使用 update() 来更新模型)

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

    此模型中的日期效果是参考类别(task1)的固定斜率,而交互是task1和task2的斜率之间的差异 . 任务的固定效果是截距的差异 . 模型拟合可以通过偏差测试进行评估,阅读Snijders&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 & Bates (2000)提供了包装的良好文档 .

相关问题