如果你在寻找卡方分布是什么?如何实现卡方检验?那么请看这篇博客,将以通俗易懂的语言,全面的阐述卡方、卡方检验及其python实现。

1. 卡方分布

1.1 简介

抽样分布有三大应用:T分布、卡方分布和$\Gamma$分布。可以简单用四个字概括它们的作用:“以小博大”,即通过小数量的样本容量去预估总体容量的分布情况。这里开始介绍卡方分布。${\chi ^{\text{2}}}$分布在数理统计中具有重要意义。  ${\chi ^{\text{2}}}$分布是由阿贝(Abbe)于1863年首先提出的,后来由海尔墨特(Hermert)和现代统计学的奠基人之一的卡·皮尔逊(C K.Pearson)分别于1875年和1900年推导出来,是统计学中的一个非常有用的著名分布。

1.2 定义

若n个相互独立的随机变量${\xi _1},{\xi _2}, \cdots ,{\xi _n}$,均服从标准正态分布,则这n个服从标准正态分布的随机变量的平方和构成一新的随机变量${\text{X}}\left( {} \right)$,其分布规律称为卡方分布。记作:

$${\text{X}} \sim {\chi ^{\text{2}}}\left( k \right)$$

1.3 卡方分布的密度函数

$${f_k}(x) = \frac{{{{(1/2)}^{\frac{k}{2}}}}}{{\Gamma (k/2)}}{x^{\frac{k}{2} - 1}}{e^{ - \frac{x}{2}}}$$

卡方分布的概率密度图

其中x≥0, 当x≤0时fk(x) = 0。这里$\Gamma$代表Gamma 函数。

在大多数涉及卡方分布的书中都会提供它的累积分布函数的对照表。此外许多表格计算软件如OpenOffice.org Calc和Microsoft Excel中都包括卡方分布函数。

卡方分布可以用来测试随机变量之间是否相互独立,也可用来检测统计模型是否符合实际要求。自由度为 k 的卡方变量的平均值是 k,方差是 2k。

1.4 性质(后续填坑)

2.卡方检验

2.1简介

卡方检验(chi-square,记为χ2\chi^2检验)是统计学中常用来计数数据分析的方法,对于总体的分布不作任何假设,因此它属于非参数检验法中的一种。本博文从理论到实际应用去阐述卡方检验,最后用python语言去实现卡方分布的代码。

${\chi ^{\text{2}}}$检验的基本思想是根据样本数据推断总体的频次与期望频次有显著性差异, ${\chi ^{\text{2}}}$的计算公式为:

$${\chi ^{\text{2}}} = \frac{{{{({f_0} - {f_e})}^2}}}{{{f_e}}}$$

其中,${{f_0}}$为实际观察频次,${{f_e}}$为理论值

这是卡方检验的原始公式,其中当${{f_e}}$越大,近似效果越好。显然${{f_0}}$与${{f_e}}$相差越大,卡方值就越大;${{f_0}}$与${{f_e}}$相差越小,卡方值就越小。因此它能够用来表示${{f_0}}$与${{f_e}}$相差的程度。根据这个公式,可认为卡方检验的一般问题是要检验名义型变量的实际观测次数和理论次数分布之间是否存在显著差异。

一般卡方检验方法进行统计检验时,要求样本容量不宜太小,理论次数$\geqslant 5$,否则需要进行校正。如果个别单元格的理论次数小于5,处理的方法有以下四种:

单元格合并法

增加样本数

去除样本数

使用校正公式,当某一期次数小于5时,应该利用校正公式计算卡方值。校正公式为:$${\chi ^{\text{2}}} = \sum {\frac{{{{(\left| {{f_0} - {f_e}} \right| - 0.5)}^2}}}{{{f_e}}}} $$

知道了卡方分布的原理,那具体是如何使用的呢?卡方分析有两个常见的应用——适合度(拟合性)分析和独立性分析。从我目前的经验来看,这也是应用十分广泛的一种统计分析方式。那么什么是卡方适合度分析和独立性分析呢?且听我慢慢道来。

“适配度检验”验证一组观察值的次数分配是否异于理论上的分配。

2.2 卡方独立性检验

“独立性检验”验证从两个变量抽出的配对观察值组是否互相独立(例如:每次都从A国和B国各抽一个人,看他们的反应是否与国籍无关)。

