常用統計檢驗的Python實現


前言

今天給大家整理了一些使用python進行常用統計檢驗的命令與說明,請注意,本文僅介紹如何使用python進行不同的統計檢驗,對於文中涉及的假設檢驗、統計量p值非參數檢驗iid等統計學相關的專業名詞以及檢驗背后的統計學意義不做講解,因此讀者應該具有一定統計學基礎

 

正態性檢驗

正態性檢驗是檢驗數據是否符合正態分布,也是很多統計建模的必要步驟,在Python中實現正態性檢驗可以使用W檢驗(SHAPIRO-WILK TEST)

檢驗原假設:樣本服從正態分布

Python命令 :stat, p = shapiro(data)

結果解釋:當p值小於某個顯著性水平α(如0.05)時,則認為樣本不是來自正態分布的總體,否則承認樣本來自正態分布的總體。

##########示例代碼
from scipy.stats import shapiro
data = [0.86, 0.78, 0.83, 0.84, 0.77, 0.84, 0.81, 0.84, 0.81, 0.81, 0.80, 0.81,
       0.79, 0.74, 0.82, 0.78, 0.82, 0.78, 0.81, 0.80, 0.81, 0.74, 0.87, 0.78]
stat, p = shapiro(data)
print("stat為:%f" %stat,"p值為:%f" %p)
#stat為:0.966175 p值為:0.574134

 

相關性檢驗:皮爾遜相關系數

皮爾遜相關系數(Pearson Correlation Coefficient)用於衡量兩個變量之間的線性相關相關關系,相關系數的取值在-1與1之間,大於0為正相關,小於0為負相關。

基本假定

  • 每個樣本中的觀察是獨立同分布的
  • 每個樣本的觀察都是正態分布的
  • 每個樣本的觀察具有相同的方差
  • 所有變量都是連續型變量

檢驗原假設:兩個變量不相關

Python命令:corr,p = pearsonr(x,y)

結果解釋:當p值小於某個顯著性水平α(比如0.05)時,則拒絕原假設,認為兩個變量是相關的。否則認為是不相關的。

注意:這里的相關僅為統計學意義上的相關性,並不能理解為實際因果關系!!

#########示例代碼
from scipy.stats import pearsonr
data1 = [23,20,18,29,43,35,32,40,29,26,24,26]
data2 = [1000,1000,500,500,500,100,100,100,100,100,100,100]
corr,p = pearsonr(data1,data2)
print("corr為:%f" %corr,"p值為:%f" %p)
#corr為:-0.392250 p值為:0.207253

 

相關性檢驗:斯皮爾曼相關系數

斯皮爾曼相關系數(SPEARMAN’S RANK CORRELATION)又稱為斯皮爾曼等級相關系數。是一種非參數方法,衡量兩個變量的依賴性的非參數指標。

基本假定:

  • 每個樣本中的觀察是獨立同分布的
  • 每個樣本的觀察具有相同的方差
  • 所有變量可以是連續型變量或可排序的分類變量

檢驗原假設:兩個變量不相關

Python命令:corr,p =spearmanr(x,y)

結果解釋:當p值小於某個顯著性水平α(比如0.05)時,則則拒絕原假設,認為兩個變量是相關的。否則認為是不相關的。

#######示例代碼
from scipy.stats import spearmanr
data1 = [23,20,18,29,43,35,32,40,29,26,24,26]
data2 = [1000,1000,500,500,500,100,100,100,100,100,100,100]
corr, p= spearmanr(data1, data2)
print("corr為:%f" %corr,"p值為:%f" %p)
#corr為:-0.435153 p值為:0.157414

 

卡方檢驗

卡方檢驗是一種用途很廣的計數資料的假設檢驗方法。它屬於非參數檢驗的范疇,卡方檢驗就是統計樣本的實際觀測值與理論推斷值之間的偏離程度,實際觀測值與理論推斷值之間的偏離程度就決定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若兩個值完全相等時,卡方值就為0,表明理論值完全符合。

注意

  • 卡方檢驗僅針對分類變量
  • 用於計算列聯表的觀察是獨立的。
  • 列聯表的每個單元格中有25個或更多個實例。

檢驗原假設:觀察頻數與期望頻數無顯著差異

Python命令:chi2_contingency(data)

結果解釋:當p值小於某個顯著性水平α(比如0.05)時,則拒絕原假設,認為兩個樣本有顯著差異。

