2015-09-25 65 views
2

对于模拟研究,我需要创建n×n协方差矩阵。例如我可以输入2×2协方差矩阵等r用给定方差和协方差创建简单n×n协方差矩阵

 [,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 & covar值以形成所述基质。但不幸的是,我不只是处理2x2s,而是2x2:30x30甚至更高!那么是否有可能为r中的任何nxn维矩阵只写一个函数?

+1

所以你的问题是:你有大小为n,大小为n *的协方差的向量(方差的向量N- 1),你想建立你的n * n矩阵? –

+0

covar矢量的顺序是什么? (这对于构建矩阵很重要) –

+1

顺便说一下,不要调用矢量'var'而是'变量'例如,'var'是函数的名称... –

回答

2

你可以这样做:

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

例如:

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 
+0

就是这样的人。你救了我。我希望我可以添加+100 :) – SlightlyBuilt

+0

@SlightlyBuilt你也可以upvote,这将是另一个+10 :) http://meta.stackexchange.com/questions/686/accepting-answer-without-upvoting – zx8754

+0

@Colonel Beauvel我认为你的答案应该是'm = diag(方差); m [lower.tri(m)] = head(covar,长度(covar)/ 2); m [upper.tri(m)] = t(m)[upper.tri(m)]'并且需要编辑。 – SlightlyBuilt