1. 類別變數*類別變數的檢定 2.個別類別細項的檢定。
卡方檢定、Fisher exact test
Published in
4 min readJan 17, 2020
在前一個文章中我們有提到類別變數的直方圖(countplot),如下:
用肉眼看,我們"大概"可以看出兩個族群是有所差異的。請問了公司的資料科學家(統計背景的)有沒有什麼比較"客觀"的數據可以說明這件事情,後來她介紹了卡方檢定給我。簡單來說:由於類別資料僅能count出頻率,不像連續資料有清楚的"數字"能夠計算平均數…等。因此,卡方檢定是透過類別*類別的出現頻率(O)及預期的出現頻率(E)來計算兩組資料是否有顯著差異。
詳細的介紹可以參考下面文章
我們直接來看實作的部分:
假設Ho : 手機族群與非手機族群在品項選擇上沒有差異
假設H1 : 手機族群與非手機族群在品項選擇上有差異
首先把資料用樞紐分析橋到類似下面的格式:
import numpy as np
from scipy.stats import chi2_contingency
result = chi2_contingency(df_chi.iloc[0:,2:].values)
結果如下:
0<0.05 拒絕Ho,接受H1假說: 手機族群與非手機族群在品項選擇上有差異
到這邊我們已經往前邁進了一大步!但下一個問題是: 兩個族群在品項選擇上有所差異,那是"哪些"品項有所差異呢?
這個時候我們就可以藉由Fish exact test來進一步做個別的檢定測試:
首先拿保健來舉例:
手機族群共有 28,248,選擇保健有380人,沒有選擇保健有 27,868人。
非手機族群共有 9,353,選擇保健有153人,沒有選擇保健有 9,353人。
實作如下:
import scipy.stats as stats
oddsratio, pvalue = stats.fisher_exact([[380,27868], [153,9353]])
print(pvalue)
0.062 > 0.05 不拒絕Ho,接受Ho假說: 手機族群與非手機族群在"保健"選擇上沒有差異。
但因為Fisher exact test要照著上述步驟單一品項去檢定,有點麻煩,所以我最後就直接寫了zip迴圈來解決這件事情囉!