lmer混合效应模型的predict()函数


27

问题:

我读过其他文章,这些文章predict不适用于lmer[R]中的混合效果{lme4}模型。

我尝试通过玩具数据集探索这个主题...

背景:

数据集是根据此来源改编的,可作为...

require(gsheet)
data <- read.csv(text = 
     gsheet2text('https://docs.google.com/spreadsheets/d/1QgtDcGJebyfW7TJsB8n6rAmsyAnlz1xkT3RuPFICTdk/edit?usp=sharing',
        format ='csv'))

这些是第一行和标题:

> head(data)
  Subject Auditorium Education Time  Emotion Caffeine Recall
1     Jim          A        HS    0 Negative       95 125.80
2     Jim          A        HS    0  Neutral       86 123.60
3     Jim          A        HS    0 Positive      180 204.00
4     Jim          A        HS    1 Negative      200  95.72
5     Jim          A        HS    1  Neutral       40  75.80
6     Jim          A        HS    1 Positive       30  84.56

我们对Time连续测量有一些重复的观察(),即Recall某些单词的比率和几个解释变量,包括随机效应Auditorium进行测试的位置;Subject名称);以及 和固定效应,诸如EducationEmotion(字的情感内涵记住),或的在测试之前摄取。mgs.Caffeine

这个想法是,对于咖啡因含量较高的有线对象很容易记住,但是随着时间的流逝,这种能力会下降,这可能是由于疲倦。具有否定含义的单词更难记。教育具有可预见的效果,甚至礼堂也起着作用(也许一个人比较吵,或更不舒服)。这是一些探索性的情节:


在此处输入图片说明

在召回率的功能差异Emotional ToneAuditorium以及Education

在此处输入图片说明


在呼叫的数据云上拟合线路时:

fit1 <- lmer(Recall ~ (1|Subject) + Caffeine, data = data)

我得到这个情节:

包含以下代码(请注意其中对<code> predict(fit1)</ code>的调用):

library(ggplot2)
p <- ggplot(data, aes(x = Caffeine, y = Recall, colour = Subject)) +
  geom_point(size=3) +
  geom_line(aes(y = predict(fit1)),size=1) 
print(p)

而以下型号:

fit2 <- lmer(Recall ~ (1|Subject/Time) + Caffeine, data = data)

合并Time和并行代码得到一个令人惊讶的图:

p <- ggplot(data, aes(x = Caffeine, y = Recall, colour = Subject)) +
  geom_point(size=3) +
  geom_line(aes(y = predict(fit2)),size=1) 
print(p)

在此处输入图片说明


问题:

predict功能如何在此lmer模型中运行?显然,它考虑到了Time变量,从而导致拟合更加紧密,而之字形则试图显示Time第一个图中所描绘的第三个尺寸。

如果我打电话给predict(fit2)我,我得到132.45609的第一项是第一点。这是head数据集的,输出的predict(fit2)附件作为最后一列:

> data$predict = predict(fit2)
> head(data)
  Subject Auditorium Education Time  Emotion Caffeine Recall   predict
1     Jim          A        HS    0 Negative       95 125.80 132.45609
2     Jim          A        HS    0  Neutral       86 123.60 130.55145
3     Jim          A        HS    0 Positive      180 204.00 150.44439
4     Jim          A        HS    1 Negative      200  95.72 112.37045
5     Jim          A        HS    1  Neutral       40  75.80  78.51012
6     Jim          A        HS    1 Positive       30  84.56  76.39385

的系数为fit2

$`Time:Subject`
         (Intercept)  Caffeine
0:Jason     75.03040 0.2116271
0:Jim       94.96442 0.2116271
0:Ron       58.72037 0.2116271
0:Tina      70.81225 0.2116271
0:Victor    86.31101 0.2116271
1:Jason     59.85016 0.2116271
1:Jim       52.65793 0.2116271
1:Ron       57.48987 0.2116271
1:Tina      68.43393 0.2116271
1:Victor    79.18386 0.2116271
2:Jason     43.71483 0.2116271
2:Jim       42.08250 0.2116271
2:Ron       58.44521 0.2116271
2:Tina      44.73748 0.2116271
2:Victor    36.33979 0.2116271

$Subject
       (Intercept)  Caffeine
Jason     30.40435 0.2116271
Jim       79.30537 0.2116271
Ron       13.06175 0.2116271
Tina      54.12216 0.2116271
Victor   132.69770 0.2116271

我最好的选择是...

> coef(fit2)[[1]][2,1]
[1] 94.96442
> coef(fit2)[[2]][2,1]
[1] 79.30537
> coef(fit2)[[1]][2,2]
[1] 0.2116271
> data$Caffeine[1]
[1] 95
> coef(fit2)[[1]][2,1] + coef(fit2)[[2]][2,1] + coef(fit2)[[1]][2,2] * data$Caffeine[1]
[1] 194.3744

取而代之的是什么公式132.45609


