我将合成数据拟合到scipy中的各种分布中,然而,我观察到了一些意想不到的结果。我的数据包含负数,当我在固定位置和比例时,将此数据拟合到具有非负支持的分布时,我不会出错。我的代码如下:
import scipy.stats as st
import numpy as np
import pandas as pd
np.random.seed(7)
test_data = pd.Series(0.5 + 0.1*np.sin(np.linspace(0, 3*np.pi, 100)) + 0.5*np.random.normal(0,1,size=100))
print(np.min(test_data))
返回:
-0.5900934692403015
确认我产生了负面的观察结果。当我拟合scipy lognorm时,它有一个非包含非负的支持,我得到了一个违反数据界限的错误的预期结果:
st.lognorm.fit(test_data, floc=0, fscale=1)
---------------------------------------------------------------------------
FitDataError Traceback (most recent call last)
<ipython-input-13-fbeaae8f3c2e> in <module>
----> 1 st.lognorm.fit(test_data, floc=0, fscale=1)
~\Miniconda3\lib\site-packages\scipy\stats\_continuous_distns.py in fit(self, data, *args, **kwds)
5087 data = data - floc
5088 if np.any(data <= 0):
-> 5089 raise FitDataError("lognorm", lower=floc, upper=np.inf)
5090 lndata = np.log(data)
5091
FitDataError: Invalid values in `data`. Maximum likelihood estimation with 'lognorm' requires that 0.0 < x < inf for each x in `data`.
然而,使用以下分布,我能够拟合数据,尽管所有这些分布都具有非负数据边界(由其scipy文档定义)和固定的位置和比例
st.burr.fit(test_data, floc=0, fscale=1)
st.expon.fit(test_data)
st.chi2.fit(test_data, floc=0, fscale=1)
st.invgauss.fit(test_data, floc=0, fscale=1)
st.invgamma.fit(test_data, floc=0, fscale=1)
其收益率为:
(4.435119987970436, 0.32475585134451646, 0, 1)
(-0.5900934692403015, 1.1171187649605647)
(1.349414062500001, 0, 1)
(0.6815429687499996, 0, 1)
(2.301074218750003, 0, 1)
此外,没有任何形状参数的分布指数能够执行,这是令人惊讶的。如果有人能够解释这些分布如何能够适应数据,尽管事实上它们的支持边界已经被违反,我将非常感激
我正在运行numpy 1.19.2和scipy 1.5.2
谢谢大家!
那些
fit
没有抛出任何错误的事实并不意味着它们非常适合,或者它们可以描述您的数据我正在使用
scipy==1.6.1
可以检查打印结果
毛刺:无错误,bu无法描述数据<;0
Expon:没有错误,但是非常不合适
Chi2:无错误,但拟合非常差,无法描述数据<;0
高斯误差
如果不设置loc和scale,则最适合x>=0,但鉴于其PDF的公式,没有理由为x<;0
Invgamma:警告,不匹配,无法描述x<;0
编辑
从https://github.com/scipy/scipy/blob/v1.6.3/scipy/stats/_continuous_distns.py你可以看到}调用
FitDataError
只被beta
、expon
(但是如果floc is None
那么floc = data_min
、gamma
、invgauss
(但只被np.any(data - floc < 0)
、lognorm
、pareto
、rayleigh
、^对于其他发行版
FitDataError
未实现相关问题 更多 >
编程相关推荐