使用均值和方差计算Beta分布的参数


66

如果知道我希望分布具有的均值和方差,如何计算Beta分布的和β参数?使用R命令执行此操作的示例将非常有帮助。αβ


4
注意,betareg包中的R使用一种替代的参数(与平均,,&精度,φ = α + β -并且因此方差是μ (1 - μ )/(1 + ϕ )),从而无需进行这些计算。μ=α/α+βϕ=α+βμ(1−μ)/(1+ϕ)
— gung

Answers:


90

我设定和σ2=αβ

μ=αα+β
并求解α和β。我的结果表明,α=(1-μ
σ2=αβ(α+β)2(α+β+1)
αβ和β=α(1
α=(1−μσ2−1μ)μ2
β=α(1μ−1)

我编写了一些R代码,从给定的均值mu和方差var估计Beta分布的参数:

estBetaParams <- function(mu, var) {
  alpha <- ((1 - mu) / var - 1 / mu) * mu ^ 2
  beta <- alpha * (1 / mu - 1)
  return(params = list(alpha = alpha, beta = beta))
}

μσ2

  1. μ=αα+β∈(0,1)
  2. σ2=αβ(α+β)2(α+β+1)=μ(1−μ)α+β+1<μ(1−μ)1=μ(1−μ)∈(0,0.52)

2
@stan这将为您提供Beta分布,其均值和方差与您的数据相同。它不会告诉您分布对数据的拟合程度。尝试进行Kolmogorov-Smirnov检验。
— 假设正常时间2012年

4
当我把这个功能与estBetaParams(0.06657, 0.1)我得到的alpha=-0.025,beta=-0.35。这怎么可能?
— Amelio Vazquez-Reina

1
仅当方差小于均值*(1-均值)时,这些计算才有效。
— 丹诺2015年

2
σ2≤μ(1−μ)σ2=μ(1−μ)α+β+1α+β+1≥1σ2≤μ(1−μ)

1
@ AmelioVazquez-Reina如果您提供原始数据,我希望它很快就会很清楚为什么beta发行版不适合。
— Glen_b 2015年

21

这是使用Maple而不是R解决此类问题的通用方法。这也适用于其他发行版:

with(Statistics):
eq1 := mu = Mean(BetaDistribution(alpha, beta)):
eq2 := sigma^2 = Variance(BetaDistribution(alpha, beta)):
solve([eq1, eq2], [alpha, beta]);

导致解决方案

α=−μ(σ2+μ2−μ)σ2β=(σ2+μ2−μ)(μ−1)σ2.

这等效于Max的解决方案。


5

shape1=ashape2=b

f(x)=Γ(a+b)Γ(a)Γ(b)xa−1(1−x)b−1

a>0b>00<x<1

在R中,您可以通过

dbeta(x,shape1 = a,shape2 = b)

E(X)=aa+bV(X)=ab(a+b)2(a+b+1)

干得好!

编辑

我发现:

a=(1−μV−1μ)μ2

和

b=(1−μV−1μ)μ(1−μ)

μ=E(X)V=V(X)


我意识到我的答案与其他人非常相似。尽管如此,我相信它始终是一个很好的点,首先检查什么参数化R使用....
— ocram

2

μ=αα+β
σ2=αβ(α+β)2(α+β+1)
β=α(1μ−1)

1
维基百科上有一节有关参数估计的部分,可让您避免过多的工作:)
— rm999 2011年

1

[a,b]

μ=aβ+bαα+β,σ2=αβ(b−a)2(α+β)2(1+α+β)

可以反转为:

α=λμ−ab−a,β=λb−μb−a

哪里

λ=(μ−a)(b−μ)σ2−1

用户试图留下以下评论:“此处存在错误。当前公式不能返回正确的方差。”
— Silverfish

1

μαββ

β=α(1−μ)μ
α
σ2=α2(1−μ)μ(α+α(1−μ)μ)2(α+α(1−μ)μ+1)
σ2=α2(1−μ)μ(αμ)2α+μμ
σ2=(1−μ)μ2α+μ
α


0

我一直在寻找python,但偶然发现了这一点。因此,这对像我这样的其他人很有用。

这是一个Python代码,用于估算beta参数(根据上面给出的方程式):

# estimate parameters of beta dist.
def getAlphaBeta(mu, sigma):
    alpha = mu**2 * ((1 - mu) / sigma**2 - 1 / mu)

    beta = alpha * (1 / mu - 1)

    return {"alpha": 0.5, "beta": 0.1}


print(getAlphaBeta(0.5, 0.1)  # {alpha: 12, beta: 12}

αβscipy.stats.beta

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.