利用python進行17種統計假設檢驗

2021-03-06 沙克芬 SharkFin

請點擊閱讀原文,在語雀中查看 

https://www.yuque.com/alipayqgthu1irbf/sharkfin/enrzni

翻譯自

https://machinelearningmastery.com/statistical-hypothesis-tests-in-python-cheat-sheet/

應用機器學習中需要的17種統計假設檢驗的快速參考指南,並提供Python中的示例代碼。

雖然有數百種統計假設檢驗可以使用,但只有一小部分子集可能需要在機器學習項目中使用。

在這篇文章中,你將看到一個機器學習項目中最流行的統計假說檢驗的手冊,其中有使用Python API的例子。

每一個統計檢驗的表述方式都是一致的,包括。

檢驗的名稱

檢驗的內容。

檢驗的關鍵假設。

測試結果如何解釋。

使用測試的Python API。

注意,當涉及到數據的預期分布或樣本大小等假設時,如果違反了某個假設,某個測試的結果很可能會優雅地退化,而不是立即變得不可用。

一般來說,數據樣本需要具有領域的代表性,並且足夠大,以暴露其分布進行分析。

在某些情況下,可以對數據進行修正以滿足假設,例如通過去除離群值將近似正態分布修正為正態分布,或者當樣本具有不同的方差時,在統計測試中使用對自由度的修正,這是兩個例子。

最後,對於一個給定的關注點,如正態性,可能有多種檢驗方法。我們無法通過統計學得到問題的明確答案;相反,我們得到的是概率性的答案。因此,我們可以通過考慮問題的不同方式,對同一問題得出不同的答案。因此,我們對數據的一些問題可能需要進行多種不同的檢驗。

目錄

正態性檢驗

相關性檢驗

平穩性檢驗

參數統計假設檢驗

非參數統計假設檢驗

夏皮羅-威爾克檢驗

D'Agostino's K^2檢驗

安德森-達林檢驗

皮爾遜相關係數

斯皮爾曼秩相關

Kendall's Rank Correlation

卡方檢驗

Augmented Dickey-Fuller

Kwiatkowski-Phillips-Schmidt-Shin案

學生T檢驗

配對學生T檢驗

方差分析檢驗(ANOVA)

重複計量方差分析檢驗

Mann-Whitney U檢驗

Wilcoxon Signed-Rank檢驗

Kruskal-Wallis H檢驗

弗裡德曼檢驗

本教程分為5個部分,它們是:。

1. 正態性檢驗 Normality Tests

本節列出了可以用來檢查數據是否具有高斯分布的統計測試。

夏皮羅-威爾克測試 Shapiro-Wilk Test

Python代碼

 # Example of the Shapiro-Wilk Normality Test
 from scipy.stats import shapiro
 data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
 stat, p = shapiro(data)
 print('stat=%.3f, p=%.3f' % (stat, p))
 if p > 0.05:
  print('Probably Gaussian')
 else:
  print('Probably not Gaussian')

更多資料

D'Agostino's K^2檢驗 D』Agostino’s K^2 Test

Python Code

 # Example of the D'Agostino's K^2 Normality Test
 from scipy.stats import normaltest
 data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
 stat, p = normaltest(data)
 print('stat=%.3f, p=%.3f' % (stat, p))
 if p > 0.05:
  print('Probably Gaussian')
 else:
  print('Probably not Gaussian')

More Information

安德森-達林檢驗 Anderson-Darling Test

Python Code

 # Example of the Anderson-Darling Normality Test
 from scipy.stats import anderson
 data = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
 result = anderson(data)
 print('stat=%.3f' % (result.statistic))
 for i in range(len(result.critical_values)):
  sl, cv = result.significance_level[i], result.critical_values[i]
  if result.statistic < cv:
  print('Probably Gaussian at the %.1f%% level' % (sl))
  else:
  print('Probably not Gaussian at the %.1f%% level' % (sl))

More Information

2. 相關性檢驗 Correlation Tests

This section lists statistical tests that you can use to check if two samples are related.

