Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。
3年前关闭。
Improve this question
您知道如何在R中将矩阵转换为所谓的双中心矩阵吗?这样,变换后的矩阵的sum(col)和sum(row)均为零向量。谢谢。
和
2)将它们减去M并添加平均值:
这是执行此操作的代码:
您可以通过计算
想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。
3年前关闭。
Improve this question
您知道如何在R中将矩阵转换为所谓的双中心矩阵吗?这样,变换后的矩阵的sum(col)和sum(row)均为零向量。谢谢。
最佳答案
矩阵M的双重居中可以通过以下算法完成:
1)生成两个大小与原始矩阵相同的矩阵,其中包含按行和按列的均值。我们将这两个矩阵称为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]) |
和
| 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]) |
2)将它们减去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[])
您可以通过计算
rowMeans(M_double_centered)
和colMeans(M_double_centered)
来检查是否提供了正确的答案。08-28 21:45