R - 具有成对模拟 MVN 数据的填充矩阵
R -fill matrix with pairs of simulated MVN data
我首先想使用 MASS 包中的 mvrnorm 函数模拟相关的 MVN 数据。然后我想重复此模拟 i 次并将结果填充到矩阵中,以便第一个结果在第 i、i+1 列中,第二个结果在 i+2、i+3 中,依此类推。
到目前为止我做了以下事情:
SimYCB <- c(73.1,60.6,59.6,54.5,57.9,61.14)
SimPCB <- c(15.7,18.25,22.38,20.22,16.53,18.616)
SimCB <- data.frame(SimYCB,SimPCB)
n=20
m=1000
MVSimCB = matrix()
for(i in 1:m)
{MVSimCB[,i]=mvrnorm(n, mu=mean(SimCB),
Sigma=cov(SimCB))}
哪里出错了?
可能有帮助
MVSimCB <- matrix(,ncol=m, nrow=n)
set.seed(24)
for(i in seq(1,m, by=2)){
MVSimCB[, i:(i+1)] <- mvrnorm(n, mu=colMeans(SimCB), Sigma=cov(SimCB))
}
或者您可以使用 replicate
set.seed(24)
MVSimCB2 <- do.call(cbind, replicate(m/2, mvrnorm(n, mu=colMeans(SimCB),
Sigma=cov(SimCB)), simplify=FALSE))
all.equal(MVSimCB, MVSimCB2, check.attributes=FALSE)
#[1] TRUE
我首先想使用 MASS 包中的 mvrnorm 函数模拟相关的 MVN 数据。然后我想重复此模拟 i 次并将结果填充到矩阵中,以便第一个结果在第 i、i+1 列中,第二个结果在 i+2、i+3 中,依此类推。
到目前为止我做了以下事情:
SimYCB <- c(73.1,60.6,59.6,54.5,57.9,61.14)
SimPCB <- c(15.7,18.25,22.38,20.22,16.53,18.616)
SimCB <- data.frame(SimYCB,SimPCB)
n=20
m=1000
MVSimCB = matrix()
for(i in 1:m)
{MVSimCB[,i]=mvrnorm(n, mu=mean(SimCB),
Sigma=cov(SimCB))}
哪里出错了?
可能有帮助
MVSimCB <- matrix(,ncol=m, nrow=n)
set.seed(24)
for(i in seq(1,m, by=2)){
MVSimCB[, i:(i+1)] <- mvrnorm(n, mu=colMeans(SimCB), Sigma=cov(SimCB))
}
或者您可以使用 replicate
set.seed(24)
MVSimCB2 <- do.call(cbind, replicate(m/2, mvrnorm(n, mu=colMeans(SimCB),
Sigma=cov(SimCB)), simplify=FALSE))
all.equal(MVSimCB, MVSimCB2, check.attributes=FALSE)
#[1] TRUE