我正在进行一些数据分析,包括将数据集拟合到广义极值(GEV)分布,但我得到了一些奇怪的结果.这是我正在做的事情:
from scipy.stats import genextreme as gev import numpy data = [1.47, 0.02, 0.3, 0.01, 0.01, 0.02, 0.02, 0.12, 0.38, 0.02, 0.15, 0.01, 0.3, 0.24, 0.01, 0.05, 0.01, 0.0, 0.06, 0.01, 0.01, 0.0, 0.05, 0.0, 0.09, 0.03, 0.22, 0.0, 0.1, 0.0] x = numpy.linspace(0, 2, 20) pdf = gev.pdf(x, *gev.fit(data)) print(pdf)
并输出:
array([ 5.64759709e+05, 2.41090345e+00, 1.16591714e+00, 7.60085002e-01, 5.60415578e-01, 4.42145248e-01, 3.64144425e-01, 3.08947114e-01, 2.67889183e-01, 2.36190826e-01, 2.11002185e-01, 1.90520108e-01, 1.73548832e-01, 1.59264573e-01, 1.47081601e-01, 1.36572220e-01, 1.27416958e-01, 1.19372442e-01, 1.12250072e-01, 1.05901466e-01, 1.00208313e-01, 9.50751375e-02, 9.04240603e-02, 8.61909342e-02, 8.23224528e-02, 7.87739599e-02, 7.55077677e-02, 7.24918532e-02, 6.96988348e-02, 6.71051638e-02, 6.46904782e-02, 6.24370827e-02, 6.03295277e-02, 5.83542648e-02, 5.64993643e-02, 5.47542808e-02, 5.31096590e-02, 5.15571710e-02, 5.00893793e-02, 4.86996213e-02, 4.73819114e-02, 4.61308575e-02, 4.49415891e-02, 4.38096962e-02, 4.27311763e-02, 4.17023886e-02, 4.07200140e-02, 3.97810205e-02, 3.88826331e-02, 3.80223072e-02])
问题是第一个值是巨大的,完全扭曲了所有的结果,它在一个情节中非常清楚地表明:
我已经尝试过其他数据和随机样本,在某些情况下它也有效.我的数据集中的第一个值明显高于其余值,但它是一个有效值,所以我不能放弃它.
有谁知道为什么会这样?
更新
这是另一个更清楚地显示问题的例子:
In [1]: from scipy.stats import genextreme as gev, kstest In [2]: data = [0.01, 0.0, 0.28, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.13, 0.07, 0.03 , 0.01, 0.42, 0.11, 0.0, 0.0, 0.0, 0.0, 0.25, 0.0, 0.0, 0.26, 1.32, 0.06, 0.02, 1.57, 0.07, 1.56, 0.04] In [3]: fit = gev.fit(data) In [4]: kstest(data, 'genextreme', fit) Out[4]: (0.48015007915450658, 6.966510064376763e-07) In [5]: x = linspace(0, 2, 200) In [6]: plot(x, gev.pdf(x, *fit)) Out[6]: [] In [7]: hist(data)
特别注意,第4行显示的p值约为7e-7,远低于通常认为可接受的值.这是产生的情节: