我想将中位数样条曲线和相应的置信区间带添加到ggplot2散点图中。我正在使用'quantreg'-package,更具体地说是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()

r - 使用stat_quantile时,ggplot2中的置信区间带?-LMLPHP
quantreg -package带有自己的绘图函数; 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)

r - 使用stat_quantile时,ggplot2中的置信区间带?-LMLPHP

但是quantreg -package附带的绘图功能不是很灵活/非常适合我的需求。是否可以在ggplot2图中获得置信带?也许是通过模仿quantreg -package中使用的方法,还是简单地从绘图中复制它们?

数据:pastebin

最佳答案

您几乎拥有它。你打电话的时候

 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)

关于r - 使用stat_quantile时,ggplot2中的置信区间带?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35159455/

10-12 17:49