乐鱼电竞

    教育行业A股IPO第一股(股票代码 003032)

    全国咨询/投诉热线:400-618-4000

    卡方检验的原理和实现方法

    更新时间:2020年08月07日15时24分 来源:乐鱼播客 浏览次数:

    学习目标

    掌握卡方检验的原理和实现

    卡方检验用来分析两个名义变量之间是否显著相关。

    学了这么多连续变量的统计分析,那么对于计数资料可咋整。小伙伴会问了:如果我想看不同患者人群的术后复发率有没有差异,怎么办?这时候就需要欢迎我们的统计小助手——卡方检验闪亮登场啦!

    卡方检验可是一位重量级选手,凡是涉及到计数资料分布的比较都需要他的帮忙。

    用药物A治疗急性心肌梗死患者198例,24小时内死亡11例,病死率为5.56%,另42例治疗时采用药物B,24小时内死亡6例,病死率为14.29%,提问:两组病死率有无差别?

    表1. 两种药物急性心肌梗塞患者治疗后24小时内死亡情况。

    1596784416853_卡方检验01.jpg


    卡方检验的目的:确定样本对象落入各类别的比例是否与随机期望比例相等。

    1.卡方值计算

    1596784433042_卡方检验02.jpg

    两个概念

    ·观测频数

    ·预期频数

    计算各行和各列的和:

    1596784458628_卡方检验03.jpg


    计算每个格子在当前行中的预期频数

    1596784478385_卡方检验04.jpg


    列出每个格子的观测频数和预期频数

    1596784502663_卡方检验05.jpg


    卡方值的计算公式:

    1596784536985_卡方检验06.jpg


    计算每个格子的值:

    1596784556800_卡方检验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$

    结论

    1596784596034_卡方检验08.jpg


    2.代码实现

    手动代码实现:

    ·导入数据

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

    1596784613996_卡方检验09.jpg


    ·统计频次(交叉表统计)

    #统计频次
    table=pd.crosstab(data['sex'],data['major'])
    table

    1596784627537_卡方检验10.jpg


    ·计算预期频次

    #计算预期频次
    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_卡方检验11.jpg

    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可以做什么?

    Python基础视频教程(600集)

    Python培训课程

    0 分享到:
    和我们在线交谈!
    【网站地图】【sitemap】