2015-01-14 4 views
2

두 개의 동일한 크기의 행렬이 있습니다. 이 행렬의 행 쌍 사이의 상관 계수를 계산하고 싶습니다.행 방향의 상관 관계 R

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

이지만 몹시 비효율적으로 등 B에서 행 2 A로부터 1 행 B, 행 2 A로부터 행 1

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

최저 나는 행렬이 (올 수있다 수만 행). 더 빠르고 더 좋은 방법이 있습니까?

답변

5

이 빨리되어야한다 :

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

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

당신은 당신과 같은 공분산 및 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))