當衡量兩個連續變量間的線性關系時,我們可以使用Pearson相關系數。那麼當我們面對的數據是兩個分類變量呢?沒錯,看過下面這張圖的應該還記得,我們可以用列聯表結合卡方檢驗來分析分類變量間的相關性。
一、列聯表
列聯表是一種常見的分類彙總表,它将兩個變量的不同水平分别放在行和列中,中間對應着每組的頻數。如下表:使用藥物A且治愈了的病人有1800名,使用藥物B且治愈了的病人有800名……
在pandas中,我們可以直接使用pd.crosstab(rows,columns,margins=True)來生成列聯表。其中margins用于設置是否限制彙總列和彙總行。
有些時候我們可能需要百分比數據,這時我們直接用每個單元格除以彙總列或彙總行的數據即可。
二、卡方檢驗
卡方檢驗的思想在于比較期望頻數和實際頻數的吻合程度,實際頻數就是上邊表格裡黃色區域的數字,而期望頻數則是指行列變量相互獨立的時候期望的頻數。我們下邊用一張圖來演示如何計算期望頻數。
在第三張圖中,每個單元格的期望頻率為對應的行總計與列總計的乘積,比如第一個單元格的期望頻率為66.67%*86.67%=57.78%。
事實上,我們也可以一步到位,用第一張圖中行總計2000與列總計2600相乘,然後除以全部樣本量3000,就可以得到1733,也就是第一個單元格的期望頻數。不過這裡為了方便理解,拆解成了三步。
接下來就是進行卡方檢驗了,卡方檢驗的零假設是期望頻數等于實際頻數(差異不顯著),備擇假設是期望頻數不等于實際頻數(差異顯著,具有統計學意義),即兩個變量相關。其計算公式為:
Obs代表每個單元格内的觀測頻數(Observation),Exp代表每個單元格内的期望頻數(Expection)。我們用上邊這個例子演示一下:
到這裡還沒結束,我們需要根據求得的值從卡方分布中找到對應的概率。
卡方分布
卡方統計量服從自由度為(r-1)(c-1)的卡方分布(r=row,代表行數,c=column,代表列數)。我們用一張圖來看一下:
其中k就是卡方分布的自由度。可以看到當自由度為1時,卡方分布是一個長尾型的分布。那麼我們現在來看一下剛才的問題,兩種藥品的治愈效果一樣嗎?
from scipy.stats import chi2_contingency import pandas as pd df = pd.DataFrame({ 'medical': ['A', 'A', 'B', 'B'], 'cured': [1, 0, 1, 0], 'count': [1800, 200, 800, 200] }) cross_tab = pd.pivot_table(data=df, values='count', index='medical', columns='cured', margins=True, aggfunc=np.sum) print(cross_tab) print('卡方={0}\nP值={1}'.format( *chi2_contingency(cross_tab)[:2]))
可以看到,p值小于0.05,可以認為兩個變量之間存在相關性。不過需要注意的是,卡方檢驗并不能得出兩個分類變量相關性的強弱,隻能展現出它們是否相關。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!