以下命令生成一个简单的直方图:
g<- ggplot(data = mtcars, aes(x = factor(carb) )) + geom_histogram()
通常我会将错误栏添加到我的图中:
g+stat_summary(fun.data="mean_cl_boot",geom="errorbar",conf.int=.95)
但这不适用于直方图(“错误:geom_errorbar需要以下缺失的美学:ymin,ymax “),我认为因为y变量不是显式的 - 计数是由geom_histogram自动计算的,因此不会声明y变量。
我们是否无法使用geom_histogram而是必须先自己计算y数量(计数),然后通过调用geom_bar将其指定为y变量?
答案 0 :(得分:2)
我不确定你想要做什么在统计上是有效的。
例如,如果我们手动执行摘要(bin / compute),我们会获得NA
的上限和下限:
mtcars$carb_bin <- factor(cut(mtcars$cyl,8,labels=FALSE))
library(plyr)
mtcars_sum <- ddply(mtcars, "carb_bin",
function(x)smean.cl.boot(length(x$carb)))
mtcars_sum
carb_bin Mean Lower Upper
1 1 11 NA NA
2 4 7 NA NA
3 8 14 NA NA
即使您只计算y
并将其ggplot2
计划为geom_bar
和error_bar
,您也不会得到error_bar,因为上下都不好定义
mtcars_sum <- ddply(mtcars, "carb_bin", summarise,
y = length(carb))
ggplot(data = mtcars_sum, aes(x=carb_bin,y=y)) +
geom_bar(stat='identity',alpha=0.2)+
stat_summary(fun.data="mean_cl_normal",col='red',
conf.int=.95,geom='pointrange')
答案 1 :(得分:2)
似乎确实不能使用geom_histogram而是我们必须手动计算计数(条形高度)和置信区间限制。首先,计算计数:
library(plyr)
mtcars_counts <- ddply(mtcars, .(carb), function(x) data.frame(count=nrow(x)))
剩下的问题是计算二项式比例的置信区间,此处计数除以数据集中的案例总数。在文献中已经提出了各种配方。在这里,我们将使用Agresti&amp; Coull(1998)方法在PropCIs库中实现。
library(PropCIs)
numTotTrials <- sum(mtcars_counts$count)
# Create a CI function for use with ddply and based on our total number of cases.
makeAdd4CIforThisHist <- function(totNumCases,conf.int) {
add4CIforThisHist <- function(df) {
CIstuff<- add4ci(df$count,totNumCases,conf.int)
data.frame( ymin= totNumCases*CIstuff$conf.int[1], ymax = totNumCases*CIstuff$conf.int[2] )
}
return (add4CIforThisHist)
}
calcCI <- makeAdd4CIforThisHist(numTotTrials,.95)
limits<- ddply(mtcars_counts,.(carb),calcCI) #calculate the CI min,max for each bar
mtcars_counts <- merge(mtcars_counts,limits) #combine the counts dataframe with the CIs
g<-ggplot(data =mtcars_counts, aes(x=carb,y=count,ymin=ymin,ymax=ymax)) + geom_bar(stat="identity",fill="grey")
g+geom_errorbar()