【问题标题】:SciPy skewnormal fittingSciPy 偏斜法线拟合
【发布时间】:2018-05-03 23:56:23
【问题描述】:

我正在尝试使用 SciPy Skewnorm 包将数据拟合到偏态正态分布中。

但是,由于找不到有关此问题的适当文档或示例,因此我无法正确理解其用法。

在帮助部分,我找到了Documentation,并尝试使用skewnorm.fit()skewnorm.pdf() 将数据拟合到模型中,并使用该模型输出分布并与原始数据进行比较。

如果有人可以帮忙,请告诉我。

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

# choose some parameters
a, loc, scale = 5.3, -0.1, 2.2
# draw a sample
data = stats.skewnorm(a, loc, scale).rvs(1000)
# estimate parameters from sample
ae, loce, scalee = stats.skewnorm.fit(data)
# Plot the PDF.
plt.figure()
plt.hist(data, bins=100, normed=True, alpha=0.6, color='g')
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = stats.skewnorm.pdf(x,ae, loce, scalee)#.rvs(100)
plt.plot(x, p, 'k', linewidth=2)

输出:

【问题讨论】:

  • 如果您正在查看fit() 方法,那么您正在将数据建模为从偏正态分布中抽取的随机样本,并且您想要估计该分布的参数。那是对的吗?如果是这样,您是否尝试过像params = skewnorm.fit(data) 这样简单的方法,其中data 是包含您的输入值的一维数组或序列? (有关示例,请参见 Paul Panzer 的回答。)
  • 感谢您的评论@WarrenWeckesser,您的假设是正确的。我会试一试,让你知道它是否有效。
  • 成功了,我更新了@warren-weckesser 的帖子。很遗憾我还不能使用照片!

标签: python scipy


【解决方案1】:

这是一个让您入门的示例。

>>> from scipy import stats

# choose some parameters
>>> a, loc, scale = 1.3, -0.1, 2.2
# draw a sample
>>> sample = stats.skewnorm(a, loc, scale).rvs(1000)

# estimate parameters from sample
>>> ae, loce, scalee = stats.skewnorm.fit(sample)
>>> ae
1.2495366661560348
>>> loce
-0.039775813819310835
>>> scalee
2.1126121580965536

【讨论】:

  • 感谢您的示例代码@paulpanzer,我会试一试,如果它有效,请告诉您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
  • 2017-04-21
  • 2018-11-20
  • 1970-01-01
  • 2021-11-01
  • 2013-10-10
  • 1970-01-01
相关资源
最近更新 更多