2016-04-29 5 views
2

Я пытаюсь имитировать данные 10 раз в R, но я не понял, как это достичь. Код показан ниже, вы можете запустить его в R сразу! Когда я запустил его, он даст мне 5 чисел «w» в качестве вывода, я думаю, что это всего лишь одно симуляция, но на самом деле то, что я хочу, это 10 различных симуляций этих 5 чисел.Моделирование в R, для цикла

Я знаю, что мне нужно написать цикл для него, но я этого не понял, может ли кто-нибудь помочь?

# 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 
Смежные вопросы