利用python庫stats進行t檢驗

​ t檢驗一般分爲三種,分別是單樣本t檢驗、雙樣本t檢驗和配對樣本t檢驗。本文基於python的scipy.stats函數對每種t檢驗進行了介紹和實驗。python

1、t檢驗介紹

不管哪一種t檢驗,都有如下的基本前提條件:函數

  1. 樣本數據符合正態分佈
  2. 各個樣本之間是獨立的

步驟:3d

  1. 提出原假設和備擇假設
  2. 構造t統計量
  3. 計算t統計量
  4. 對於獲得的p值進行分析,p大於0.05則接受原假設,反之接受備擇假設

2、 單樣本t檢驗

應用場景:對某個樣本的均值進行檢驗,比較是否和整體的均值(本身定)是否存在差別。code

原假設和備擇假設orm

9wmgvuncay

例如,我獲取了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也是一個正數。

3、獨立樣本t檢驗(雙樣本t檢驗)

應用場景:是針對兩組不相關樣本(各樣本量能夠相等也能夠不相等),檢驗它們在均值之間的差別。對於該檢驗方法而言,咱們首先要肯定兩個整體的方差是否相等,若是不等,先利用levene檢驗,檢驗兩整體是否具備方差齊性。

原假設和備擇假設

wumri45ar4

例如,我想檢驗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公司的銷售額均值存在顯著差別

4、配對t檢驗

應用場景:是針對同一組樣本在不一樣場景下均值之間的差別。檢驗的是兩配對樣本差值的均值是否等於0,若是等於0,則認爲配對樣本之間的均值沒有差別,不然存在差別。

原假設和備擇假設

vldz9mvgtl

例如,咱們有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,認爲兩年的銷售額存在顯著差別。

相關文章
相關標籤/搜索