Python实现卡方检验和相关性分析
目录
卡方检验
卡方检验的statsmodels实现
配对卡方检验
相关分析(关联性分析)概述
相关系数的计算原理
相关分析的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)
Python实现卡方检验和相关性分析相关推荐
- Python使用matplotlib可视化相关性分析热力图图heatmap、使用seaborn中的heatmap函数可视化相关性热力图(Correllogram)
Python使用matplotlib可视化相关性分析热力图图heatmap.使用seaborn中的heatmap函数可视化相关性热力图(Correllogram) 目录
- 卡方检验--离散变量相关性分析--机器学习特征选择
一.卡方检验理论 这部分来自<概率论与数理统计>.先从理论角度介绍卡方检验是什么. 卡方检验起始就是一种假设检验. 假定一个总体可以分成r类,从该总体获得了样本数据集.从该样本数据集出发, ...
- python黑色星期五_使用Python进行黑色星期五的相关性分析
一.数据来源:https://www.kaggle.com/mehdidag/black-fridaywww.kaggle.com 二.分析思路: 通过相关性分析,找到对应的用户特征 三.数据处理 ...
- 用 Python 对数据进行相关性分析
在进行数据分析时,我们所用到的数据往往都不是一维的,而这些数据在分析时难度就增加了不少,因为我们需要考虑维度之间的关系.而这些维度关系的分析就需要用一些方法来进行衡量,相关性分析就是其中一种.本文就用 ...
- Python特征分析- 相关性分析
Python特征分析- 相关性分析 相关性分析 引入库 图示初判 变量之间的线性相关性 散点图矩阵初判多变量间关系 Pearson相关系数 创建样本数据 正态性检验 → pvalue >0.05 ...
- Python数据特征分析-对比分析
Python数据特征分析-对比分析 对比分析 1.绝对数比较 → 相减 生成数据 折线图比较 柱状图比较 柱状图堆叠图比较 差值折线图比较 2.相对数比较 → 相除 结构分析 生成数据 计算额度占比 ...
- Python笔记-相关性分析(连续变量和分类变量)
概念 相关性分析:两个连续变量之间的关系检验. Pearson相关系数:衡量两个变量的线性相关关系: Spearman相关系数:衡量两个变量的线性相关关系,部分非线性的也可以衡量: Kendall相关 ...
- python可视化lassocv特征筛选之后的特征的相关性分析热力图
python可视化lassocv特征筛选之后的特征的相关性分析热力图 目录 python可视化lassocv特征筛选之后的特征的相关性分析热力图 #lassocv模型
- python 相关性分析_数据分析---用Python进行相关性分析(兼谈假设检验)
一.相关关系和相关系数 世上除了因果关系,还有相关关系. 有一个叫"相关系数"的指标来量化两个事物之间的相关程度. 其中相关系数用"r"表示,取值范围介于-1和 ...
最新文章
- python 操作微信定时发信息
- Redis对象类型与编码
- MongoDB基本概念和安装配置
- 音频处理八:(MFCC 的计算)
- 最全的http头部信息分析(转载)
- Oracle SQL Parsing Flow Diagram(SQL 解析流程图)
- Vue.js中data,props和computed数据
- python字典长度可变吗_[python] 根据字典中的信息生成列表,每次都会额外变长。...
- Android的Theme主题切换
- 几何画板椭圆九种画法_几何画板怎么画椭圆 几何画板椭圆绘制教程
- 接口测试面试题及参考答案(汇总),真香
- python中pandas库的作用_python之pandas库详解
- 诚之和:太平鸟难渡“抄袭劫”?
- Redis高级特性RDB、AOF、事务、Stream、Pipeline和Lua脚本
- TRITTON天猫旗舰店开业 2月20日7折大促
- 鲲鹏服务器gpu型号,GPU服务器服务
- 今天看了ning的介绍,很有意思
- 费曼:数学与物理学的关系
- 如何做浏览器兼容性测试?教你几招
- C语言小明申请QQ号码
热门文章
- Mac电脑截图快捷键 1
- python实现qq自动点赞_Python实现QQ自动点赞
- java stringbuilder 清空问题
- C语言指针基础知识点(七)--通过指针引用字符串
- php excel多级下拉菜单自动匹配,让Excel如程序般酷炫,两步让多级下拉菜单自动匹配内容...
- 古镇智慧旅游建设方案ppt
- 计算机语言表示教师节快乐,表达教师节快乐的祝福语集合31句
- python判断正负零_javascript 判断正负0
- 您最喜欢的“非主流”编程语言是什么?
- oracle 多个单引号,oracle多个单引号的处理