1. 程式人生 > >利用python進行單邊T檢驗

利用python進行單邊T檢驗

可以利用 python 中的 scipy.stats.ttest_ind 做關於兩組資料的雙邊 t 檢驗,結果比較簡單。但是做 大於或者小於的單邊檢測的時候需要做一些處理,才能得到正確的結果。

from scipy import stats
import numpy as np

A = np.array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
B = np.array([ 0, 2, 5, 6, 8, 10, 13, 14, 17, 20])

很顯然,A的均值為4.5,B的均值為9.5. 為了檢測這種差異是否顯著,我們做個單邊的 t 檢驗,證實這種差異的顯著性。

這裡備擇假設應該為我們想要證明的假設,即 B>A.

所以,原假設和備擇假設分別設為:

H0: A \geq B, H1: A < B

現在我們呼叫 scipy.stats.ttest_ind(x, y) 函式,這個函式預設我們想驗證 x.mean()-y.mean() 這個假設。為了在計算的過程中得到正數,我們 呼叫 stats.ttest_ind(B,A),這裡設定方差不相等。

stats.ttest_ind(B,A,equal_var= False)

# 程式執行結果
Ttest_indResult(statistic=2.204452592164665, pvalue=0.04653783266614884)

根據 scipy.stats.ttest_ind(x, y) 文件的解釋,這是雙邊檢驗的結果。為了得到單邊檢驗的結果,需要將 計算出來的 pvalue 除於2 取單邊的結果(這裡取閾值為0.05)。

p/2 < alpha(0.05)

所以這裡我們可以拒絕原假設,即接受備擇假設,A < B

作為驗證,我們還可以根據自由度和置信區間(95%)查詢 t 值驗證結果是否正確。

df = samplesize1 + samplesize2 - 2 = 10 + 10 -2 = 18

通過在 t 分佈 表上查詢,得到

tcrit(df=18, confidencelevel = 95\%) = 1.734

這裡 t > tcrit, 還是拒絕原假設。