2017-06-04 28 views
0

我試圖從Scipy軟件包實施雙樣本Kolmogorov-Smirnov測試以測試是否存在差異兩個樣本。樣品是在兩個不同時期出售的T恤尺碼(S,M,L,XL和XXL)。我想測試這兩個時期的尺寸分佈是否有所不同。雙樣本Kolmogorov-Smirnov測試,原始數據與預先計算的百分比數據之間的結果差異

我遇到的問題是,當我預先計算每個大小的總數百分比與使用原始數據相比時,我得到的結果非常不同。我不明白這一點,因爲百分比仍然代表相同的分配。

這裏是我使用的代碼(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,p值= 0.69740487802059081)

回答

2

測試是數據的縮放下是不變的,如果相同縮放應用於兩個樣本。通過將樣本轉換爲百分比,您可以對兩個樣本應用不同的縮放比例。具體而言,您將第一個數據集乘以100/2387,將第二個數據集乘以100/1324。


順便說一下,我不認爲柯爾莫哥洛夫 - 斯米爾諾夫(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"

+0

謝謝你的答案,爲我澄清了它。 – DavidK11