r中的手动皮尔逊相关
Manual pearson correlation in r
您将如何创建一个函数来手动计算 r 中的皮尔逊相关系数。我知道有一个名为 cor 的本机函数,但是如果我想将 R 中的以下等式应用于数据框中的每个列组合,我该怎么做呢?
我希望我知道怎么做,但我相信它需要许多 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
先写一个计算协方差的辅助函数:
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
嗯。您不需要这样做 "manually",您只需使用....
cor(DF)
...计算所有列组合的 r。
您将如何创建一个函数来手动计算 r 中的皮尔逊相关系数。我知道有一个名为 cor 的本机函数,但是如果我想将 R 中的以下等式应用于数据框中的每个列组合,我该怎么做呢?
我希望我知道怎么做,但我相信它需要许多 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
先写一个计算协方差的辅助函数:
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
嗯。您不需要这样做 "manually",您只需使用....
cor(DF)
...计算所有列组合的 r。