python進行t檢驗示例

 

t檢驗主要是針對正態總體均值的假設檢驗,即檢驗樣本的均值與某個值的差異,或者兩個樣本的均值是否有差異等。其不需要事先知道總體的方差,並且在少量樣本情況下也可以進行檢驗。python進行t檢驗使用scipy包的stats模塊

一、單樣本t檢驗

示例:已知某工廠生產的一種點火器平均壽命大於1200次爲合格產品,現在質檢部隨機抽取了20個點火器進行試驗,結果壽命分別爲(單位:次):
809, 1250, 689, 1541, 995, 1234, 1024, 920, 777, 2510, 2301, 540, 850, 895, 1024, 1000, 1025, 863, 875, 1105

單樣本t檢驗用stats.ttest_1samp函數,如下:

from scipy import stats
import numpy as np

#單樣本t檢驗
sample=[809, 1250, 689, 1541, 995, 1234, 1024, 920, 777, 2510,
        2301, 540, 850, 895, 1024, 1000, 1025, 863, 875, 1105]
sample = np.asarray(sample)
m = np.mean(sample)
print("樣本均值:",m)
#單樣本檢驗用stats.ttest_1samp
r = stats.ttest_1samp(sample, 1200, axis=0)
print("statistic:", r.__getattribute__("statistic"))
print("pvalue:", r.__getattribute__("pvalue"))

結果:

樣本均值: 1111.35
statistic: -0.8043067483882222
pvalue: 0.4311691484589055

在這裏統計量statistic<0,說明樣本均值小於指定均值1200,實際上是1111.35。但我們並不能因爲1111.35<1200而去認定點火器平均壽命低於1200。我們應看pvalue: 0.4311691484589055,這裏說明在這個樣本下,我們有0.4311691484589055>0.05的概率認爲產品的壽命均值爲1200。同樣我們不能拒絕產品的壽命均值>1200。也就是我們接受產品是合格的。

 

二、兩個獨立樣本t檢驗

示例:現市場上有2種蓄電池,爲研究哪種蓄電池比較好,分別抽取兩種蓄電池若干件,測試其續航時間,結果如下(單位:h):

A型蓄電池 5.5     5.6     6.3     4.6     5.3     5.0     6.2     5.8     5.1     5.2     5.9
B型蓄電池 3.8     4.3     4.2     4.0     4.9     4.5     5.2     4.8     4.5     3.9     3.7     4.6

根據抽樣結果分析兩種蓄電池續航是否有顯著差異(alpha=0.1)。

獨立2個樣本t檢驗用stats.ttest_ind函數,如下:

from scipy import stats
import numpy as np

#獨立2個樣本t檢驗
sample1=[5.5, 5.6, 6.3, 4.6, 5.3, 5.0, 6.2, 5.8, 5.1, 5.2, 5.9]
sample2=[3.8, 4.3, 4.2, 4.0, 4.9, 4.5, 5.2, 4.8, 4.5, 3.9, 3.7, 4.6]
sample1 = np.asarray(sample1)
sample2 = np.asarray(sample2)
r = stats.ttest_ind(sample1, sample2)
print("statistic:", r.__getattribute__("statistic"))
print("pvalue:", r.__getattribute__("pvalue"))

結果:

statistic: 5.484377451921326
pvalue: 1.9279192737974777e-05

由statistic=5.484377451921326大於0可以知道在樣本統計上A型的均值比B型的大,事實上樣本A均值爲5.5,樣本B的均值爲4.37。另外pvalue=1.9279192737974777e-05遠小於0.1,由此我們拒絕A的均值與B的均值相等,也就是說A型蓄電池的續航均值明顯比B型蓄電池好,即A型蓄電池比B型蓄電池要好。

這裏我們假設兩個總體有方差齊性,當不確定兩總體方差是否相等時,可以先利用levene檢驗,檢驗兩總體是否具有方差齊性。

r = stats.levene(sample1,sample2)
print(r)

結果爲LeveneResult(statistic=0.09936227113762626, pvalue=0.7557072345826116),pvalue>0.05說明具有方差齊性,假如不具有方差齊性,進行t檢驗時需要加上參數equal_val並設定爲False。如下:

stats.ttest_ind(sample1, sample2, equal_var=False)

 

三、成對樣本t檢驗

成對樣本t檢驗,是針對成對的數據做的檢驗,比如比較兩種測量方法的差異,每對數據是針對同一個對象的測量。

示例:現有2種血壓計,爲研究其測量性能是否有顯著差異,分別使用這兩種血壓計測量15個人的血壓值,結果如下:

受測人編號 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
血壓計A 68 85 123 74 88 128 63 115 110 93 99 75 89 68 140
血壓計B 60 88 132 70 95 115 74 115 121 86 96 71 96 70 143

這裏數據都是成對的,使用stats.ttest_rel進行成對數據的t檢驗。

from scipy import stats
import numpy as np

#成對樣本t檢驗
sample1=[68, 85, 123, 74, 88, 128, 63, 115, 110, 93, 99, 75, 89, 68, 140]
sample2=[60, 88, 132, 70, 95, 115, 74, 115, 121, 86, 96, 71, 96, 70, 143]
sample1 = np.asarray(sample1)
sample2 = np.asarray(sample2)
r = stats.ttest_rel(sample1,sample2)
print("statistic:", r.__getattribute__("statistic"))
print("pvalue:", r.__getattribute__("pvalue"))

結果:

statistic: -0.492910604649229
pvalue: 0.6297167086230713

從結果上看,statistic<0,說明在樣本均值上看血壓計A的測量結果比血壓計B略低。但pvalue=0.6297167086230713遠大於0.05,我們並不能拒絕兩種血壓計測量均值相等,即我們認爲2種血壓計的測量性能並沒有顯著差異。

 

 

author:藍何忠

email:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章