1

我正在努力解决如何将个人和群体趋势线添加到我的情节中。(R 并使用 ggplot2)。

这是我正在使用的代码:

MensHG.fm2=lmer(HGNewtons~Temperature+QuadTemp+Run+(1|Subject),MenstrualData) #model

plot.hg<-data.frame(MensHG.fm2@frame,fitted.re=fitted(MensHG.fm2))

g1<-ggplot(plot.hg,aes(x=Temperature,y=HGNewtons))+geom_point()

g2<-g1+facet_wrap(~Subject, nrow=6)+ylab(bquote('HG MVF (N)'))+xlab(bquote('Hand ' ~T[sk] ~(degree*C)))

g3<-g2+geom_smooth(method="glm", formula=y~ploy(x,2), se=FALSE) #This gives me my individual trendlines

现在我想将数据的 g1 部分(即总体趋势)的趋势线放到我的每个单独的图上——最好的方法是什么?如果我使用代码,我可以看到趋势:

g5=g1+geom_smooth(method="glm", formula=y~poly(x,2), se=FALSE)

在此处输入图像描述

但是,一旦我进行 facet-wrap,这条趋势线就会消失(我得到与 g3 相同的输出)

使用以下方法似乎无法解决问题: g4<-g3+geom_smooth(data=MensHG.fm2)

4

1 回答 1

1

如果没有您的数据的最小工作示例,我使用了内置的iris数据。在这里,为了演示,我假装物种是不同的主题。

library(lme4)
library(ggplot2)

fit.iris <- lmer(Sepal.Width ~ Sepal.Length + I(Sepal.Length^2) + (1|Species), data = iris)

为了简单起见,我还使用了两个额外的包,broom并且dplyr. augmentfrombroom做的事情和你上面做的一样..., fitted.re=fitted(MensHG.fm2),但是有一些额外的花里胡哨。我也使用dplyr::select,但这并不是绝对需要的,具体取决于您想要的输出(图 2 与图 3 之间的区别)。

library(broom)
library(dplyr)   
augment(fit.iris)
# output here truncated for simplicity
  Sepal.Width Sepal.Length I.Sepal.Length.2. Species  .fitted       .resid   .fixed ...
1         3.5          5.1             26.01  setosa 3.501175 -0.001175181 2.756738 
2         3.0          4.9             24.01  setosa 3.371194 -0.371193601 2.626757 
3         3.2          4.7             22.09  setosa 3.230650 -0.030649983 2.486213 
4         3.1          4.6             21.16  setosa 3.156417 -0.056417409 2.411981 
5         3.6          5.0                25  setosa 3.437505  0.162495354 2.693068 
6         3.9          5.4             29.16  setosa 3.676344  0.223656271 2.931907 
ggplot(augment(fit.iris), 
       aes(Sepal.Length, Sepal.Width)) + 
  geom_line(#data = augment(fit.iris) %>% select(-Species), 
            aes(y = .fixed, color = "population"), size = 2) +
  geom_line(aes(y = .fitted, color = "subject", group = Species), size = 2) +
  geom_point() + 
  #facet_wrap(~Species, ncol = 2) +
  theme(legend.position = c(0.75,0.25))

请注意,我#注释了两个语句:data = ...facet_wrap(...). 将这些行注释掉后,您将得到如下输出:

在此处输入图像描述

.fixed在整个范围内,您的总体平滑(对于固定效应),然后您有显示拟合模型值 ( .fitted) 的组平滑,同时考虑到主题级别的截距。

#然后,您可以通过在代码片段中取出第二个 -comment 标记来在方面显示这一点:

在此处输入图像描述

这是相同的,但由于拟合值仅存在于每个主题级别面板的原始数据范围内,因此总体平滑被截断为该范围。

为了解决这个问题,我们可以删除第一个#-comment 标记:

在此处输入图像描述

于 2017-09-05T22:56:40.920 回答