独立性检验主要用于两个或两个以上因素多项分类的计数资料分析,也就是研究两类变量之间的关联性和依存性问题。如果两变量无关联即相互独立,说明对于其中一个变量而言,另一变量多项分类次数上的变化是在无差范围之内;如果两变量有关联即不独立,说明二者之间有交互作用存在。

独立性检验一般采用列联表的形式记录观察数据, 列联表是由两个以上的变量进行交叉分类的频数分布表,是用于提供基本调查结果的最常用形式,可以清楚地表示定类变量之间是否相互关联。又可具体分为:

四格表的独立性检验:又称为2*2列联表的卡方检验。四格表资料的独立性检验用于进行两个率或两个构成比的比较,是列联表的一种最简单的形式。

行x列表资料的独立性检验:又称为RxC列联表的卡方检验。行x列表资料的独立性检验用于多个率或多个构成比的比较

2.3.1独立性检验步骤

Step1:建议原假设

H0:两变量相互独立;H1:两变量相互不独立

Step2:计算自由度与理论频数

自由度:$df = (r - 1)(c - 1)$,理论频数:${e_{ij}} = \frac{{{F_{{Y_i}}} \cdot {F_{{X_j}}}}}{n}$

Step3:计算统计量

$${\chi ^{\text{2}}} = \sum\limits_{i = 1}^r {\sum\limits_{j = 1}^c {\frac{{{{({f_{ij}} - {e_{ij}})}^2}}}{{{e_{ij}}}}} }  \sim {\chi ^{\text{2}}}(df)$$

Step4:查${\chi ^{\text{2}}}$分布临界值表,确定接受域和拒绝域

接受域:$${\chi ^{\text{2}}}_{1 - \frac{\alpha }{2}}(df) < {\chi ^{\text{2}}} < {\chi ^{\text{2}}}_{\frac{\alpha }{2}}(df)$$

2.3.2 应用条件

要求样本含量应大于40且每个格子中的理论频数不应小于5。当样本含量大于40但理论频数有小于5的情况时卡方值需要校正,即公式:$${\chi ^{\text{2}}} = \sum {\frac{{{{(\left| {{f_0} - {f_e}} \right| - 0.5)}^2}}}{{{f_e}}}} $$

2.3.3 应用实例

例:对下表所示频数分布表,以95%显著水平,检验色觉与性别是否有关。

解:

Step1:H0:色觉与性别相互独立;H1:色觉与性别相互不独立(相关)

Step2:自由度$df = (r - 1)(c - 1) = (2 - 1)(2 - 1) = 1$,理论频数计算如表2。

Step3:计算统计量

Step4:查分布临界值表

$${\chi ^{\text{2}}}_{0.975}(1) = 0.00098,{\chi ^{\text{2}}}_{0.025}(1) = 5.0239$$

统计推断:${\chi ^{\text{2}}} = 27.1 > 5.0239$,所以拒绝原假设,即色觉与性别相互不独立。

2.3.4 RxC列联表的卡方检验

专用公式:

r行c列表资料卡方检验的${\chi ^{\text{2}}} = n \times (\frac{{{A_{11}}}}{{{n_1}{n_1}}} + \frac{{{A_{12}}}}{{{n_1}{n_2}}} +  \cdots  + \frac{{{A_{rc}}}}{{{n_r}{n_c}}}) - 1$

应用条件

要求每个格子中的理论频数T均大于5或1

独立性检验的理论频数的计算公式为:

$${f_e} = \frac{{{f_{xi}} \times {f_{yi}}}}{N}$$

2.3.5 独立性检验python实现

(1)环境配置

1 #-*- coding:utf-8 -*-

2 #@Time : 2018/6/29 18:08

3 #@Author : yuanjing liu

4 #@Email : lauyuanjing@163.com

5 #@File : 4.py

6 #@Software: PyCharm

7

8 #卡方独立性检验

9 importnumpy as np10 from scipy.stats importchi2_contingency11 from scipy.stats import chi2

(2)卡方独立性检验函数

1 '''

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

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

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

21 理论知识详见博客:22 '''

23

24

25 defchi2_independence(alpha, data):26 g, p, dof, expctd =chi2_contingency(data)27

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

35

36 if g >cv:37 re = 1 #表示拒绝原假设

38 else:39 re = 0 #表示接受原假设

40

41 return g, p, dof, re, expctd

(3)测试

1 #test

2 alpha1 = 0.05 #置信度,常用0.01,0.05,用于确定拒绝域的临界值

