作者简介:热爱数据分析,学习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. 使用 SquareTable
和 mcnemar
类进行分析
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之机器学习》,让我们一起努力坚强学习,共同进步吧~