皮爾遜相關係數 Pearson’s Correlation Coefficient

Python Code

 # Example of the Pearson's Correlation test
 from scipy.stats import pearsonr
 data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
 data2 = [0.353, 3.517, 0.125, -7.545, -0.555, -1.536, 3.350, -1.578, -3.537, -1.579]
 stat, p = pearsonr(data1, data2)
 print('stat=%.3f, p=%.3f' % (stat, p))
 if p > 0.05:
  print('Probably independent')
 else:
  print('Probably dependent')

More Information

斯皮爾曼秩相關 Spearman’s Rank Correlation

Python Code

 # Example of the Spearman's Rank Correlation Test
 from scipy.stats import spearmanr
 data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
 data2 = [0.353, 3.517, 0.125, -7.545, -0.555, -1.536, 3.350, -1.578, -3.537, -1.579]
 stat, p = spearmanr(data1, data2)
 print('stat=%.3f, p=%.3f' % (stat, p))
 if p > 0.05:
  print('Probably independent')
 else:
  print('Probably dependent')

More Information

Kendall’s Rank Correlation

Python Code

 # Example of the Kendall's Rank Correlation Test
 from scipy.stats import kendalltau
 data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
 data2 = [0.353, 3.517, 0.125, -7.545, -0.555, -1.536, 3.350, -1.578, -3.537, -1.579]
 stat, p = kendalltau(data1, data2)
 print('stat=%.3f, p=%.3f' % (stat, p))
 if p > 0.05:
  print('Probably independent')
 else:
  print('Probably dependent')

More Information

卡方檢驗 Chi-Squared Test

 解釋

H0:兩個樣本是獨立的。

H1:樣本之間有dependency。

Python Code

 # Example of the Chi-Squared Test
 from scipy.stats import chi2_contingency
 table = [[10, 20, 30],[6,  9,  17]]
 stat, p, dof, expected = chi2_contingency(table)
 print('stat=%.3f, p=%.3f' % (stat, p))
 if p > 0.05:
  print('Probably independent')
 else:
  print('Probably dependent')

More Information

A Gentle Introduction to the Chi-Squared Test for Machine Learning

scipy.stats.chi2_contingency

Chi-Squared test on Wikipedia

3. 平穩性檢驗 Stationary Tests

This section lists statistical tests that you can use to check if a time series is stationary or not.

Augmented Dickey-Fuller Unit Root Test

Python Code

 # Example of the Augmented Dickey-Fuller unit root test
 from statsmodels.tsa.stattools import adfuller
 data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 stat, p, lags, obs, crit, t = adfuller(data)
 print('stat=%.3f, p=%.3f' % (stat, p))
 if p > 0.05:
  print('Probably not Stationary')
 else:
  print('Probably Stationary')

More Information

How to Check if Time Series Data is Stationary with Python

statsmodels.tsa.stattools.adfuller API.

Augmented Dickey–Fuller test, Wikipedia.

Kwiatkowski-Phillips-Schmidt-Shin

檢驗一個時間序列是否是趨勢平穩的。

假設

解釋

H0:時間序列不是趨勢穩定的。

H1:時間序列是趨勢穩定的。

觀察中是時間上的有序。

Python Code

# Example of the Kwiatkowski-Phillips-Schmidt-Shin test
from statsmodels.tsa.stattools import kpss
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
stat, p, lags, crit = kpss(data)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
print('Probably not Stationary')
else:
print('Probably Stationary')

More Information

4. 參數統計假設檢驗 Parametric Statistical Hypothesis Tests

本節列出了您可以用來比較數據樣本的統計測試。

學生T檢驗 Student’s t-test

Python Code

