卡方检验(Chi_square_test): 原理及python实现

概述

  • What for?主要用在某个变量(或特征)值是不是和应变量有显著关系,换种说法就是看某个变量是否独立
  • X2=(observedexpected)2expected
    observed表示观测值,expected为理论值,可以看出,理论值与观测值差别越大,X2越大

Contingency table(联连表)

介绍卡方检验之前,需要先介绍下联连表,因为这个是所有假设检验的基础,这个直接看中文翻译容易不知所以,个人认为维基百科上解释的比较到位:是一种矩阵形式的表格,用来表示变量或者多变量的频率分布。
似乎意思知道了一点,我们现在举个例子:

来自维基百科
一目了然。

实现过程

然后我们看下实现过程:
1 按照假设检验的步骤,首先我们需要确定原假设H0(null hypothesis):原假设是变量独立的,实际观测频率和理论频率一致。
2 其次我们根据实际观测的联连表,去求理论的联连表;X2,记为Statistic;自由度,
3 然后选取适合的置信度(一般为95%)同自由度一起确定临界值Critical Value,比较卡方统计值和临界值大小:

  • If Statistic >= Critical Value: 认为变量对结果有影响,则拒绝原假设,变量不独立
  • If Statistic < Critical Value: 认为变量对结果没有影响,接受原假设,变量独立

python 中用scipy.stats 中chi2_contingency实现:

from scipy.stats import chi2_contingency
from scipy.stats import chi2

table = [[10,20,30],[6,9,17]]
print(table)
stat,p,dof,expected = chi2_contingency(table) # stat卡方统计值,p:P_value,dof 自由度,expected理论频率分布
print('dof=%d'%dof)
print(expected)

prob = 0.95 # 选取95%置信度
critical = chi2.ppf(prob,dof)  # 计算临界阀值
print('probality=%.3f,critical=%.3f,stat=%.3f '%(prob,critical,stat))
if abs(stat)>=critical:
    print('reject H0:Dependent')
else:
    print('fail to reject H0:Independent')

显示结果:
probality=0.950,critical=5.991,stat=0.272 
fail to reject H0:Independent

除了直接比较X2和临界值外,

我们还可以比较p-value和显著性水平(significance level),alpha:

  • P_value<=alpha:认为有显著性影响,则拒绝原假设,变量不独立
  • P_value>alpha:认为没有显著性影响,则接受原假设,变量独立

python实现

# interpret p_value
alpha = 1-prob
print('significance=%.3f,p=%.3f'%(alpha,p))
if p<alpha:
    print('reject H0:Dependent')
else:
    print('fail to reject H0:Independent')

显示结果:
significance=0.050,p=0.873
fail to reject H0:Independent

reference:
https://en.wikipedia.org/wiki/Contingency_table
https://www.jianshu.com/p/807b2c2bfd9b
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chi2_contingency.html
https://machinelearningmastery.com/chi-squared-test-for-machine-learning/

posted @   Leo_John  阅读(12046)  评论(2编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示