Python数据科学:卡方检验

来自:法纳斯特(微信号:walker398),作者:小F

之前已经介绍的变量分析:


相关分析:一个连续变量与一个连续变量间的关系。


双样本t检验:一个二分分类变量与一个连续变量间的关系。


方差分析:一个多分类分类变量与一个连续变量间的关系。


本次介绍:


卡方检验:一个二分分类变量或多分类分类变量与一个二分分类变量间的关系。


如果其中一个变量的分布随着另一个变量的水平不同而发生变化时,那么两个分类变量就有关系。


卡方检验并不能展现出两个分类变量相关性的强弱,只能展现两个分类变量是否有关



/ 01 / 数据挖掘的技术与方法


数据挖掘的方法分为描述性与预测性两种。


两类方法均是基于历史数据进行分析。


描述性模型用于直观反映历史状况,为后续分析提供灵感。


预测性模型从历史数据中寻找规律,并用于预测未来。


描述性数据挖掘常用算法:聚类分析关联规则分析


预测性数据挖掘常用算法:线性回归逻辑(Logistic)回归神经元网络决策树支持向量机



/ 02 / 卡方检验


01 列联表


列联表是一种分类汇总表。


将待分析的两分类变量中的一个变量的每一个类别设为列变量。


另一个变量的每一个类别设为行变量,中间对应着不同类别下的频数。


下面以书中的数据为例,即探索分类变量是否违约与分类变量是否破产的关系。


使用的数据可以通过阅读原文去获取。


import pandas as pd

df = pd.read_csv('accepts.csv')
# crosstab:交叉表,margins:显示总和
cross_table = pd.crosstab(df['bankruptcy_ind'], df['bad_ind'], margins=True)
print(cross_table)


输出结果。



这里并不好判断之间的关系,下面转换为频率。


# div:转换列表为频率数据
cross_table_last = cross_table.div(cross_table['All'], axis=0)
print(cross_table_last)


输出结果。



这里可以看出差异并不是很大,但是我们还不能直接得出结论。


只能说有较大的可能,是否破产与是否违约不相关。


接下来通过卡方检验,来确定结论,使其具有统计学意义。


02 卡方检验


卡方检验在于比较期望频数和实际频数的吻合程度。


实际频数就是单元格内实际的观测数量,实际频率的分母为总样本数。


期望频数为变量相互独立时的频数,通过期望频率计算得来,期望频率由实际频率得来。


卡方检验的原假设是期望频数等于实际频数,即两个分类变量无关,备择假设则是有关。


通过公式计算得出卡方统计量,其值服从卡方分布。


卡方分布图如下,横轴为卡方统计量值,纵轴为P值,n为自由度。



本次案例我个人觉得自由度应该为1,不知为何书中说自由度为2???


下面用Python对数据进行卡方检验。


from scipy import stats

# chi2_contingency:卡方检验,chisq:卡方统计量值,expected_freq:期望频数
print('chisq = %6.4f\n p-value = %6.4f\n dof = %i\n expected_freq = %s' %stats.chi2_contingency(cross_table))


输出结果。



卡方值为2.9167,P值为0.5719,取显著性水平为0.05,表明没有理由拒绝原假设。


即两个分类变量无关,是否违约与是否破产无关系。



/ 03 / 总结


这里总结一下有关自由度的知识。


作为一个学机械的,自由度对我而言应该就只有6个。


三个旋转和三个移动,对于X、Y、Z轴。


但是统计学上却并不是这样的。


①自由度是指当以样本的统计量来估计总体参数时,样本中独立或能自由变化的数据的个数。


自由度就是能独立变化的数据数目,只要n-1个数确定,第n个数就确定了,它不能自由变化。


说实话还是有点晕...


文末点个赞,比心!!!

推荐↓↓↓
Python编程
上一篇:Python数据可视化:浅谈数据挖掘岗 下一篇:理解lambda表达式,为什么用它?