如何(数值)估算具有较大alpha和beta的beta分布的近似值


11

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

实际上,如果使问题变得更容易,我只需要围绕模式设置99%的置信区间即可。

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

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

我猜我最好的选择是对小M,N使用朴素的beta分布,并在M,N超过某个阈值后立即切换为具有相同均值和方差的正态分布。那有意义吗?


1
您是否想了解数学或仅是R中的某种代码解决方案?
约翰

我需要在C#中实现这一点,因此数学会很好。如果代码示例不依赖某些我不能转换为C#的内置R / Matlab / Mathematica函数,那么它也可以。
nikie 2010年

PDF,CDF还是逆CDF?
JM不是统计学家

如果您不坚持使用Beta,则可以使用非常相似且代数形式更简单的Kumaraswamy分布:en.wikipedia.org/wiki/Kumaraswamy_distribution
Tim

Answers:


13

法线逼近效果非常好,尤其是在尾部。使用的平均和的方差α βα/(α+β)。例如,在艰难的情况下(可能需要关注偏度),例如α=106β=108时,尾部概率的绝对相对误差在0.00026附近达到峰值,而当您大于1 SD时,则小于0.00006。从中。(这不是因为β太大:α=β=106时,绝对相对误差的范围是0.0000001αβ(α+β)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/)上记录了一些计算逆函数的方法。。代码在数字食谱(www.nr.com)中提供。Wolfram Alpha网站(www.wolframalpha.com)是一个非常不错的在线计算器:输入inverse beta regularized (.005, 1000000, 1000001)左端点和inverse beta regularized (.995, 1000000, 1000001)右端点(%间隔)。α=1000000,β=1000001


完善!我一直在桌子上放着NR书,但从没想过要看那里。非常感谢。
nikie 2010年

3

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

Beta分布的维基百科页面给出了平均值,众数(对于较大的alpha和beta,v接近平均值)和方差,因此您可以使用均值和方差相同的正态分布来得出近似值。是否足以满足您的目的取决于您的目的。


愚蠢的问题:您是如何进行图形化实验的?我试图将alpha / beta的分布图绘制在100附近,但是由于下溢错误,我看不到任何东西。
nikie 2010年

您不想绘制被积物:您想绘制积分。但是,您可以通过多种方式获得被积数。一种是在Wolfram Alpha网站上输入“图D(beta(x,1000000,2000000),x)/ beta(1,1000000,2000000)从0.3325到0.334”。可以通过“从0.3325到0.334绘制beta(x,1000000,2000000)/ beta(1,1000000,2000000)来看到积分本身。”
ub

我在Stata中绘制了被积,即beta分布的pdf,它具有pdf的内置功能。对于较大的alpha和beta,您需要限制绘图范围以使其接近正常。如果我自己进行编程,我将计算其对数,然后在最后求幂。这应该有助于解决下溢问题。分母中的beta函数是用gamma函数定义的,等效于整数alpha和beta的阶乘,许多包/库包括lngamma()或lnfactorial()代替/以及gamma()和阶乘()函数。
一站式

2

[l,r]lr[l,r]α,β lr 作为不同的数字,因此这条路线可能就足够了。


当α和β相距不太远时(即,α/β在上下限界),βα,β的SD与1 /Sqrtα成比例。例如,对于alpha = beta = 10 ^ 6,SD非常接近1 / Sqrt(8)/1000。即使您仅使用单精度浮点数,我也认为l和r的表示不会有问题。 。
ub

106

1
是的,对于Beta版应用程序来说,这是一个疯狂的数字。顺便说一句,这些不平等根本不会产生好的间隔,因为它们在所有分布中都是极端的(满足某些约束)。
ub

@whuber:你是对的,他们是疯狂的数字。使用我的幼稚算法,“理智”的数字很容易并且运行良好,但是我无法想象如何为“疯狂”参数计算它。因此是一个问题。
nikie 2010年

2
好的,您是对的:一旦alpha + beta超过10 ^ 30左右,您将难以获得双精度:-)。(但是,如果您将l和r表示为与alpha /(alpha + beta)的平均值的差,则可以很好地使用,直到alpha或beta超过大约10 ^ 303。)
whuber

1

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。

α=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

R qqnorm函数还提供了有用的可视化效果,生成了对数奇数分布的非常直观的图,表明近似正态分布,βdsitribute变量的分布产生了表明非正态性的独特曲线

α,β

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.