如何在geom_boxplot中定义自己的陷波间隔?

时间:2019-12-27 18:37:40

标签: r ggplot2

是否有一种方法可以覆盖调用geom_boxplot(notch=T)时使用的默认中值陷波间隔?由于我的模型不符合中央限制要求,特别是不符合独立性和i.i.d假设,因此我想插入无要求的自举CI(BCa)。因此,我预先计算了中位数的BCa(我的集合也偏斜了),并使用它代替了使用geom_boxplot(notch=T)时生成的95%CI。

有办法吗?

1 个答案:

答案 0 :(得分:1)

我认为一种解决方法是将stat_summarygeom="boxplot"一起使用。唯一的事情是您需要在函数内部重新定义BCa:

newbox = function(values){

#usual quantile values
df = data.frame(t(boxplot(values,plot=FALSE)$stats))
colnames(df) = c("ymin","lower","middle","upper","ymax")
# bootstrap and get lower+upper notch
BOOT=boot(values,statistic=function(x,inds)median(x[inds]),R=1000)
CI=boot.ci(BOOT,type="bca")
df$notchlower = CI$bca[4]
df$notchupper = CI$bca[5]
df
}

还有一个定义异常值的函数:

newOutlier = function(values){
 boxplot(values,plot=FALSE)$out
}

现在我们模拟一些数据并绘制:

library(ggplot2)
library(gridExtra)
library(boot)

set.seed(111)
da = data.frame(x=rep(letters[1:2],each=300),
y=rgamma(600,shape=2,scale=10))


g1 = ggplot(da, aes(x, y)) + 
  stat_summary(fun.data = newbox, geom = "boxplot",notch=TRUE) +
  stat_summary(fun.y = newOutlier, geom = "point")

g2 = ggplot(da, aes(x, y)) + 
  geom_boxplot(notch=TRUE) 

grid.arrange(g1,g2,ncol=2)

enter image description here