web-dev-qa-db-fra.com

Comment tracer la distribution gamma avec les paramètres alpha et bêta dans python

Je veux tracer une distribution gamma avec alpha = 29 (l'échelle) et beta = 3 (la taille). En d'autres termes, je veux tracer le pdf pour Gamma (29,3). Comment puis-je faire cela si selon la documentation , la fonction python gamma n'a que les paramètres a et x et le paramètre de taille n'existe pas?

Je pensais que loc était bêta, mais je pense que c'est en fait compensé, donc le code ci-dessous est incorrect ...

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()
10
14wml

Selon la documentation, vous souhaitez utiliser le paramètre d'échelle (thêta), mais comme vous définissez la bêta, qui est l'inverse de thêta, vous passez ensuite l'échelle avec la valeur 1/bêta, qui dans votre exemple serait 1/3 ou 0,33333.

Par conséquent, essayez:

y1 = stats.gamma.pdf(x, a=29, scale=0.33333)
16
Scratch'N'Purr

Comme @Hielke a répondu, pour autant que expliqué dans scipy.stats 1.4.1 documentation il semble que le paramètre scalaire soit égal à beta. En effet, la fonction initialement développée est:

gamma.pdf(x, a) = x^(a-1) * exp(-x) / gamma(a)

Si l'on remplace x par une combinaison des deux paramètres facultatifs loc et scale as:

x = (y - loc) / scale

Il faut avoir:

gamma.pdf(x, a) = (y - loc)^(a-1) * exp( -(y - loc)/scale ) / (scale^(a-1) * gamma(a))

Si vous prenez loc = 0 alors vous avez reconnu l'expression de la distribution Gamma telle qu'elle est habituellement définie. Vous multipliez par l'inverse de scale et vous pouvez conclure que scale = beta dans cette fonction et loc est un décalage .

En fait, j'ai essayé de détailler l'explication de la documentation:

Plus précisément, gamma.pdf (x, a, loc, scale) est identique à gamma.pdf (y, a)/scale avec y = (x - loc)/scale.

0
eidal