当前位置: 首页 > news >正文

《sklearn机器学习——聚类性能指标》Contingency Matrix(列联表)详解

Contingency Matrix(列联表)详解

1. 简介

Contingency Matrix,中文通常称为列联表(Contingency Table),是统计学中用于分析两个或多个分类变量之间关系的一种基本工具。它通过一个表格形式,展示不同类别变量的观测频数(或频率)在各个交叉组合下的分布情况,从而帮助研究者判断变量之间是否存在关联性或依赖关系。

1.1 基本概念

  • 分类变量(Categorical Variable):取值为有限个类别的变量,如性别(男/女)、教育程度(小学/中学/大学)、产品类别(A/B/C)等。
  • 交叉频数表:列联表本质上是一个交叉频数表,其行和列分别代表不同变量的类别,单元格中的数值表示同时属于某行类别和某列类别的样本数量。
  • 独立性检验:列联表最常用于卡方独立性检验(Chi-Square Test of Independence),以判断两个分类变量是否相互独立。

1.2 历史背景

列联表的概念最早由英国统计学家卡尔·皮尔逊(Karl Pearson)在20世纪初提出,作为其在统计学中发展卡方检验的一部分。此后,列联表成为社会科学、医学、市场研究、机器学习等领域中分析分类数据的标准工具。

1.3 常见形式

  • 2×2列联表:最简单的形式,涉及两个二分类变量。
  • R×C列联表:更一般的形式,行数为R,列数为C,适用于多分类变量。

2. 数学公式与详细推导

2.1 基本结构

设我们有两个分类变量:

  • 变量 XXXrrr 个类别:X1,X2,…,XrX_1, X_2, \dots, X_rX1,X2,,Xr
  • 变量 YYYccc 个类别:Y1,Y2,…,YcY_1, Y_2, \dots, Y_cY1,Y2,,Yc

则其列联表为一个 r×cr \times cr×c 的矩阵,记为 OijO_{ij}Oij,其中 OijO_{ij}Oij 表示在样本中同时属于 XiX_iXiYjY_jYj 的观测频数。

Y1Y_1Y1Y2Y_2Y2…\dotsYcY_cYcRow Total
X1X_1X1O11O_{11}O11O12O_{12}O12…\dotsO1cO_{1c}O1cR1R_1R1
X2X_2X2O21O_{21}O21O22O_{22}O22…\dotsO2cO_{2c}O2cR2R_2R2
⋮\vdots⋮\vdots⋮\vdots⋱\ddots⋮\vdots⋮\vdots
XrX_rXrOr1O_{r1}Or1Or2O_{r2}Or2…\dotsOrcO_{rc}OrcRrR_rRr
Col TotalC1C_1C1C2C_2C2…\dotsCcC_cCcTotal NNN

其中:

  • 行和:Ri=∑j=1cOijR_i = \sum_{j=1}^{c} O_{ij}Ri=j=1cOij
  • 列和:Cj=∑i=1rOijC_j = \sum_{i=1}^{r} O_{ij}Cj=i=1rOij
  • 总样本量:N=∑i=1r∑j=1cOij=∑Ri=∑CjN = \sum_{i=1}^{r} \sum_{j=1}^{c} O_{ij} = \sum R_i = \sum C_jN=i=1rj=1cOij=Ri=Cj

2.2 期望频数(Expected Frequency)

变量 XXXYYY 相互独立的原假设 H0H_0H0 下,每个单元格的期望频数 EijE_{ij}Eij 可通过以下公式计算:

Eij=Ri⋅CjN E_{ij} = \frac{R_i \cdot C_j}{N} Eij=NRiCj

推导过程
XXXYYY 独立,则联合概率 P(Xi∩Yj)=P(Xi)⋅P(Yj)P(X_i \cap Y_j) = P(X_i) \cdot P(Y_j)P(XiYj)=P(Xi)P(Yj)

样本中:

  • P(Xi)≈RiNP(X_i) \approx \frac{R_i}{N}P(Xi)NRi
  • P(Yj)≈CjNP(Y_j) \approx \frac{C_j}{N}P(Yj)NCj

