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算法实现相关推荐

  1. 美国 AI 博士:什么都不会怎么学 Python?60 天知识脉络图,快速挑战 Python 全栈

    我见过市面上很多的 Python 讲解教程和书籍,他们大都这样讲 Python 的: 先从 Python 的发展历史开始,介绍 Python 的基本语法规则,Python 的 list, dict, ...

  2. linux系统python截图不显示中文_Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题...

    本文主要向大家介绍了Linux运维知识之解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题,通过具体的内容向大家展现,希望对大家学习Linux运维知 ...

  3. java相关的数学知识_程序员必备的一些数学基础知识

    作为一个标准的程序员,应该有一些基本的数学素养,尤其现在很多人在学习人工智能相关知识,想抓住一波人工智能的机会.很多程序员可能连这样一些基础的数学问题都回答不上来. 矩阵A(m,n)与矩阵B(n,k) ...

  4. 【本科数学基础知识整理】

    [本科数学基础知识整理] 文章目录 前言 一.高等数学 二.微积分 1. 三. 六.随机变量 七.概率论 7.1 概念解释(PDF.PMF.CDF) 7.1.1 PMF:概率质量函数 7.1.2 PD ...

  5. 【知识】人工智能数学基础知识

    数学是打开科学大门的钥匙.--培根 数学基础知识蕴含着处理智能问题的基本思想与方法,也是理解复杂算法的必备要素.今天的种种人工智能技术归根到底都建立在数学模型之上,要了解人工智能,首先要掌握必备的数学 ...

  6. 计算机c语言与数学知识的联系,计算机数学基础知识

    计算机数学基础是计算机专业必修的数学基础知识.以下是小编整理的关于计算机数学基础知识,希望大家认真阅读! 1.计算机数学基础 是计算机专业必修的数学基础知识.针对计算机专业的特点,加强了Mathema ...

  7. 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 ...

  8. 机器学习所需要的数学基础知识---矩阵(1)

    机器学习所需要的数学基础知识-矩阵(1) 本系列文章为机器学习所需要的数学基础知识,在机器学习文章中如需要,会给出本系列文章的链接,如有问题欢迎给我留言.数学公式使用Letex编辑,原文博客http: ...

  9. Python算法:推导、递归和规约

    Python算法:推导.递归和规约 注:本节中我给定下面三个重要词汇的中文翻译分别是:Induction(推导).Recursion(递归)和Reduction(规约) 本节主要介绍算法设计的三个核心 ...

最新文章

  1. 6000毫安以上智能手机_6000大电池+骁龙8核处理器,Redmi新机来袭:价格太美
  2. php 调用php webservice
  3. 搭建xxpay支付平台
  4. 经典神经网络 | 从Inception v1到Inception v4全解析
  5. 瑞昱Realtek交换机芯片概要
  6. 药品计算机数据备份管理制度,药品记录与数据管理规范(征求意见稿)
  7. 女解码高手王小云:十年破译五部顶级密码(图)
  8. 源码阅读分析 - Window底层原理与系统架构
  9. c语言现有21根火柴,python应用-21根火柴游戏
  10. 计算机网络-网络层篇-BGP协议
  11. 从ZigBee到Matter,智能家居碎片化时代或将终结
  12. 统计表格中有内容的个数(COUNTA)
  13. CF专题(长安大学)
  14. Google Pixel 2 首次现身:或首发安卓 8.0
  15. Git的基本使用方法教程(入门级)
  16. 【nowcoder】笔试强训Day9
  17. Android AbsoluteLayout 绝对布局应用场景介绍
  18. validates resource references inside Android XML files
  19. 利用几何布朗运动对招商银行2021年进行股价预测
  20. DST 和 DCT的区别

热门文章

  1. RNC/SGSN/PDP/IUPS概念
  2. 蓝奏云 php 协议,蓝奏云网盘最新协议完整版附一套网络验证
  3. Flask入门到实战
  4. 如何聪明的提问(转载)
  5. HTTP错误代码 404 503 500
  6. M1芯片完美运行安卓模拟器,简单无坑
  7. 来看看最全的“css布局”喽
  8. iOS9 App Thinning(应用瘦身)功能介绍 1
  9. BGP Dampening Cyrus
  10. 吴军,阅读与写作,06,如何突破阅读理解的瓶颈