卡方检验及其在Python中的应用

作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~
个人主页小高要坚强的博客
当前专栏Python之机器学习
本文内容:卡方检验及其在Python中的应用
作者“三要”格言:要坚强、要努力、要学习


目录

一、卡方检验的基本原理

卡方统计量的计算

二、卡方检验的主要用途

1. 两个率或两个构成比比较的卡方检验

用途说明

应用示例

结果解读

2.多个率或多个构成比比较的卡方检验

用途说明

应用示例

3.分类资料的相关分析

用途说明

4.适合度检验

用途说明

应用示例

三、配对卡方检验

1. 例子

2. 使用 SquareTable 和 mcnemar 类进行分析

四、总结


卡方检验(Chi-Square Test)是统计学中一种用于比较分类变量的显著性检验方法。本文将介绍卡方检验的基本原理、主要用途及其在Python中的实现。

一、卡方检验的基本原理

卡方检验的核心思想是检验观察频数与期望频数之间的差异。其零假设(H0)通常为“观察频数与期望频数没有显著差别”。通过计算卡方统计量,可以判断两组分类变量是否独立。

卡方统计量的计算

卡方统计量的计算公式为:

其中,O为实际观察频数,E为期望频数。当观察频数与期望频数完全一致时,卡方值为0;随着差异增大,卡方值也会增大。卡方值的大小还与自由度有关。

二、卡方检验的主要用途

1. 两个率或两个构成比比较的卡方检验

用途说明

当我们需要比较两个不同组别的比例或构成比时,卡方检验提供了一种有效的方法。例如,可以用于比较不同性别的疾病发病率、不同地区的购车率等。

应用示例

假设我们想比较男性和女性在某种疾病的发病率。我们可以收集如下数据:

通过卡方检验,我们可以评估男性和女性的患病率是否存在显著差异。Python执行代码如下:

import pandas as pd
import statsmodels.stats.contingency_tables as tbl

# 创建数据
data = pd.DataFrame({
    '性别': ['男性', '女性'],
    '患病人数': [30, 20],
    '未患病人数': [70, 80]  # 总人数 - 患病人数
})

# 创建交叉表
cross_tab = pd.crosstab(data['性别'], [data['患病人数'], data['未患病人数']])
print("交叉表:")
print(cross_tab)

# 进行卡方检验
table = tbl.Table(cross_tab)
res = table.test_nominal_association()
print("卡方值:", res.statistic)
print("自由度:", res.df)
print("p值:", res.pvalue)

运行结果:

结果解读

  • 卡方值:表示观察频数与期望频数之间的差异程度。
  • 自由度:卡方分布的特征,通常为(行数-1)*(列数-1)。
  • p值:用于判断假设检验的显著性。通常,当p值小于0.05时,拒绝H0,说明两组变量之间存在显著差异。

2.多个率或多个构成比比较的卡方检验

用途说明

卡方检验还可以用于比较多个组别之间的比例差异。例如,评估不同年龄段对某种产品的偏好差异。

应用示例

设想我们想研究不同年龄段对某款手机的购买意愿,收集到如下数据:

通过卡方检验,可以判断不同年龄段的购买意愿是否存在显著差异。Python执行代码如下:

import pandas as pd
import statsmodels.stats.contingency_tables as tbl

# 创建数据
data = pd.DataFrame({
    '年龄段': ['18-24', '25-34', '35-44'],
    '购买意愿': [50, 40, 30],
    '未购买': [30, 40, 50]  # 总人数 - 购买意愿
})

# 创建交叉表
cross_tab = pd.crosstab(data['年龄段'], [data['购买意愿'], data['未购买']])
print("交叉表:")
print(cross_tab)

# 进行卡方检验
table = tbl.Table(cross_tab)
res = table.test_nominal_association()
print("卡方值:", res.statistic)
print("自由度:", res.df)
print("p值:", res.pvalue)

3.分类资料的相关分析