因此,期望频数为:
Eij=N⋅P(Xi∩Yj)=N⋅RiN⋅CjN=RiCjN E_{ij} = N \cdot P(X_i \cap Y_j) = N \cdot \frac{R_i}{N} \cdot \frac{C_j}{N} = \frac{R_i C_j}{N} Eij=NP(XiYj)=NNRiNCj=NRiCj

2.3 卡方统计量(Chi-Square Statistic)

用于检验变量独立性的卡方统计量定义为:

χ2=∑i=1r∑j=1c(Oij−Eij)2Eij \chi^2 = \sum_{i=1}^{r} \sum_{j=1}^{c} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} χ2=i=1rj=1cEij(OijEij)2

该统计量衡量观测频数与期望频数之间的差异。若差异显著大,则拒绝独立性假设。

2.3.1 分布性质

H0H_0H0 成立且样本量足够大时,χ2\chi^2χ2 统计量近似服从自由度为:

df=(r−1)(c−1) df = (r - 1)(c - 1) df=(r1)(c1)

的卡方分布 χ2(df)\chi^2(df)χ2(df)

2.4 独立性检验步骤

  1. 提出假设

    • H0H_0H0:变量 XXXYYY 独立
    • H1H_1H1:变量 XXXYYY 不独立(存在关联)
  2. 构造列联表,计算 OijO_{ij}OijRiR_iRiCjC_jCjNNN

  3. 计算期望频数 Eij=RiCjNE_{ij} = \frac{R_i C_j}{N}Eij=NRiCj

  4. 计算卡方统计量
    χ2=∑(Oij−Eij)2Eij \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} χ2=Eij(OijEij)2

  5. 确定自由度 df=(r−1)(c−1)df = (r-1)(c-1)df=(r1)(c1)

  6. 查卡方分布表或计算p值,与显著性水平 α\alphaα(如0.05)比较

  7. 决策

    • p<αp < \alphap<α,拒绝 H0H_0H0,认为变量有关联
    • 否则,不拒绝 H0H_0H0

2.5 连续性校正(Yates’ Correction)

对于 2×2 列联表,当样本量较小时,可使用耶茨连续性校正(Yates’ Correction for Continuity)以提高近似精度:

χYates2=∑i=12∑j=12(∣Oij−Eij∣−0.5)2Eij \chi^2_{\text{Yates}} = \sum_{i=1}^{2} \sum_{j=1}^{2} \frac{(|O_{ij} - E_{ij}| - 0.5)^2}{E_{ij}} χYates2=i=12j=12Eij(OijEij0.5)2

此校正使卡方值略微减小,降低I类错误风险。

2.6 Fisher 精确检验(Fisher’s Exact Test)

当期望频数过小(如 Eij<5E_{ij} < 5Eij<5 的单元格超过20%),卡方检验不再适用,应使用 Fisher 精确检验

对于 2×2 表:

YesNoTotal
Exposedaba+b
Notcdc+d
Totala+cb+dN

Fisher 精确检验基于超几何分布,计算在固定边际总数下,观察到当前或更极端配置的概率:

p=(a+ba)(c+dc)(Na+c)=(a+b)!(c+d)!(a+c)!(b+d)!a!b!c!d!N! p = \frac{{\binom{a+b}{a} \binom{c+d}{c}}}{{\binom{N}{a+c}}} = \frac{(a+b)!(c+d)!(a+c)!(b+d)!}{a!b!c!d!N!} p=(a+cN)(aa+b)(cc+d)=a!b!c!d!N!(a+b)!(c+d)!(a+c)!(b+d)!

然后对所有“更极端”的表求和,得到总p值。

2.7 关联性度量指标

列联表还可用于计算变量间的关联强度。

2.7.1 Phi 系数(Phi Coefficient)

仅适用于 2×2 表:

ϕ=χ2N \phi = \sqrt{\frac{\chi^2}{N}} ϕ=Nχ2

取值范围 [−1,1][-1, 1][1,1],绝对值越大表示关联越强。

