Calculer les paramètres d'une distribution bêta à l'aide de la moyenne et de la variance

66

Comment puis-je calculer les paramètres et pour une distribution bêta si je connais la moyenne et la variance que je souhaite que la distribution ait? Des exemples d'une commande R pour ce faire seraient très utiles.βαβ

Dave Kincaid
la source
4
Notez que le paquetage betareg dans R utilise une autre paramétrisation (avec la moyenne, , et la précision, - et par conséquent la variance est ) qui évite d'avoir à effectuer ces calculs. ϕ = α + β μ ( 1 - μ ) / ( 1 + ϕ )μ=α/α+βϕ=α+βμ(1μ)/(1+ϕ)
Gay - Rétablir Monica

Réponses:

90

Je mets et et résolu pour et . Mes résultats montrent que et σ2=αβ

μ=αα+β
αβα=(1-μ
σ2=αβ(α+β)2(α+β+1)
αββ=α(1
α=(1μσ21μ)μ2
β=α(1μ1)

J'ai écrit du code R pour estimer les paramètres de la distribution bêta à partir d'une moyenne donnée, mu, et de la variance, var:

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

Il y a eu une certaine confusion autour des limites de et de pour une distribution bêta donnée, alors clarifions cela ici.σ 2μσ2

  1. μ=αα+β(0,1)
  2. σ2=αβ(α+β)2(α+β+1)=μ(1μ)α+β+1<μ(1μ)1=μ(1μ)(0,0.52)
supposé normal
la source
2
@stan Ceci vous donnera la distribution bêta qui a la même moyenne et la même variance que vos données. Cela ne vous dira pas si la distribution correspond aux données. Essayez le test de Kolmogorov-Smirnov .
supposé normal
4
Quand j'appelle cette fonction avec estBetaParams(0.06657, 0.1)je reçois alpha=-0.025, beta=-0.35. Comment est-ce possible?
Amelio Vazquez-Reina -
1
Ces calculs ne fonctionneront que si la variance est inférieure à la moyenne * (1 moyenne).
danno
2
@danno - C'est toujours le cas que . Pour voir cela, réécrivez la variance comme suit: . Depuis , . σ 2 = μ ( 1 - μ )σ2μ(1μ) α+β+11σ2μ(1-μ)σ2=μ(1μ)α+β+1α+β+11σ2μ(1μ)
supposé normal
1
@ AmelioVazquez-Reina Si vous donnez vos données d'origine, je pense que la raison pour laquelle une distribution bêta ne convient pas sera rapidement claire.
Glen_b
21

Voici un moyen générique de résoudre ces types de problèmes, en utilisant Maple au lieu de R. Cela fonctionne également pour d'autres distributions:

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

ce qui conduit à la solution

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

Ceci est équivalent à la solution de Max.

Erik P.
la source
5

shape1=ashape2=b

f(x)=Γ(a+b)Γ(a)Γ(b)xa1(1x)b1

a>0b>00<x<1

En R, vous pouvez le calculer par

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

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

Bon travail!

Modifier

Je trouve:

a=(1μV1μ)μ2

et

b=(1μV1μ)μ(1μ)

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

ocram
la source
Je me rends compte que ma réponse est très semblable aux autres. Néanmoins, je pense que c'est toujours un bon point de vérifier d'abord ce que la paramétrisation R utilise ....
ocram
2

μ=αα+β
σ2=αβ(α+β)2(α+β+1)
β=α(1μ1)
Nick Sabbe
la source
1
Wikipedia a une section sur l'estimation des paramètres qui vous permet d'éviter trop de travail :)
rm999
1

[a,b]

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

qui peut être inversé pour donner:

α=λμaba,β=λbμba

λ=(μa)(bμ)σ21
becko
la source
Un utilisateur a tenté de laisser le commentaire suivant: "Il y a une erreur quelque part ici. La formulation actuelle ne renvoie pas la variance correcte."
Silverfish
1

μαββ

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

Drunk Deriving
la source
0

Je cherchais du python, mais je suis tombé sur ça. Donc, cela serait utile pour d'autres comme moi.

Voici un code python pour estimer les paramètres bêta (selon les équations données ci-dessus):

# 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

codeur mythique
la source