Почему scipy.stats.gamma.pdf возвращает массив 0? - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь составить график загрузки данных и определить, как они распределяются, я легко построил график нормального распределения и бета-распределения по своей гистограмме.

Гистограмма и график плотности. С нормальным и бета-распределением.

Однако, когда я пытаюсь сделать то же самое с гамма-распределением, он просто возвращает массив, состоящий в основном из нулей. Мой код показан ниже.

plt.figure()
sns.distplot(data,bins=50)
x = np.linspace(min(data),max(data),1000)
mu, std = norm.fit(data)
p = norm.pdf(x, mu, std)
plt.plot(x,p)
ag,bg,cg = stats.gamma.fit(data,1)  
pdf_gamma = stats.gamma.pdf(x,ag,bg,cg)  
plt.plot(x, pdf_gamma, label="Gamma")
ab,bb,cb,db = stats.beta.fit(data)  
pdf_beta = stats.beta.pdf(x, ab, bb,cb, db)  
plt.plot(x, pdf_beta, label="Beta")

Кто-нибудь знает мою ошибку?

1 Ответ

0 голосов
/ 24 апреля 2020

Вы вызвали ag,bg,cg = stats.gamma.fit(data,1), который устанавливает параметр формы a в 1. Вы не хотите этого. Чтобы увидеть, что это делает, попробуйте просто построить примерный PDF-файл гаммы с настройкой a=1:

x = np.linspace(min(data),max(data),1000)
ag,bg,cg = stats.gamma.fit(data, 1)
pdf_gamma = stats.gamma.pdf(x,ag,bg,cg)
plt.plot(x, pdf_gamma, label="Gamma (a = 1)")

ag,bg,cg = stats.gamma.fit(data)
pdf_gamma = stats.gamma.pdf(x,ag,bg,cg)
plt.plot(x, pdf_gamma, label="Gamma (a = Free)")
plt.legend()
plt.show()
и без нее.
...