3 data1 = np.array([[442, 514], [38, 6]])4 g, p, dof, re, expctd = chi2_independence(alpha1, data1)

(4)输出

1 g = 25.554809338151387

2 p = 4.2999294019586401e-07

3 dof = 1

4 re = 1

5 expctd = array([[ 458.88, 497.12], [ 21.12, 22.88]])

输出变量的含义,在函数处都已经说明,re=1表示拒绝原假设,结果和上面例子手算的一致。

2.4 卡方拟合性检验

2.4.1 定义

卡方检验能检验单个多项分类名义型变量各分类间的实际观测次数与理论次数之间是否一致的问题,这里的观测次数是根据样本数据得多的实计数,理论次数则是根据理论或经验得到的期望次数。这一类检验称为拟合性检验。其自由度通常为分类数减去1,理论次数通常根据某种经验或理论。

总而言之,卡方拟合度检验用于判断不同类型结果的比例分布相对于一个期望分布的拟合程度。

2.4.2 应用条件

卡方拟合性检验适用于变量为类别型变量的情况。 例如:变量为有罪或无罪。

当每个类别中观察到的或预期的频率太小时,此检验无效。要求样本含量应大于40且每个格子中的理论频数不应小于5

2.4.3 应用实例

随机抽取60名高一学生,问他们文理要不要分科,回答赞成的39人,反对的21人,问对分科的意见是否有显著的差异。

解:

(1)提出H0:学生们对文理分科的意见没有差异

(2)分析:如果没有显著的差异,则赞成与反对的各占一般,因此是一个无差假设的检验,于是理论次数为60/2=30,带入公式:

$${\chi ^{\text{2}}}{\text{ = }}\sum {\frac{{{{\left( {{f_0} - {f_e}} \right)}^2}}}{{{f_e}}}}  = \frac{{{{\left( {39 - 30} \right)}^2}}}{{30}} + \frac{{{{\left( {21 - 30} \right)}^2}}}{{30}} = 5.4 > \chi _{0.05}^2\left( 1 \right) = 3.84$$

其中自由度df = 类别-1 = 2-1 = 1

所以拒绝原假设,认为对于文理分科,学生们的态度是有显著的差异的。

2.4.4 卡方拟合性检验python实现

(1)环境配置

1 #卡方拟合性检验

2 importnumpy as np3 from scipy.stats importchisquare4 from scipy.stats import chi2

(2)卡方独立性检验函数

1 '''

2 (1)假设检验重要知识3 H0:类别A与B的比例没有差异 H1:类别A与B的比例有差异4 若卡方值大于临界值,拒绝原假设,表示A与B不相互独立,A与B相关5 函数中re返回为1表示拒绝原假设,0表示接受原假设6

7 (2)参数说明8 输入:9 alpha --- 置信度,用来确定临界值10 data --- 数据,请使用numpy.array数组11 sp --- 表示输入数组的形状参数,默认为一维12 输出:13 chis --- 卡方值,也就是统计量14 p_value --- P值(统计学名词),与置信度对比,也可进行假设检验,P值小于置信度,即可拒绝原假设15 cv --- 拒绝域临界值16 j --- 自由度17 re --- 判读变量,1表示拒绝原假设,0表示接受原假设18

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

22 理论知识详见博客:23 '''

24

25

26 def chi2_fitting(data, alpha, sp=None):27 chis, p_value = chisquare(data, axis=sp)28 i, j = data.shape #j为自由度

29

30 if j ==0:31 print('自由度应该大于等于1')32 elif j == 1:33 cv = chi2.isf(alpha * 0.5, j)34 else:35 cv = chi2.isf(alpha * 0.5, j - 1)36

37 if chis >cv:38 re = 1 #表示拒绝原假设

39 else:40 re = 0 #表示接受原假设

41

42 return chis, p_value, cv, j-1, re

(3)测试

1 data1 = np.array([[39, 21], ])2 alpha1 = 0.05

3 chis1, p_value1, cv1, dof, re1 = chi2_fitting(data1, alpha1)

(4)输出

chis1 = 5.4000000000000004p_value1= 0.020136751550346329cv1= 5.0238861873148917dof= 1re1= 1

显然chis1(卡方值)是大于cv1(临界值)的,因此拒绝原假设,认为对于文理分科,学生们的态度是有显著的差异的。与前面结果一直。这里可以输入多维度数组,而不是简单的一维数组,因为在国内没有找到合适的多维度多类别数组的例子,想结合例子来讲解,更便于理解,既然没有例子也就不使用python进行这个知识点的展示了,望理解。但是此函数中sp给多维度多类别的数组输入提供了方法,原理和scipy.stats.chisquare中的axis参数一样,请大家查阅官方文档。

2.5 卡方拟合性检验和独立性检验之间的关系

从表面上看,拟合性检验和独立性检验不论在列联表的形式上,还是在计算卡方的公式上都是相同的,所以经常被笼统地称为卡方检验。但是两者还是存在差异的。

首先,两种检验抽取样本的方法不同。如果抽样是在各类别中分别进行,依照各类别分别计算其比例,属于拟合优度检验。如果抽样时并未事先分类,抽样后根据研究内容,把入选单位按两类变量进行分类,形成列联表,则是独立性检验。

其次,两种检验假设的内容有所差异。拟合优度检验的原假设通常是假设各类别总体比例等于某个期望概率,而独立性检验中原假设则假设两个变量之间独立。

最后,期望频数的计算不同。拟合优度检验是利用原假设中的期望概率,用观察频数乘以期望概率,直接得到期望频数。独立性检验中两个水平的联合概率是两个单独概率的乘积。

3 文献

卡方检验 - 维基百科,自由的百科全书

https://zh.wikipedia.org/wiki/%E5%8D%A1%E6%96%B9%E6%A3%80%E9%AA%8C

卡方分布 - MBA智库百科

http://wiki.mbalib.com/wiki/%E5%8D%A1%E6%96%B9%E5%88%86%E5%B8%83

用Python进行卡方分析 - 简书

https://www.jianshu.com/p/c307d04eee56

拟合优度检验_百度百科

https://baike.baidu.com/item/%E6%8B%9F%E5%90%88%E4%BC%98%E5%BA%A6%E6%A3%80%E9%AA%8C

列联表分析2——独立性检验(卡方检验)_关文忠工作室_新浪博客

http://blog.sina.com.cn/s/blog_4d69c7430101ndub.html

卡方分布分析与应用 - 云+社区 - 腾讯云

https://cloud.tencent.com/developer/article/1010577

卡方检验 | Ren’s Cabinet of Curiosities

http://www.ryanzhang.info/tag/%E5%8D%A1%E6%96%B9%E6%A3%80%E9%AA%8C/

scipy.stats.chi2 — SciPy v1.1.0 Reference Guide(卡方分布)

https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chi2.html#scipy.stats.chi2

scipy.stats.chi2_contingency — SciPy v0.15.1 Reference Guide(卡方独立性检验)

https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.stats.chi2_contingency.html

scipy.stats.chisquare — SciPy v1.1.0 Reference Guide(卡方拟合性检验)

https://docs.scipy.org/doc/scipy/reference/generated/scipy.sta

转载说明

1、本人博客纯属技术积累和分享,欢迎大家评论和交流以求共同进步。

2、在无明确说明下,博客可以转载以供个人学习和交流,但是要附上出处。

3、如果原创博客使用涉及商业/公司行为请邮件(1547364995@qq.com)告知,一般情况均会及时回复同意。

4、如果个人博客中涉及他人文章我会尽力注明出处,但受限于能力并不能保证所有引用之处均能够注明出处,如有冒犯,请您及时邮件告知以便修改,并于此提前向您道歉。

5、转载过程中如有涉及他人作品请您与作者联系。

6、所有文章(不限于原创)仅为个人见解,个人只能尽量保证正确,如有错误您需要自负责任,并请您留下评论提出错误之处以便及时更正,惠泽他人,谢谢

