卡方检验(Chi_square_test): 原理及python实现
概述
- What for?主要用在某个变量(或特征)值是不是和应变量有显著关系,换种说法就是看某个变量是否独立
- \(X^2=\sum{\frac{(observed-expected)^2}{expected}}\)
observed表示观测值,expected为理论值,可以看出,理论值与观测值差别越大,\(X^2\)越大
Contingency table(联连表)
介绍卡方检验之前,需要先介绍下联连表,因为这个是所有假设检验的基础,这个直接看中文翻译容易不知所以,个人认为维基百科上解释的比较到位:是一种矩阵形式的表格,用来表示变量或者多变量的频率分布。
似乎意思知道了一点,我们现在举个例子:

一目了然。
实现过程
然后我们看下实现过程:
1 按照假设检验的步骤,首先我们需要确定原假设\(H_0\)(null hypothesis):原假设是变量独立的,实际观测频率和理论频率一致。
2 其次我们根据实际观测的联连表,去求理论的联连表;\(卡方统计值:X^2\),记为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
除了直接比较\(X^2\)和临界值外,
我们还可以比较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/
卡方检验(Chi_square_test): 原理及python实现的更多相关文章
- paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...
- MapReduce 原理与 Python 实践
MapReduce 原理与 Python 实践 1. MapReduce 原理 以下是个人在MongoDB和Redis实际应用中总结的Map-Reduce的理解 Hadoop 的 MapReduce ...
- GBDT回归的原理及Python实现
一.原理篇 1.1 温故知新回归树是GBDT的基础,之前的一篇文章曾经讲过回归树的原理和实现.链接如下: 回归树的原理及Python实现 1.2 预测年龄仍然以预测同事年龄来举例,从<回归树&g ...
- 模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径
模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...
- 编解码原理,Python默认解码是ascii
编解码原理,Python默认解码是ascii 首先我们知道,python里的字符默认是ascii码,英文当然没问题啦,碰到中文的时候立马给跪. 不知道你还记不记得,python里打印中文汉字的时候需要 ...
- 主成分分析PCA数据降维原理及python应用(葡萄酒案例分析)
目录 主成分分析(PCA)——以葡萄酒数据集分类为例 1.认识PCA (1)简介 (2)方法步骤 2.提取主成分 3.主成分方差可视化 4.特征变换 5.数据分类结果 6.完整代码 总结: 1.认识P ...
- LDA线性判别分析原理及python应用(葡萄酒案例分析)
目录 线性判别分析(LDA)数据降维及案例实战 一.LDA是什么 二.计算散布矩阵 三.线性判别式及特征选择 四.样本数据降维投影 五.完整代码 结语 一.LDA是什么 LDA概念及与PCA区别 LD ...
- BP神经网络原理及python实现
[废话外传]:终于要讲神经网络了,这个让我踏进机器学习大门,让我读研,改变我人生命运的四个字!话说那么一天,我在乱点百度,看到了这样的内容: 看到这么高大上,这么牛逼的定义,怎么能不让我这个技术宅男心 ...
- pooling的原理与Python实现
本文首先阐述pooling所对应的操作,然后分析pooling背后蕴含的一些道理,最后给出pooling的Python实现. 一.pooling所对应的操作 首先从整体上对pooling有一个直观的概 ...
随机推荐
- js POST调用api接口时,由于OPTIONS请求导致服务器异常
1.学习心得 当你搜到这个问题时,就表示你已经知道了脚本POST请求接口时,会先执行一次OPTIONS类型的请求.至于为什么会这样,在此就不做描述了,想知道的小伙伴可以查一下:本文主要将我在现实中遇到 ...
- PHP date_diff() 函数
------------恢复内容开始------------ 实例 计算两个日期间的差值: <?php$date1=date_create("2013-03-15");$da ...
- PHP acosh() 函数
实例 返回不同数的反双曲余弦: <?phpecho(acosh(7) . "<br>");echo(acosh(56) . "<br>&qu ...
- PHP xml_set_default_handler() 函数
定义和用法 xml_set_default_handler() 函数为 XML 解析器建立默认的数据处理器.高佣联盟 www.cgewang.com 该函数规定在只要解析器在 XML 文件中找到数据时 ...
- Java8的@sun.misc.Contended注解
@sun.misc.Contended 介绍 @sun.misc.Contended 是 Java 8 新增的一个注解,对某字段加上该注解则表示该字段会单独占用一个缓存行(Cache Line). 这 ...
- 实用!一键生成数据库文档,堪称数据库界的Swagger
本文收录在个人博客:www.chengxy-nds.top,技术资料共享,同进步 最近部门订单业务调整,收拢其他业务线的下单入口,做个统一大订单平台.需要梳理各业务线的数据表,但每个业务线库都有近百张 ...
- 001_HyperLedger Fabric环境安装
HyperLedger Fabric的环境,有解决三大问题 第一,是系统环境,这里我们选择的是centos7 第二,是开发环境,这里我们选择的是Go语言 第三,是运行环境,这里我们选择的是Docker ...
- C语言学习笔记之switch有无break差别
今天复习到了switch语句,我们正常的写法中,是经常把switch和break搭配在一起的 当我们把break去掉呢 可以看到,我们选择2时,的确会到case 2里面执行语句,可是没有break还是 ...
- CSS品控与流程
精通CSS意味着不仅能写出可用的标记和样式,还能让代码好阅读.方便移植.易维护. 1.外部代码质量:调试CSS 外部代理质量就是用户能体验到的最终结果.主要体现在几个方面. 正确性.CSS属性名都写对 ...
- vue中methods互相调用的方法
a:function(goods) { this.aa= []; this.bb= 0; this.cc= 0; }, b:function(){ if(this.bbb!= 0){ this.aa= ...