在使用stat_quantile时,在ggplot2中如何绘制置信区间带?

5
我希望在ggplot2散点图上添加中位数样条和相应的置信区间带。我正在使用‘quantreg’包,更具体地是使用rqss函数(加性分位数回归平滑)。
ggplot2中,我能够添加中位数样条,但无法添加置信区间带:
fig = ggplot(dd, aes(y = MeanEst, x = N, colour = factor(polarization)))
fig + stat_quantile(quantiles=0.5, formula = y ~ qss(x), method = "rqss") +
  geom_point()

ggplot2中位数样条

“quantreg”包自带绘图函数:plot.rqss。我可以通过添加置信区间(bands=TRUE)来绘制图形:

plot(1, type="n", xlab="", ylab="", xlim=c(2, 12), ylim=c(-3, 0)) # empty plot
plotfigs = function(df) {
  rqss_model = rqss(df$MeanEst ~ qss(df$N))
  plot(rqss_model, bands=TRUE, add=TRUE, rug=FALSE, jit=FALSE)
  return(NULL)
}
figures = lapply(split(dd, as.factor(dd$polarization)), plotfigs)

在此输入图片描述

然而,随着quantreg软件包所提供的绘图函数不太灵活/不适合我的需求。是否可以在ggplot2的图表中得到置信区间?也许通过模仿quantreg软件包中使用的方法来实现,或者只是从该图表中复制它们?

数据:pastebin

1个回答

3
你差不多就成功了。当你调用
 plot(rqss_model, bands=TRUE, add=TRUE, rug=FALSE, jit=FALSE)

这个函数非常有用地返回了绘制的数据,我们只需要获取数据框。首先对你的函数进行小调整,以合理的方式返回数据。

plotfigs = function(df) {
  rqss_model = rqss(df$MeanEst ~ qss(df$N))
  band = plot(rqss_model, bands=TRUE, add=TRUE, rug=FALSE, jit=FALSE)
  data.frame(x=band[[1]]$x, low=band[[1]]$blo, high=band[[1]]$bhi, 
             pol=unique(df$polarization))
}

下一步调用函数并压缩
figures = lapply(split(dd, as.factor(dd$polarization)), plotfigs)
bands = Reduce("rbind", figures)

然后使用geom_ribbon来绘制。
## We inherit y and color, so have to set them to NULL
fig + geom_ribbon(data=bands, 
                  aes(x=x, ymin=low, ymax=high, 
                  y=NULL, color=NULL, group=factor(pol)), 
                  alpha=0.3)

谢谢。为了抑制plot.rqss图形,我将其包装在“pdf(file = NULL)”和“dev.off()”中。https://dev59.com/o7Hos4cB2Jgan1znw2Ug#24762900 - bonna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接