查看: 943|回复: 1

[R语言] R语言相关性分析(下)

[复制链接]
  • TA的每日心情

    2019.9.23 10:01
  • 签到天数: 101 天

    连续签到: 1 天

    [LV.6]常住居民II

    管理员

    Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

    主题
    392
    奥币
    1106
    积分
    5611
    注册时间
    2018.4.19
    在线时间
    893 小时

    推广达人宣传达人


    发表于 2019.7.23 09:22:02 | 显示全部楼层 |阅读模式
    7月8日的微信推文中,给大家介绍了相关性分析(戳这里)。本文是这篇文章的下篇,给大家讲讲如何利用R语言做相关性分析。
    相关性分析

    cor函数的完整语法如下:
    [AppleScript] 纯文本查看 复制代码
    cor(x,y = NULL,use =“everything”,method = c(“pearson”,“kendall”,“spearman”))


    也就是说相关性计算有三种方法:pearson、kendall和spearman。

    1pearson相关系数

    算法如下:


    代数算法比较难理解,但分子我们可以看到是个协方差,只是少了除以n-1,而分母是我们很熟悉的标准差,同样少了除以n-1。可以看出分子分母都少了除以n-1,正好抵消。也就意味相关性系数就是协方差除以标准差。
    甚至我们可以写成:


    其中cov既是协方差的缩写,也是R中的函数名称。如果想了解这个计公式,我们还要分为三个部分。

    1协方差

    可以通俗地理解为:两个变量在变化过程中的变化方向是否一致,以及一致的程度。
    如果两个变量,A变大,同时B也变大,说明两个变量是同向变化的,这时协方差就是正的。A变大,同时B变小,说明两个变量是反向变化的,这时协方差就是负的。从数值来看,协方差的数值越大,两个变量同向程度也就越大。反之亦然。
    公式:


    如果有X,Y两个变量,每个时刻的“X值与其均值之差”乘以“Y值与其均值之差”得到一个乘积,再对这每时刻的乘积进行求和并求出均值。

    首先x减去平均值,就意味着我们将平均值作为一个坐标原点。减去平均值,就意味着,所有的x的取值都会根据这个原点,重新调整数值(位置)。这样我们就可以得到Xn(n = 1,2,3,,,)的变化程度。也就是距离原点的距离远近,这是在x变量中的变化程度。

    那么同样y变量中也做这样的取值,得到Yn在Y变量中的变化程度。如果Xn与Yn变化一致。那么要是Xn大于均值,那么X -Xn就是正数,Yn也是同样的,因此这个数是正数。将n依次取每个值,就可以算出X变量与Y变量之间的每个取值时的变化协同性。

    以上是理想状态下,实际中,就算X变量与Y变量之间存在协同性,也可能出现这种情况:例如,在某个取值的时候,例如当n=2时候,·X2-mean(x) < 0,而·Y2-mean(Y) > 0。但因为我们是计算每一个取值时的计算结果,最终算一个求和。所以如果X和Y变量存在协同性,那么最终的结果还是为正数。
    当然如果x变量与y变量反向相关,计算的结果为负数,代表负相关。

    当然,你可能还会想,n = 1,n = 2,n = 3…,每个时刻X,Y都在增大,而且X都比均值大,Y都比均值小,这种情况协方差不就是负的了?7个负值求平均肯定是负值啊?也就是负相关。

    但是X,Y都是增大的,明明同向变化的,这不就矛盾了?当然不矛盾,因为这种情况是不可能的。Xn和Yn减去的是均值。均值既然就意味这肯定有低于均值的Xn和Yn啊。所以结果一定是有正有负,看最后加和后,哪方更胜一筹。




    这里,我们知道了协方差是可以衡量两个变量之间的协同变化程度的。

    2标准差

    标准差,是我们较常遇见的。不论是高中的数学课本,还是后面大学和工作遇到的变异系数,T检验等统计检验值都是需要标准差的。为什么标准差在统计中用到的这么多?
    标准差可以衡量数据的分布状况
    公式:



    从公式可以看出,标准差计算方法为,每一时刻变量值与变量均值之差再平方,求得一个数值,再将每一时刻这个数值相加后求平均,再开方。其中Xi - u同样是以平均值为原点,某一时刻下数值偏离的程度。 取平方值,是因为这个偏离程度有正有负,如果想累加每一个时刻的偏离程度,需要取一个绝对值,平方是最好的绝对值的方法。

    这样累加后,我们就可以得到x变量中数据的整体偏离中心原点的程度。然后我们还需要除以观察时刻的总数,以抵消因为观察次数不同而产生的影响。因为观察次数越多,求和值肯定越大,所以要除以N。

    还没完,因为我们平方取值,所以还需要开平方。这里我们可以看到:
    标准差得到的,是变量中数据的分散程度

    3相关性系数

    根据上述,我们知道了协方差可以获得两个变量之间的协同变化程度,标准差可以知道变量的变化范围。
    协方差虽然可以衡量变化程度,但是还缺少一个统一的量纲,否则不能进行比较。例如:

    [AppleScript] 纯文本查看 复制代码
    sunglass <- c(213,233,296,345,645,644,492,691,790,667,645,546,506,524,434,383,282,181,30,50,30)
     icecream <- c(215,236,300,350,651,651,500,700,800,678,657,559,520,539,450,400,300,200,50,30,50)
     cov(sunglass,icecream)
    #[1] 54091
     cov(((sunglass)*0.01), ((icecream)*0.01))
    #[1] 5.4091
     p1 <- qplot(sunglass,icecream)
     p2 <- qplot(((sunglass)*0.01), ((icecream)*0.01))
     cowplot::plot_grid(p1,p2,nrow = 1,labels = c("p1","p2"),hjust = 0.05)



    发现问题了吧,明明icecream和sunglass之间是一样的变化协同程度,但因为波动范围的取值大小,就导致了cov(sunglass,icecream)是54091,而cov(((sunglass)*0.01), ((icecream)*0.01))就变成了5.4091。

    但是明明趋势和相关性程度是一致的,这就意味着协方差没有考虑原始数据的分布范围。因此我们还需要将这个值数放在一个量纲下,最好的量纲就是自己的原始数据分布情况。

    这不正好需要标准差吗。因此相关性系数的计算就是协方差/标准差:


    2spearman相关性系数

    与Pearson相关系数相关,Spearman相关系数测量两个变量之间的关系。Spearman可以理解为Pearson相关系数的基于等级的版本,可以用于非正态分布且具有非线性关系的变量。此外,它不仅可用于连续数据,还可用于序数属性的分析。


    是不是感觉有点蒙圈,但其实不难。spearman最大的差别在于,它不是根据原始数值来计算相关性,而是根据排序。

    假设两个随机变量分别为X、Y,它们的元素个数均为N,两个随机变量取的第i(1<=i<=N)个值分别用Xi、Yi表示。对X、Y进行排序(同时为升序或降序),得到两个元素排行集合x、y,其中元素xi、yi分别为Xi在X中的排行以及Yi在Y中的排行。将集合x、y中的元素对应相减得到一个排行差分集合d,其中di=xi-yi。

    注意区分X和Y的大小写。

    我们知道了排名后,其实计算公式还是person那套算法


    但是我们也可以发现,直接计算排名,对那些非线性的相关性就会非常友好了。此外,还可以适用于非正态分布的数据。但作用也是有限的,不信你试试。

    [AppleScript] 纯文本查看 复制代码
    cor(tem,icecream,method ="spearman")
    cor(tem,icecream,method ="pearson")

    所以至于选择spearman还是选择pearson来计算相关性,这个还要结合数据来说话。因此推荐先用pearson来计算,如果结果不好,就可以试试spearman。

    3cos余弦相似性

    余弦相似性测量两个n维样本向量的方向,而与其大小无关。它由两个数值向量的点积计算,并且通过向量长度的乘积进行归一化,因此接近1的输出值表示高相似性。

    4Kendall相似性

    和Spearman相关系数类似,Kendall计算排序变量之间的依赖关系,同样适用非正态分布数据。Kendall 可以计算连续数据和有序数据。Kendall在已有排名变量的背景下,通过对错位的强烈惩罚来区别于Spearman的。
    公式:

    就是如果Xi与Yi的排序是一致的,就会得分,不一致就会减分。

    今天的内容就到这里啦~

    参考资料:

    本文作者:基迪奥技术咖

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

  • TA的每日心情

    昨天 10:48
  • 签到天数: 24 天

    连续签到: 24 天

    [LV.4]偶尔看看III

    帝王蝶

    Rank: 4

    主题
    1
    奥币
    203
    积分
    281
    注册时间
    2019.10.24
    在线时间
    17 小时

    发表于 5 天前 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表