2.7.2 Cramer’s V

适用于 r×cr \times cr×c 表:

V=χ2/Nmin⁡(r−1,c−1) V = \sqrt{ \frac{\chi^2 / N}{\min(r-1, c-1)} } V=min(r1,c1)χ2/N

取值范围 [0,1][0, 1][0,1],越接近1表示关联越强。

2.7.3 列联系数(Contingency Coefficient)

C=χ2χ2+N C = \sqrt{ \frac{\chi^2}{\chi^2 + N} } C=χ2+Nχ2

但最大值小于1,受表大小影响,不常用。

2.7.4 相对风险(Relative Risk, RR)与比值比(Odds Ratio, OR)

在医学研究中常用于 2×2 表:

  • 相对风险
    RR=a/(a+b)c/(c+d) RR = \frac{a/(a+b)}{c/(c+d)} RR=c/(c+d)a/(a+b)

  • 比值比
    OR=a/bc/d=adbc OR = \frac{a/b}{c/d} = \frac{ad}{bc} OR=c/da/b=bcad

OR 更适用于病例对照研究。


3. 使用场景

列联表广泛应用于多个领域,以下为典型使用场景:

3.1 医学与流行病学

  • 疾病与暴露因素的关系:如吸烟(是/否)与肺癌(是/否)的2×2表,通过卡方检验判断是否相关。
  • 药物疗效评估:比较实验组与对照组的治愈率。
  • 基因型与表型关联:分析特定基因突变与疾病发生的关系。

3.2 社会科学

  • 教育程度与收入水平:分析不同教育背景人群的收入分布。
  • 政治倾向与年龄组:研究不同年龄段对政党的支持率。
  • 性别与职业选择:探讨性别是否影响职业分布。

3.3 市场营销与消费者行为

  • 广告渠道与购买行为:比较不同广告投放渠道带来的转化率。
  • 产品偏好与地区:分析不同地区消费者对产品的偏好差异。
  • 客户满意度与服务类型:评估不同服务模式对客户满意度的影响。

3.4 质量控制与工业统计

  • 生产批次与缺陷率:检查不同生产批次的产品缺陷是否存在差异。
  • 操作员与错误率:分析不同操作员的操作失误频率是否一致。

3.5 机器学习与数据挖掘

  • 混淆矩阵(Confusion Matrix):本质是列联表,用于评估分类模型性能(真实标签 vs 预测标签)。
  • 特征选择:通过卡方检验判断分类特征与目标变量的相关性,用于特征筛选。
  • 关联规则挖掘:如Apriori算法中,频繁项集的发现依赖于联合频数统计。

3.6 教育评估

  • 教学方法与学生成绩:比较不同教学方法下学生的成绩分布(如优秀/良好/及格/不及格)。
  • 性别与学科偏好:研究学生性别与选修课程之间的关系。

3.7 人力资源管理

  • 员工流失与部门:分析不同部门的员工离职率是否存在显著差异。
  • 绩效等级与培训经历:考察接受培训的员工是否绩效更高。

4. 优缺点分析

4.1 优点

4.1.1 直观易懂

列联表以表格形式呈现数据,结构清晰,便于非专业人士理解变量之间的交叉分布。

4.1.2 适用范围广

适用于任何分类变量,无论名义型(nominal)还是有序型(ordinal),均可构建列联表进行分析。

4.1.3 支持多种统计检验
  • 卡方独立性检验
  • Fisher 精确检验
  • 似然比检验(G-test)
  • Mantel-Haenszel 检验(用于分层数据)
4.1.4 可计算多种关联度量

如 Phi、Cramer’s V、RR、OR 等,不仅能判断“是否相关”,还能量化“相关程度”。

4.1.5 易于实现

几乎所有统计软件(SPSS、R、Python、SAS)都内置列联表分析功能,代码简洁,计算高效。

4.1.6 适用于小样本(配合Fisher检验)

当卡方检验不适用时,Fisher精确检验可在小样本下提供精确p值。


4.2 缺点与局限性

