[很抱歉,这是一个愚蠢的简单问题,但是我尝试了所有在网上找到的解决方案,但无济于事。这也是我在这里的第一篇文章,并且我尝试遵循有关格式的规则。可笑的是,我已经完全实现了我想要的目标,将绘图另存为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
我的目标是:
根据lmer模型计算拟合值和95%置信区间
分别针对我的因变量(r)的2个级别的Myc绘制拟合值(fit),并根据Myc进行着色。就此图而言,我想忽略N和Asp(在我的实际数据中,这些是控制变量,在模型中很重要,但没有意义)
将我的95%置信区间添加到这两行中
所有这些看起来都很简单,除了它做错了!
我在这里获得了拟合值和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()
如何获得具有平滑置信区间的平滑线?我在做什么错(我敢肯定,很多!)。
谢谢您的帮助。
[很抱歉,这是一个愚蠢的简单问题,但是我尝试了所有在网上找到的解决方案,但无济于事。这也是我在这里的第一篇文章,我已经尝试遵循关于...
我认为这是有效图(或估计的边际均值)的“经典”任务。您可以使用ggeffects-package轻松完成此操作,网站上有很多示例。
ggeffects
软件包看起来超级好,值得一试。为了回答有关为Myc的每个级别分别放置多行的问题,interaction
调用中的ggplot(aes(group = ))
函数始终是快速完成此操作的便捷工具。在您的情况下,您包括四个类别变量,其中一个按颜色编码。要拆分其他三个,以为每个(在每个子组下)给出直线和丝带: