Python数据科学:卡方检验

时间:2022-07-26
本文章向大家介绍Python数据科学:卡方检验,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

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

双样本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.4fn p-value = %6.4fn dof = %in expected_freq = %s' %stats.chi2_contingency(cross_table))

输出结果。

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

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

/ 03 / 总结

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

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

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

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

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

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

说实话还是有点晕...