4.2.1 对样本量敏感
  • 大样本问题:即使微弱的关联,在大样本下也可能导致卡方检验显著,造成“统计显著但实际无意义”。
  • 小样本问题:期望频数过小时,卡方近似失效,需依赖Fisher检验,但后者计算复杂且仅适用于小表。
4.2.2 仅适用于分类变量

无法直接处理连续变量。若要使用,需先将连续变量离散化(分箱),但这会损失信息并引入主观性。

4.2.3 不能确定因果关系

列联表只能揭示变量间的统计关联,不能推断因果方向。例如,“吸烟与肺癌相关”不等于“吸烟导致肺癌”。

4.2.4 对稀疏表敏感

当表中存在大量零频数或低频数单元格时,卡方检验可能不可靠,需合并类别或使用精确检验。

4.2.5 多维列联表解释困难

当变量超过两个时,形成高维列联表(如3维),可视化和解释变得复杂,需借助对数线性模型等高级方法。

4.2.6 边际分布影响结果

卡方检验依赖边际总数,相同的关联模式在不同边际分布下可能得出不同结论。

4.2.7 不适用于配对数据

对于配对样本(如前后测试),应使用McNemar检验而非普通卡方检验。


5. 实际案例分析(2×2表)

5.1 问题描述

研究吸烟是否与肺癌发生有关。调查200人,结果如下:

肺癌无肺癌总计
吸烟6040100
不吸烟2080100
总计80120200

5.2 卡方检验

  1. 期望频数

    • E11=(100×80)/200=40E_{11} = (100×80)/200 = 40E11=(100×80)/200=40
    • E12=(100×120)/200=60E_{12} = (100×120)/200 = 60E12=(100×120)/200=60
    • E21=(100×80)/200=40E_{21} = (100×80)/200 = 40E21=(100×80)/200=40
    • E22=(100×120)/200=60E_{22} = (100×120)/200 = 60E22=(100×120)/200=60
  2. 卡方统计量
    χ2=(60−40)240+(40−60)260+(20−40)240+(80−60)260=10+6.67+10+6.67=33.34 \chi^2 = \frac{(60-40)^2}{40} + \frac{(40-60)^2}{60} + \frac{(20-40)^2}{40} + \frac{(80-60)^2}{60} = 10 + 6.67 + 10 + 6.67 = 33.34 χ2=40(6040)2+60(4060)2+40(2040)2+60(8060)2=10+6.67+10+6.67=33.34

  3. 自由度(2−1)(2−1)=1(2-1)(2-1) = 1(21)(21)=1

  4. 查表χ0.052(1)=3.84\chi^2_{0.05}(1) = 3.84χ0.052(1)=3.84,而 33.34>3.8433.34 > 3.8433.34>3.84,故 p<0.05p < 0.05p<0.05

  5. 结论:拒绝独立性假设,吸烟与肺癌显著相关。

5.3 关联度量

  • 比值比(OR)
    OR=60×8040×20=4800800=6.0 OR = \frac{60×80}{40×20} = \frac{4800}{800} = 6.0 OR=40×2060×80=8004800=6.0
    即吸烟者患肺癌的几率是不吸烟者的6倍。

  • 相对风险(RR)
    RR=60/10020/100=3.0 RR = \frac{60/100}{20/100} = 3.0 RR=20/10060/100=3.0
    吸烟者患肺癌的风险是不吸烟者的3倍。


6. 高维列联表与对数线性模型

当涉及三个或更多分类变量时,可构建多维列联表。例如,研究“吸烟”、“饮酒”与“肺癌”的关系。

此时,可使用对数线性模型(Log-linear Model)建模:

log⁡(μijk)=λ+λiX+λjY+λkZ+λijXY+λikXZ+λjkYZ+λijkXYZ \log(\mu_{ijk}) = \lambda + \lambda^X_i + \lambda^Y_j + \lambda^Z_k + \lambda^{XY}_{ij} + \lambda^{XZ}_{ik} + \lambda^{YZ}_{jk} + \lambda^{XYZ}_{ijk} log(μijk)=λ+λiX+λjY+λkZ+λijXY+λikXZ+λjkYZ+λijkXYZ

