MATLAB | calcular los parámetros de dist gamma sobre la base de intervalo medio y la probabilidad

StackOverflow https://stackoverflow.com/questions/3690361

Pregunta

Tengo un sistema de 2 ecuaciones con 2 incógnitas que yo quiero resolver utilizando MATLAB, pero no saben exactamente cómo el programa. Me han dado alguna información acerca de una distribución gamma (media de intervalo de 1,86, 90% entre 1,61 y 2,11) y, finalmente, quiero obtener la media y la varianza. Sé que podría utilizar la aproximación normal pero prefiero resolver para A y B, los parámetros de forma y escala de la distribución gamma, y ??encontrar la media y la varianza de esa manera. En el código de pseudo-MATLAB que me gustaría resolver esto:

gamcdf(2.11, A, B) - gamcdf(1.61, A, B) = 0.90;
A*B = 1.86;

¿Cómo haría usted para resolver esto? Tengo la caja de herramientas matemáticas simbólica si eso ayuda.

¿Fue útil?

Solución

La media es A * B. Así se puede resolver para tal vez una en términos de la media (mu) y B?

A = mu/B

Por supuesto, esto no sirve de nada menos que sabía B. O lo hace?

Mire a su primera expresión. Se puede sustituir?

gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) = 0.90

¿Esto se obtiene más cerca? Quizás. No habrá solución simbólica útil disponible, excepto en términos de la propia función gamma incompleta. ¿Cómo resolver una sola ecuación numéricamente con una incógnita en Matlab? Uso fzero.

Por supuesto, miradas fzero por un valor de cero. Pero restando 0,90, que se resuelve.

Podemos definir una función que fzero puede usar? Utilizar un identificador de función.

>> mu = 1.86;
>> gamfun = @(B) gamcdf(2.11, mu/B, B) - gamcdf(1.61, mu/B, B) - 0.90;

Así que probarlo. Antes de hacer eso, yo siempre recomiendo el trazado de las cosas.

>> ezplot(gamfun)

Hmm. Esa trama sugiere que podría ser difícil encontrar un cero de la función. Si lo intentas, se encuentra que los buenos valores de partida para fzero son necesarios aquí.

Lo siento por mi primer intento. Better valores iniciales para fzero, además de algunos más trazando da una distribución gamma que los rendimientos de la forma deseada.

>> B = fzero(gamfun,[.0000001,.1])
B =
        0.0124760672290871
>> A = mu/B
A =
          149.085442218805
>> ezplot(@(x) gampdf(x,A,B))

De hecho, esta es una muy "normal", es decir, de Gauss, mirando curva.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top