【问题标题】:scipy p-value returns 0.0scipy p 值返回 0.0
【发布时间】:2013-12-30 01:48:32
【问题描述】:

使用 2 样本 Kolmogorov Smirnov 检验,我得到的 p 值为 0.0。

>>>scipy.stats.ks_2samp(dataset1, dataset2)
(0.65296076312083573, 0.0)

查看 2 个数据集的直方图,我非常确信它们代表了两个不同的数据集。但是,真的,p = 0.0?这似乎没有意义。不应该是一个很小的正数吗?

我知道返回值是 numpy.float64 类型的。和这有关系吗?

编辑: 数据在这里:https://www.dropbox.com/s/jpixhz0pcybyh1t/data4stack.csv

scipy.version.full_version
'0.13.2'

【问题讨论】:

  • 小于某个阈值的数字无法通过浮点类型与 0 进行区分。该阈值因类型而异,但总有一个阈值,显然您的 p 值低于它,因此它显示为零。
  • @BrenBarn 但是在 scipy 的情况下阈值有多小? P=0 不是很令人满意。我正在寻找更准确的陈述,例如 P
  • 很确定你不会得到那么小的东西。它可能因您的平台而异,但我认为您使用 numpy 获得的最小数量级为 1E-16。你可以看看numpy.finfo
  • 我认为这里的答案是:真的。

标签: python statistics scipy


【解决方案1】:

是的,概率非常很小:

>>> from pprint import pprint
>>> pprint ([(i, scipy.stats.ks_2samp(dataset1, dataset2[:i])[1]) 
...                for i in range(200,len(dataset2),200)])
[(200, 3.1281733251275881e-63),
 (400, 3.5780609056448825e-157),
 (600, 9.2884803664366062e-225),
 (800, 7.1429666685167604e-293),
 (1000, 0.0),
 (1200, 0.0),
 (1400, 0.0),
 (1600, 0.0),
 (1800, 0.0),
 (2000, 0.0),
 (2200, 0.0),
 (2400, 0.0)]

【讨论】:

  • 以下哪个是真正的 p 值?
  • @GWarner 如上所见,用于计算相关性的点越多,p 值越低;一旦使用 1,000 个点,p 值就低于与 0.0 区分开来的阈值。因此,您的问题的答案是“这两个数据集中所有点之间相关性的真实 p 值小于 7.1429666685167604e-293。”
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-22
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多