首頁(yè)技術(shù)文章正文

卡方檢驗(yàn)是什么?有什么用?

更新時(shí)間:2020-08-07 來(lái)源:黑馬程序員 瀏覽量:

學(xué)習(xí)目標(biāo)

掌握卡方檢驗(yàn)的原理和實(shí)現(xiàn)

卡方檢驗(yàn)用來(lái)分析兩個(gè)名義變量之間是否顯著相關(guān)。

學(xué)了這么多連續(xù)變量的統(tǒng)計(jì)分析,那么對(duì)于計(jì)數(shù)資料可咋整。小伙伴會(huì)問了:如果我想看不同患者人群的術(shù)后復(fù)發(fā)率有沒有差異,怎么辦?這時(shí)候就需要?dú)g迎我們的統(tǒng)計(jì)小助手——卡方檢驗(yàn)閃亮登場(chǎng)啦!

卡方檢驗(yàn)可是一位重量級(jí)選手,凡是涉及到計(jì)數(shù)資料分布的比較都需要他的幫忙。

用藥物A治療急性心肌梗死患者198例,24小時(shí)內(nèi)死亡11例,病死率為5.56%,另42例治療時(shí)采用藥物B,24小時(shí)內(nèi)死亡6例,病死率為14.29%,提問:兩組病死率有無(wú)差別?

表1. 兩種藥物急性心肌梗塞患者治療后24小時(shí)內(nèi)死亡情況。

1596784416853_卡方檢驗(yàn)01.jpg


卡方檢驗(yàn)的目的:確定樣本對(duì)象落入各類別的比例是否與隨機(jī)期望比例相等。

1.卡方值計(jì)算

1596784433042_卡方檢驗(yàn)02.jpg


兩個(gè)概念

·觀測(cè)頻數(shù)

·預(yù)期頻數(shù)

計(jì)算各行和各列的和:

1596784458628_卡方檢驗(yàn)03.jpg


計(jì)算每個(gè)格子在當(dāng)前行中的預(yù)期頻數(shù)

1596784478385_卡方檢驗(yàn)04.jpg


列出每個(gè)格子的觀測(cè)頻數(shù)和預(yù)期頻數(shù)

1596784502663_卡方檢驗(yàn)05.jpg


卡方值的計(jì)算公式:

1596784536985_卡方檢驗(yàn)06.jpg


計(jì)算每個(gè)格子的值:

1596784556800_卡方檢驗(yàn)07.jpg


最終 $$\chi^2$$=0.19+4.17+10.06+0.19+4.17+4.11=22.89

自由度$df=(R-1)(C-1)=(2-1)(3-1)=2$

結(jié)論

1596784596034_卡方檢驗(yàn)08.jpg


2.代碼實(shí)現(xiàn)

手動(dòng)代碼實(shí)現(xiàn):

·導(dǎo)入數(shù)據(jù)

import pandas as pd
data=pd.read_csv('data/chi2.csv')
data.head()

1596784613996_卡方檢驗(yàn)09.jpg


·統(tǒng)計(jì)頻次(交叉表統(tǒng)計(jì))

#統(tǒng)計(jì)頻次
table=pd.crosstab(data['sex'],data['major'])
table

1596784627537_卡方檢驗(yàn)10.jpg


·計(jì)算預(yù)期頻次

#計(jì)算預(yù)期頻次
x=o.values
col=np.sum(x,axis=1,keepdims=True)#行的和
row=np.sum(x,axis=0,keepdims=True)#列的和
total=np.sum(x)#總和
col,row,total

1596784642528_卡方檢驗(yàn)11.jpg

e=col*row/total#計(jì)算預(yù)期頻次
e


·計(jì)算卡方值

#計(jì)算卡方值
o_miuns_e=o.values-e #o-e
chi2=np.sum(np.square(o_miuns_e)/e)
chi2


·計(jì)算p值

#計(jì)算p值
df=(o.shape[0]-1)*(o.shape[1]-1)#自由度
p=1-ss.chi2.cdf(chi2,df)
p#7.074778948346072e-06  拒絕原假設(shè)   專業(yè)選擇和性別之間相關(guān)


·scipy實(shí)現(xiàn):

Api:scipy.stats.chi2_contingency(observed):


·參數(shù):

observed:觀測(cè)的實(shí)際頻次 通常為$$R\times C$$的表格

·返回值:

 chi2:卡方值

 p:p值

 dof:自由度

 expected:預(yù)期頻次

代碼實(shí)現(xiàn)

·加載數(shù)據(jù)

import pandas as pd
import scipy.stats as ss
data=pd.read_csv('data/chi2.csv')
data.head()


·統(tǒng)計(jì)觀測(cè)頻次

#統(tǒng)計(jì)頻次
o=pd.crosstab(data['sex'],data['major'])
o

·卡方檢驗(yàn)

chi2,p,dof,e=ss.chi2_contingency(o)
chi2,p,dof,e

(23.71794871794872, 7.0747789483371884e-06, 2, array([[32.5, 30. , 37.5],[32.5, 30. , 37.5]]))

3.小結(jié)

·卡方檢驗(yàn):用來(lái)分析兩個(gè)名義變量之間是否顯著相關(guān)

·卡方值計(jì)算:

觀測(cè)頻次O

預(yù)期頻次E

自由度:$$(R-1)\times(C-1)$$

api:scipy.stats.chi2_contingency(observed)


猜你喜歡:

常用的抽樣方法介紹

Paginator進(jìn)行大數(shù)據(jù)集分頁(yè):如何提升性能?

Python培訓(xùn)課程

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!