首页 文章

r中的手动皮尔森相关

提问于
浏览
1

你将如何创建一个手动计算r中的皮尔逊相关性的函数 . 我知道有一个名为 cor 的本机函数,但如果我想将R中的下面的等式应用于数据框中的每个列组合,我该怎么做呢?

enter image description here

我希望我知道如何,但我相信它需要许多for循环,嵌套for循环等才能实现它并且我在编程方面还不是那么强大 . 我希望有人会尝试像我这样的新手可以学习 . 谢谢

例:

set.seed(1)
  DF = data.frame(V1 = rnorm(10), V2=rnorm(10), V3=rnorm(10), V4=rnorm(10))

  #     V1    V2    V3    V4
  # V1  1.00 -0.38 -0.72 -0.24
  # V2 -0.38  1.00  0.60  0.18
  # V3 -0.72  0.60  1.00  0.08
  # V4 -0.24  0.18  0.08  1.00

2 回答

  • 0

    首先编写辅助函数来计算协方差:

    v <- function(x,y=x) mean(x*y) - mean(x)*mean(y)
    

    然后用它来计算相关性:

    my_corr <- function(x,y) v(x,y) / sqrt(v(x) * v(y))
    

    这是一个快速检查它是否正常工作:

    > my_corr(DF$V1, DF$V2)
    [1] -0.3767034
    > cor(DF$V1, DF$V2)
    [1] -0.3767034
    

    请注意,以这种方式计算相关性在数值上是不稳定的 .

    编辑:

    要将其应用于所有列组合,请使用 outer

    > outer(DF, DF, Vectorize(my_corr))
    
                      V1    V2    V3    V4
                # V1  1.00 -0.38 -0.72 -0.24
                # V2 -0.38  1.00  0.60  0.18
                # V3 -0.72  0.60  1.00  0.08
                # V4 -0.24  0.18  0.08  1.00
    
  • 4

    好 . 您不需要“手动”执行此操作,只需使用....

    cor(DF)
    

    ...计算所有列组合的r .

相关问题