我正在运行一些OLS估算的蒙特卡罗模拟,其中我针对不同的β值进行了相同模拟的几个版本。要做到这一点,我已经设置了一个for循环来运行模拟(它有1000次重复),并围绕它设置第二个循环,我想在其中分配beta值。
所以,我已经设置了4个矩阵来存储每个模拟版本的结果,我想确定使用for循环计数器写入哪个矩阵。
以下是我的设置的一个简单示例:
reps = 1000
mat1 = matrix(NA, nrow=reps, ncol=2)
mat2 = matrix(NA, nrow=reps, ncol=2)
mat3 = matrix(NA, nrow=reps, ncol=2)
mat4 = matrix(NA, nrow=reps, ncol=2)
for(i in 1:4){
#Here I am going to alter my beta values for each iteration of i
for(j in 1:reps){
#Here I run my simulation and store values to mat1, mat2, mat3, mat4
#I want to store to mat1 on first iteration of j, mat2 on second etc.
model <- lm(Y~X)
mat[["i"]][j,1] <- model$coef[1]
mat[["i"]][j,2] <- model$coef[2]
}
}
对于i循环的迭代1,我希望mat [[“i”]] [j,1]与mat1的第1列相关联,迭代2与mat2等相关。这显然不起作用,因为我在这里编码我无法弄清楚如何使它工作。
我可以使用if的值来判断i的值,但是如果可能的话我想避免这种情况。
修改
感谢大家的帮助!这很有效:
reps = 1000
myMatList <- list()
for(i in 1:4){
#Here I am going to alter my beta values for each iteration of i
myMatList[[i]] <- matrix(NA, nrow=reps, ncol=2)
for(j in 1:reps){
#Here I run my simulation and store values to mat1, mat2, mat3, mat4
#I want to store to mat1 on first iteration of j, mat2 on second etc.
model <- lm(Y~X)
myMatList[[i]][j,1] <- model$coef[1]
myMatList[[i]][j,2] <- model$coef[2]
}
}
答案 0 :(得分:0)
我不确定您的代码是否有效,但我认为这可能会有所帮助:
l <- list()
reps = 10
for(i in 1:4) {
l[[i]] <- matrix(NA, nrow=reps, ncol=2)
}
l[[1]][1, 1] # [1] NA
l[[1]][1, ]