微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ks_2samp 返回 p 值为 1.0

如何解决ks_2samp 返回 p 值为 1.0

我有两个 "echo" DataFrame pandasdata1,并且两个 DataFrame 都有一个整数列 data2,其中填充了从 1 到 50 的不同值。

h 的样本大小约为 55000,而 data1 的样本大小约为 8000。由于它们的大小,我无法上传确切的数据,但以下是我的直方图由 data2data1['h'] 创建:

enter image description here

(为了更容易观察,我应用了 data2['h']

enter image description here

为了比较分布,我使用了 matplotlib.yscale('log') 中的 ks_2samp。我组成了一个双尾测试和两个单尾测试来观察两个方向的优势:

scipy.stats

结果如下:

# h indices are significantly different
print(ks_2samp(data1['h'],data2['h']))

# data1 h indices are greater
print(ks_2samp(data1['h'],data2['h'],alternative='greater'))

# data2 h indices are greater
print(ks_2samp(data1['h'],alternative='less'))

我之前为其他项目练习过 Ks_2sampResult(statistic=0.1293719140156916,pvalue=3.448839769104661e-105) Ks_2sampResult(statistic=0.0,pvalue=1.0) Ks_2sampResult(statistic=0.1293719140156916,pvalue=1.5636837258561576e-105) ,但看到如此晦涩的 p 值对我来说还是很新鲜的。尤其是第二个结果,让我怀疑我是否在错误地执行测试,因为 p 值为 1.0 似乎非常荒谬。

我研究了一些类似的问题,包括以下 StackOverflow 问题 (scipy p-value returns 0.0),但不幸的是,这个问题与尚未报告的任何问题都不相同。

我很想获得任何见解来解释此类结果或修正我的方法

解决方法

问题似乎不在于您的代码,而在于您的解释。我们可以看到 data1 向右移动,因此我构建了正态分布,绘制了它们的直方图,并运行了 ksmirnov 检验以表明您得到的结果符合我们的预期。

设置:

from scipy.stats import ks_2samp
from numpy import random
import pandas as pd
from matplotlib import pyplot

random.seed(1)

n=4000
l1=[random.normal(1) for x in range(n)]
l2=[random.normal() for x in range(n)]

df=pd.DataFrame(list(zip(l1,l2)),columns=['1','2'])

测试:

print(ks_2samp(df['1'],df['2']))
print(ks_2samp(df['1'],df['2'],alternative='greater'))
print(ks_2samp(df['1'],alternative='less'))

返回:

KstestResult(statistic=0.3965,pvalue=3.8418108959960396e-281)
KstestResult(statistic=0.0,pvalue=1.0)
KstestResult(statistic=0.3965,pvalue=1.9209054479980054e-281)

图形表示:

bins=50
pyplot.hist(l1,bins,alpha=.5,label='Sample 1')
pyplot.hist(l2,label='Sample 2')
pyplot.legend()
pyplot.show

sample histograms

这里发生了什么?

第一个 KS 检验拒绝了分布相等的原假设,并且它以高置信度执行此操作(p 值基本上为零)。第二个告诉我们,我们不能拒绝样本 1 大于样本 2 的假设。从我们所知,这是显而易见的 - 样本 1 与样本 2 来自同一总体,但向右移动。第三个再次拒绝零假设,但这个 h0 是样本 1 小于样本 2。请注意,这里的 pvalue 是最小的 - 样本 1 小于样本 2 的可能性小于它们从等效中拉出的可能性分布。这再次符合预期。

还要注意,在这个例子中,两个分布都是正态分布并且非常相似。但是 KS 检验告诉您“总体可能在中位数、变异性或分布形状方面存在差异”(reference)。在这里,它们的中位数不同,但形状不同,这是检测到的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。