Numpy 不确定要使用什么分布来为我的数据建模

Numpy 不确定要使用什么分布来为我的数据建模,numpy,scipy,curve-fitting,Numpy,Scipy,Curve Fitting,我有一组天文数据,我试图拟合一条曲线: 我的装配代码是 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.di

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

我的装配代码是

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')
产生

很明显,我这样做是错误的,因为曲线根本不符合数据。我看过的所有教程,比如制作一组数据,在这种情况下,我们已经知道了均值和偏斜。让我用

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')
产生


那么,如何使用这些参数绘制拟合呢?

在注释中,您表示不知道如何绘制曲线:下面是一个拟合和绘制曲线的小示例

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

我有一个在线统计分布拟合工具,它会尝试将您的数据拟合到scipy中85个以上的统计分布,只需粘贴您的数据并点击提交按钮。它可能会建议一些候选分布。为什么要根据数据拟合分布?您将如何处理分发?你能做你想做的吗?我只需要绘制分布图,并在图上显示平均值和标准偏差。你可以从数据中得到平均值和标准偏差。我还是不明白你为什么要给它配一个发行版。您是否有生成数据的流程模型,可以指导您选择发行版?如果您真的只想在直方图上绘制一条平滑的曲线,那么内核密度估计应该可以很好地工作。例如,我使用了
a_估计,loc_估计,scale_估计=stats.skewnorm.fit(x)
来寻找参数,我只是不知道如何绘制曲线。有没有办法生成平滑曲线,而不是
rX
rP
plt.plot
的直方图?另外,如何找到图例中显示的平均值和方差?编辑注释:获得曲线;如何找到图例中显示的均值和方差?如果我使用
mean,var,skew,kurt=skewnorm.stats(a_est,moments='mvsk')
,它给出的平均值与曲线不匹配。我会首先尝试numpy.mean(数据)和numpy.var(数据)。
np.mean
给出
-3e-15
,但数据的平均值显然更接近
1
。如果分布高度倾斜,那么曲线的峰值不会在平均值,是吗?也许这就是问题所在。