不确定使用哪种分布来建模我的数据

时间:2019-07-09 23:04:59

标签: numpy scipy curve-fitting

我有一组天文数据,我正在尝试拟合一条曲线:

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

现在,我显然以错误的方式执行此操作,因为曲线根本不适合数据。我所见过的所有教程,例如here都涉及到制作一组数据,在这种情况下,我们已经知道平均值和偏斜之类的东西。 This question使我用来估计参数

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 :(得分:0)

在注释中,您声明您不知道如何绘制曲线:这是拟合和绘制偏斜范数的小示例。

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()