用于说明线性混合效应模型结果的图 - 继续

时间:2016-04-14 01:47:49

标签: r lme4 ggplot2

我试图创建一个类似于此处的情节:https://stats.stackexchange.com/questions/98958/plots-to-illustrate-results-of-linear-mixed-effect-model

(为便于参考,以下是该链接的代码:

library(nlme)
fm2 <- lme(distance ~ age + Sex, data = Orthodont, random = ~ 1|Subject)

newdat <- expand.grid(Sex=unique(Orthodont$Sex),
                  age=c(min(Orthodont$age),
                        max(Orthodont$age)))

library(ggplot2)
p <- ggplot(Orthodont, aes(x=age, y=distance, colour=Sex)) +
  geom_point(size=3) +
  geom_line(aes(y=predict(fm2), group=Subject, size="Subjects")) +
  geom_line(data=newdat, aes(y=predict(fm2, level=0, newdata=newdat), size="Population")) +
  scale_size_manual(name="Predictions", values=c("Subjects"=0.5, "Population"=3)) +
  theme_bw(base_size=22) 
print(p)

我使用lme4,而不是nlme。根据我的理解,&#39;预测&#39;以下代码中的函数是确定人口级别的预测值。但是,我不确定如何在lme4中模仿这个。

我与参与者交叉刺激。以下是一些示例数据:

 Subject Sex StimID StimSex Response
1        1   M      1       M       84
2        1   M      2       M       54
3        1   M      3       F       62
4        1   M      4       F       22
5        1   M      5       F       75
6        2   M      1       M       56
7        2   M      2       M       73
8        2   M      3       F       98
9        2   M      4       F       86
10       2   M      5       F       74
11       3   M      1       M       85
12       3   M      2       M       44
13       3   M      3       F       51
14       3   M      4       F       51
15       3   M      5       F       31
16       4   M      1       M       24
17       4   M      2       M       78
18       4   M      3       F       16
19       4   M      4       F       50
20       4   M      5       F       61
21       5   F      1       M       76
22       5   F      2       M       95
23       5   F      3       F       36
24       5   F      4       F       36
25       5   F      5       F       15
26       6   F      1       M       80
27       6   F      2       M       97
28       6   F      3       F       70
29       6   F      4       F        8
30       6   F      5       F       24
31       7   F      1       M       86
32       7   F      2       M       22
33       7   F      3       F       97
34       7   F      4       F       88
35       8   F      5       F       21
36       8   F      1       M        3
37       8   F      2       M       21
38       8   F      3       F        4
39       8   F      4       F       69
40       8   F      5       F       84

我正在绘制x轴上的刺激性和y轴上的反应。我希望每个参与者的个别行(参与者性别的颜色编码)和两个较粗的行显示男性和女性参与者的人口平均值。这是我的代码:

lmer1<- lmer(Response~StimSex*Sex + (Sex|StimID) + (StimSex|Subject), data = dat)


p1<- ggplot(dat, aes(x=StimSex, y = Response, colour = Sex))+
  geom_point(size = 1) +
  geom_line(aes(y=predict(lmer1), group = Subject, size = "Subjects"))+
  geom_line(aes(y=predict(lmer1), group = Sex, size = "Population Average"))+
  scale_size_manual(name="Predictions", values=c("Subjects"=0.5, "Population Average"=2))

p1

这会创建具有单独主题行的情节,但我不确定粗线是否反映了“性别”的平均值。这些数据来自与创建单个主题行的数据相同的数据 - 也就是说,我没有创建新数据(如上例所示)并使用人口级别预测。我只想确保以正确的方式接近这一点。我希望较粗的线条显示所有男性和女性参与者的平均坡度,而不是连接普通女性参与者的线条。对普通女性参与者的女性刺激的反应&#39;对男性刺激的反应(对于男性参与者也是如此) - 我相信在没有多级模型的情况下,每种刺激类型的平均值之间可以显示一条线,因为它忽略了不同的随机斜率。

非常感谢任何建议。谢谢。

0 个答案:

没有答案