卡方检验在数据分析中的应用

卡方检验是一种统计方法,用于分析两个分类变量之间是否存在显著的关联性。本文将介绍卡方检验的基础知识、不同类型的卡方检验以及如何在Python中实现卡方检验。无论是数据分析的新手还是经验丰富的数据分析师,本文都将为提供实用的模型和经验,使能够自信地将卡方检验应用于自己的工作中。

学习目标

通过本文的学习,读者将能够:

  • 理解卡方检验及其目的。
  • 识别不同类型的卡方检验。
  • 计算卡方统计量以测试两个分类变量之间的关系。
  • 理解一个在Python中实现的卡方检验项目,并通过逐步指导进行操作。

目录

  • 什么是卡方检验
  • 卡方检验的类型
  • 计算卡方统计量
  • 实际案例:肥胖与心力衰竭频率
  • 在Python中计算卡方
  • 常见问题解答

什么是卡方检验

卡方检验是一种基于事实的交互作用,用于评估两个总体因素之间的联系,以确定它们之间的关系。这种检验非常简单,包括观察因素的观察频率与在假设它们之间没有关系的情况下的正常频率。卡方检验的自由度是卡方检验的一种常用类型。它适用于有两个总体因素——比如肥胖和心力衰竭事件——并且需要研究它们之间是否存在关联的情况。通过这样做,可以决定样本是否根据对变量分布的假设进行分类。

卡方检验的类型

卡方检验有几种类型,包括卡方拟合优度检验、卡方独立性检验和卡方同质性检验。使用的检验类型将取决于正在解决的具体研究问题和正在分析的数据类型。

  • 卡方拟合优度检验:这种类型的检验用于找出给定条件的观察值与预期值之间是否存在显著差异。
  • 卡方独立性检验:这种类型的检验是一种统计假设检验,可以用来确定两个分类和名义变量是否(可能)相关。
  • 卡方同质性检验:这种类型的检验被统计学家用来检查数据表中不同列和/或行的数据是否属于同一总体。

计算卡方统计量

要计算卡方统计量,需要将观察频率与预期频率进行比较。卡方统计量的公式为:

卡方 = Σ((观察值 – 预期值)^2 / 预期值)

其中观察值是每个类别的观察频率,预期值是每个类别的预期频率。

实际案例:肥胖与心力衰竭频率

让通过一个实际案例来讨论卡方检验,以了解它如何帮助确定肥胖和心力衰竭率之间是否存在关系。作为结果,使用了一组被诊断为心力衰竭的患者样本,他们的体质指数(BMI)数据被用来将他们分类为肥胖或非肥胖。

现在,为了计算卡方统计量,创建了一个列联表,显示了肥胖(基于BMI)和心力衰竭变量的每个类别的患者数量。之后,假设这些变量之间没有关联,估计了这个表中每个单元格的预期频率。最后,使用卡方公式,比较了观察和预期频率,以找出这两个变量之间是否存在任何显著的关联。

如果计算出的卡方统计量值大于临界值,拒绝零假设,即肥胖和心力衰竭之间没有联系。这表明肥胖确实是心力衰竭的一个风险因素。进行此类测试有助于深入了解样本人群中的关系,并制定预防措施以改善患者结果。

在Python中计算卡方

现在已经手动完成了所有有趣的计算,让看看是否可以使用Python完成相同的计算。正如之前提到的,将使用Python中的scipy库的chi2_contingency函数来完成这个任务。

使用pandas库中的crosstab()函数。使用心力衰竭来分组行,肥胖变量来分组列。还需要将margins设置为true以添加行和列的小计。

heartfailure_crosstab = pd.crosstab(df['obesity'], df['heart_failure'], margins=True, margins_name="subtotal")

它返回一个列联表,其中包含这些数据:

使用scipy.stats.chi2_contingency函数来计算卡方和p值。

chi, p, dof, expected = chi2_contingency(heartfailure_crosstab)

成功运行上述函数后,函数将卡方值返回给chi,p值返回给p,自由度返回给dof,预期值返回给expected变量。

在上述步骤中,将输出值存储在chi、p、dof和expected变量中。要找出这个计算中的p值是否小于alpha值(0.05),使用以下命令:

print(p)

上述命令的输出将是:

0.0000000000004257

现在所需要做的就是查看p值并与alpha值进行比较以得出结论。上述值小于0.0001,明显小于0.05(alpha值),这使能够得出结果是显著的。因此,拒绝零假设,这告诉肥胖和心力衰竭之间存在关系。

手动计算卡方检验,如所见,需要相当多的时间和手动努力,尽管使用Python的自动计算使用一个命令要简单得多,也更有效。在本文中,讨论了这个测试是什么,不同类型的卡方检验,以及如何执行样本卡方检验。此外,还学习了如何在Python中通过一个功能处理类似的计算,通过这样做,节省了时间和努力。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485