使用 ggplot 绘制方差和置信区间
Plot variance and confidence interval for variance with ggplot
考虑来自标准数据集 mtcars
.
的变量 gear
和 qsec
require(ggplot2)
ggplot(mtcars, aes(x=gear, y=qsec)) + geom_point()
我正在尝试用误差条绘制组内方差(对于每个组)。
这是我目前的解决方案(使用误差线的 95% 置信区间):
require(data.table)
dtmtcars = data.table(mtcars)[,list(var.qsec = var(qsec)),by=list(gear)]
samplesize = sapply(unique(mtcars$gear), function(x) nrow(subset(mtcars, gear == x)))
high.EB = ((samplesize-1)*dtmtcars$var.qsec)/qchisq(0.025,n-1)
low.EB = ((samplesize-1)*dtmtcars$var.qsec)/qchisq(0.975,n-1)
ggplot(dtmtcars, aes(x=gear, y=var.qsec)) + geom_point() + geom_errorbar(aes(ymin=low.EB, ymax=high.EB))
有没有更简单的解决方案(比如 ggplot2
中已经实现的功能)?如果不是,请确认我的解决方案是否正确?
使用stat_summary
。请注意,当文档说 fun.data
应该 "take data frame as input".
时,文档是错误的
ggplot(mtcars, aes(x=gear, y=qsec)) +
stat_summary(fun.y = var, geom = "point") +
stat_summary(fun.data = function(y) {
data.frame(y = var(y),
ymin = ((length(y)-1)*var(y))/qchisq(0.025,length(y)-1),
ymax = ((length(y)-1)*var(y))/qchisq(0.975,length(y)-1))
}, geom = "errorbar") +
ylab("var.qsec")
考虑来自标准数据集 mtcars
.
gear
和 qsec
require(ggplot2)
ggplot(mtcars, aes(x=gear, y=qsec)) + geom_point()
我正在尝试用误差条绘制组内方差(对于每个组)。
这是我目前的解决方案(使用误差线的 95% 置信区间):
require(data.table)
dtmtcars = data.table(mtcars)[,list(var.qsec = var(qsec)),by=list(gear)]
samplesize = sapply(unique(mtcars$gear), function(x) nrow(subset(mtcars, gear == x)))
high.EB = ((samplesize-1)*dtmtcars$var.qsec)/qchisq(0.025,n-1)
low.EB = ((samplesize-1)*dtmtcars$var.qsec)/qchisq(0.975,n-1)
ggplot(dtmtcars, aes(x=gear, y=var.qsec)) + geom_point() + geom_errorbar(aes(ymin=low.EB, ymax=high.EB))
有没有更简单的解决方案(比如 ggplot2
中已经实现的功能)?如果不是,请确认我的解决方案是否正确?
使用stat_summary
。请注意,当文档说 fun.data
应该 "take data frame as input".
ggplot(mtcars, aes(x=gear, y=qsec)) +
stat_summary(fun.y = var, geom = "point") +
stat_summary(fun.data = function(y) {
data.frame(y = var(y),
ymin = ((length(y)-1)*var(y))/qchisq(0.025,length(y)-1),
ymax = ((length(y)-1)*var(y))/qchisq(0.975,length(y)-1))
}, geom = "errorbar") +
ylab("var.qsec")