Calcular los parámetros de una distribución Beta utilizando la media y la varianza


66

¿Cómo puedo calcular los parámetros y para una distribución Beta si sé la media y la varianza que quiero que tenga la distribución? Los ejemplos de un comando R para hacer esto serían de gran ayuda.αβ


44
Tenga en cuenta que el paquete betareg en R usa una parametrización alternativa (con la media, , y la precisión, - y, por lo tanto, la varianza es ) que elimina la necesidad de estos cálculos. μ=α/α+βϕ=α+βμ(1μ)/(1+ϕ)
gung - Restablece a Monica

Respuestas:


90

Configuré y y resuelto para y . Mis resultados muestran que y

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

He escrito un código R para estimar los parámetros de la distribución Beta a partir de una media dada, mu y varianza, 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))
}

Ha habido cierta confusión en torno a los límites de y para cualquier distribución Beta dada, así que aclaremos esto aquí.σ 2μσ2

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

2
@stan Esto le dará la distribución Beta que tiene la misma media y variación que sus datos. No le dirá qué tan bien se ajusta la distribución a los datos. Prueba la prueba de Kolmogorov-Smirnov .
asumido el

44
Cuando llamo a esta función con estBetaParams(0.06657, 0.1)recibo alpha=-0.025, beta=-0.35. ¿Cómo es esto posible?
Amelio Vazquez-Reina

1
Estos cálculos solo funcionarán si la varianza es menor que la media * (1-media).
danno

2
@danno: siempre es el caso de que . Para ver esto, reescribe la varianza como . Desde , . σ 2 = μ ( 1 - μ )σ2μ(1μ) α+β+11σ2μ(1-μ)σ2=μ(1μ)α+β+1α+β+11σ2μ(1μ)
asumido el

1
@ AmelioVazquez-Reina Si proporciona sus datos originales, espero que rápidamente sea obvio por qué una distribución beta no es adecuada.
Glen_b

21

Aquí hay una forma genérica de resolver este tipo de problemas, utilizando Maple en lugar de R. Esto también funciona para otras distribuciones:

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

lo que lleva a la solución

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

Esto es equivalente a la solución de Max.


5

En R, la distribución beta con parámetros y tiene densidadshape1=ashape2=b

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

para , y .a>0b>00<x<1

En R, puedes calcularlo por

dbeta (x, forma1 = a, forma2 = b)

En esa parametrización, la media es y la varianza es . Entonces, ahora puedes seguir la respuesta de Nick Sabbe.E(X)=aa+bV(X)=ab(a+b)2(a+b+1)

¡Buen trabajo!

Editar

Encuentro:

a=(1μV1μ)μ2 ,

y

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

donde y .V = V ( X )μ=E(X)V=V(X)


Me doy cuenta de que mi respuesta es muy similar a la de los demás. No obstante, creo que siempre es un buen punto verificar primero qué parametrización utiliza R ...
ocram

2

En Wikipedia, por ejemplo, puede encontrar las siguientes fórmulas para la media y la varianza de una distribución beta dada alfa y beta: y Invertir estos (complete en la ecuación inferior) darle el resultado que desea (aunque puede tomar algo de trabajo).

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

1
Wikipedia tiene una sección sobre estimación de parámetros que le permite evitar demasiado trabajo :)
rm999

1

Para una distribución Beta generalizada definida en el intervalo , tiene las relaciones:[a,b]

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

que se puede invertir para dar:

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

dónde

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

Un usuario ha intentado dejar el siguiente comentario: "hay un error en alguna parte aquí. La formulación actual no devuelve la variación correcta".
Silverfish

1

Resuelve la ecuación para o , resolviendo para , obtienes Luego conecta esto en la segunda ecuación y resuelve . Entonces obtienes Que se simplifica a Luego termine de resolver .μαββ

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


0

Estaba buscando python, pero me topé con esto. Entonces esto sería útil para otros como yo.

Aquí hay un código de Python para estimar los parámetros beta (de acuerdo con las ecuaciones dadas anteriormente):

# 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}

Puede verificar los parámetros y importando el paquete.αβscipy.stats.beta

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.