繁体   English   中英

如何使用概率y轴而不是密度y轴创建直方图?

[英]How do I create a histogram with a probability y-axis rather than a density y-axis?

我有一个向量(变量dist ),我想绘制一个7单元格宽度的直方图。 这是dist的分配:

dist <- c(
#  0-6  7-13  14-20  21-27  28-34  35-41  42-48  49-55
#  ---  ----  -----  -----  -----  -----  -----  -----
                 16,
                 20,           29,
                 17,    27,    28,
                 19,    21,    34,
     3,          14,    26,    33,    35,    44,
     1,   11,    14,    21,    29,    38,    43,    55,
     4,   12,    18,    22,    32,    35,    48,    50
)

为了绘制直方图,我使用hist

hist(dist, breaks=seq(0, 56, by=7)-0.5)

创建以下图形:

在此处输入图片说明

到现在为止还挺好。 如直方图所示,介于0和6之间的三个数字,介于7和13之间的两个数字,依此类推。

现在,我将histprop=TRUE参数一起使用,这将创建以下图形:

在此处输入图片说明

我希望它显示bin的概率,而不是y轴上的密度。 例如,值21到27的容器的高度(或密度)为0.02304147,计算如下:

dens_21_27 <- length(dist[dist > 20.5 & dist < 27.5])/length(dist)/7

可以通过绘制以下高度的线来验证这一点:

lines(c(-5, 56), c(dens_21_27, dens_21_27), col="#FF770070")

在此处输入图片说明

但是,我希望y轴显示数字落入21到27 bin的概率,这是

length(dist[dist > 20.5 & dist < 27.5])/length(dist)

0.1612930

这有可能吗?

这是我过去用来将值强制转换为概率的包装器。

probabilityplot<-function(x, ..., prob=T, ylab="Probability") {
    xx<-hist(x, yaxt="n", prob=prob, ylab=ylab , ...)
    bin.sizes<-diff(xx$breaks)
    if (any(bin.sizes != bin.sizes[1])) stop("bin sizes are not the same")
    marks<-axTicks(2)
    axis(2, at=marks, labels=marks*bin.sizes[1])
    xx$probabilities <- xx$density*bin.sizes[1]
    invisible(xx)
}

probabilityplot(dist,breaks=seq(0, 56, by=7)-0.5 )

在此处输入图片说明

直方图被设计为估计连续随机变量的密度,因此密度优先于概率。

您可以按直方图中断对组进行分类,并绘制一个小节图。

bs <- hist(dist, breaks=seq(0, 56, by=7)-0.5, plot=F)$breaks
probs <- table(cut(dist, bs)) / length(dist)
barplot(probs, ylab="Probability", las=2)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM