Ошибка: оператор $ недопустим для атомарных векторов при использовании его внутри цикла для прогнозирования

#r #arima #forecast

#r #arima #прогноз

Вопрос:

Я использую оператор «$», чтобы получить прогнозируемые значения и модель, используемую путем объединения функций stlf и auto.arima . Этот код работает должным образом для другого набора данных, но здесь он выдает мне эту ошибку.

Я попытался заменить $ на [[ ]] , но это также приводит к той же ошибке. Train_df — это временной ряд с 41 строкой и 5 столбцами. Каждый столбец представляет собой разные данные продукта.

 Train_df <- ts(Train_df, start=c(2000,1), frequency =12)
fcast <- matrix(NA,nrow=10,ncol=ncol(Train_df))
model <- matrix(NA, nrow = 2, ncol = ncol(Train_df))
colnames(model) <- colnames(Train_df)
acc <- matrix(NA, nrow=ncol(Train_df), ncol=5)
colnames(acc) <- c("ME","RMSE","MAE","MPE","MAPE")

# Combining two models
for(i in 1:ncol(Train_df)){
  fc1 <- forecast(stlf(Train_df[,i],h=10)) #forecast using stlf function
  fc2 <- forecast(auto.arima(Train_df[,i]),h=10) #forecast using auto.arima function
  fcast[,i] <- 0.5*(fc1$mean fc2$mean) #combining the values from both the forecasts
  model[1,i] <- fc1$method
  model[2,i] <- fc2$method
  acc[i,] <- accuracy(fcast[,i],Test_df[,i]) #Testing for accuracy
} 
  

Этот код приводит к следующей ошибке.
Ошибка: оператор $ недопустим для атомарных векторов.

Может кто-нибудь подсказать, где я ошибаюсь?

Комментарии:

1. Вы должны быть в состоянии сначала попробовать пошагово выполнить свой код, установив i=1 , затем выполнить его шаг за шагом. Затем установите i=2 и повторите. Это может привести к обнаружению ошибки, учитывая, что создать пример будет сложно, учитывая сложность ваших данных. Может быть, добавить фиктивный набор данных с 5 строками и столбцами случайных чисел, чтобы мы могли воспроизвести?

2. Какова структура fc1 ?

3. fc1 является объектом прогноза. List of 10 $ mean : Time-Series [1:10] from 2017 to 2018: 8628 7755 7136 3967 7625 ... $ method : chr "STL ETS(A,N,N)" $ series : chr "df_new[, i]" - attr(*, "class")= chr "forecast"

4. @JackArmstrong : Я пробовал пошаговое выполнение, и на каждой итерации код выдает одну и ту же ошибку.

5. В какой строке это произошло, потому что именно там вы ошибаетесь. Затем сравните структуры каждого бита, используя str() .