首页 > 解决方案 > 如何手动将协方差矩阵转换为相关矩阵?

问题描述

我的协方差矩阵函数:

my_covariance <- function (x=my_data[, c(“attdrug”, “atthouse”, “timedrs”, log10.ltimedrs”, “income”, “emplmnt”, “race”, “mstatus”)]){
cm= colMeans(x)
D = as.matrix(t(x) - cm))
D = t(D)
n=nrow(x)
S = 1/(n-1)*crossprod(D,D)}

我的协方差矩阵相关代码:

S = my_covariance()
diag(S)
sqrt(diag(S))
D = 1/sqrt(diag(S))
R = D%*%S%*%D

但不是 R 给我一个相关矩阵,我得到一个数字?我究竟做错了什么?

标签: matrixcorrelationcovariance

解决方案


原因

你的 D 是一个向量,而它应该是一个对角矩阵。您可以使用 将其转换为对角矩阵D = diag(D)

解决方案

您的最后两行应该如下所示。

D = diag(1/sqrt(diag(S)))
R = D%*%S%*%D

cov2cor(S)您可以通过将其与from R package给出的结果进行比较来检查您的解决方案是否正常工作stats


推荐阅读