簡體   English   中英

R中的行方向相關性

[英]Row-wise correlations in R

我有兩個相同大小的矩陣。 我想計算這些矩陣中每對行之間的相關系數; 第1行,A行,第1行,A第2行,第2行,B等。

A <- matrix(runif(1:200), nrow=20)
B <- matrix(runif(1:200), nrow=20)

我能想到的最好的是

ret <- sapply(1:20, function(i) cor(A[i,], B[i,]))

但它非常低效(矩陣有數萬行)。 有更好,更快的方式嗎?

這應該很快:

cA <- A - rowMeans(A)
cB <- B - rowMeans(B)
sA <- sqrt(rowMeans(cA^2))
sB <- sqrt(rowMeans(cB^2))

rowMeans(cA * cB) / (sA * sB)

您可以創建矢量化函數,為您計算協方差和SD,例如,

RowSD <- function(x) {
  sqrt(rowSums((x - rowMeans(x))^2)/(dim(x)[2] - 1))
}

VecCov <- function(x, y){
  rowSums((x - rowMeans(x))*(y - rowMeans(y)))/(dim(x)[2] - 1)
}

然后,干脆做

VecCov(A, B)/(RowSD(A) * RowSD(B))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM