Прежде всего, вы определили объект временного ряда с частотой = 7, что означает, что вы определяете еженедельную сезонность данных
Для прогнозирования временных рядов с аримой используйте следующий код:
TS<-ts(Product_Dist_Training_Trans[,17], frequency = 7)
plot(TS)
library(tseries)
library(forecast)
decomp<-stl(TS , s.window = "periodic")
plot(decomp)
decomp_components<-as.data.frame(decomp$time.series)
seasonal_component<-ts(decomp_components$seasonal, frequency = 7)
relation1<-auto.arima(seasonal_component,seasonal = T ,max.p = 10, max.q = 10, max.d = 5, max.P = 5, max.Q = 5, max.D = 2, max.order = 30, start.p = 1, start.q = 1)
result1<-forecast(relation1, model = "Arima", h = 29)
plot(result1)
deseasonal_cnt<-seasadj(decomp)
relation2 <- auto.arima(deseasonal_cnt,seasonal = F ,max.p = 10, max.q = 10, max.d = 5,max.P = 5, max.Q = 5, max.D = 2, max.order = 30, start.p = 1, start.q = 1)
result2<-forecast(relation2, model = "Arima",h=29)
plot(result2)
result<-result1$mean+result2$mean
Если это все еще дает вам отрицательные значения, что означает, что компонент тренда уменьшается, поэтому, чтобы избежать отрицательных значений, вместо этого поставьте ноль
result[result<0]<- 0
Проблема с вашим кодом состоит в том, что вы прогнозировали только для сезонной части, вам также нужно сделать прогноз для несезонной части, а затем объединить результат