R语言如何实现covariate矩阵协变量间协方差为0且自身方差为1
你需要实现的协变量间协方差为0、单变量自身方差为1的效果,对应结构为单位矩阵形态的协方差矩阵。你当前的代码中cor(M1)是原始随机矩阵的相关系数矩阵,非对角元不为0,所以最终计算得到的协方差矩阵会存在非零的协方差项,不符合要求,可通过以下两种方式实现需求:
方法1:直接生成目标协方差矩阵
如果你仅需要得到符合要求的协方差矩阵,直接调用diag()生成单位矩阵即可,5个变量的场景代码如下:# 直接生成5阶单位协方差矩阵,对角元为1,非对角元为0 M1_Covariance <- diag(5) M1_Covariance方法2:基于已有的原始变量矩阵M1调整得到符合要求的协方差结构
如果你需要保留原始生成的变量基础,可对M1做标准化+去相关处理,调整后的变量矩阵对应的协方差矩阵就会符合要求,代码如下:set.seed(1) M1 <- matrix(rnorm(25,5,1),ncol=5) # 对每列做标准化,确保单变量标准差为1 M1_standardized <- scale(M1) # 奇异值分解去除变量间的相关性 svd_res <- svd(M1_standardized) M1_independent <- M1_standardized %*% svd_res$v # 计算处理后的协方差矩阵 M1_Covariance <- cov(M1_independent) # 打印时默认隐藏极小的浮点计算误差,可直观看到符合要求的单位矩阵结构 print(M1_Covariance, digits = 1)
处理后得到的M1_independent的各列变量之间相关系数为0,单变量方差为1,完全匹配需求。
内容的提问来源于stack exchange,提问作者Strovic
相关产品推荐
相关产品推荐

