我正在尝试创建一个类似于此处发现的情节: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 . 根据我的理解,下面代码中的“预测”功能是确定人口水平的预测值 . 但是,我不确定如何在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

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

任何建议都非常感谢 . 谢谢 .