[英]plot mixed effects model in ggplot
I am new with mixed effect models and I need your help please. 我是混合效果模型的新手,请帮忙。 I have plotted the below graph in ggplot:
我已经在ggplot中绘制了以下图形:
ggplot(tempEf,aes(TRTYEAR,CO2effect,group=Myc,col=Myc)) +
facet_grid(~N) +
geom_smooth(method="lm",se=T,size=1) +
geom_point(alpha = 0.3) +
geom_hline(yintercept=0, linetype="dashed") +
theme_bw()
However, I would like to represent a mixed effects model instead of lm
in geom_smooth
, so I can include SITE
as a random effect. 但是,我想在
geom_smooth
表示一个混合效果模型,而不是lm
,所以我可以将SITE
包含为随机效果。
The model would be the following: 该模型如下:
library(lme4)
tempEf$TRTYEAR <- as.numeric(tempEf$TRTYEAR)
mod <- lmer(r ~ Myc * N * TRTYEAR + (1|SITE), data=tempEf)
I have included TRTYEAR
(year of treatment) because I am also interested in the patterns of the effect, that may increase or decrease over time for some groups. 我之所以加入
TRTYEAR
(治疗年),是因为我也对这种效应的模式感兴趣,这种效应可能随着时间的推移而增加或减少。
Next is my best attempt so far to extract the plotting variables out of the model, but only extracted the values for TRTYEAR
= 5, 10 and 15. 下一步是我迄今为止从模型中提取绘图变量的最佳尝试,但仅提取了
TRTYEAR
= 5、10和15的值。
library(effects)
ef <- effect("Myc:N:TRTYEAR", mod)
x <- as.data.frame(ef)
> x
Myc N TRTYEAR fit se lower upper
1 AM Nlow 5 0.04100963 0.04049789 -0.03854476 0.1205640
2 ECM Nlow 5 0.41727928 0.07342289 0.27304676 0.5615118
3 AM Nhigh 5 0.20562700 0.04060572 0.12586080 0.2853932
4 ECM Nhigh 5 0.24754017 0.27647151 -0.29556267 0.7906430
5 AM Nlow 10 0.08913042 0.03751783 0.01543008 0.1628307
6 ECM Nlow 10 0.42211957 0.15631679 0.11504963 0.7291895
7 AM Nhigh 10 0.30411129 0.03615213 0.23309376 0.3751288
8 ECM Nhigh 10 0.29540744 0.76966410 -1.21652689 1.8073418
9 AM Nlow 15 0.13725120 0.06325159 0.01299927 0.2615031
10 ECM Nlow 15 0.42695986 0.27301163 -0.10934636 0.9632661
11 AM Nhigh 15 0.40259559 0.05990085 0.28492587 0.5202653
12 ECM Nhigh 15 0.34327471 1.29676632 -2.20410343 2.8906529
Suggestions to a completely different approach to represent this analysis are welcome. 欢迎提出一种完全不同的方法来表示此分析的建议。 I thought this question is better suited for stackoverflow because it's about the technicalities in R rather than the statistics behind.
我认为这个问题更适合于stackoverflow,因为它是关于R中的技术性而不是背后的统计信息。 Thanks
谢谢
You can represent your model a variety of different ways. 您可以用各种不同的方式表示模型。 The easiest is to plot data by the various parameters using different plotting tools (color, shape, line type, facet), which is what you did with your example except for the random effect site .
最简单的方法是使用不同的绘图工具(颜色,形状,线条类型,构面)通过各种参数来绘制数据,这是您对示例所做的操作,除了随机效果位点 。 Model residuals can also be plotted to communicate results.
还可以绘制模型残差以传达结果。 Like @MrFlick commented, it depends on what you want to communicate.
就像@MrFlick评论一样,这取决于您要交流的内容。 If you want to add confidence/prediction bands around your estimates, you'll have to dig deeper and consider bigger statistical issues ( example1 , example2 ).
如果要在估计值周围添加置信度/预测范围,则必须更深入地研究并考虑更大的统计问题( example1 , example2 )。
Here's an example taking yours just a bit further. 这是一个例子,使您的工作更进一步。
Also, in your comment you said you didn't provide a reproducible example because the data do not belong to you. 另外,在您的评论中,您说您没有提供可复制的示例,因为数据不属于您。 That doesn't mean you can't provide an example out of made up data.
这并不意味着您不能提供一个由组合数据构成的示例。 Please consider that for future posts so you can get faster answers.
请考虑将其用于以后的帖子,以便您更快获得答案。
#Make up data:
tempEf <- data.frame(
N = rep(c("Nlow", "Nhigh"), each=300),
Myc = rep(c("AM", "ECM"), each=150, times=2),
TRTYEAR = runif(600, 1, 15),
site = rep(c("A","B","C","D","E"), each=10, times=12) #5 sites
)
# Make up some response data
tempEf$r <- 2*tempEf$TRTYEAR +
-8*as.numeric(tempEf$Myc=="ECM") +
4*as.numeric(tempEf$N=="Nlow") +
0.1*tempEf$TRTYEAR * as.numeric(tempEf$N=="Nlow") +
0.2*tempEf$TRTYEAR*as.numeric(tempEf$Myc=="ECM") +
-11*as.numeric(tempEf$Myc=="ECM")*as.numeric(tempEf$N=="Nlow")+
0.5*tempEf$TRTYEAR*as.numeric(tempEf$Myc=="ECM")*as.numeric(tempEf$N=="Nlow")+
as.numeric(tempEf$site) + #Random intercepts; intercepts will increase by 1
tempEf$TRTYEAR/10*rnorm(600, mean=0, sd=2) #Add some noise
library(lme4)
model <- lmer(r ~ Myc * N * TRTYEAR + (1|site), data=tempEf)
tempEf$fit <- predict(model) #Add model fits to dataframe
Incidentally, the model fit the data well compared to the coefficients above: 顺便说一下,与上述系数相比,该模型很好地拟合了数据:
model
#Linear mixed model fit by REML ['lmerMod']
#Formula: r ~ Myc * N * TRTYEAR + (1 | site)
# Data: tempEf
#REML criterion at convergence: 2461.705
#Random effects:
# Groups Name Std.Dev.
# site (Intercept) 1.684
# Residual 1.825
#Number of obs: 600, groups: site, 5
#Fixed Effects:
# (Intercept) MycECM NNlow
# 3.03411 -7.92755 4.30380
# TRTYEAR MycECM:NNlow MycECM:TRTYEAR
# 1.98889 -11.64218 0.18589
# NNlow:TRTYEAR MycECM:NNlow:TRTYEAR
# 0.07781 0.60224
Adapting your example to show the model outputs overlaid on the data 调整示例以显示覆盖在数据上的模型输出
library(ggplot2)
ggplot(tempEf,aes(TRTYEAR, r, group=interaction(site, Myc), col=site, shape=Myc )) +
facet_grid(~N) +
geom_line(aes(y=fit, lty=Myc), size=0.8) +
geom_point(alpha = 0.3) +
geom_hline(yintercept=0, linetype="dashed") +
theme_bw()
Notice all I did was change your colour from Myc to site , and linetype to Myc . 注意,我所做的只是将您的颜色从Myc更改为site ,并将线型更改为Myc 。
I hope this example gives some ideas how to visualize your mixed effects model. 我希望该示例能为您提供一些如何可视化混合效果模型的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.