Jak obliczyć parametry i dla rozkładu Beta, jeśli znam średnią i wariancję, którą chcę mieć dla tego rozkładu? Najbardziej pomocne byłyby przykłady polecenia R do wykonania tej czynności.
Jak obliczyć parametry i dla rozkładu Beta, jeśli znam średnią i wariancję, którą chcę mieć dla tego rozkładu? Najbardziej pomocne byłyby przykłady polecenia R do wykonania tej czynności.
Odpowiedzi:
Ustawiam i i rozwiązany dla i . Moje wyniki pokazują, że i σ2=αβ
Napisałem trochę kodu R, aby oszacować parametry rozkładu Beta na podstawie podanej średniej, mu i wariancji, 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))
}
Wystąpiło pewne zamieszanie wokół granic i dla dowolnej dystrybucji Beta, więc wyjaśnijmy to tutaj.σ 2
estBetaParams(0.06657, 0.1)
mam alpha=-0.025
, beta=-0.35
. Jak to jest możliwe?
Oto ogólny sposób rozwiązywania tego rodzaju problemów za pomocą Klonu zamiast R. Działa to również w przypadku innych dystrybucji:
with(Statistics):
eq1 := mu = Mean(BetaDistribution(alpha, beta)):
eq2 := sigma^2 = Variance(BetaDistribution(alpha, beta)):
solve([eq1, eq2], [alpha, beta]);
co prowadzi do rozwiązania
Jest to odpowiednik rozwiązania Maxa.
W R rozkład beta z parametrami oraz ma gęstość
,
dla , i .
W R możesz to obliczyć według
dbeta (x, shape1 = a, shape2 = b)
W tej parametryzacji średnia to a wariancja to . Możesz teraz śledzić odpowiedź Nicka Sabbe.
Dobra robota!
Edytować
Znajduję:
,
i
,
gdzie i .
Na przykład w Wikipedii można znaleźć następujące formuły dla średniej i wariancji rozkładu beta, biorąc pod uwagę alfa i beta: i Odwracanie ich (wypełnij w dolnym równaniu) powinno dać pożądany rezultat (choć może to zająć trochę pracy).
W przypadku uogólnionego rozkładu Beta zdefiniowanego w przedziale istnieją relacje:
które można odwrócić, aby uzyskać:
gdzie
Rozwiąż równanie dla lub , rozwiązując dla , otrzymujesz Następnie podłącz to do drugiego równania i rozwiąż . Otrzymujesz więc Upraszcza to Następnie zakończ rozwiązywanie dla .
Szukałem pytona, ale natknąłem się na to. Byłoby to przydatne dla innych osób takich jak ja.
Oto kod python do oszacowania parametrów beta (zgodnie z równaniami podanymi powyżej):
# 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}
Możesz zweryfikować parametry i , importując pakiet.scipy.stats.beta