2016-04-29 70 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