#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()
.