用途说明

卡方检验可用于检验两个分类变量之间的关联性,以判断它们是否独立。常用于社会科学、市场研究等领域。

应用示例

例如,我们想研究饮食习惯(素食者与非素食者)与肥胖状况之间的关系。收集数据后,可以形成如下交叉表:

通过卡方检验,我们可以判断饮食习惯是否与肥胖有显著相关性。Python执行代码如下:

import pandas as pd
import statsmodels.stats.contingency_tables as tbl

# 创建数据
data = pd.DataFrame({
    '饮食习惯': ['素食者', '非素食者'],
    '肥胖': [20, 40],
    '不肥胖': [80, 60]
})

# 创建交叉表
cross_tab = pd.crosstab(data['饮食习惯'], [data['肥胖'], data['不肥胖']])
print("交叉表:")
print(cross_tab)

# 进行卡方检验
table = tbl.Table(cross_tab)
res = table.test_nominal_association()
print("卡方值:", res.statistic)
print("自由度:", res.df)
print("p值:", res.pvalue)

4.适合度检验

用途说明

适合度检验用于判断观察数据与期望数据之间的吻合程度。这种检验常用于市场调查、消费者行为分析等。

应用示例

假设一家公司推出了一种新口味的饮料,想知道消费者对新口味的接受程度。我们收集了消费者的选择数据,形成如下表格:

通过卡方适合度检验,可以判断消费者的选择是否符合预期的比例。Python执行代码如下:

import pandas as pd
import statsmodels.stats.contingency_tables as tbl

# 创建数据
data = pd.DataFrame({
    '口味': ['原味', '新口味', '其他口味'],
    '选择人数': [50, 30, 20]
})

# 创建期望频数(假设每种口味接受度相等)
expected = [100/3, 100/3, 100/3]

# 进行卡方适合度检验
observed = data['选择人数'].values
chi_square_stat = ((observed - expected) ** 2 / expected).sum()
print("卡方统计量:", chi_square_stat)

# 自由度
df = len(expected) - 1
print("自由度:", df)

# 计算p值
from scipy.stats import chi2
p_value = 1 - chi2.cdf(chi_square_stat, df)
print("p值:", p_value)

三、配对卡方检验

在某些情况下,我们需要分析两个相关率的变化,例如使用两种不同的方法检查相同对象的结果。此时可以使用配对卡方检验(McNemar's Test)。

1. 例子

假设我们有以下数据:

  • A法检出91名(65%)
  • B法检出77名(55%)
  • A、B两法一致的检出56名(40%)
  • 数据结构如下

2. 使用 SquareTablemcnemar 类进行分析

import numpy as np
import statsmodels.stats.contingency_tables as tbl

# 使用SquareTable分析
square_table = tbl.SquareTable(np.array([[56, 35], [21, 28]]))
print(square_table.summary())  # 查看汇总结果
print(square_table.symmetry())  # 只查看配对卡方检验的结果

# 使用mcnemar分析
mcnemar_table = tbl.mcnemar(pd.DataFrame([[56, 35], [21, 28]]))
print("配对卡方检验的p值:", mcnemar_table.pvalue)  # 确切概率结果

四、总结

卡方检验是分析分类变量之间关系的重要工具,能够有效地检验观察数据与期望数据之间的差异。在Python中,statsmodels库为我们提供了便捷的工具来进行卡方检验和相关分析。

希望通过本文的介绍,小伙伴们能对卡方检验有更深入的理解,并能够在实际数据分析中熟练应用。


码字艰辛,本篇内容就分享至此,如果渴望深入了解更多Python机器学习方面的应用,别忘了点击关注博主,引导你从零开始探索Python在统计分析上的奥秘。同时,对于在数据分析与机器学习旅程中感到迷茫的朋友们,欢迎浏览我的专题系列:《Python之机器学习》,让我们一起努力坚强学习,共同进步吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小高要坚强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值