前些时间需要衡量多个分类数据之间两两相关程度,想找出最相关的一对分类数据;于是想到了曾经看过的克莱姆相关系数,但在网上搜了好久之后,即没发现Matlab现成的built-in函数,也没找到别人分享的Matlab代码,于是决定自己动手写一个~

克莱姆V(Cramer’s V),又称为克莱姆相关系数、克莱姆关联系数、独立系数等,是双变量相关分析的一种方法,专门用于衡量分类数据与分类数据之间相关程度。该系数取值范围为0到1,0表示两个变量无关,1表示完全相关。

这里主要参考【高桥 信/著, 陈刚/译. 漫画统计学. 科学出版社, 2009: 127-142.】中的内容,基于matlab实现计算克莱姆V的函数。首先给出函数代码:

function [ cramer_V ] = CramersV( x1,x2 )
%Author: https://blog.csdn.net/jbb0523
%Version: 1.0@2019-05-27
%Description: compute variable Cramer's V between x1&x2
%Reference: 高桥 信/著, 陈刚/译. 漫画统计学. 科学出版社, 2009: 127-142.%Step 1: Observed frequency(contigency table )sym_x1 = unique(x1);sym_x2 = unique(x2);contigency_tab = zeros(length(sym_x1),length(sym_x2));for i=1:length(sym_x1)for j=1:length(sym_x2)ind_x1 = (x1==sym_x1(i));ind_x2 = (x2==sym_x2(j));contigency_tab(i,j) = sum(ind_x1&ind_x2);endend
%Step 2: Expected frequency
contigency_mean = zeros(length(sym_x1),length(sym_x2));
for i=1:length(sym_x1)for j=1:length(sym_x2)contigency_mean(i,j) = sum(contigency_tab(i,:))*sum(contigency_tab(:,j))/sum(contigency_tab(:));end
end%Step 3&4: Pearson chi-square statistic
chi_square = sum(sum(((contigency_tab - contigency_mean).^2)./contigency_mean));%Step 5: Cramer's V
cramer_V = sqrt(chi_square/sum(contigency_tab(:))/(min(length(sym_x1),length(sym_x2))-1));

end

整个计算过程其实很简单,这里简要解释一下:

Step1对应于Reference中的步骤1(P130),即计算列联表(contingency table),也就是下图中框内的数据:

Step2对应于Reference中的步骤2(P130),计算期望次数,方框内的每个元素实际上就是第1步列联表对应的该行元素之和乘以该列元素之和再除以所有元素之和(例如女性行、打电话列为148*72/300,148为女性行元素之和(34+61+53),72为打电话列元素之和(34+38),300为所有元素之和(34+61+53+38+40+74)):

接下来计算皮尔森卡方统计量之值,在Reference中分两步完成,这里合二为一:

其中((contigency_tab - contigency_mean).^2)./contigency_mean对应于Reference中的步骤3(P131):

然后用两层sum求和实现计算矩阵元素之和,即Reference步骤4(P132):

最后一行计算Cramer’s V,这里计算列联表元素之和用sum(contigency_tab(:))实现,其中(:)表示将矩阵变为一个向量,即步骤5(P133):

有了以上函数之后,可以执行以下三行代码计算Reference中第127~133页的例子:

x1 = [ones(148,1);2*ones(152,1)];
x2 = [ones(34,1);2*ones(61,1);3*ones(53,1);ones(38,1);2*ones(40,1);3*ones(74,1)];
cramer_V= CramersV(x1,x2)

程序输出为0.1634,说明程序是正确的。

Reference的第138页还有一个例题,列联表如下:

执行以下三行代码:

x1=[ones(43,1);2*ones(51,1);3*ones(29,1);ones(33,1);2*ones(53,1);3*ones(41,1)];
x2=[ones(123,1);2*ones(127,1)];
cramer_V= CramersV(x1,x2)

程序输出为0.1157,与Reference第141页给出的结果相同。

注意:以上均使用1、2、3等表示分类数据中的类别,具体问题随意,只要输入的x1和x2是两个包含有限类别个数的向量即可,至于用哪个数据表示哪个类别并没有限制,因为在最开始给出的CramersV函数里使用了Matlab的built-in函数unique来识别包含哪些类别。

补充@20200215:若想在论文中引用Cramer's V,可参考如下文献:

直接搜索Cramer's V可以搜到以下文献:

[1] Michael W. Kearney, Cramér's V, In book: Sage Encyclopedia of Communication Research Methods, Publisher: Sage (https://www.researchgate.net/publication/307963787_Cramer's_V)

