Python实现卡方检验和相关性分析

简介: Python实现卡方检验和相关性分析

卡方检验


卡方检验的主要用途


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

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

分类资料的相关分析

卡方检验的基本原理


H0 :观察频数与期望频数没有差别


其原理为考察基于H0的理论频数分布和实际频数分布间的差异大 小,据此求出相应的P值


案例: 所有受访家庭会按照家庭年收入被分为低收入家庭和高收入家 庭两类,现希望考察不同收入级别的家庭其轿车拥有率是否相同。


基于H0成立,即观察频数和期望频数无差别,也就是两组变量 (家庭收入级别与是否拥有轿车)相互不产生影响,两组变量不相 关,如果检验P值很高,则接受H0;如果检验P值很低,则检验不通 过,观察频数和期望频数有差别,两组变量相关。



卡方统计量


卡方统计量的计算公式:



其中A为实际频数,E为期望频数(理论频数)。


卡方统计量的理解:


当观察频数与期望频数完全一致时,卡方值为0

观察频数与期望频数越接近,两者之间的差异越小,卡方值越小

观察频数与期望频数差异越大,卡方值越大

卡方值的大小也和自由度有关

卡方检验的statsmodels实现


案例: 所有受访家庭会按照家庭年收入被分为低收入家庭和高收入家 庭两类,现希望考察不同收入级别的家庭其轿车拥有率是否相同。



statsmodels中首先需要建立对应的列联表对象:


Table类的方法: test_nominal_association() 无序分类行、列变量的独立性检验

import pandas as pd
import statsmodels.stats.contingency_tables as tbl
# 读取excel文件
home = pd.read_excel("home_income.xlsx")
# 考察不同收入级别的家庭其轿车拥有率是否相同
table = tbl.Table(pd.crosstab(home.Ts9,home.O1))
res = table.test_nominal_association()  # 卡方检验
print("卡方值:",res.statistic)
print("自由度:",res.df)
print("p值:",res.pvalue)  # 格式化后的p值


配对卡方检验


McNemar's检验(配对卡方检验)用于分析两个相关率的变化是否 有统计学意义


案例: 用A、B两种方法检查已确诊的某种疾病患者140名,A法检出91 名(65%),B法检出77名(55%),A、B两法一致的检出56名(40%), 问哪种方法阳性检出率更高?



分析思路:


H0 :两种方法阳性检出率无差别,即b单元格=c单元格

对同一个体,分别有两次不同的测量,并最终构成了两组数据, 因此研究框架是自身配对设计

求出各对的差值,然后考察样本中差值的分布是否按照H0假设 的情况对称分布

主对角线上的样本,两种检验方法的结论相同

非主对角线上的单元格才携带检验方法的差异信息

根据H0得到b、c两格的理论数均为(b+c)/2,对应的配对检验统计 量,经过化简后是:

一般在 b + c < 40 时,需用确切概率法进行检验,或者进行校正


代码实现


statsmodels.stats.contingency_tables中常用的配对卡方的分析使用:


1 tbl.SquareTable 用于分析行列变量类别相同的对称结构方表 (近似结果)

2 tbl.mcnemar 用于分析配对四格表(确切概率结果)

用SquareTable类分析


import numpy as np
import statsmodels.stats.contingency_tables as tbl
table = tbl.SquareTable(np.array([[56,35],[21,28]]))
print(table.summary())  # 查看汇总结果
print(table.symmetry())  # 只查看配对卡方检验的结果


用mcnemar类分析


table = tbl.mcnemar(pd.DataFrame([[56,35],[21,28]]))
table.pvalue  # 确切概率结果

相关分析(关联性分析)概述


什么是相关分析(关联性分析)


相关分析是用于考察变量间数量关系密切程度的分析方法,例如: 身高与体重的关系。


几乎所有涉及到多个变量的假设检验方法,都可以被看作是这些变 量间的关联性分析。


t检验:分组变量与连续因变量间的关联性分析

卡方检验:行、列分类变量间的关联性分析

聚类分析:案例(case)间的关联性分析

多变量回归:因变量和一组自变量间的关联性分析

各种相关系数


连续 vs 连续:Pearson相关系数(双变量正态分布); Spearman秩相关系数(不符合双变量正态分布)

有序 vs 有序:Gamma系数、肯德尔相关系数等(例如:医生 级别与治疗效果的相关关系);也可使用Spearman秩相关系数

无序 vs 无序:列联系数等(例如:民族与职业的关系)

基于卡方统计量进一步推导而来

无方向 0~1

OR/RR:一类特殊的关联强度指标

连续 vs 分类:Eta(本质上是方差解释度,即连续变量的离散度 有多少可以被另外的分类指标所解释)

