数学建模方法——斯皮尔曼相关系数及其显著性检验 (Spearman’s correlation coefficient for ranked data)
目录:
- 斯皮尔曼相关系数简介
- 斯皮尔曼相关系数计算
- 斯皮尔曼相关系数假设检验
2.1 小样本假设检验
2.2. 大样本假设检验- 总结
0. 斯皮尔曼相关系数简介
斯皮尔曼相关系数(Spearman)也被叫做斯皮尔曼等级相关系数,同样用于衡量两个变量之间的相关性,在之前对皮尔逊相关系数的介绍中,我们提到了在进行皮尔逊相关系数运算的时候需要确定数据是否符合正态分布等等,较为麻烦,同时不满足正态性的数据难道就没有办法判断相关性了吗?离散的数据如何判断相关性呢?因此有人提出了另一种方法,即用数据的大小顺序来代替数值本身。
这种替代方法,本身也就是一个消除量纲的过程,我们提到了从协方差到皮尔逊相关的过程中,需要消除量纲,同样的从另一个角度出发,斯皮尔曼相关系数使用排序的方法消除量纲,在相关性分析中,用数据大小的排序代替原始的数据,也起到了消除量纲的作用。同时在分级数据比如优,良,中的等级数据中,我们适合使用斯皮尔曼相关系数。
连续数据,满足正态分布,判断是否具有线性的相关性的时候使用皮尔逊相关系数较为合适,如果不满足条件的话,我们应该使用斯皮尔曼相关系数。
1. 斯皮尔曼相关系数计算
我们举一个身高和睡眠时间的例子来说明斯皮尔曼相关系数的计算方法,第一步我们需要将数据从小打到大的排列顺序并给出所属的等级,当两个数据的数值相等的时候,我们计算数值等级的平均值作为等级数,比如身高栏中,身高栏的160有两个,应该排第三名和第四名,平均下来的等级应该是3.5。同理,我们也将睡眠时间的等级进行排序,得到等级大小。之后我们计算两组数据的等级差记为d用于计算斯皮尔曼相关系数。
斯皮尔曼相关系数的具体计算方法如下:
其中n是样本的数量,d代表数据x和y之间的等级差。在matlab中,为了计算斯皮尔曼相关系数我们可以直接使用corr指令。具体形式如下:
corr(x, y, ’type’, ’Spearman’)
2. 斯皮尔曼相关系数假设检验
和皮尔逊相关系数一样,在斯皮尔曼相关系数的计算中,得到了数值我们也无法知晓到底相关系数多大才是相关性强,多小才是相关性弱,为了表明强弱关系,我们需要引入假设检验的方法。
2.1 小样本假设检验
斯皮尔曼相关系数的假设检验分为两类,一个是小样本的情况,即样本的数量小于30的情况下时,可以直接使用查表的方式进行验证。虽然在不是那么严格的情况下,我们的样本数量大于30的时候也可以参考表格。
当我们的相关系数大于等于表中的临界值的时候。我们认为相关系数是有显著性差异的,即有相关性,相关性不为0。
2.2. 大样本假设检验
在大样本的情况下,我们可以通过构建统计量的方式进行假设检验,大牛们总结了在以下的统计量是符合正态分布的。因此当样本数量大于30的时候我们可以用如下的方法构建统计量,计算p值
在matlab中,如果是双侧检验的话我们的p值计算方式如下:
P = (1-normcfd(x))*2;
其中x就是我们构建的统计量,r乘样本数减一开根号。在得到的p值中,如果p值大于0.05,则没有显著性差异,也就是说没有理由认为显著性差异存在,即没有相关性。如果p值小于0.05的话,我们可以认为存在显著性的差异。
3. 总结
斯皮尔曼相关系数,也叫做斯皮尔曼等级相关系数,就是因为他通过等级排序的方式将数值转化为了等级排序,可以方便的应用在非正态性的数据,或者是评级的数据中,用于相关性的检验。如果说数据满足正态分布,而且连续,那么还是建议用散点图,加上皮尔逊相关系数以及假设检验的方式判断数据之间的相关性。
上一篇: java 利用反射机制,获取实体所有属性和方法,并对属性赋值
下一篇: Python--计算相关系数