########示例代碼
from scipy.stats import chi2_contingency
import numpy as np
kf_data = np.array([[20,21], [22,24]])
kf = chi2_contingency(kf_data)
print('chisq-statistic=%.4f, p-value=%.4f, df=%i expected_frep=%s'%kf)
chisq-statistic=0.0159, p-value=0.8997, df=1 expected_frep=[[19.79310345 21.20689655]
 [22.20689655 23.79310345]]

 

T檢驗:單樣本T檢驗

單樣本t檢驗是樣本均值與總體均值的比較問題。其中總體服從正態分布,從正態總體中抽樣得到n個個體組成抽樣樣本,計算抽樣樣本均值和標准差,判斷總體均值與抽樣樣本均值是否相同。

基本假定:

  • 樣本數據服從正態或近似正態分布
  • 每個樣本中的觀察是獨立同分布的
  • T檢驗屬於參數檢驗,用於檢驗定量數據,若數據均為定類數據則應使用卡方檢驗

檢驗原假設:樣本均值無差異(μ=μ0)

Python命令:.ttest_1samp(data,1)

結果解釋:當p值小於某個顯著性水平α(比如0.05)時,則認為樣本均值存在顯著差異,具體的分析要看所選擇的是雙邊假設還是單邊假設(又分小於和大於)注意ttest_1samp進行雙側檢驗。

#示例代碼,檢驗樣本均值與1是否有差異
from scipy import stats
data = [23,20,18,29,43,35,32,40,29,26,24,26]
stats.ttest_1samp(data,1)
#Ttest_1sampResult(statistic=-29.095366280269644, pvalue=1.2015599001111872e-19)

 

T檢驗:兩樣本T檢驗

兩樣本t檢驗是比較兩個樣本所代表的兩個總體均值是否存在顯著差異。除了要求樣本來自正態分布,還要求兩個樣本的總體方差相等也就是“方差齊性”。

檢驗原假設:樣本均值無差異(μ=μ0)

Python命令:stats.ttest_ind(data1,data2)

當不確定兩總體方差是否相等時,應先利用levene檢驗檢驗兩總體是否具有方差齊性stats.levene(data1,data2)如果返回結果的p值遠大於0.05,那么我們認為兩總體具有方差齊性。如果兩總體不具有方差齊性,需要加上參數equal_val並設定為False,如下。

stats.ttest_ind(data1,data2,equal_var=False)

結果解釋:當p值小於某個顯著性水平α(比如0.05)時,則認為樣本均值存在顯著差異,具體的分析要看所選擇的是雙邊假設還是單邊假設(又分小於和大於)注意stats.ttest_ind進行雙側檢驗。

#示例代碼,檢驗兩組樣本均值是否相等
from scipy import stats
data1 = [23,20,18,29,43,35,32,40,29,26,24,26]
data2 = [1000,1000,500,500,500,100,100,100,100,100,100,100]
stats.ttest_ind(data1,data2)
#Ttest_indResult(statistic=-3.1758496679296524, pvalue=0.004373771039397662)

 

T檢驗:配對T檢驗

配對樣本均數T檢驗簡稱配對T檢驗(paired t test), 又稱非獨立兩樣本均數t檢驗,適用於配對設計計量資料均數的比較,其比較目的是檢驗兩相關樣本均數所代表的未知總體均數是否有差別。與獨立樣本T檢驗相比,配對樣本T檢驗要求樣本是配對的。兩個樣本的樣本量要相同;樣本先后的順序是一一對應的。

基本假定:

  • 每個樣本中的觀察是獨立同分布的
  • 每個樣本的觀察都是正態分布的
  • 每個樣本中的觀察具有相同的方差
  • 每個樣本的觀察結果是成對的

檢驗原假設:樣本均值無差異(μ=μ0)

Python命令:stats.ttest_rel(data1,data2)

結果解釋:當p值小於某個顯著性水平α(比如0.05)時,則認為樣本均值存在顯著差異,具體的分析要看所選擇的是雙邊假設還是單邊假設(又分小於和大於)注意stats.ttest_rel進行雙側檢驗。

####示例代碼,配對樣本T檢驗
from scipy import stats
data1 = [23,20,18,29,43,35,32,40,29,26,24,26]
data2 = [1000,1000,500,500,500,100,100,100,100,100,100,100]
stats.ttest_rel(data1,data2)
#Ttest_relResult(statistic=-3.149034903041314, pvalue=0.009258094005021552)

“以上就是早起的統計工具箱第一期內容,有關如何使用Python進行方差分析以及一些非參數的檢驗實現方法我們下期再聊,記得在看哦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM