更新时间:2020年08月07日15时24分 来源:传智播客 浏览次数:
学习目标
掌握卡方检验的原理和实现
卡方检验用来分析两个名义变量之间是否显著相关。
学了这么多连续变量的统计分析,那么对于计数资料可咋整。小伙伴会问了:如果我想看不同患者人群的术后复发率有没有差异,怎么办?这时候就需要欢迎我们的统计小助手——卡方检验闪亮登场啦!
卡方检验可是一位重量级选手,凡是涉及到计数资料分布的比较都需要他的帮忙。
用药物A治疗急性心肌梗死患者198例,24小时内死亡11例,病死率为5.56%,另42例治疗时采用药物B,24小时内死亡6例,病死率为14.29%,提问:两组病死率有无差别?
表1. 两种药物急性心肌梗塞患者治疗后24小时内死亡情况。
卡方检验的目的:确定样本对象落入各类别的比例是否与随机期望比例相等。
1.卡方值计算
两个概念
·观测频数
·预期频数
计算各行和各列的和:
计算每个格子在当前行中的预期频数
列出每个格子的观测频数和预期频数
卡方值的计算公式:
计算每个格子的值:
最终 $$\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$
结论
2.代码实现
手动代码实现:
·导入数据
import pandas as pd
data=pd.read_csv('data/chi2.csv')
data.head()
·统计频次(交叉表统计)
#统计频次
table=pd.crosstab(data['sex'],data['major'])
table
·计算预期频次
#计算预期频次
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
e=col*row/total#计算预期频次
e
·计算卡方值
#计算卡方值
o_miuns_e=o.values-e #o-e
chi2=np.sum(np.square(o_miuns_e)/e)
chi2
·计算p值
#计算p值
df=(o.shape[0]-1)*(o.shape[1]-1)#自由度
p=1-ss.chi2.cdf(chi2,df)
p#7.074778948346072e-06 拒绝原假设 专业选择和性别之间相关
·scipy实现:
Api:scipy.stats.chi2_contingency(observed):
·参数:
observed:观测的实际频次 通常为$$R\times C$$的表格
·返回值:
chi2:卡方值
p:p值
dof:自由度
expected:预期频次
代码实现
·加载数据
import pandas as pd
import scipy.stats as ss
data=pd.read_csv('data/chi2.csv')
data.head()
·统计观测频次
#统计频次
o=pd.crosstab(data['sex'],data['major'])
o
·卡方检验
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.小结
·卡方检验:用来分析两个名义变量之间是否显著相关
·卡方值计算:
观测频次O
预期频次E
自由度:$$(R-1)\times(C-1)$$
api:scipy.stats.chi2_contingency(observed)
猜你喜欢:
什么是RNN?RNN可以做什么?