双样本 Kolmogorov-Smirnov 检验,原始数据与预计算百分比数据的结果差异
Two-sample Kolmogorov-Smirnov test, difference in result between raw data and precomputed percentage data
我正在尝试从 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,p值=0.03614619076928504)
Ks_2sampResult(统计数据=0.40000000000000002, pvalue=0.69740487802059081)
如果对两个样本应用相同缩放,则测试在数据缩放下是不变的。通过将样本转换为百分比,您对两个样本应用了不同的缩放比例。具体来说,您将第一个数据集乘以 100/2387,同时将第二个数据集乘以 100/1324。
顺便说一句,我认为 Kolmogorov-Smirnov (KS) 检验不适合此数据。 KS 检验适用于连续分布的样本。我希望将您的数据建模为来自离散分布的样本中观察到的频率,其样本 space 为 {S、M、L、XL、XXL}。分析此类数据的一种常用工具是 contingency table, which is implemented in scipy as 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".
我正在尝试从 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,p值=0.03614619076928504) Ks_2sampResult(统计数据=0.40000000000000002, pvalue=0.69740487802059081)
如果对两个样本应用相同缩放,则测试在数据缩放下是不变的。通过将样本转换为百分比,您对两个样本应用了不同的缩放比例。具体来说,您将第一个数据集乘以 100/2387,同时将第二个数据集乘以 100/1324。
顺便说一句,我认为 Kolmogorov-Smirnov (KS) 检验不适合此数据。 KS 检验适用于连续分布的样本。我希望将您的数据建模为来自离散分布的样本中观察到的频率,其样本 space 为 {S、M、L、XL、XXL}。分析此类数据的一种常用工具是 contingency table, which is implemented in scipy as 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".