Не уверен, какой дистрибутив использовать для моделирования моих данных - PullRequest
1 голос
/ 10 июля 2019

У меня есть набор астрономических данных, к которым я пытаюсь подогнать кривую:

enter image description here

Мой подходящий код

param = stats.norm.fit(df['delta z'].dropna())   # Fit a normal distribution to the data
pdf_fitted = stats.norm.pdf(df['delta z'], *param)
x = np.linspace(*df['delta z'].agg([min, max]), 1000) # x-values
binwidth = np.diff(edges).mean()
ax.plot(x, stats.norm.pdf(x, *param)*h.sum()*binwidth, color = 'r')

, который производит

enter image description here

Теперь я явно делаю это неправильно, потому что кривая совсем не соответствует данным. Все учебники, которые я видел, такие как здесь , включают создание набора данных, и в этом случае мы уже знаем такие вещи, как среднее значение и перекос. Этот вопрос привел меня к оценке параметров с

a_estimate, loc_estimate, scale_estimate = stats.skewnorm.fit(df['delta z'])
ax.plot(x, skewnorm.pdf(x, a_estimate, loc_estimate, scale_estimate), 'r-', lw=5, alpha=0.6, label='skewnorm pdf')

, который производит

enter image description here

так как я могу построить подгонку с этими параметрами?

1 Ответ

0 голосов
/ 10 июля 2019

В комментариях вы утверждаете, что не знаете, как построить кривую: вот небольшой пример подгонки и построения кривой.

import numpy as np
import scipy.stats as ss
import matplotlib.pyplot as plt

data = ss. expon.rvs(size=1000)

P = ss.expon.fit(data)
rX = np.linspace(min(data), max(data), 50)
rP = ss.skewnorm.pdf(rX, *P)

plt.hist(data,bins=25, normed=True, color='slategrey')

plt.plot(rX, rP, color='darkturquoise')
plt.show()
...