2016-04-29 116 views
2

我试图在R中模拟10次数据,但我没有弄清楚如何实现这一点。代码如下所示,你可以直接在R中运行它!当我运行它时,它会给我5个数字的“w”作为输出,我想这只是一个模拟,但实际上我想要的是对这5个数字进行10次不同的模拟。R中的模拟for循环

我知道我需要为它写一个for循环,但我没有得到,有谁能帮忙吗?

# simulate 10 times 

# try N = 10, for loop? 
# initial values w0 and E 

w0=1000 
E= 1000 
data = c(-0.02343731, 0.045509474 ,0.076144158,0.09234636,0.0398257) 
constant = exp(cumsum(data)) 
exp.cum = cumsum(1/constant) 
w=constant*(W0 - exp.cum)- E 
w 
+0

是'数据'从一些分布中随机抽取?模拟在这种情况下意味着什么? – Gopala

+0

这里没有什么随意的。重复只会给你相同的结果。您可以使用'replicate()'重复一段代码(请参阅帮助页面),但确保实际上涉及到一些随机性。 – MrFlick

+0

感谢您的回答!我真正想要的是随机数据10次,所以每次我都可以得到不同的w值。我可以做到吗? – Amanda

回答

2

你会想在每次模拟中产生新的数据值。在for循环后面的大括号内执行此操作。然后,在关闭花括号之前,一定要将统计输出保存在对象的适当位置,如向量。举个简单的例子,

W0=1000 
E= 1000 
n_per_sim <- 5 
num_sims <- 10 

set.seed(12345) #seed is necessay for reproducibility 
sim_output_1 <- rep(NA, times = num_sims) #This creates a vector of 10 NA values 

for (sim_number in 1:num_sims){ #this starts your for loop 
data <- rnorm(n=n_per_sim, mean=10, sd=2) #generate your data 
average <- mean(data) 
sim_output_1[sim_number] <- average #this is where you store your output for each simulation 
} 
sim_output_1 #Now you can see the average from each simulation 

请注意,如果你想保存每个模拟五个值,你可以利用矩阵对象,而不是一个矢量对象,如下所示

matrix_output <- matrix(NA, ncol=n_per_sim, nrow=num_sims) #This creates a 10x5 matrix 

for (sim_number in 1:num_sims){ #this starts your for loop 
    data <- rnorm(n=n_per_sim, mean=10, sd=2) #generate your data 

    constant = exp(cumsum(data)) 
    exp.cum = cumsum(1/constant) 
    w=constant*(W0 - exp.cum)- E 
    matrix_output[sim_number, ] <- w #this is where you store your output for each simulation 
} 
matrix_output #Now you can see the average from each simulation