t檢驗一般分爲三種,分別是單樣本t檢驗、雙樣本t檢驗和配對樣本t檢驗。本文基於python的scipy.stats函數對每種t檢驗進行了介紹和實驗。python
不管哪一種t檢驗,都有如下的基本前提條件:函數
步驟:3d
應用場景:對某個樣本的均值進行檢驗,比較是否和整體的均值(本身定)是否存在差別。code
原假設和備擇假設:orm
例如,我獲取了50箇中國人的身高(隨機生成均值爲1.5m的50個數據),想比較當前樣本的平均身高和中國人的平均身高(1.7m)是否存在差別。按道理來講應該是存在差別的,由於一個是1.5,一個是1.7。blog
實現:使用ttest_1samp函數實現,第一個參數爲樣本數據,第二個參數爲整體均值。代碼以下:ip
from scipy.stats import ttest_1samp from scipy import stats rvs = stats.norm.rvs(loc=1.5, scale=1, size=(50)) #生成均值爲1.5,標準差爲1的樣本 t, p = ttest_1samp(rvs, 1.7) #進行單樣本t檢驗
最終獲得:ci
out:t = -0.29277920321046647 p = 0.7709272063776454
p值大於0.05,說明咱們不能拒絕原假設(即認爲樣本均值和整體均值沒有顯著差別),說明樣本的身高均值能夠認爲是1.7m。之因此獲得這樣的結果可能因爲咱們的樣本數目太少,還有就是生成的數據1.5和1.7過於的接近。因此咱們再進行一組實驗來講明,將隨機數的均值改成2.5。test
rvs = stats.norm.rvs(loc=2.5, scale=1, size=(50)) #生成均值爲1.5,標準差爲1的樣本 t, p = ttest_1samp(rvs, 1.7) #進行單樣本t檢驗,返回對應的t值和p值
獲得:import
out:t = 5.333243665065403 p = 2.4443516254546488e-06
此時p小於0.05,咱們能夠拒絕原假設(即認爲樣本均值和整體均值有顯著差別),說明樣自己高的均值不能夠認爲是1.7m。並且由於2.5是大於1.7的,最終獲得的t也是一個正數。
應用場景:是針對兩組不相關樣本(各樣本量能夠相等也能夠不相等),檢驗它們在均值之間的差別。對於該檢驗方法而言,咱們首先要肯定兩個整體的方差是否相等,若是不等,先利用levene檢驗,檢驗兩整體是否具備方差齊性。
原假設和備擇假設:
例如,我想檢驗A公司銷售額的均值和B公司銷售額的均值是否存在差別。
實現:使用stats.levene檢驗方差是否相等,再使用stats.ttest_ind進行獨立樣本t檢驗,代碼以下:
A = stats.norm.rvs(loc=1, scale=1, size=(100)) #生成A公司的銷售額 B = stats.norm.rvs(loc=3, scale=1, size=(100)) #生成B公司的銷售額 stats.levene(A, B) #進行levene檢驗
out:LeveneResult(statistic=0.8054648213132949, pvalue=0.37055445629183437)
獲得的p值大於0.05,說明知足方差相等。使用ttest_ind函數進行獨立樣本t檢驗,函數的最後一個參數爲判斷兩個樣本的方差是否相同,若是不一樣,設爲False進行獨立樣本t檢驗。
stats.ttest_ind(A,B,equal_var=True) #進行獨立樣本t檢驗
out:Ttest_indResult(statistic=-15.25297417258199, pvalue=2.993305057567317e-35)
檢驗結果顯示p遠小於0.05,咱們拒絕原假設,即認爲A公司和B公司的銷售額均值存在顯著差別
應用場景:是針對同一組樣本在不一樣場景下均值之間的差別。檢驗的是兩配對樣本差值的均值是否等於0,若是等於0,則認爲配對樣本之間的均值沒有差別,不然存在差別。
原假設和備擇假設:
例如,咱們有A公司今年的銷售額以及去年的銷售額,來判斷今年和去年的銷售額均值之間是否有差別。與獨立樣本t檢驗相比,配對樣本T檢驗要求樣本是配對的,兩個樣本的樣本量要相同。
實現:能夠選擇單樣本t檢驗的ttest_1samp函數(兩組樣本的差別爲輸入),也能夠直接選擇實現配對樣本t檢驗的ttest_rel函數(兩組樣本做爲輸入)。代碼以下:
A0 = stats.norm.rvs(loc=1, scale=1, size=(100)) #生成去年的銷售額 A1 = stats.norm.rvs(loc=1.5, scale=1, size=(100)) #生成今年的銷售額 # 計算兩年銷售額之間的差值 diff = A0-A1 # 使用ttest_1samp函數計算配對樣本的t統計量 stats.ttest_1samp(diff) out: Ttest_1sampResult(statistic=13.983206457471795, pvalue=1.1154473504425075e-14) # 使用ttest_rel函數計算配對樣本的t統計量 stats.ttest_rel(A0,A1) out: Ttest_relResult(statistic=-4.731625986009621, pvalue=7.412846164679422e-06)
可見,用哪一個函數最終獲得的t和p值都是相同的。對於這個問題,p值小於0.05,認爲兩年的銷售額存在顯著差別。