Экспорт прогноза в набор данных при выполнении цикла - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь взять один набор данных и выполнить прогноз по нему, основываясь на различных срезах. Оператор for i запускается, но в итоге говорит, что «замена имеет 76 строк, данные имеют 0»

Вот воспроизводимый пример:

library(tidyverse)
library(forecast)
library(scales)
library(growthcurver)
options(scipen = 12) # Scientific Notation
options(digits = 6) # Specify Digits
noup<-3 #Days without update

claims <- tribble(~perdaycases, 3,1,1,0,0,0,
                       1,8, 7, 2,
                       8,  8, 12,
                       13, 15,
                       21, 27,
                       47, 65,
                       47, 30,
                       62, 74,
                       23, 38)

claims$cases <- cumsum(claims$perdaycases)
claims$id<-1:nrow(claims)

inds <- seq(as.Date("2020-03-11"), as.Date(Sys.Date()-noup), by = "day")

set.seed(1)
## Forecast length
h0 = 30

#Here, I create the empty dataset
estimates<-data.frame(Simulation=numeric(),Forecast=numeric()) #Empty Dataset

for(i in 1:length(claims$id)) {
  cap<-subset(claims,id<14+i) #First cutoff then it runs again
  cts <- ts(cap$cases, start = 1,frequency = 365) #Time Series
  cfore <- forecast(auto.arima(cts), h= h0, level = c(80)) #Do the Arima
  gc_fit <- SummarizeGrowth(seq(1,nrow(cap)),cap$cases) #Fit the Growth curve
  tt <- seq(from=nrow(cap)+1,to=90,by=1) 
  forelog <- predict(gc_fit$model,newdata=list(t=tt)) #Prediction 
  forecast<-forelog #Create the item with mean projection 
  len<-as.numeric(length(forecast)) #Length of each forecast
  estimates$Simulation<-as.numeric(rep(i,len)) #id each iteration 
  estimates$Forecast<-forecast #Here I try to export the forecast
}

Полученная ошибка ...

Ошибка в $<-.data.frame (*tmp*, «Симуляция», значение = c (1, 1, 1, 1,: замена имеет 76 строк, данные имеют 0

Я догадываясь, что это связано с последними двумя строками, но после 4 часов борьбы я решил обратиться за помощью.

SOS.

Спасибо,

1 Ответ

0 голосов
/ 07 апреля 2020

Попробуйте привести минимальный пример, который воспроизводит вашу ошибку. Ваша проблема сводится к этой простой проблеме:

test <- data.frame(
  a=numeric(),
  b=numeric()
)

test$a <- c(1,2,3)
# Error in `$<-.data.frame`(`*tmp*`, a, value = c(1, 2, 3)) : 
#  replacement has 3 rows, data has 0

, которая не работает. Вы можете сделать что-то вроде этого:

test <- data.frame(
  a=numeric(),
  b=numeric()
)

for (i in 1:3){
  a <- c(rep(i, 3))
  b <- c(rep(i-1, 3))
  df <- data.frame(
    a = a,
    b = b
  )
  test <- bind_rows(test,df)
}

И для вашего конкретного примера c вы можете заменить следующие строки:

  # estimates$Simulation <-as.numeric(rep(i,len)) #id each iteration 
  # estimates$Forecast<-forecast #Here I try to export the forecast

  df <- data.frame(
    Simulation = as.numeric(rep(i,len)),
    estimates = forecast
  )
  estimates <- bind_rows(estimates,df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...