统计图/统计表在相关分析中的重要性


连续变量:用散点图先确认关联趋势是否为直线

分类变量:分组条图、马赛克图(分组百分条图)等工具

相关系数的计算原理


常用术语(针对两连续变量的相关)


直线相关:两变量呈线性共同增大,或者呈线性一增一减的情况

曲线相关:两变量存在相关趋势,但是为各种可能的曲线趋势

正相关与负相关:如果A变量增加时B变量也增加,则为正相 关,如果A变量增加时B变量减小,则为负相关

完全相关:完全正相关;完全负相关

零相关:自变量的变化,不会影响因变量的变化

Pearson相关系数


计算公式

公式理解:标准差代表变量的离散程度(信息量大小); 协方差Cov(X,Y)代表各变量共同携带的信息量大 小; 相关系数代表两个变量总信息量中的共同部分占比。


相关系数ρ的取值范围:-1 < ρ < 1

其正负反映了相关的方向

|ρ|越接近于1,说明相关性越好

|ρ|越接近于0,说明相关性越差

Pearson相关系数的检验:

H0 :两变量间无直线相关关系,ρ=0

检验方法:t检验

Pearson相关系数的适用条件:

必须是线性相关的情形(可以先绘制散点图观察一下)

针对两连续变量的相关系数

极端值对相关系数的计算影响极大,因此要慎重考虑和使用

要求相应的变量呈双变量正态分布(近似也可以)

Spearman秩相关系数


不服从正态分布的变量、分类或等级变量之间的关联性可采用

Spearman秩相关系数 Spearman提出首先对数据做秩变换,然后再计算两组秩间的直 线相关系数(秩变换分析思想)

相关分析的Python实现

相关分析作为比较简单的方法,在statsmodels中并未作进一步 的完善,因此主要使用scipy实现。


两个连续变量,且符合双变量正态分布:Pearson相关系数

scipy.stats.pearsonr(a, b)

两个连续变量,不符合双变量正态分布:Spearman秩相关系数

scipy.stats.spearmanr(a, b)

两个有序变量:Kendall's Tau;Spearman秩相关系数

scipy.stats.kendalltau(a, b) # 肯德尔相关系数
scipy.stats.spearmanr(a, b) # 斯皮尔曼秩相关系数
import pandas as pd
from scipy import stats as ss
home = pd.read_excel("home_income.xlsx")  # 读取excel文件
# 考察年龄(s3)与总信心指数(index1)间的相关关系
# 先通过散点图,观察两个变量是否为线性关系
home.plot.scatter("s3","index1")
# 年龄分组,重新观察两个变量是否为线性关系
home.groupby("s3").index1.mean().plot()
# 返回皮尔逊相关系数和p值
ss.pearsonr(home.s3,home.index1)



目录
打赏
0
0
0
0
38
分享
相关文章
从混沌到秩序:Python的依赖管理工具分析
Python 的依赖管理工具一直没有标准化,主要原因包括历史发展的随意性、社区的分散性、多样化的使用场景、向后兼容性的挑战、缺乏统一治理以及生态系统的快速变化。依赖管理工具用于处理项目中的依赖关系,确保不同环境下的依赖项一致性,避免软件故障和兼容性问题。常用的 Python 依赖管理工具如 pip、venv、pip-tools、Pipenv、Poetry 等各有优缺点,选择时需根据项目需求权衡。新工具如 uv 和 Pixi 在性能和功能上有所改进,值得考虑。
84 35
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
65 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
257 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
在Python开发中,GIL(全局解释器锁)一直备受关注。本文基于CPython解释器,探讨GIL的技术本质及其对程序性能的影响。GIL确保同一时刻只有一个线程执行代码,以保护内存管理的安全性,但也限制了多线程并行计算的效率。文章分析了GIL的必要性、局限性,并介绍了多进程、异步编程等替代方案。尽管Python 3.13计划移除GIL,但该特性至少要到2028年才会默认禁用,因此理解GIL仍至关重要。
101 16
Python GIL(全局解释器锁)机制对多线程性能影响的深度分析
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
81 37
Python时间序列分析工具Aeon使用指南
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
76 16
Python时间序列分析:使用TSFresh进行自动化特征提取
python爬取Boss直聘,分析北京招聘市场
本文介绍了如何使用Python爬虫技术从Boss直聘平台上获取深圳地区的招聘数据,并进行数据分析,以帮助求职者更好地了解市场动态和职位需求。
使用Python实现智能食品消费市场分析的深度学习模型
使用Python实现智能食品消费市场分析的深度学习模型
153 36
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
119 15
使用Python实现智能食品消费趋势分析的深度学习模型
使用Python实现智能食品消费趋势分析的深度学习模型
156 18

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等