【发布时间】:2019-04-07 02:28:57
【问题描述】:
我有遵循高斯分布的数据。但是,数据仅对于值范围 [xa,xb] 才是真正的高斯分布,因此我想使用 scipy.stats.truncnorm 拟合截断的正态分布,同时使用我知道范围 [xa,xb] 的事实。我的目标是找到位置和比例。
我不明白如何适当地修复 xa 和 xb。形状参数是“a”和“b”,但它们取决于 loc 和 scale,这是我的未知数。此外,似乎不可能对“a”和“b”进行初步猜测(它们只能用 fa 和 fb 冻结?)。当我这样做时:
par = truncnorm.fit(r, a=a_guess, b=b_guess, scale= scale_guess, loc = loc_guess)
我明白了
未知参数:{'a': 0.0, 'b': 2.4444444444444446}。
另外,我得到的配合非常不稳定。这是一个例子:
from scipy.stats import truncnorm
import matplotlib.pyplot as plt
xa, xb = 30,250
loc, loc_guess = 50, 30
scale, scale_guess = 75, 90
a,b = (xa-loc)/scale, (xb-loc)/scale
fig, ax = plt.subplots(1, 1)
x = np.linspace(xa,xb,10000)
ax.plot(x, truncnorm.pdf(x, a, b, loc=loc, scale=scale),
'r-', lw=5, alpha=0.6, label='truncnorm pdf')
r = truncnorm.rvs(a, b, loc=loc, scale=scale, size=10000)
par = truncnorm.fit(r, scale= scale_guess, loc = loc_guess)
ax.plot(x, truncnorm.pdf(x, *par),
'b-', lw=1, alpha=0.6, label='truncnorm fit')
ax.hist(r, density=True, histtype='stepfilled', alpha=0.3)
plt.legend()
plt.show()
我也经常有这样的警告:
/home/elie/anaconda2/envs/py36/lib/python3.6/site-packages/scipy/stats/_continuous_distns.py:5823:RuntimeWarning:在日志中遇到除以零 self._logdelta = np.log(self._delta)
【问题讨论】: