用Python进行卡方分析

《用十年学编程》(Teach Yourself Programming in Ten Years by Peter Norvig 原文地址:http://norvig.com/21-days.html) 里说学习编程的最好方法就是实践,以任务为导向的学习往往更为高效。本文就是这样一个笔记,算不上教程,只不过是菜鸟在记录自己的脚步。如果你恰好不知道怎么做卡方分析,不妨来看一看。

什么是卡方分析

卡方分析有两个常见的应用——适合度分析和独立性分析。这个笔记着重于适合度分析。从我目前的经验来看,这也是应用十分广泛的一种统计分析方式。那么什么是卡方适合度分析呢?且听我慢慢道来。

现象1现象2现象3
观测值abc
预期值ABC

常见的适合度分析的结构如下,一般有两组数据,一组是你统计或者观察到的值,另一组是理论上的预期值。如果这两组值十分接近,证明观测到的结果很“合适”,如果差距较大,则证明观测到的数据不够“合适”,这就是“适合度分析”名字的含义。

这种统计分析在科学研究中是十分常用的,因为科学家经常按照理论预期来推测试验结果,而实际上由于各种误差的存在,实验数据不可能和理论预期完全一致,这时卡方检验就能很好地检验理论的正确性。

举个栗子

某科学家预言抛一个色子,各面向上的几率都相同。为了验证自己理论的正确性,该科学家抛了600次硬币,结果为一点102次,二点102次,三点96次,四点105次,五点95次,六点100次。显然这个结果和理论预期并不完全一样,那么,科学家的理论有错吗?我们就用Python来验证一下。

from scipy import stats
obs = [102, 102, 96, 105, 95, 100]
exp = [100, 100, 100, 100, 100, 100]
stats.chisquare(obs, f_exp = exp)

输出
(0.73999999999999999, 0.98070147251964801)

从结果来看,p 值为0.98,可以认为观测到的值和预期值是相近即“合适”的。科学家的理论没有错,观测值和理论值的不同是由偶然误差造成的。(一般 p 值大于0.95即可)

解释一下

Python中进行卡方分析的函数chisquare()位于scipy的stats模块中。注意:stats在Python2.7的环境下使用是十分正常的,但是在Python3中使用就会报错。说来惭愧,笔者之前试着在Py3下运行,结果折腾了大半天都没成功,换到Py2.7下,一点问题都没了。如果用Python进行数据分析,个人感觉还是Py2.7好使,很多模块都没有稳定的Py3版啊。当然之前的栗子也要求在Py2.7下运行。

scipy.stats.chisquare(f_obs, f_exp=None, ddof=0, axis=0)

参数解释如下:
f_obs : 观测值,为一个数列
f_exp : 理论值,为一个数列。如果不赋值,默认为所有情况出现的可能相等。所以栗子中可以不赋值

>>> stats.chisquare(obs)
(0.73999999999999999, 0.98070147251964801)

ddof : 即自由度, df = C – 1,数值上等于所有可能的情况数-1。可以不用赋值,只要obs和exp没问题,程序可以自己算出来。

输出的结果是:
chisq: 即k值
p : p 值,大于0.95即统计显著。

看了这个简单的小笔记,大家应该知道如何用Python进行适合度检验了吧。当然这只是个很简单的笔记,如果有更多问题,还是要参考scipy的toturial。如果大家有什么问题或建议,欢迎大家在留言中和我讨论。祝大家在python数据分析之路上玩的愉快!

    原文作者:ironbeak_owl
    原文地址: https://www.jianshu.com/p/c307d04eee56
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