其中 μijk\mu_{ijk}μijk 为期望频数。通过比较嵌套模型的似然比,可判断变量间是否存在交互作用。


7. 在Python中的实现

import numpy as np
import pandas as pd
from scipy.stats import chi2_contingency, fisher_exact# 构造列联表
data = np.array([[60, 40],[20, 80]])# 卡方检验
chi2, p, dof, expected = chi2_contingency(data)
print(f"卡方值: {chi2:.2f}, p值: {p:.4f}, 自由度: {dof}")
print("期望频数:")
print(expected)# Fisher精确检验
odds_ratio, p_fisher = fisher_exact(data)
print(f"Fisher检验p值: {p_fisher:.4f}, OR: {odds_ratio:.2f}")# Cramer's V
def cramers_v(confusion_matrix):chi2 = chi2_contingency(confusion_matrix)[0]n = confusion_matrix.sum()phi2 = chi2 / nr, k = confusion_matrix.shapereturn np.sqrt(phi2 / min(r-1, k-1))print(f"Cramer's V: {cramers_v(data):.3f}")

输出结果:

卡方值: 31.69, p值: 0.0000, 自由度: 1
期望频数:
[[40. 60.][40. 60.]]
Fisher检验p值: 0.0000, OR: 6.00
Cramer's V: 0.398

8. 总结

列联表是分析分类变量关系的基础而强大的工具。它通过简单的频数统计,结合卡方检验、Fisher检验等方法,能够有效判断变量间的独立性与关联性。其优点在于直观、通用、易于实现,广泛应用于医学、社会学、市场研究等领域。

然而,也需注意其局限性:对样本量敏感、不能推断因果、不适用于连续变量等。在实际应用中,应结合效应量(如Cramer’s V、OR)而非仅依赖p值,并在必要时使用精确检验或多变量模型进行深入分析。

掌握列联表的构建、检验与解释,是数据分析人员必备的核心技能之一。

http://www.xdnf.cn/news/1473913.html

相关文章:

  • PlantSimulation 在汽车总装车间配送物流仿真中的应用
  • Fantasia3D:高质量文本到3D内容创建工具
  • 【基础-判断】架构设计时需要考虑“一次开发,多端部署”,这样可以节省跨设备UI开发工作量,同时提升应用部署的伸缩性。
  • 【基础-判断】Background状态在UIAbility实例销毁时触发,可以在onDestroy()回调中进行系统资源的释放、数据的保存等操作。
  • wpf之TextBlock
  • Altium Designer(AD24)切换工作界面为浅灰色的方法
  • 怎么用 tauri 创建一个桌面应用程序(Electron)
  • 新手SEO优化快速起步教程
  • C++ Lambda 表达式完整指南
  • Python 正则表达式实战:用 Match 对象轻松解析拼接数据流
  • SpringAMQP
  • EMS 抗扰度在边缘计算产品电路设计的基本问题
  • 《AI大模型应知应会100篇》第68篇:移动应用中的大模型功能开发 —— 用 React Native 打造你的语音笔记摘要 App
  • 深入剖析Spring Boot自动配置原理
  • JAVA同城打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车源码
  • Android模拟简单的网络请求框架Retrofit实现
  • 具身智能模拟器:解决机器人实机训练场景局限与成本问题的创新方案
  • 【尚跑】2025逐日者15KM社区赛西安湖站,74分安全完赛
  • 腾讯混元游戏视觉生成平台正式发布2.0版本
  • 软件设计师备考资料与高效复习方法分享
  • 小米笔记本电脑重装C盘教程
  • Spring MVC 处理请求的流程
  • 提示语规则引擎:spring-ai整合liteflow
  • [Upscayl图像增强] 多种AI处理模型 | 内置模型与自定义模型
  • IDEA修改系统缓存路径,防止C盘爆满
  • echarts实现两条折线区域中间有线连接,custom + renderItem(初级版)
  • 本地MOCK
  • Redis中的List数据类型
  • 002 -Dephi -Helloworld
  • 浅谈前端框架