Как повторить несколько последовательных строк N-й раз в R - PullRequest
0 голосов
/ 03 апреля 2020

Как я могу повторить мою строку 22 в строку 26 десять раз последовательно и добавить результат строки 26 с первой в десятую и, наконец, получить среднее значение из 10 последовательных сумм в моем коде r ниже:

# simulate arima(1,1,0)
library(forecast)
set.seed(100)
wn <- rnorm(10, mean = 0, sd = 1)
ts <- wn[1:2]
for (i in 3:10){
  ts<-arima.sim(n=10,model=list(ar=-0.7048,order=c(1,1,0)),start.innov=4.1,n.start=1,innov=wn)
}
ts <-ts[-1]
#
# write the function for RMSE
rmse <- function(x) {
  m <- auto.arima(x)
  acu <- accuracy(m)
  acu[1, 2]
}
#
t<-length(ts)# the length of the time series
l<- 2# block size
m <- ceiling(t / l) # number of blocks
blk<-split(ts, rep(1:m, each=l, length.out = t)) # divides the series into blocks
res<-sample(blk, replace=T, 1000) # resamples the blocks
unlist<-unlist(res, use.names = F) # unlist the bootstrap series
tsunlist<-ts(unlist) # turns the bootstrap series into time series data
# use the RMSE function
RMSE <- rmse(tsunlist)

Приведенный выше код R выполняет следующий алгоритм по шагам:

  1. Имитация ARIMA(1,1,0) временных рядов (от строки 1 до строки 9)
  2. Разделение временного ряда на блоки равного размера 2 (строка 18 - строка 21)
  3. Повторная выборка каждого блока случайным образом 1000 раз (строка 22 - строка 23)
  4. Преобразование преобразованного ряда в данные временных рядов (строка 24)
  5. Получить среднеквадратичное значение пересчитанного временного ряда (строка 26)

Я хочу повторить шаги с 3 по 5 100 раз, сложить результаты, полученные на шаге 5, 100 раз и получить среднее значение результатов.

1 Ответ

2 голосов
/ 03 апреля 2020

Вот подход к выполнению повторной выборки 100 раз. Замените ваш код, начиная со строки 22, следующим.

finalresult <- vector() #initialize vector to receive result from for loop
for(i in 1:100){
   res<-sample(blk, replace=T, 1000) # resamples the blocks
   res.unlist<-unlist(res, use.names = F) # unlist the bootstrap series
   tsunlist<-ts(res.unlist) # turns the bootstrap series into time series data
   # use the RMSE function
   RMSE <- rmse(tsunlist)
   finalresult[i] <- RMSE # Assign RMSE value to final result vector element i
}

Как только вы запустите l oop, вы найдете результаты в объекте finalresult.

finalresult
  [1] 0.4695763 0.4702997 0.4727734 0.4677841 0.4633566 0.4619570 0.4645237 0.4657333 0.4734756 0.6035923 0.4676718 0.4563636
 [13] 0.4653432 0.4741868 0.4638185 0.4679926 0.4652872 0.4644442 0.4673774 0.4654423 0.4574012 0.4613827 0.4689168 0.4652262
 [25] 0.4621680 0.4714052 0.4544405 0.4781833 0.4640436 0.4708187 0.4562165 0.4631720 0.4638906 0.4654569 0.4691919 0.4644442
 [37] 0.4635361 0.4657427 0.4682825 0.4626979 0.4636363 0.4562305 0.4582826 0.4689343 0.4648181 0.4659912 0.4597617 0.4701386
 [49] 0.4678786 0.4658028 0.4633929 0.4759015 0.4719038 0.4685480 0.4639831 0.4663984 0.4631158 0.4636240 0.4677248 0.4680744
 [61] 0.4633999 0.4734937 0.4545364 0.4671157 0.4656818 0.4638791 0.4676848 0.4650673 0.4710859 0.4680129 0.4641621 0.4632793
 [73] 0.4664942 0.4596942 0.4643477 0.4626547 0.4684443 0.4572568 0.4695198 0.4566412 0.4650888 0.4643392 0.4603766 0.4694628
 [85] 0.4579581 0.4627443 0.4729837 0.4668802 0.4723182 0.4688657 0.4684541 0.4655471 0.4687285 0.4504862 0.4599657 0.4660643
 [97] 0.5093069 0.4620558 0.4655066 0.4682742
...