以上文献影响似乎不是很有影响,在wikipedia (http://en.volupedia.org/wiki/Cram%C3%A9r%27s_V 或 https://en.academic.ru/dic.nsf/enwiki/11586155),包括以上文献中,都提到了Cramer本人所著的专著:
[2] Cramér, Harald. 1946. Mathematical Methods of Statistics. Princeton: Princeton University Press, page 282 (Chapter 21. The two-dimensional case).

这本书是1946年的,也有人引用为1999年,是第N次印刷的时间,没有找到好的资源,以下链接可供参考:http://www.doc88.com/p-6059182784178.html

克莱姆V(克莱姆相关系数、克莱姆关联系数、独立系数)相关推荐

  1. 克莱姆V(克莱姆相关系数、克莱姆关联系数、独立系数)的MATLAB计算

    前些时间需要衡量多个分类数据之间两两相关程度,想找出最相关的一对分类数据:于是想到了曾经看过的克莱姆相关系数,但在网上搜了好久之后,即没发现Matlab现成的built-in函数,也没找到别人分享的M ...

  2. 耐克人脸识别_狄耐克智能交通再结一位“老铁”——与力高地产达成战略合作协议!...

    自新冠病毒肺炎疫情爆发以来 狄耐克各个产业的表现均可圈可点 · · 在楼宇对讲领域 狄耐克以人脸识别门禁系统让用户回家无忧: 在智能家居方面 狄耐克以智能语音控制功能让用户随心享家 同时,狄耐克智能门 ...

  3. 我的世界java版怎么找史莱姆区块_我的世界史莱姆在哪里

    在我的世界1.9游戏当中怎么寻找史莱姆方区块,那么接下来就由小编给各位玩家们带来了我的世界1.9史莱姆区块寻找攻略,喜欢的小伙伴不妨看看怎么制作史莱姆农场吧,希望对各位玩家们有所帮助. 我的世界史莱姆 ...

  4. python 克里金空间插值_Python克里金(Kriging)插值计算及可视化绘制

    前面两篇推文我们分别介绍了使用Python和R进行IDW(反距离加权法) 插值的计算及结果的可视化过程,详细内容可见如下: 本期推文,我们将介绍如何使用Python进行克里金(Kriging)插值计算 ...

  5. 如何用计算机克数和斤换算,克和斤的换算计算器(克千克斤公斤换算口诀)

    500克=1斤,1斤=10两365/500*10=7.3两 1千克=1000克 1公斤=2斤 500克=1斤 所以 1千克=1000克=1公斤=2斤 一千克也就是一公斤,一公斤也就是民间口中的两斤.既 ...

  6. 泰克示波器查眼图_泰克DSA71604C示波器眼图测试V1.0

    泰克 DSA71604C 示波器眼图测试 泰克 DSA71604C 示波器测试眼图目前有 2 种方法: 一种是利用余辉来进行测试: 第二种是利用示波器内置的 DPO-JET 软件来进行测试,本文以第二 ...

  7. java版史莱姆区块_我的世界史莱姆傀儡

    软件介绍 我的世界史莱姆傀儡是一个制作全新傀儡的mod,使用粘液和甜南瓜制作全新的自动傀儡,零伤害的粘液射击会对怪物造成减速,还能捡取掉落的粘液球制成新的方块来会做另一个傀儡,刷怪必备的冰冻减速buf ...

  8. 克我者官,我克者财,生我者印,我生者食伤,同我者比劫

    一.详解 官,克我者为官,官,管也. 克我必可以管我,比如日干为甲木,庚辛为金,庚辛克甲,即为甲之官. 因阴阳不同,而分出正官与偏官,阴阳相克为正,同性相克为偏,故辛金为甲之正官,庚金为甲之偏官. 因 ...

  9. 2022上海燕窝展|滋补品展|鱼胶、灵芝、虫草、海参展谈燕窝吃多少?3~5克或4.5~9克?

    2022上海燕窝展|滋补品展|鱼胶.灵芝.虫草.海参展谈燕窝吃多少?3-5克或4.5-9克? 每天吃干燕窝3-5克,同时又看到不少地方的药材标准或者饮片炮制规范记载燕窝用量是4.5-9克.到底哪个是正 ...

最新文章

  1. 在Eclipse中使用Maven构建Spring项目
  2. R语言负二项分布函数Negative Binomial Distribution(dnbinom, pnbinom, qnbinom rnbinom )实战
  3. irobot擦地机器人故障_自己动手修复 iRobot braava380t 电机故障
  4. StringUtils工具类的isBlank()方法使用说明
  5. androidexternal目录下新增一个可执行应用及编译
  6. php带截切图片上传_PHP大文件切割上传并带进度条功能示例
  7. 妖怪手帐获取服务器信息失败,妖怪手账闪退怎么办 卡在加载页面解决办法
  8. java判断是否是路径_java判断是否是目录
  9. 5.1.2 SELECT+INNER JOIN读取数据
  10. 定制textField
  11. 罗永浩回应被列入老赖名单:就算“卖艺”也会把债务还完
  12. 研发团队建设几点看法及建议
  13. 微信、支付宝迎劲敌?华为拿下支付牌照
  14. crt连接中兴服务器,利用SecureCRT实现中兴C220自动登录
  15. FIFO的发送条件总结
  16. 录制电脑游戏视频的方法
  17. DMS - 简介 Driver Monitor System
  18. 中专在学校里考的计算机四级证属于中级职业技能证书吗?
  19. 成考本科计算机找工作有用吗,就是想问问成人高考的学历 到底有多大用,找工作好找么?...
  20. 《创践——大学生创新创业实任务》 单元测试_ 笔记

热门文章

  1. [洛谷P5137]polynomial
  2. Node学习9-gulp
  3. oracle自动冷备份脚本
  4. 《HFSS电磁仿真设计从入门到精通》一第2章 入门实例——T形波导的内场分析和优化设计...
  5. object-c全局变量
  6. .net c# 正则表达式 平衡组/递归匹配
  7. WPF Multi-Touch 开发:惯性效果(Inertia)
  8. 移动端html模板卡片列表效果,移动手机Material Design风格信息卡片UI设计
  9. [LeetCode] 回溯算法
  10. 弹窗页面PHP代码不执行,PHP代码没有被执行,而是代码显示在页面上