Quiero trazar una distribución gamma con alfa = 29 (la escala) y beta = 3 (el tamaño). En otras palabras, quiero trazar el pdf para Gamma(29,3). ¿Cómo hago esto si, según la documentación , la función gamma de Python solo tiene parámetros a y x y el parámetro de tamaño no existe?
Pensé que loc era beta, pero creo que en realidad está compensado, por lo que el siguiente código es incorrecto...
import numpy as np import scipy.stats as stats from matplotlib import pyplot as plt x = np.linspace (0, 100, 200) y1 = stats.gamma.pdf(x, a=29, loc=3) #a is alpha, loc is beta??? plt.plot(x, y1, "y-", label=(r'$\alpha=29, \beta=3$')) plt.ylim([0,0.08]) plt.xlim([0,150]) plt.show()De acuerdo con la documentación, desea utilizar el parámetro de escala (theta), pero dado que está definiendo beta, que es el inverso de theta, entonces pasa la escala con el valor de 1/beta, que en su ejemplo sería 1/ 3 o 0,33333.
Por lo tanto, intente:
y1 = stats.gamma.pdf(x, a=29, scale=0.33333)Como respondió @Hielke, según lo explicado en la documentación de scipy.stats 1.4.1, parece que el parámetro escalar es igual a beta. De hecho, la función desarrollada originalmente es:
gamma.pdf(x, a) = x^(a-1) * exp(-x) / gamma(a)Si uno reemplaza x por una combinación de los dos parámetros opcionales loc y escala como:
x = (y - loc) / scaleUno debe tener:
gamma.pdf(x, a) = (y - loc)^(a-1) * exp( -(y - loc)/scale ) / (scale^(a-1) * gamma(a))Si toma loc = 0 , entonces reconoció la expresión de la distribución Gamma tal como se define normalmente. Multiplica por el inverso de scale y puedes concluir que scale = beta en esta función y loc es un desplazamiento .
En realidad, he tratado de detallar la explicación de la documentación:
Específicamente, gamma.pdf(x, a, loc, scale) es idénticamente equivalente a gamma.pdf(y, a) / scale con y = (x - loc) / scale.
Esta no es estrictamente una respuesta a la pregunta, pero surge cuando se busca el equivalente de R qgamma con parámetros alfa y beta en Python. Así que solo una nota:
R: qgamma(0.025, 5, 41.3) Python: from scipy.stats import gamma gamma.ppf(0.025, 5, scale=1/41.3)