r使用给定的方差和协方差轻松创建nxn协方差矩阵

r使用给定的方差和协方差轻松创建nxn协方差矩阵,r,matrix,R,Matrix,对于模拟研究,我需要创建nxn协方差矩阵。例如,我可以输入2x2协方差矩阵,如 [,1] [,2] [1,] 1.0 1.5 [2,] 1.5 2.0 进入r函数/对象: var <- c(1,2) ## variances covar <- c(1.5,1.5) ## covariance(s) mat <- matrix(c(var[1],covar[1],covar[2],var[2]),ncol=length(var)) var您可以执行以下操作: m

对于模拟研究,我需要创建nxn协方差矩阵。例如,我可以输入2x2协方差矩阵,如

     [,1] [,2]
[1,] 1.0  1.5
[2,] 1.5  2.0
进入r函数/对象:

var <- c(1,2) ## variances
covar <- c(1.5,1.5) ## covariance(s)
mat <- matrix(c(var[1],covar[1],covar[2],var[2]),ncol=length(var))
var您可以执行以下操作:

m <- diag(variance)
m[lower.tri(m)] = m[upper.tri(m)] <- head(covar, length(covar)/2)

所以你的问题是:你有一个大小为n的方差向量,一个大小为n*(n-1)的协方差向量,你想建立你的n*n矩阵?covar向量的顺序是什么?(这对构建矩阵很重要…)顺便说一句,不要调用向量
var
,而是
variance
例如,
var
是一个函数的名称…@稍微构建一下,你也可以向上投票,那将是另一个+10:)@Beauvel上校我想你的答案应该是
m=diag(variance);m[下三(m)]=头部(共轴,长度(共轴)/2;m[upper.tri(m)]=t(m)[upper.tri(m)]
需要编辑。@稍微构建。不,根据我提供的数据,它工作正常。当然,如果将covar=c(0.1,0.3,0.2,0.2,0.3,0.1)作为数据
。这就是为什么当你提出问题时,提供相关数据是极其重要的(这是没有做到的,我不得不介绍一些)
variance = c(0.25, 0.75, 0.6)
covar = c(0.1, 0.3, 0.2, 0.1, 0.3, 0.2)

#>m
#     [,1] [,2] [,3]
#[1,] 0.25 0.10  0.3
#[2,] 0.10 0.75  0.2
#[3,] 0.30 0.20  0.6