简体   繁体   English

在ggplot中绘制混合效果模型

[英]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 ). 如果要在估计值周围添加置信度/预测范围,则必须更深入地研究并考虑更大的统计问题( example1example2 )。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM