[mu
是两个均值向量的矩阵(col-1和col-2是两个均值向量)]
mu=matrix(c(1,5,4,
5,8,9), nrow =3,ncol=2)
mu
[,1] [,2]
[1,] 1 5
[2,] 5 8
[3,] 4 9
并且对应的协方差矩阵为
sig1=matrix(c(diag(1,3,3),
diag(4,3,3)), nrow = 3, ncol = 3*2, byrow = F)
sig1
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 0 4 0 0
[2,] 0 1 0 0 4 0
[3,] 0 0 1 0 0 4
[前三列是均值向量1(mu
的e,e col-1)的协方差矩阵,后三列是均值向量2(mu
的均值向量(i,e,col-2))我想使用mvrnorm
为每个均值向量和协方差矩阵生成数据
我想创建一个顺序为2 by 3
的矩阵,其中第一行是mvrnorm(1,mu[,1],sig1[,1:3])
的输出,第二行是mvrnorm(1,mu[,2],sig1[,4:6])
的输出我可以使用任何循环或内置功能吗?任何帮助表示赞赏
mu
子集和每三列的sig1
子集,并将其传递给mvrnorm
函数。 t(sapply(seq_len(ncol(mu)), function(x) {
ind <- (x - 1) * 3
MASS::mvrnorm(1,mu[,x],sig1[, (ind + 1):(ind + 3)])
}))
# [,1] [,2] [,3]
#[1,] 1.0665 3.5964 4.4052
#[2,] 4.9421 9.7464 9.6109
for
循环out <- vector('list', ncol(mu))
sig2 <- list(sig1[, 1:3], sig1[, 4:6])
for(i in seq_len(ncol(mu))) out[[i]] <- MASS::mvrnorm(1, mu[, i], sig2[[i]])
或带有mapply
mapply(function(x, y) MASS::mvrnorm(n = 1, mu = c(x), Sigma = y), asplit(mu, 2), list(sig1[, 1:3], sig1[, 4:6]))
或split
'sig1'与rep
的列顺序>
mapply(function(x, y) MASS::mvrnorm(n = 1, mu = c(x), Sigma = sig1[, y]), asplit(mu, 2), split(seq_len(ncol(sig1)), rep(1:2, each = 3)))