【问题标题】:Plot variance and confidence interval for variance with ggplot用 ggplot 绘制方差和置信区间
【发布时间】:2015-02-16 04:46:57
【问题描述】:

考虑来自标准数据集mtcars 的变量gearqsec

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 中已经实现的功能)?如果不是,您能否确认我的解决方案是正确的?

【问题讨论】:

  • 奇怪的是,只有 5 个观察值,gear==5 的置信区间最窄。
  • 哦,你确实是对的。我意识到我在“我的解决方案”中犯了一个错误。 samplesize 对于所有组都是平等的。我现在改了。谢谢!你现在觉得它正确吗?你知道更好的解决方案吗?

标签: r ggplot2 statistics data.table variance


【解决方案1】:

使用stat_summary。请注意,当文档说 fun.data 应该“将数据框作为输入”时,文档是错误的。

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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多