Попытка подогнать распределение вероятностей Pearson3 с помощью scipy

Я пытаюсь понять, как подогнать функцию распределения вероятностей, такую ​​как тип 3 Пирсона, к набору данных (в частности, среднегодовое количество осадков в районе). Я прочитал несколько вопросов по этому поводу, но Я все еще что-то упускаю, и примерка не получается. На данный момент мой код таков (конкретный файл данных можно загрузить с здесь):

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearson3
year,mm = np.loadtxt('yearly_mm_sde_boker_month_1960_2016.csv',delimiter=',').T
fig,ax=plt.subplots(1,2,figsize=(2*1.62*3,3))
ax[0].plot(year,mm)
dump=ax[1].hist(mm)

введите описание изображения здесь

size = len(year)
param = pearson3.fit(mm)
pdf_fitted = pearson3.pdf(year, *param[:-2], loc=param[-2], scale=param[-1]) * size
plt.plot(pdf_fitted, label=dist_name)
plt.xlim(0,len(year))
plt.legend(loc='upper right')
plt.show()

введите описание изображения здесь

Что мне не хватает?


person Ohm    schedule 05.06.2018    source источник


Ответы (1)


Что ж, это работает:

param = pearson3.fit(mm) # distribution fitting

# now, param[0] and param[1] are the mean and 
# the standard deviation of the fitted distribution
x = np.linspace(0,200,100)
# fitted distribution
pdf_fitted = pearson3.pdf(x,*param[:-2], loc=param[-2], scale=param[-1])
# original distribution
#pdf = norm.pdf(x)

plt.title('Pearson 3 distribution')
plt.plot(x,pdf_fitted,'r-')#,x,pdf,'b--')
dump=plt.hist(mm,normed=1,alpha=.3)

введите описание изображения здесь

person Ohm    schedule 05.06.2018