建立一个函数来计算R中的相关矩阵

building a function to compute correlation matrix in R

我想创建一个 R 函数来计算列之间具有观察值(值 1)的个体的百分比。例如,在下面的 data.frame:

id A B C
a  1 0 1
b  1 1 1
c  0 0 0

我想要一个交叉百分比矩阵,该矩阵表示具有 A 和 B、B 和 C 以及 A 和 C 的个体的百分比。在这种情况下,它将类似于:

  A     B     C
A 1     0.33  0.66
B 0.33  1     0.33
C 0.66  0.33  1

我们可以将 data.frame 的子集转换为 matrix(数字列),使用 crossprod,然后将对角线值更改为 1

m1 <- as.matrix(df1[-1])
out <- crossprod(m1)/ncol(m1)
out[row(out) == col(out)] <- 1

-输出

out
#          A         B         C
#A 1.0000000 0.3333333 0.6666667
#B 0.3333333 1.0000000 0.3333333
#C 0.6666667 0.3333333 1.0000000

数据

df1 <- structure(list(id = c("a", "b", "c"), A = c(1L, 1L, 0L), B = c(0L, 
1L, 0L), C = c(1L, 1L, 0L)), class = "data.frame", row.names = c(NA, 
-3L))

你可以这样做:

d <- as.matrix(df[-1])
e <- t(d) %*% d/ nrow(d)
diag(e) <- 1
e
          A         B         C
A 1.0000000 0.3333333 0.6666667
B 0.3333333 1.0000000 0.3333333
C 0.6666667 0.3333333 1.0000000