scipy 如何使用alternative ='less'或alternative ='greater'解释ks_2samp

qni6mghb  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(72)

我有两组数据:

A = df['Users_A'].values
B = df['Users_B'].values

字符串
我使用scipy函数:

pval_less = stats.mstats.ks_2samp(A,B, alternative='less')[1]
p_val_greater = stats.mstats.ks_2samp(A,B, alternative='greater')[1]


对于这两个我有这些结果:

pval_less = 1.05465e-51 
p_val_greater = 1.97441e-220


我应该如何解释这些结果?
通常是p_val_greater = 1 - p_val_less和相反的。那么我就知道集合A的值是否比集合B的值大/小。
在这里,我不知道怎么做。有人能帮我吗?

egdjgwm8

egdjgwm81#

SciPy最新版本中ks_2samp documentation的注解部分给予对不同的零假设和备择假设的解释。
此检验比较两个独立样本的基本连续分布F(x)和G(x)。

  • 减去:零假设是对于所有x,F(x)>= G(x);替代假设是对于至少一个x,F(x)< G(x)。统计量是样本的经验分布函数之间的最小(最负)差异的大小。
  • 更大:零假设是对于所有x,F(x)<= G(x);另一种假设是对于至少一个x,F(x)> G(x)。统计量是样本经验分布函数之间的最大(最正)差异。

由于两个p值都很小,你有证据反对零假设,支持两个备择假设,这两个备择假设是 * 不 * 相互排斥的:至少有一个x * 的F(x)< G(x)和至少有一个x的 * F(x)> G(x)。
例如:

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

dist1 = stats.norm()
dist2 = stats.uniform(loc=-5, scale=10)
x = np.linspace(-5, 5, 300)

plt.plot(x, dist1.cdf(x), label='normal')
plt.plot(x, dist2.cdf(x), label='uniform')
plt.legend()

x1 = dist1.rvs(1000)
x2 = dist2.rvs(1000)

resL = stats.ks_2samp(x1, x2, alternative='less')
resG = stats.ks_2samp(x1, x2, alternative='greater')
print(resL.pvalue, resG.pvalue)
# 1.0166514431699959e-34 5.072797825961067e-38

字符串
x1c 0d1x的数据
x1(正态)基础分布的CDF在某些点上小于x2(均匀)基础分布的CDF,而在其他点上则大于x2(均匀)基础分布的CDF,因此该检验报告两种备选方案的p值都较小。

相关问题