卡方列联表的独立性检验

1.列联表是按两个或多个特征分类的频数数据,一般以表格形式组成。
2.判断两个或多个属性之间有无关联,即判别属性之间是否独立。
3.检验步骤

  1. 建立原假设
    H0: 两属性相互独立
    H1: 两属性之间不独立

  2. 计算自由度
    在这里插入图片描述

  3. 计算卡方统计量
    卡方列联表的独立性检验_第1张图片

  4. 拒绝域
    卡方列联表的独立性检验_第2张图片

  5. 对照卡方分布的临界值表,找到对应的卡方值,判断是否在拒绝域内

  6. 列联表独立性检验的python实现

'''
(1)假设检验重要知识
H0:A与B相互独立  H1:A与B不相互独立
若卡方值大于临界值,拒绝原假设,表示A与B不相互独立,A与B相关
函数中re返回为1表示拒绝原假设,0表示接受原假设

(2)参数说明
输入:
alpha --- 置信度,用来确定临界值
data  --- 数据,请使用numpy.array数组
输出:
g     --- 卡方值,也就是统计量
p     --- P值(统计学名词),与置信度对比,也可进行假设检验,P值小于置信度,即可拒绝原假设
dof   --- 自由度
re    --- 判读变量,1表示拒绝原假设,0表示接受原假设
expctd--- 原数据数组同维度的对应理论值

(3)应用场景
要求样本含量应大于40且每个格子中的理论频数不应小于5

理论知识详见博客:
'''
# 卡方独立性检验
import numpy as np
from scipy.stats import chi2_contingency
from scipy.stats import chi2

def chi2_independence(alpha, data):
    g, p, dof, expctd = chi2_contingency(data)

    if dof == 0:
        print('自由度应该大于等于1')
    elif dof == 1:
        cv = chi2.isf(alpha * 0.5, dof)
    else:
        cv = chi2.isf(alpha * 0.5, dof-1)


    if g > cv:
        re = 1  # 表示拒绝原假设
    else:
        re = 0  # 表示接受原假设

    return g, p, dof, re, expctd

实例测试

# test
alpha1 = 0.05  # 置信度,常用0.01,0.05,用于确定拒绝域的临界值
data1 = np.array([[367, 342,266,329], [56,40,20,16]])

g, p, dof, re, expctd = chi2_independence(alpha1, data1)

输出结果:
卡方列联表的独立性检验_第3张图片
其中:p值为0.0002, re=1为拒绝原假设,表示两属性之间有关联

你可能感兴趣的:(统计学,数据分析)