编辑以便快速访问...计算预测值的公式(根据接受的答案将基于ranef(fit2)输出:

> ranef(fit2)
$`Time:Subject`
         (Intercept)
0:Jason    13.112130
0:Jim      33.046151
0:Ron      -3.197895
0:Tina      8.893985
0:Victor   24.392738
1:Jason    -2.068105
1:Jim      -9.260334
1:Ron      -4.428399
1:Tina      6.515667
1:Victor   17.265589
2:Jason   -18.203436
2:Jim     -19.835771
2:Ron      -3.473053
2:Tina    -17.180791
2:Victor  -25.578477

$Subject
       (Intercept)
Jason   -31.513915
Jim      17.387103
Ron     -48.856516
Tina     -7.796104
Victor   70.779432

...对于第一个入口点:

> summary(fit2)$coef[1]
[1] 61.91827             # Overall intercept for Fixed Effects 
> ranef(fit2)[[1]][2,]   
[1] 33.04615             # Time:Subject random intercept for Jim
> ranef(fit2)[[2]][2,]
[1] 17.3871              # Subject random intercept for Jim
> summary(fit2)$coef[2]
[1] 0.2116271            # Fixed effect slope
> data$Caffeine[1]
[1] 95                   # Value of caffeine

summary(fit2)$coef[1] + ranef(fit2)[[1]][2,] + ranef(fit2)[[2]][2,] + 
                    summary(fit2)$coef[2] * data$Caffeine[1]
[1] 132.4561

这篇文章的代码在这里


3
请注意,predict自2013年1月1日发布的1.0-0版以来,此程序包中已有一个功能。请参阅CRAN中软件包新闻页面。如果没有,您将无法通过获得任何结果predict。不要忘记,您可以在R命令提示符下看到带有lme4 ::: predict.merMod的R代码,并在源代码包中检查的源代码中是否有任何底层编译函数lme4
EdM

1
谢谢,我看到有忽略或包含随机效果的功能。您知道我在哪里可以找到它的计算方式吗?如果?predict在[r]控制台上键入,我将得到{stats}的基本预测...
Antoni Parellada 2015年

@EdM ...是的,这对我来说是新手...谢谢。我没有打电话predict.merMod,但是...正如您在OP上看到的,我只是打了电话predict...
Antoni Parellada 2015年

1
加载lme4软件包,然后键入lme4 ::: predict.merMod以查看特定于软件包的版本。的输出lmer存储在class的对象中merMod
EdM

4
R的优点之一是,像这样的函数predict根据调用它所作用的对象的类知道该做什么。您正在打电话predict.merMod,只是不知道。
EdM

Answers:


25

调用时,很容易被系数的表示弄糊涂coef(fit2)。查看fit2的摘要:

> summary(fit2)
Linear mixed model fit by REML ['lmerMod']
Formula: Recall ~ (1 | Subject/Time) + Caffeine
   Data: data
REML criterion at convergence: 444.5

Scaled residuals: 
 Min       1Q   Median       3Q      Max 
-1.88657 -0.46382 -0.06054  0.31430  2.16244 

Random effects:
 Groups       Name        Variance Std.Dev.
 Time:Subject (Intercept)  558.4   23.63   
 Subject      (Intercept) 2458.0   49.58   
 Residual                  675.0   25.98   
Number of obs: 45, groups:  Time:Subject, 15; Subject, 5

Fixed effects:
Estimate Std. Error t value
(Intercept) 61.91827   25.04930   2.472
Caffeine     0.21163    0.07439   2.845

Correlation of Fixed Effects:
 (Intr)
Caffeine -0.365

该模型的总体截距为61.92,咖啡因系数为0.212。因此,对于咖啡因= 95,您预计平均召回率为82.06。

而不是使用coef,而是使用ranef嵌套的下一个更高级别从平均截距中获取每个随机效应截距的差:

> ranef(fit2)
$`Time:Subject`
         (Intercept)
0:Jason    13.112130
0:Jim      33.046151
0:Ron      -3.197895
0:Tina      8.893985
0:Victor   24.392738
1:Jason    -2.068105
1:Jim      -9.260334
1:Ron      -4.428399
1:Tina      6.515667
1:Victor   17.265589
2:Jason   -18.203436
2:Jim     -19.835771
2:Ron      -3.473053
2:Tina    -17.180791
2:Victor  -25.578477
$Subject
       (Intercept)
Jason   -31.513915
Jim      17.387103
Ron     -48.856516
Tina     -7.796104
Victor   70.779432

吉姆在时间= 0时的值与他Subject 他的Time:Subject系数之和与平均值82.06有所不同:

82.06+17.39+33.04=132.49

我认为这在132.46的舍入误差内。

所返回的截距值coef似乎代表了总体截距加上SubjectTime:Subject特定的差异,因此使用它们比较困难;如果您尝试使用这些coef值进行上述计算,那么您将对整个截距进行重复计算。


谢谢!太好了!我不认为有一个在离开它打开任何一点......这是的答案,不是吗?
Antoni Parellada 2015年

ranef通过检查中的R代码,我得到了一些提示lme4。我在几个地方澄清了演示文稿。
EdM 2015年

(+1)注意:嵌套在人体内的时间随机效应看起来有些奇怪。
Michael M

@MichaelM:是的,显示的数据似乎是交叉的(时间x主题),而不是嵌套的设计,但这是OP提出如何解释lme4输出的问题的方式。而且,所提供的数据似乎只是为了说明,而不是要进行分析的真实研究。
EdM 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.