Berechnung der Parameter einer Beta-Verteilung anhand des Mittelwerts und der Varianz


66

Wie kann ich die Parameter und für eine Beta-Verteilung berechnen, wenn ich den Mittelwert und die Varianz kenne, die die Verteilung haben soll? Beispiele für einen R-Befehl dazu wären am hilfreichsten.αβ


4
Beachten Sie, dass das Betareg- Paket in R eine alternative Parametrisierung verwendet (mit dem Mittelwert und der Genauigkeit - und daher ist die Varianz ), wodurch diese Berechnungen überflüssig werden. μ=α/α+βϕ=α+βμ(1μ)/(1+ϕ)
gung - Wiedereinsetzung von Monica

Antworten:


90

Ich setze und und gelöst für und . Meine Ergebnisse zeigen, dass und

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

Ich habe einen R-Code geschrieben, um die Parameter der Beta-Verteilung aus einem gegebenen Mittelwert mu und der Varianz var abzuschätzen:

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

Es gab einige Verwirrungen um die Grenzen von und für jede gegebene Beta-Distribution, also lassen Sie uns das hier klarstellen.μσ2

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

2
@stan Damit erhalten Sie die Beta-Distribution, die den gleichen Mittelwert und die gleiche Varianz wie Ihre Daten aufweist. Es wird Ihnen nicht sagen, wie gut die Verteilung zu den Daten passt. Probieren Sie den Kolmogorov-Smirnov-Test aus .
Angenommen, normal

4
Wenn ich rufe diese Funktion mit estBetaParams(0.06657, 0.1)mir alpha=-0.025, beta=-0.35. Wie ist das möglich?
Amelio Vazquez-Reina

1
Diese Berechnungen funktionieren nur, wenn die Varianz kleiner als der Mittelwert * (1-Mittelwert) ist.
Danno

2
@danno - Es ist immer so, dass . Um dies zu sehen, schreiben Sie die Varianz wie folgt um: . Da , . σ2μ(1μ)σ2=μ(1μ)α+β+1α+β+11σ2μ(1μ)
Angenommen, normaler

1
@ AmelioVazquez-Reina Wenn Sie mir Ihre Originaldaten mitteilen, wird schnell klar, warum eine Beta-Distribution nicht geeignet ist.
Glen_b

21

Im Folgenden finden Sie eine allgemeine Methode zum Lösen dieser Art von Problemen mit Maple anstelle von R. Dies funktioniert auch für andere Distributionen:

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

was zur Lösung führt

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

Dies entspricht der Lösung von Max.


5

In R hat die Beta-Verteilung mit den Parametern und Dichteshape1=ashape2=b

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

für , und .a>0b>00<x<1

In R können Sie es mit berechnen

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

In dieser Parametrisierung ist der Mittelwert und die Varianz ist . Sie können jetzt also der Antwort von Nick Sabbe folgen.E(X)=aa+bV(X)=ab(a+b)2(a+b+1)

Gute Arbeit!

Bearbeiten

Ich finde:

a=(1μV1μ)μ2 ,

und

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

wobei und .μ=E(X)V=V(X)


Mir ist klar, dass meine Antwort den anderen sehr ähnlich ist. Trotzdem glaube ich, dass es immer ein guter Punkt ist, zuerst zu überprüfen, welche Parametrisierung R verwendet ...
22.

2

Auf Wikipedia finden Sie zum Beispiel die folgenden Formeln für den Mittelwert und die Varianz einer Beta-Verteilung in Alpha und Beta: und Diese invertieren ( in der unteren Gleichung ausfüllen ) sollte geben Sie das gewünschte Ergebnis (obwohl es einige Arbeit dauern kann).

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

1
Wikipedia hat einen Abschnitt über Parameterschätzung, mit dem Sie zu viel Arbeit vermeiden können :)
RM999

1

[a,b]

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

die invertiert werden kann, um zu geben:

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

wo

λ=(μa)(bμ)σ21

Ein Benutzer hat versucht, den folgenden Kommentar zu hinterlassen: "Irgendwo hier ist ein Fehler. Die aktuelle Formulierung gibt nicht die richtige Varianz zurück."
Silverfish

1

μαββ

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


0

Ich habe nach Python gesucht, bin aber darauf gestoßen. Das wäre also nützlich für andere wie mich.

Hier ist ein Python-Code zum Abschätzen der Beta-Parameter (gemäß den oben angegebenen Gleichungen):

# 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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.