[数学基础知识] Cramér‘s V 相关系数和Python算法实现
1. 什么是Cramér’s V 相关系数
在统计中,Cramér’s V (又称为Cramér’s phi,表示为φc) 是一个衡量两个
分类变量之间关联的度量,它是一个介于0和+1(包括)之间的值, 0表示两个变量无关,1表示完全相关。它是基于Pearson’s chi-squared statistic(皮尔森的卡方统计),由Harald Cramér于1946年发表的。
所以在介绍Cramér’s V 相关系数之前,我们先来了解一下皮尔森的卡方统计。
2. 皮尔森的卡方统计(Pearson’s chi-squared statistic)
2.1 皮尔森的卡方检验(Pearson’s chi-squared test)
是最有名卡方检验之一,最早由卡尔·皮尔逊在1900年发表。
理论不多说了,我们通过一个例子来说明什么是皮尔森的卡方检验。
以下数据来自一个研究关于自闭症和疫苗的关联性的数据。
–表格1–
有自闭症 | 无自闭症 | 总共 | |
---|---|---|---|
打疫苗 | 621 | 440,034 | 440,655 |
不打疫苗 | 117 | 96,531 | 96,648 |
总共 | 738 | 536,565 | 537,303 |
在打疫苗的440,655人中,有自闭症的人有621人。在不打疫苗的96,648中,有自闭症的有117人。那么从这一组数据中,我们能否看出疫苗和自闭症是否有关联呢?
第一步
使用皮尔森的卡方检验,我们首先假设:
H0: 疫苗和自闭症并不关联
H1: 疫苗和自闭症并有关联
如果H0假设成立,那么在打疫苗和不打疫苗的人群中,有自闭症的人数比例应该是一致的。
我们由第三行数据得到,537,303人中有738人患有自闭症,得到患有自闭症的总统比例是738/537,303=0.001374738/537,303=0.001374738/537,303=0.001374。大约是千分之一多一点。
第二部
如果不考虑样本偏差,那么在打疫苗和不打疫苗的人群中,这个比例是一致的,我们就通过计算得到理想状态下打疫苗和不打疫苗两个群体中的自闭症患者人数。
–表格2–
期望值 | 有自闭症 | 无自闭症 | 总共 |
---|---|---|---|
打疫苗 | 440,655*(738/537,303) =602.8 | 440,655*(536,565/537,303)=440,049.7 | 440,655 |
不打疫苗 | 96,648*(738/537,303)=132.7 | 96,648*(536,565/537,303)=96,515.3 | 96,648 |
总共 | 738 | 536,565 | 537,303 |
第三步
我们将上面的的计算结果和实际实验数据进行比较,对每个单元格计算出以下统计量(实际值−期望值)2期望值\frac{(实际值-期望值)^2}{期望值}期望值(实际值−期望值)2,然后对它们求和。
TESTSTAT=χSTAT2=∑所有单元格(O−E)2ETEST_{STAT} = \chi ^2_{STAT} = \sum_{所有单元格}{\frac{(O-E)^2}{E}}TESTSTAT=χSTAT2=所有单元格∑E(O−E)2
=(621−602.8)602.8+...+(96,531−96,515.3)96,515.3=2.28=\frac{(621-602.8)}{602.8}+...+\frac{(96,531-96,515.3)}{96,515.3}=2.28=602.8(621−602.8)+...+96,515.3(96,531−96,515.3)=2.28
这个结果服从于χ2\chi ^2χ2分布, 我们可以通过查表得知
P−Value=P(χSTAT2>=2.28))=0.1309P-Value=P(\chi^2_{STAT}>=2.28))=0.1309P−Value=P(χSTAT2>=2.28))=0.1309
根据经验值,一般拒绝域取0.05,0.1309>0.05, H0为真。
因此,我们认为没有明显证据证明疫苗和自闭症有联系。
3. Cramér’s V 相关系数
3.1 自由度
Cramér’s V 相关系数是χ2\chi^2χ2统计量除以卡方检验中的自由度。
所谓自由度与卡方检验中的行和列数有关,如果我们仔细观察上面的表格2,我们会发现其实四个单元格中如果一个单元格的值已经确定,则其他三个单元格的值就都确定了,我们称之自由度为1。
对于卡方检验中的nnn行mmm列的表格其自由度为:
自由度=(n−1)(m−1)自由度=(n-1)(m-1)自由度=(n−1)(m−1)
3.2 计算Cramér’s V 相关系数
在算得卡方统计量的基础上再进行计算的。
Crameˊr′sV=∑所有单元格(O−E)2E统计样本量∗(min(n,m)−1)Cramér's V = \frac{\sum_{所有单元格}{\frac{(O-E)^2}{E}}}{统计样本量*(min(n,m)-1)}Crameˊr′sV=统计样本量∗(min(n,m)−1)∑所有单元格E(O−E)2
说明
- 统计样本量是指总体样本条数,以上面卡方统计的例子为例,这个统计样本量是537,303。
- 卡方统计的n行m列数中较小一个是指卡方统计中使用的这个表格的行列数,在上面例子中,行数是2,列数也是2,那么min(2,2)=2,那min(2,2)-1=1
所以,以上面例子为例,则计算中的分子是537,303*1。
因此,打疫苗和自闭症之间的相关系数是2.28/537,303=0.00000422.28/537,303=0.00000422.28/537,303=0.0000042。
4. Python代码
直接奉上Python代码。
def calculate_caremers_v(df, column_a, column_b):"""calculate carmer v for the 2 input columns in dataframe:param df: Pandas dataframe object :param column_a: 1st column to study :param column_b: 2nd column to study:return: Pandas dataframe object with the duplicated recorders removed. """if column_a not in df.columns:print("the input columne %s doesn't exit in the dataframe."%column_a)return Noneelif column_b not in df.columns:print("the input columne %s doesn't exit in the dataframe."%column_b)return Noneelse:cross_tb = pd.crosstab(index = df[column_a], columns = df[column_b])np_tb = cross_tb.to_numpy()min_row_column = min(np_tb.shape[0],np_tb.shape[1])colume_sum = np_tb.sum(axis = 0)row_sum = np_tb.sum(axis = 1)total_sum = np_tb.sum()np_mid = np.matmul(row_sum.reshape(len(row_sum),1),colume_sum.reshape(1,len(colume_sum)))/total_sumnew_tb = np.divide(np.power((np_tb-np_mid),np.array([2])),np_mid)return new_tb.sum()/(total_sum*(min_row_column-1))
[数学基础知识] Cramér‘s V 相关系数和Python算法实现相关推荐
- 美国 AI 博士:什么都不会怎么学 Python?60 天知识脉络图,快速挑战 Python 全栈
我见过市面上很多的 Python 讲解教程和书籍,他们大都这样讲 Python 的: 先从 Python 的发展历史开始,介绍 Python 的基本语法规则,Python 的 list, dict, ...
- linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...
本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...
- java相关的数学知识_程序员必备的一些数学基础知识
作为一个标准的程序员,应该有一些基本的数学素养,尤其现在很多人在学习人工智能相关知识,想抓住一波人工智能的机会.很多程序员可能连这样一些基础的数学问题都回答不上来. 矩阵A(m,n)与矩阵B(n,k) ...
- 【本科数学基础知识整理】
[本科数学基础知识整理] 文章目录 前言 一.高等数学 二.微积分 1. 三. 六.随机变量 七.概率论 7.1 概念解释(PDF.PMF.CDF) 7.1.1 PMF:概率质量函数 7.1.2 PD ...
- 【知识】人工智能数学基础知识
数学是打开科学大门的钥匙.--培根 数学基础知识蕴含着处理智能问题的基本思想与方法,也是理解复杂算法的必备要素.今天的种种人工智能技术归根到底都建立在数学模型之上,要了解人工智能,首先要掌握必备的数学 ...
- 计算机c语言与数学知识的联系,计算机数学基础知识
计算机数学基础是计算机专业必修的数学基础知识.以下是小编整理的关于计算机数学基础知识,希望大家认真阅读! 1.计算机数学基础 是计算机专业必修的数学基础知识.针对计算机专业的特点,加强了Mathema ...
- Cramér’s V的公式、例子、SPSS
Cramér's V – What and Why? https://www.spss-tutorials.com/cramers-v-what-and-why/#ref20 Cramér's V i ...
- 机器学习所需要的数学基础知识---矩阵(1)
机器学习所需要的数学基础知识-矩阵(1) 本系列文章为机器学习所需要的数学基础知识,在机器学习文章中如需要,会给出本系列文章的链接,如有问题欢迎给我留言.数学公式使用Letex编辑,原文博客http: ...
- Python算法:推导、递归和规约
Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...
最新文章
- 并发 vs 并行 (Concurrency Is Not Parallelism)
- Cosmos的基石:IL2CPU编译器--.net/C#开源操作系统学习系列三
- 自我评价中专计算机600作文,自我评价作文600字
- agc018B Sports Festival
- 你们公司内部有WiKi么
- linux 根据ip查机器名
- Qt文档阅读笔记-Image QML官方解析与实例
- 网传铁饭碗职业排名,公务员仅排第八!
- iweboffice之word——自定义菜单的使用
- 随机出题在线考试系统php_随机出题在线考试系统
- win7打开xp共享的计算机,win7系统如何访问xp共享打印机_windows7连接xp共享打印机的方法...
- Maya模型制作心得
- 执行多个window.onload匿名函数的方法
- VS2017搭建linux开发环境
- Annoy算法简单介绍
- Android9.0版本Vold服务源码分析
- 登录的双因素认证-Golang实现
- 李宏毅 Attention
- 中信易卡,你值得搬砖吗?
- 看片显示服务器不稳定,无限“看片”,资源随便下,这回爽了!