机器学习基础--卡方检验

卡方检验

在统计分析阶段的假设检验中提及到了卡方检验,是针对总体方差的检验

卡方检验的主要用途

  • 两个率或两个构成比比较的卡方检验
  • 多个率或多个构成比比价的卡方检验
  • 分类资料的相关分析

卡方检验的基本原理

H0:观察频数与期望频数没有差别
其原理为考察基于H0的理论频数分布和实际频数分布间的差异大小,据此求出相应的P值。

卡方统计量的理解:

  • 当观察频数与期望频数完全一致时,卡方值为0
  • 观察频数与期望频数越接近,两者之间的差异越小,卡方值越小
  • 观察频数与期望频数差异越大,卡方值越大
  • 卡方值的大小也和自由度有关

在这里插入图片描述

卡方检验的statsmodels实现

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

# 读入文件
home = pd.read_excel("home_income.xlsx")
home.head()

# 抽取需要的数据
pd.crosstab(home.Ts9,home.O1)# 观察相应的交叉表

# 考察不同收入级别的家庭其轿车拥有率
table = tbl.Table(pd.crosstab(home.Ts9,home.O1))

res = table.test_nominal_association()    # 卡方检验
print(f"卡方值:{res.statistic}" )
print(f"自由度:{res.df}")
print(f"P值:{res.pvalue}") # 格式化后的P值,如果结果为0.0000001,会格式化为0

配对卡方检验

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

分析思路

  • H0:两种方法阳性检出率无差别,即b单元格=c单元格
  • 对同一个体,分别有两次不同的测量,并最终构成了两组数据,因此研究框架是自身配对设计
  • 求出各对的差值,然后考察样本中差值的分布是否按照H0假设的情况对称分布
  • 主对角线上的样本,两种检验方法的结论相同
  • 非主对角线上的单元格才携带检验方法的差异信息
  • 根据H0得到b、c两格的理论数均为(b+c)/2,对应的配对检验统计量,经过化简后是:

x2=(b−c)2/(b+c)

代码实现

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

  • tbl.SquareTable 用于分析行列变量类别相同的对称结构方表(近似结果)
  • tbl.mcnemar 用于分析配对四格表(确切概率结果)
import numpy as np
import pandas as pd
import statsmodels.stats.contingency_tables as tbl

table = tbl.SquareTable(np.array([[56,35],[21,28]]))
table

# 输出汇总结果
print(table.summary())

# 只输出配对卡方检验的结果
print(table.symmetry())

table = tbl.mcnemar(pd.DataFrame([[56,35],[21,28]]))
table.pvalue

相关分析概述

什么是相关分析

相关分析是用于考察变量间数量关系密切程度的分析方法。例如:身高和体重的关系。几乎所有涉及到多个变量的假设检验方法,都可以看做这些变量间的相关性分析。

  • t检验:分组变量与连续因变量之间的相关分析
  • 卡方检验:行、列分类变量间的关联性分析
  • 聚类分析:案例间的关联性分析
  • 多变量回归:因变量和一组自变量的关联性分析

各种相关系数

  • 连续 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.kendalltua(a, b)
    scipy.stats.spearmanr(a, b)

import pandas as pd
from scipy import stats as ss

# 读取数据
home = pd.read_excel("home_income.xlsx")
home.head()

# 查看两个分类是否有线性关系(散点图)
home.plot.scatter("s3","index1")    # 并不能直观的看出

# 年龄分组,重新看两个变量是否为线性关系
home.groupby("s3").index1.mean().plot()

# 返回皮尔逊相关系数,和P值
ss.pearsonr(home.s3,home.index1)

# 绘制交叉表观察
pd.crosstab(home.Qa3,home.Qa4)

ss.kendalltau(home.Qa3,home.Qa4)    # 肯德尔相关系数

ss.spearmanr(home.Qa3,home.Qa4) # 斯皮尔曼相关系数

RR与OR

RR(Relative Risk)——相对危险度

  • 表示两种情况下发病密度或者说发病概率之比
  • Pt:实验组人群反应阳性概率
  • Pc:对照组人群反应阳性概率
  • 如果RR > 1,说明相应的自变量取值增加,会导致个体发病/死亡风险增加若干倍,例如:吸烟者的发病概率是非吸烟者的5倍
  • RR在医学中得到了极为广泛的应用
  • RR的计算条件比较苛刻(观察周期长)

OR(Odds Ratio)——优势比

  • 为下列两种比例之比
  • 反应阳性人群中实验因素有无的比例 a/b
  • 反应阴性人群中实验因素有无的比例 c/d
  • OR可以间接反映关联强度,但是理解上比较困难
  • 发病概率较低时,OR往往近似的在按照RR的含义进行解释和使用

代码实现

scipy.stats.fisher_exact()中可以计算OR值,相应的检验P值则是确切概率法的P值
OR, P = ss.fisher_exact(pd.crosstab(home.Ts9, home.O1))

statsmodels的实现方式

import numpy as np
import statsmodels.stats.contingency_tables as tbl
# 这里必须使用np.array函数进行数组转换,否则后续计算会出问题
table = tbl.Table2x2(np.array(pd.crosstab(home.Ts9, home.O1)))
print(table.oddsratio) # OR值
print(table.summary()) # 汇总信息
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值