创建平滑线和置信区间的新手问题形成了ggplot2中的lmer模型

问题描述 投票:0回答:2

[很抱歉,这是一个愚蠢的简单问题,但是我尝试了所有在网上找到的解决方案,但无济于事。这也是我在这里的第一篇文章,并且我尝试遵循有关格式的规则。可笑的是,我已经完全实现了我想要的目标,将绘图另存为png,然后几周后返回代码时,它无法正常工作,现在我无法复制已有的内容。

我试图在此处提供一些示例数据(从此网站借用一些虚构的数据–我希望可以)。>>

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
  Asp = runif(600, 1, 5)
)
# 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
#fit model
library(lme4)
model <- lmer(r ~ Myc * N + TRTYEAR + Asp + (1|site), data=tempEf)
tempEf$fit <- predict(model)   #Add model fits to dataframe

我的目标是:

  1. 根据lmer模型计算拟合值和95%置信区间

  2. 分别针对我的因变量(r)的2个级别的Myc绘制拟合值(fit),并根据Myc进行着色。就此图而言,我想忽略N和Asp(在我的实际数据中,这些是控制变量,在模型中很重要,但没有意义)

  3. 将我的95%置信区间添加到这两行中

  4. 所有这些看起来都很简单,除了它做错了!

我在这里获得了拟合值和95%的置信区间,这给了我拟合度,upr和lwr:

predicted_EF<-predictInterval(model, tempEf)

然后我将它们添加到我的原始数据框中:

tempEf<-cbind(tempEf,predicted_EF)

然后我这样做:

ggplot(tempEf,aes(TRTYEAR, r, group=Myc, col=Myc )) + 
  geom_line(aes(y=fit, lty=Myc), size=0.8) +
  geom_point(alpha = 0.3) + 
  theme_bw()

这给了我锯齿状的线,如下所示:crappy graph

我可以使用geom_smooth而不是geom_line,它可以提供平滑的线条,但是我相信这是将线条拟合到原始数据,而不是模型拟合值?我还可以使用geom_abline为Myc的每个级别拟合单独的回归线(使用fit变量),但也不确定是否正确。

ggplot(tempEf,aes(TRTYEAR, r, group=Myc, col=Myc, fill = Myc)) + 
  geom_smooth(method="lm",se = FALSE)+
  geom_point(alpha = 0.3)+
  theme_bw()

然后尝试使用我的upr和lwr变量添加95%的置信区间会导致锯齿状的置信区:

ggplot(tempEf,aes(TRTYEAR, r, group=Myc, col=Myc, fill = Myc)) + 
  geom_smooth(method="lm",se = FALSE)+
  geom_point(alpha = 0.3) +
  geom_ribbon(alpha=0.1,
              aes(ymin=lwr,ymax=upr,fill = Myc, colour = NA))+
  theme_bw()

如何获得具有平滑置信区间的平滑线?我在做什么错(我敢肯定,很多!)。

谢谢您的帮助。

[很抱歉,这是一个愚蠢的简单问题,但是我尝试了所有在网上找到的解决方案,但无济于事。这也是我在这里的第一篇文章,我已经尝试遵循关于...

r ggplot2 lme4
2个回答
1
投票

我认为这是有效图(或估计的边际均值)的“经典”任务。您可以使用ggeffects-package轻松完成此操作,网站上有很多示例。


0
投票

ggeffects软件包看起来超级好,值得一试。为了回答有关为Myc的每个级别分别放置多行的问题,interaction调用中的ggplot(aes(group = ))函数始终是快速完成此操作的便捷工具。在您的情况下,您包括四个类别变量,其中一个按颜色编码。要拆分其他三个,以为每个(在每个子组下)给出直线和丝带:

© www.soinside.com 2019 - 2024. All rights reserved.