# Example of the Student's t-test
from scipy.stats import ttest_ind
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = ttest_ind(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
print('Probably the same distribution')
else:
print('Probably different distributions')

More Information

配對學生T檢驗 Paired Student’s t-test

Python Code

# Example of the Paired Student's t-test
from scipy.stats import ttest_rel
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = ttest_rel(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
print('Probably the same distribution')
else:
print('Probably different distributions')

More Information

方差分析檢驗(ANOVA) Analysis of Variance Test (ANOVA)

檢驗兩個或多個獨立樣本的均值是否有顯著差異。

假設

解釋

Python Code

# Example of the Analysis of Variance Test
from scipy.stats import f_oneway
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
data3 = [-0.208, 0.696, 0.928, -1.148, -0.213, 0.229, 0.137, 0.269, -0.870, -1.204]
stat, p = f_oneway(data1, data2, data3)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
print('Probably the same distribution')
else:
print('Probably different distributions')

More Information

重複計量方差分析檢驗 Repeated Measures ANOVA Test

檢驗兩個或多個配對樣本的均值是否有顯著差異。

假設

解釋

H0:樣本的均值相等。

H1: 一個或多個樣本的均值不相等。

目前無法在python中實現

More Information

5. 非參數統計假設檢驗 Nonparametric Statistical Hypothesis TestsMann-Whitney U Test

Python Code

# Example of the Mann-Whitney U Test
from scipy.stats import mannwhitneyu
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = mannwhitneyu(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
print('Probably the same distribution')
else:
print('Probably different distributions')

More Information

Wilcoxon Signed-Rank Test

Python Code

# Example of the Wilcoxon Signed-Rank Test
from scipy.stats import wilcoxon
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = wilcoxon(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
print('Probably the same distribution')
else:
print('Probably different distributions')

More Information

Kruskal-Wallis H Test

Python Code

# Example of the Kruskal-Wallis H Test
from scipy.stats import kruskal
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
stat, p = kruskal(data1, data2)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
print('Probably the same distribution')
else:
print('Probably different distributions')

More Information

Friedman Test

Python Code

# Example of the Friedman Test
from scipy.stats import friedmanchisquare
data1 = [0.873, 2.817, 0.121, -0.945, -0.055, -1.436, 0.360, -1.478, -1.637, -1.869]
data2 = [1.142, -0.432, -0.938, -0.729, -0.846, -0.157, 0.500, 1.183, -1.075, -0.169]
data3 = [-0.208, 0.696, 0.928, -1.148, -0.213, 0.229, 0.137, 0.269, -0.870, -1.204]
stat, p = friedmanchisquare(data1, data2, data3)
print('stat=%.3f, p=%.3f' % (stat, p))
if p > 0.05:
print('Probably the same distribution')
else:
print('Probably different distributions')

More Information

How to Calculate Nonparametric Statistical Hypothesis Tests in Python

scipy.stats.friedmanchisquare

Friedman test on Wikipedia

更多資料

如果你想深入了解這個話題,本節提供更多資料。

A Gentle Introduction to Normality Tests in Python

How to Use Correlation to Understand the Relationship Between Variables

How to Use Parametric Statistical Significance Tests in Python

A Gentle Introduction to Statistical Hypothesis Tests

總結

在本教程中,你發現了機器學習項目中可能需要用到的關鍵統計假設檢驗。

具體來說,您學到了

相關焦點

  • 使用Python進行機器學習的假設檢驗(附代碼)
    我把所有這些概念放在一起,並使用python進行示例。在我尋求更廣泛的事情之前要考慮一些問題 ——什麼是假設檢驗?我們為什麼用它?什麼是假設的基本條件?什麼是假設檢驗的重要參數?讓我們一個個地開始吧!假設檢驗是一種統計方法,用於使用實驗數據進行統計決策。假設檢驗基本上是我們對人口參數做出的假設。
  • 獨家|使用Python進行機器學習的假設檢驗(附連結&代碼)
    也許所有機器學習的初學者,或者中級水平的學生,或者統計專業的學生,都聽說過這個術語,假設檢驗。我將簡要介紹一下這個當我學習時給我帶來了麻煩的主題。我把所有這些概念放在一起,並使用python進行示例。什麼是假設檢驗?我們為什麼用它?什麼是假設的基本條件?
  • 常用統計檢驗的Python實現
    和我一起,成為更好的自己前言今天給大家整理了一些使用python進行常用統計檢驗的命令與說明,請注意,本文僅介紹如何使用python進行不同的統計檢驗,對於文中涉及的假設檢驗、統計量、正態性檢驗是檢驗數據是否符合正態分布,也是很多統計建模的必要步驟,在Python中實現正態性檢驗可以使用W檢驗(SHAPIRO-WILK TEST)檢驗原假設:樣本服從正態分布Python
  • 常用統計檢驗的Python實現和結果解釋
    前言今天給大家整理了一些使用python進行常用統計檢驗的命令與說明,請注意,本文僅介紹如何使用python進行不同的統計檢驗,對於文中涉及的假設檢驗、統計量、p值、正態性檢驗是檢驗數據是否符合正態分布,也是很多統計建模的必要步驟,在Python中實現正態性檢驗可以使用W檢驗(SHAPIRO-WILK TEST)檢驗原假設:樣本服從正態分布Python命令 stat,
  • R-統計描述與假設檢驗
    此外,對於醫學中常用的幾種假設檢驗,我們將相關的R語言代碼進行了整理,以供快速查看和使用。:統計描述常用各種統計圖形直觀地呈現數據特徵,對於R語言繪製統計圖形,可參考公眾號之前的文章:R-可視化基礎專欄(2) —— 條形圖(一)R-可視化基礎專欄(3)—— 條形圖(二)R-可視化基礎(5)——散點圖、折線圖R-可視化基礎(6)——箱圖&小提琴圖二、假設檢驗
  • 統計檢驗假設的P值與檢驗水準α
    本文給大家普及一下檢驗假設中常用到的P值、檢驗水準α以及如何合理解釋。p值是在原假設(零假設)H0正確的前提下,出現觀察結果以及比之觀察結果更極端情形的概率,P值由相應統計模型計算而來,其計算根本不涉及備擇假設。
  • 使用 R 與 python 進行 t 檢驗
    關於t 檢驗,有的資料上特意強調主要用於樣本含量較小(n<30)這一點,實際上 t 檢驗並非特意需要降低樣本量,來自於我多年前本科時候的印象裡,樣本量小是不得以的選擇,好像是啤酒釀造的時候的檢驗,樣本量低,並非是特意控制到較低的數量,我查了一下網上的資料,並沒有找到他起源的具體說法,但我已經沒有讀數時的生物統計課本了,因此只好做罷,各位有來源的可以告知。
  • python如何進行匯總統計?
    前言在數據分析中,匯總統計是使用頻率較高且應用範圍最廣的一種能力。計算統計的過程中,可以按照不同維度進行,比如可以按列計算,也可以按行計算。並且,在進行計算統計時,缺失值的處理又是極為重要且關鍵的。接下來,小編帶領大家一起,學習如何使用python進行匯總統計,以及期間如何處理缺失值。基礎Pandas對象擁有一組常用的數學和統計方法。
  • 你真的了解參數估計和假設檢驗嗎?
    它是在對樣本數據進行描述的基礎上,對統計總體的未知數量特徵做出以概率形式表述的推斷。2)為什麼要進行推斷統計?在實際研究中,總體數據的獲取往往是比較困難的,總體參數一般也是未知的。因此,我們就需要利用總體的某個樣本,通過樣本統計量去估計總體參數。基於這個需求,我們就需要學習推斷統計。通過上述敘述,我們給推斷統計做一個說明。
  • 顯著性檢驗、假設檢驗和原假設顯著性檢驗
    因而,每一批產品,企業要進行質量檢驗,看看產品是否合格。檢驗的原假設就是H0:d = 1cm,而備選假設就是直徑超過0.01的範圍了。在這裡效應非常清晰,為0.01cm,生產過程中,螺母直徑可能符合要求,也可能不符合要求(即有時H0為真,有時H1為真)。
  • Python實現常用的假設檢驗 !
    這篇文章,教大家用Python實現常用的假設檢驗!服從什麼分布,就用什麼區間估計方式,也就就用什麼檢驗!
  • 統計:如何用Excel完成雙樣本假設檢驗
    這種檢驗可以確認不同供應商的績效、不同地點的工廠績效、新舊兩種不同工作方法的差別,或者不同獎勵和嘉獎機制之間的區別。和單樣本檢驗類似,計算母體參數的區間的雙樣本檢驗,有下列幾種形式。假設檢驗的程序,與我們剛剛討論過的計算檢驗統計量和對比臨界值的程序相類似。不過雙樣本檢驗的檢驗統計量比單樣本檢驗更為複雜,我們不能陷入那些數學細節之中。
  • 讓你成為統計大師的假設檢驗指南
    沒有統計學背景的經理可能看到這份報告可能會直接交給高級管理人員,查閱後進行封存,而有統計學背景的經理則可能會告知在沒有一個解釋的情況下不要隨便的得出結論。所以在今天的文章中,將解釋假設檢驗和讀取統計意義,以區分數據中的信號和噪音–而這也是擁有統計學背景的經理想要明白的!
  • 理論與實務學習:專業假設檢驗
    一、假設檢驗的涵義及目的  假設檢驗是抽樣推斷的一項重要內容,是利用樣本的實際資料來檢驗事先對總體某些數量特徵所作的假設是否可信的一種統計方法。因此,凡屬於研究總體的數量變化是否按照我們預期的規律性要求的問題都屬於統計假設檢驗的討論範圍。
  • 假設檢驗、Z檢驗與T檢驗
    概述假設檢驗是統計學、分析學和數據科學中的一個關鍵概念了解假設檢驗的工作原理、Z檢驗和t檢驗之間的區別以及其他統計概念介紹冠狀病毒大流行使我們大家都成了一個統計學家。我們不斷地核對數字,對大流行將如何發展做出自己的假設,並對何時出現「高峰」提出假設。
  • python時間序列平穩性檢驗專題及常見問題 - CSDN
    在做時間序列分析時,我們經常要對時間序列進行平穩性檢驗,而我們常用的軟體是SPSS或SAS,但實際上python也可以用來做平穩性檢驗,而且效果也非常好,今天筆者就講解一下如何用python來做時間序列的平穩性檢驗。首先我們還是來簡單介紹一下平穩性檢驗的相關概念。圖1.
  • 統計學中的假設檢驗
    作者 | CDA數據分析師假設(hypothesis),又稱統計假設,是對總體參數的具體數值所作的陳述。假設檢驗(hypothesis test) 是先對總體參數提出某種假設,然後利用樣本信息判斷假設是否成立的過程。
  • 假設檢驗的前世今生
    現行的假設檢驗,叫原假設顯著性檢驗( Null Hypothesis Significance Testing,NHST)。其基本思路和框架在現行的統計教材中論述較多,在此僅簡要概括:建立假設,確定檢驗水平。
  • 使用非參數統計檢驗進行分析的指南
    問題是沒有人告訴你如何進行像假設檢驗這樣的分析。統計檢驗用於制定決策。為了使用中位數進行分析,我們需要使用非參數檢驗。非參數測試是分布獨立的檢驗,而參數檢驗假設數據是正態分布的。說參數檢驗比非參數檢驗更加的臭名昭著是沒有錯的,但是前者沒有考慮中位數,而後者則使用中位數來進行分析。接下來我們就進入非參數檢驗的內容。
  • 統計計量丨常見統計檢驗的本質都是線性模型(或:如何教統計學) Python版(上)
    然而很不幸的是,統計入門課程通常把各種檢驗分開教學,給學生和⽼師們增加了很多不必要的麻煩。在學習每⼀個檢驗的基本假設時,如果不是從線性模型切入,而是每個檢驗都死記硬背,這種不必要的複雜性會成倍增加。因此,我認為先教線性模型,然後對線性模型的⼀些特殊形式進行改名是⼀種優秀的教學策略,這有助於更深刻地理解假設檢驗。線性模型在頻率學派、貝葉斯學派和基於置換的U檢驗的統計推斷之間是相通的,對初學者而⾔,從模型開始比從 P 值、第 I 類錯誤、貝葉斯因⼦或其它地方更為友好。