【发布时间】:2019-11-19 12:51:35
【问题描述】:
我有一组天文数据,我正在尝试拟合一条曲线:
我的装修码是
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')
产生
现在,我显然是以错误的方式执行此操作,因为曲线根本不适合数据。我看过的所有教程,例如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')
产生
那么如何使用这些参数绘制拟合?
【问题讨论】:
-
我在zunzun.com/StatisticalDistributions/1 有一个在线统计分布拟合器,它将尝试将您的数据拟合到 scipy 中超过 85 个统计分布,只需粘贴您的数据并点击提交按钮。它可能会建议一些候选分布。
-
为什么要对数据进行分布拟合?您将如何处理分发?你能用empirical CDF 或kernel density estimation 做你想做的事吗?
-
我只需要绘制分布图并在图上显示均值和标准差。
-
您可以从数据中获得平均值和标准差。我仍然不明白为什么你需要为它安装一个分布。您是否有一些生成数据的过程模型可以指导您选择分布?如果您真的只想在直方图上绘制一条平滑曲线,那么核密度估计应该可以很好地工作。例如,请参阅
scipy.stats.gaussian_kde。 -
我用
a_estimate, loc_estimate, scale_estimate = stats.skewnorm.fit(x)找参数,就是不知道怎么画曲线。
标签: numpy scipy curve-fitting