利用python進行T檢驗

2021-08-03 16:04:55 字數 4787 閱讀 9349

引入所需的包

from scipy import stats

import numpy as np

注:ttest_1samp, ttest_ind, ttest_rel均進行雙側檢驗 h0

:μ=μ

0 h1

:μ≠μ

0 ttest_1samp官方文件

生成50行x2列的資料

np.random

.seed(7654567) # 保證每次執行都會得到相同結果

# 均值為5,方差為10

rvs = stats.norm

.rvs(loc=5, scale=10, size=(50,2))

檢驗兩列數的均值與1和2的差異是否顯著

stats

.ttest_1samp(rvs, [1, 2])

返回結果:

ttest_1sampresult(statistic=array([ 2.0801775 , 2.44893711]), pvalue=array([ 0.04276084, 0.01795186]))

分別顯示兩列數的t統計量和p值。由p值分別為0.042和0.018,當p值小於0.05時,認為差異顯著,即第一列數的均值不等於1,第二列數的均值不等於2。

不拒絕原假設——均值等於5

stats.ttest_1samp(rvs, 5.0)
ttest_1sampresult(statistic=array([-0.68014479, -0.04323899]), pvalue=array([ 0.49961383, 0.96568674]))

拒絕原假設——均值不等於5

stats.ttest_1samp(rvs, 0.0)
ttest_1sampresult(statistic=array([ 2.77025808, 4.11038784]), pvalue=array([ 0.00789095, 0.00014999]))

第一列數均值等於5,第二列數均值不等於0

stats

.ttest_1samp(rvs,[5.0,0.0])

ttest_1sampresult(statistic=array([-0.68014479, 4.11038784]), pvalue=array([ 4.99613833e-01, 1.49986458e-04]))

第一行數均值等於5,第二行數均值不等於0

#axis=0按列運算,axis=1按行運算

stats.ttest_1samp(rvs.t,[5.0,0.0],axis=1)

ttest_1sampresult(statistic=array([-0.68014479, 4.11038784]), pvalue=array([ 4.99613833e-01, 1.49986458e-04]))

將兩列資料均值分別與5.0和0.0比較,得到4個t統計量和p值

stats.ttest_1samp(rvs,[[5.0],[0.0]])
ttest_1sampresult(statistic=array([[-0.68014479, -0.04323899],

[ 2.77025808, 4.11038784]]), pvalue=array([[ 4.99613833e-01, 9.65686743e-01],

[ 7.89094663e-03, 1.49986458e-04]]))

ttest_ind官方文件

生成資料

np.random

.seed(12345678)

#loc:平均值 scale:方差

rvs1 = stats.norm

.rvs(loc=5,scale=10,size=500)

rvs2 = stats.norm

.rvs(loc=5,scale=10,size=500)

當兩總體方差相等時,即具有「方差齊性」,可以直接檢驗

不拒絕原假設——兩總體均值相等

stats.ttest_ind(rvs1,rvs2)
ttest_indresult(statistic=0.26833823296238857, pvalue=0.78849443369565098)

當不確定兩總體方差是否相等時,應先利用levene檢驗,檢驗兩總體是否具有方差齊性。

stats.levene(rvs1, rvs2)
leveneresult(statistic=1.0117186648494396, pvalue=0.31473525853990908)

p值遠大於0.05,認為兩總體具有方差齊性。

如果兩總體不具有方差齊性,需要將equal_val引數設定為「false」。

需注意的情況:

如果兩總體具有方差齊性,錯將equal_var設為false,p值變大

stats.ttest_ind(rvs1,rvs2, equal_var =false)
ttest_indresult(statistic=0.26833823296238857, pvalue=0.78849452749501059)

兩總體方差不等時,若沒有將equal_var引數設定為false,則函式會預設equal_var為true,這樣會低估p值

rvs3 = stats.norm

.rvs(loc=5, scale=20, size=500)

stats.ttest_ind(rvs1, rvs3, equal_var = false)

正確的p值

ttest_indresult(statistic=-0.46580283298287956, pvalue=0.64149646246568737)

stats.ttest_ind(rvs1, rvs3)
被低估的p值

ttest_indresult(statistic=-0.46580283298287956, pvalue=0.64145827413435608)

當兩樣本數量不等時,equal_val的變化會導致t統計量變化

rvs1:來自總體——均值5,方差10,樣本數500

rvs2:來自總體——均值5,方差20,樣本數100

兩總體不具有方差齊性,應設定equal_var=false

rvs4 = stats.norm

.rvs(loc=5, scale=20, size=100)

stats.ttest_ind(rvs1, rvs4)

錯誤的t統計量

ttest_indresult(statistic=-0.99882539442782847, pvalue=0.31828327091038783)

stats.ttest_ind(rvs1, rvs4, equal_var =false)
正確的t統計量

ttest_indresult(statistic=-0.69712570584654354, pvalue=0.48716927725401871)

不同均值,不同方差,不同樣本量的t檢驗

錯誤的檢驗:未將equal_var設定為false

rvs5 = stats.norm

.rvs(loc=8, scale=20, size=100)

stats.ttest_ind(rvs1, rvs5)

ttest_indresult(statistic=-1.4679669854490669, pvalue=0.14263895620529113)

正確的檢驗:

stats.ttest_ind(rvs1, rvs5, equal_var =false)
ttest_indresult(statistic=-0.94365973617133081, pvalue=0.34744170334794089)

ttest_rel官方文件

np.random

.seed(12345678)

不拒絕原假設,認為rvs1 與 rvs2 所代表的總體均值相等

rvs1 = stats.norm

.rvs(loc=5,scale=10,size=500)

rvs2 = (stats.norm

.rvs(loc=5,scale=10,size=500) + stats.norm

.rvs(scale=0.2,size=500))

stats.ttest_rel(rvs1,rvs2)

ttest_relresult(statistic=0.24101764965300979, pvalue=0.80964043445811551)

拒絕原假設,認為rvs1 與 rvs3所代表的總體均值不相等

rvs3 = (stats.norm

.rvs(loc=8,scale=10,size=500) + stats.norm

.rvs(scale=0.2,size=500))

stats.ttest_rel(rvs1,rvs3)

ttest_relresult(statistic=-3.9995108708727924, pvalue=7.3082402191661285e-05)

python進行t檢驗

實現下圖中的檢驗 檢驗均值是否相等 當方差相等時 t檢驗 當方差不相等時 大樣本可以參考下圖 紅色字部分 小樣本不太清楚。成對樣本t檢驗 sample1 23.6,28.9,24.1,21.7,27.4,28.6,29.0,24.2,26.3,22.1 sample2 29.1,24.4,30.9,...

SPSS中,進行配對樣本T檢驗

特點 在配對樣本t檢驗中,強調被試一定要同質 同一樣本,不同變數環境 其目的就為了消除目的是額外變數的影響,更能反映自變數和因變數之間的關係。配對樣本t檢驗的過程,是對兩個同質的樣本分別接受兩種不同的處理或乙個樣本先後接受不同的處理,來判斷不同的處理是否有差別。這種檢驗的目的在於根據樣本資料對樣本來...

python利用似然比進行引數檢驗

在用sklearn進行邏輯回歸的時候,如果想要檢視變數的p值是否足夠小,那麼就只能自己計算p值。似然比是邏輯回歸引數檢驗的一種方法 假設我們的邏輯回歸有n個特徵,需要對其中的x1特徵對於的引數w1做引數檢驗 1 計算包含全部特徵的 概率似然估計l0 2 扣除x1特徵進行重新擬合邏輯回歸,計算新的邏輯...