統計之一

介紹

t檢驗需要滿足的條件是獨立性,正態性和方差齊性。獨立性是指是樣本中的數據之間是相互獨立,互不影響的。正態性是指樣本對代表總體呈正態分布。方差齊性是對於獨立樣本t檢驗而言的,意思是說兩個獨立樣本所代表總體的方差是一致的。下面就通過一些簡單的例子來說明如何操作。

正態性檢驗

如果數據之間沒有明顯的聯繫,通常認為獨立性是滿足的。這裡首先對樣本的正態性進行檢驗。正態性檢驗可以使用K-S單樣本檢驗(Kolomogorov-Simirnov)完成。K-S檢驗可以對任意分布進行檢驗。它的原假設是$H_0: 樣本服從所假設的分布$。這裡以Python為例:

import numpy as np
from scipy import stats

np.random.seed(987654321)
x = stats.norm.rvs(size=100)
stat, p = stats.kstest(x, 'norm')
print(f'Statistic: {stat}, P value: {p}')

輸出:

Statistic: 0.058352892479417884, P value: 0.8853119094415125

結論,P=0.885>0.05,因此不拒絕原假設,即樣本x滿足正態性。(這裡我個人覺得有點問題,這裡只是得到了不拒絕原假設的結論,其實並不能得到接受原假設的結論。但是教材上通常都是這樣解釋結果的,這裡也就這樣去解釋了。)

方差齊性檢驗

方差齊性檢驗可以使用Levene檢驗完成。它的原假設是$H_0: 兩樣本所代表總體的方差相同$。

import numpy as np
from scipy import stats

x = stats.norm.rvs(size=100)
y = stats.norm.rvs(size=150)
stat, p = stats.levene(x, y)
print(f'Statistic: {stat}, P value: {p}')

輸出:

Statistic: 0.0002072234817831774, P value: 0.9885262154804763

結論,P=0.989>0.05,因此不能拒接兩樣本所對應總體方差相同的假設,也就是說這兩個樣本對應的兩個總體的方差是一致的。(這裡關於結論的解釋同樣存在上面描述的問題)

獨立樣本t檢驗

如果上述兩個檢驗均通過了,也就是兩個樣本對應的總體滿足正態性和方差齊性。接下來就可以使用獨立樣本t檢驗比較兩個樣本對應總體的均值是否一致。獨立樣本t檢驗的原假設是兩個樣本對應總體的均值是相等的。這裡假設x和y均滿足獨立性、正態性和方差齊性。

import numpy as np
from scipy import stats

x = stats.norm.rvs(size=100)
y = stats.norm.rvs(size=150)
stat, p = stats.ttest_ind(x, y)
print(f'Statistic: {stat}, P value: {p}')

輸出:

Statistic: -0.30009777229970375, P value: 0.7643539691682373

結論,P=0.764>0.05,因此得到結論,不能拒絕這兩個樣本對應總體的均值相同的假設。通常就認為這兩個樣本對應總體之間無差異。

不滿足上述三個條件

當數據不滿足上面的三個條件時,獨立樣本t檢驗就不能得到準確的結論。可以使用雙獨立樣本的非參數檢驗來代替獨立樣本t檢驗的工作。
雙獨立樣本的分參數檢驗有許多種。各種方法主要的差別在於統計量的構造方法不同,原理和檢驗結果通常都是等價的。這裡主要介紹Wilcoxon秩和檢驗。

import numpy as np
from scipy import stats

x = stats.norm.rvs(size=100)
y = stats.norm.rvs(size=150)
stat, p = stats.ranksums(x, y)
print(f'Statistic: {stat}, P value: {p}')
Statistic: -0.44810713004816155, P value: 0.0140758825221187

結論,P=0.014<0.05,因此拒絕這兩個樣本對應總體的均值相同的假設,即這兩個樣本對應的總體均值是不同的或者兩個樣本對應總體之間存在顯著的差異。

總結

上述示例均使用了SciPy包中提供的統計函數。這裡總結一下:

正態性檢驗:scipy.stats.kstest()
方差齊性檢驗:scipy.stats.levene()
獨立樣本t檢驗:scipy.stats.ttest_ind()
Wilcoxon秩和檢驗:scipy.stats.ranksums()

參考

[1] 張文彤, 鄺春偉. SPSS統計分析基礎教程[M]. 高等教育出版社, 2011.
[2] //docs.scipy.org/doc/scipy-1.4.1/reference/index.html