我被要求解决以下问题:
但是我很难用16组参数生成10000个样本.这就是我所做的:
library(MASS)
library(data.table)
library(Matrix)
library(stats)
set.seed(2000)
options(scipen=100)
N <- c(100, 500)
K <- c(1, 10)
ETA <- c(0.05, 1)
RHO <- c(0, 0.5)
reps <- 10000
DGP<-function(n,k,eta,rho){
# generate D, then get \Lambda=DD', where z \sim N(0,\Lambda)
D <- matrix(0, nrow = k, ncol = k)
for (x in 1:k) {
for (y in 1:k) {
D[x, y] <- ifelse(x > y, 1, ifelse(x == y, 1, 0))
}
}
# generate Z
Z <- mvrnorm(n, mu = rep(0, k), Sigma = D%*%t(D))
# generate error terms \epsilon, u, where y=\epsilon (since \beta-9)
# and u is the error term for x=z'\pi+u
err <- mvrnorm(n, mu = rep(0, 2), Sigma = matrix(c(1, rho, rho, 1), ncol = 2))
Y <- as.matrix(err[,1])
u <- err[,2]
# then we can get X
X <- Z %*% rep(eta,k) + u
return(data.frame(Y,X,Z))
}
# test if the DGP function works
DGP(500,1,1,0.5)
# generate the 16 samples
data<-list()
# I know this is inefficient but I gave up
para<-matrix(data=c(100,1,0.05,0,500,1,0.05,0,
100,10,0.05,0,500,10,0.05,0,
100,1,1,0,500,1,1,0,
100,1,0.05,0.5,500,1,0.05,0.5,
100,10,1,0,500,10,1,0,
100,10,1,0.5,500,10,1,0.5,
100,1,1,0.5,500,1,1,0.5,
100,10,0.05,0.5,500,10,0.05,0.5),nrow=16,ncol=4,byrow=TRUE)
datalist<-function(){
for (i in 1:16){
df<-DGP(para[i,][1],para[i,][2],para[i,][3],para[i,][4])
data[[i]]<-df
}
return(data)
}
sample<-datalist() # at least I have generated one sample
有没有办法更有效地为16组参数生成和存储10000个样本?