【问题标题】:r easy nxn covariance matrix creation with given variances and covariancesr 使用给定的方差和协方差轻松创建 nxn 协方差矩阵
【发布时间】:2015-09-25 07:04:50
【问题描述】:

对于模拟研究,我需要创建 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))

然后我只需要更改 varcovar 值即可形成矩阵。但不幸的是,我处理的不仅仅是 2x2s,而是 2x2:30x30 甚至更高!那么是否可以为 r 中的任何 nxn 维矩阵只编写一个函数?

【问题讨论】:

  • 所以你的问题是:你有一个大小为 n 的方差向量,一个大小为 n*(n-1) 的协方差向量,你想建立你的 n*n 矩阵吗?
  • 协变量向量的顺序是什么? (这对构建矩阵很重要......)
  • 顺便说一下,不要调用向量var,而是variance,例如var是一个函数的名称...

标签: r matrix


【解决方案1】:

你可以这样做:

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

【讨论】:

  • @SlightlyBuilt 你也可以投票,那将是另一个 +10 :) meta.stackexchange.com/questions/686/…
  • @Colonel Beauvel 我认为你的答案应该是m=diag(variance) ; m[lower.tri(m)]=head(covar, length(covar)/2) ; m[upper.tri(m)]=t(m)[upper.tri(m)] 并且需要编辑。
  • @SlightlyBuilt。不,根据我提供的数据,它工作正常。当然,如果您将covar=c(0.1,0.3,0.2,0.2,0.3,0.1) 作为数据,您需要您的解决方案。这就是为什么在您提出问题时提供相关数据非常重要(这还没有完成,我不得不介绍一些)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 2019-04-15
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多