R中的双重居中

Azi*_*zah 4 r matrix

你知道如何在 R 中将矩阵转换为所谓的双中心矩阵吗?这样变换矩阵的 sum(col) 和 sum(row) 都是零向量。谢谢。

Jea*_*lie 7

使用以下算法对矩阵 M 进行双中心化:

  1. 生成两个与 M 大小相同的矩阵 R 和 C。 R 和 C 分别包含行和列均值:
    | mean(M[1,1:3])  mean(M[1,1:3])  mean(M[1,1:3]) |
R = | mean(M[2,1:3])  mean(M[2,1:3])  mean(M[2,1:3]) |
    | mean(M[3,1:3])  mean(M[3,1:3])  mean(M[3,1:3]) | 
Run Code Online (Sandbox Code Playgroud)

    | mean(M[1:3,1])  mean(M[1:3,2])  mean(M[1:3,3]) |
C = | mean(M[1:3,1])  mean(M[1:3,2])  mean(M[1:3,3]) |
    | mean(M[1:3,1])  mean(M[1:3,2])  mean(M[1:3,3]) |
Run Code Online (Sandbox Code Playgroud)
  1. 将它们减去 M 并加上总均值:M - C - R + grand_mean(M)

这是执行此操作的代码:

# example data
M = matrix(runif(9), nrow=3, ncol=3)

# compute the row-wise and column-wise mean matrices
R = M*0 + rowMeans(M)  # or `do.call(cbind, rep(list(rowMeans(tst)), 3))`
C = t(M*0 + colMeans(M))  # or `do.call(rbind, rep(list(colMeans(tst)), 3))`

# substract them and add the grand mean
M_double_centered = M - R - C + mean(M[])
Run Code Online (Sandbox Code Playgroud)

您可以通过计算rowMeans(M_double_centered)和来检查这是否给出了正确的答案colMeans(M_double_centered)