python卡方拟合性检验_卡方分布、卡方独立性检验和拟合性检验理论及其python实现...相关推荐

  1. python常见的数据类型形式化定义_详解:规整数据(Tidy Data)的理论与Python实践

    多数数据科学 机器学习项目都遵循帕累托原理,即我们用将近80%的时间进行数据准备,其余20%的时间用于选择和训练合适的机器学习模型.来源: 数据科学DataScience 通常,我们用于创建机器学习模 ...

  2. wald检验_笔记:分位数回归斜率相等性检验(Wald检验)

    首先我并不是统计学.数学类专业的,对很多统计模型搞不明白的,下文所写也仅是学渣的学习笔记吧,都是些基础操作,希望能帮到忙吧. 从毕业论文角度出发的分位数回归模型分享: 我是一个文科类.经济类的专业,我 ...

  3. 卡牌大师怎么玩_用卡牌大师如何上分

    联盟界流传一句话,如果只玩一个英雄.德玛可以上白金,瑞文可以上砖石,而卡牌可以上王者.所以说玩好卡牌是可以快速上分的,卡牌拥有稳定的控制,AOE伤害,大招的快速支援,可以说是英雄里近乎完美的机制,不过 ...

  4. python编写请求参数带文件_转载:如何编写一个带命令行参数的Python文件

    看到别人执行一个支持命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持命 ...

  5. python作业不会做怎么办_不学点编程,将来怎么给孩子辅导作业——Python新手入门教程...

    为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...

  6. 开机卡logope引导不了_开机卡LOGO不要慌小匠来帮忙—常见的开机卡LOGO问题排查方法...

    大家好,这里是匠哥.相信大家在日常使用电脑的过程中可能会遇到这样的问题--电脑刚开机,就会卡在主板的LOGO画面信息不动,也无法进入主板BIOS,但是键盘按NUMLOCK键盘却可以控制,不像是死机的问 ...

  7. python剑指offer替换空格_《剑指offer》2-替换空格【Java+Python】

    替换空格 1. 题目描述 请实现一个函数,将一个字符串中的空格替换成"%20". 2. 示例 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%2 ...

  8. python实现目标检测源代码包_深度学习目标检测系列:faster RCNN实现|附python源码...

    摘要: 本文在讲述RCNN系列算法基本原理基础上,使用keras实现faster RCNN算法,在细胞检测任务上表现优异,可动手操作一下. 目标检测一直是计算机视觉中比较热门的研究领域,有一些常用且成 ...

  9. python请输入你的名字_实现《你的名字》同款滤镜,python+opencv

    好久没有上简书,最近上来一看发现这篇文章阅读量远超了其他的文章,还有评论提到说在讲技术的时候卖萌不好.哈哈,当时写的时候完全没想过会有人搜到看,只是为自己的作品留个念想,所以文风比较散漫随意.于是这次 ...

  10. python while break try 无法中断_解码不能正常工作并且while循环不能正确中断python...

    这是一个使用Python中的TCP套接字的文件传输应用程序.文件传输协议将包含一个名为ftps.py文件一个客户打电话来ftpc.py文件. 在 文件传输应用程序将使用一个简单的协议.前4个字节(按网 ...

最新文章

  1. Android热更新实现方式
  2. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)
  3. get方式乱码及MAC异常
  4. Vue.use()是什么?
  5. ES6结构赋值的用途
  6. 一个使用多年的Makefile模板
  7. 汽车辐射监测系统-Qt开发
  8. CentOS Linux 系统镜像文件(M1 Mac虚拟机专用)
  9. XPath解析网页学习笔记
  10. 谷歌街景中路牌、广告等标识文字的识别(文本识别在自然场景下的应用)之文本识别分类器
  11. Raywenderlich: 用 VFX 制作蝴蝶飞起的效果
  12. Android系统中的常用时间戳及时间单位
  13. 互联网日报 | 1月14日 星期四 | 联想集团计划在科创板上市;荣耀官方自营商城正式上线;快手小程序平台开启公测...
  14. 汽车分类(奔驰G系列和奔驰c系列)
  15. win10 开teredo
  16. 算式最大值 (思维题)
  17. office ppsx逻辑漏洞(CVE-2017-8570)
  18. 渲染多层材料的综合框架
  19. Win10中使用CMD命令遍历文件夹删除重复文件
  20. LinkedIn 中国版将关闭:年内将发布新的 InJobs 应用,但不包含社交功能。

热门文章

  1. 人工智能——特征工程思维导图
  2. 2021年刻骨铭心的总结
  3. 【教程】迅为iTOP-4412精英版exynos4412开发板搭建原生Linux最小系统(二)
  4. UE4全套自学视频教程
  5. java栈和队列的区别是什么意思_java中栈和队列的区别是什么?
  6. Ubuntu 13.10 安装后配置
  7. 原生小说APP源码,可二次开发,小说阅读,四端互通:android端,ios端,h5端,公众号端
  8. android 7.0 so.toc,[toc]文档导航 侧边栏目录 markdown
  9. 生意的本质:低买高卖
  10. macOS 安卓模拟器 Nox夜神模拟器 共享目录