【发布时间】:2014-04-05 18:04:40
【问题描述】:
我正在进行一些数据分析,涉及将数据集拟合到广义极值 (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]: [<matplotlib.lines.Line2D at 0x97590f0>]
In [7]: hist(data)
请特别注意,第 4 行显示的 p 值约为 7e-7,远低于通常认为可接受的值。这是产生的情节:
【问题讨论】:
-
您似乎在
pdf = gev.pdf(x, *gev.fit(data)的末尾缺少了一个括号。一旦我解决了这个问题,我会得到不同的输出:前几个数组元素是[0.86052504 1.26941931 1.87260719 2.76241087 ...],其余的都是零。 -
@sjy 这只是一个复制/粘贴错误。但是,您的结果看起来比我的要好得多。你用的是什么版本的 scipy?
-
0.11.0根据scipy.version.version。我不记得安装它了,我认为这正是 OS X 自带的? -
我在 0.13.3,所以也许这与它有关。不知道是什么...
-
@aquavitae,见编辑。关于 KS 测试的旁注。您正在测试 GEV 的拟合优度,其参数是根据数据本身估算的。这种情况下p值无效,见:itl.nist.gov/div898/handbook/eda/section3/eda35g.htm,
3. Perhaps the most serious limitation...
标签: python statistics scipy