双样本Kolmogorov-Smirnov检验,原始数据和预先计算的百分比数据之间的结果差异

时间:2017-06-04 17:08:52

标签: python scipy statistics kolmogorov-smirnov

我正在尝试从Scipy包中实施双样本Kolmogorov-Smirnov检验,以测试两个样本的分布是否存在差异。样品是在两个不同时期出售的T恤尺码(S,M,L,XL和XXL)。我想测试这两个时期的大小分布是否不同。

我遇到的问题是,当我使用原始数据预先计算每个尺寸的总百分比时​​,我会得到非常不同的结果。我不明白这一点,因为百分比仍然代表相同的分布。

以下是我使用的代码(x和y是原始数据,x1和y1是计算的百分比):

from scipy.stats import ks_2samp

x = (254, 526, 576, 622, 409)
y = (92, 214, 366, 365, 287)

x1 = (10.6, 21.9, 24.0, 25.9, 17.1)
y1 = (7.0, 16.2, 27.7, 27.7, 21.7)


print(ks_2samp(x, y))
print(ks_2samp(x1, y1))

这些是我得到的两个不同的结果:

Ks_2sampResult(统计= 0.80000000000000004,pvalue = 0.03614619076928504) Ks_2sampResult(统计= 0.40000000000000002,pvalue = 0.69740487802059081)

1 个答案:

答案 0 :(得分:2)

如果将相同的缩放应用于两个样本,则在数据缩放下测试是不变的。通过将样本转换为百分比,您已对两个样本应用了不同的缩放比例。具体来说,您将第一个数据集乘以100/2387,同时将第二个数据集乘以100/1324。

顺便说一句,我认为Kolmogorov-Smirnov(KS)测试不适用于这些数据。 KS测试用于连续分布的样品。我希望将数据建模为样本空间为{S,M,L,XL,XXL}的离散分布样本中的观测频率。分析此类数据的一个常用工具是contingency table的卡方检验,该检验以scipy scipy.stats.chi2_contingency实现:

In [110]: x
Out[110]: array([254, 526, 576, 622, 409])

In [111]: y
Out[111]: array([ 92, 214, 366, 365, 287])

In [112]: a = np.vstack((x, y))

In [113]: a
Out[113]: 
array([[254, 526, 576, 622, 409],
       [ 92, 214, 366, 365, 287]])

In [114]: from scipy.stats import chi2_contingency

In [115]: chi2, p, dof, expected = chi2_contingency(a)

In [116]: p
Out[116]: 2.1980217327784848e-08

请注意如何理解这一点,因为"with enough data, everything is significant"