我如何(以数字方式)为具有大 alpha 和 beta 的 beta 分布近似值

机器算法验证 置信区间 算法 贝塔分布
2022-01-22 10:49:59

是否有一种数值稳定的方法来计算大整数 alpha、beta(例如 alpha、beta > 1000000)的beta 分布值?

实际上,我只需要该模式周围的 99% 置信区间,如果这以某种方式使问题变得更容易的话。

补充:对不起,我的问题没有我想象的那么清楚。我想做的是:我有一台机器可以检查传送带上的产品。这些产品中的一部分被机器拒收。现在,如果机器操作员更改了某些检查设置,我想向他/她展示估计的废品率,并暗示当前估计的可靠性。

所以我认为我将实际拒绝率视为随机变量 X,并根据拒绝对象 N 和接受对象 M 的数量计算该随机变量的概率分布。如果我假设 X 的先验分布均匀,这是一个取决于 N 和 M 的 beta 分布。我可以直接向用户显示这个分布,也可以找到一个区间 [l,r] 以便实际的拒绝率在这个区间内,p >= 0.99(使用 shabbychef 的术语)并显示这个间隔。对于较小的M,N(即参数变化后立即),我可以直接计算分布并近似区间[l,r]。但是对于大的 M,N,这种幼稚的方法会导致下溢错误,因为 x^N*(1-x)^M 太小而无法表示为双精度浮点数。

我想我最好的选择是对小的 M,N 使用我的天真 beta 分布,并在 M,N 超过某个阈值时切换到具有相同均值和方差的正态分布。那有意义吗?

4个回答

正态近似效果非常好,尤其是在尾部。使用的方差例如,在艰难情况下(可能需要关注偏度)的尾部概率中的绝对相对误差,例如左右达到峰值,你处于与平均值相差超过 1 个标准差。(这不是因为 beta 太大:使用,绝对相对误差以α/(α+β)αβ(α+β)2(1+α+β)α=106,β=1080.000260.00006α=β=1060.0000001.) 因此,这种近似对于涉及 99% 区间的任何目的基本上都是极好的。

鉴于对问题的编辑,请注意,实际上并不通过积分被积函数来计算 beta 积分:当然你会得到下溢(尽管它们并不重要,因为它们对积分没有明显贡献) . 如 Johnson & Kotz(统计分布)中所述,有很多很多方法可以计算积分或近似积分。在http://www.danielsoper.com/statcalc/calc37.aspx可以找到在线计算器你实际上需要这个积分的倒数。Mathematica 网站http://functions.wolfram.com/GammaBetaErf/InverseBetaRegularized/记录了一些计算逆的方法代码在数字食谱中提供。Wolfram Alpha 网站是一个非常好的在线计算器(www.wolframalpha.com):输入inverse beta regularized (.005, 1000000, 1000001)左端点和inverse beta regularized (.995, 1000000, 1000001)右端点( , 99% 间隔)。α=1000000,β=1000001

一个快速的图形实验表明,当 alpha 和 beta 都非常大时,beta 分布看起来非常像正态分布。通过谷歌搜索“beta distribution limit normal”,我发现http://nrich.maths.org/discus/messages/117730/143065.html?1200700623给出了一个挥手的“证明”。

beta 分布的维基百科页面给出了它的均值、众数(v 接近大 alpha 和 beta 的均值)和方差,因此您可以使用具有相同均值和方差的正态分布来获得近似值。对于您的目的而言,它是否是一个足够好的近似值取决于您的目的是什么。

我将推断你想要一个区间,这样从 Beta RV 随机抽取的概率在概率为 0.99 的区间内,的加分点围绕模式对称。通过高斯不等式或 Vysochanskii-Petunin 不等式,您可以构造包含区间的区间,并且是相当不错的近似值。对于足够大的,即使将表示为不同的数字,您也会遇到数值下溢问题,因此这条路线可能已经足够好了。[l,r]lr[l,r]α,β lr

如果是一个 beta 分布变量,那么它是的对数几率(即:近似正态分布。即使对于高度偏斜的 beta 分布也是如此,例如pplog(p/(1p))min(α,β)>100

例如

f <- function(n, a, b) {
    p <- rbeta(n, a, b)
    lor <- log(p/(1-p))
    ks.test(lor, 'pnorm', mean(lor), sd(lor))$p.value
}
summary(replicate(50, f(10000, 100, 1000000)))

通常会产生类似的输出

摘要(复制(50, f(10000, 100, 1000000))) 最小。第一曲。中位数平均第三曲。最大限度。0.01205 0.10870 0.18680 0.24810 0.36170 0.68730

即典型的 p 值约为 0.2。

因此,即使有 10000 个样本,Kolmogorov-Smirnov 检验也无法区分β的高度偏斜的 beta 分布变量的对数优势比变换。α=100,β=100000

分布的类似测试p本身

f2 <- function(n, a, b) {
    p <- rbeta(n, a, b)
    ks.test(p, 'pnorm', mean(p), sd(p))$p.value
}
summary(replicate(50, f2(10000, 100, 1000000)))

产生类似的东西

summary(replicate(50, f2(10000, 100, 1000000)))
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
2.462e-05 3.156e-03 7.614e-03 1.780e-02 1.699e-02 2.280e-01 

典型 p 值约为 0.01

Rqqnorm函数还提供了有用的可视化效果,为对数概率分布生成了一个非常直观的图,指示近似正态性 beta 分布变量的分布产生了一条表明非正态性的独特曲线

因此,即使对于高度偏斜的情况,在对数赔率空间中使用高斯近似也是合理的α,β只要两者都超过 100 的值。