У меня проблема с определением, почему auto.arima предлагает конкретные коэффициенты. У меня есть временные ряды с несколькими сезонностями, и я пытаюсь прогнозировать будущие значения, используя STL + ARIMA. Я следил за книгой Хиндмана (https://otexts.org/fpp2/complexseasonality.html). Однако во всех примерах, с которыми я сталкивался, я вижу функцию auto.arima вместо указания параметров Arima.
Я в основном использовал функцию mstl()
, чтобы получить остатки от Лесс, а затем попытался оценить параметры ARIMA для этих остатков. Я не уверен, что то, что я делаю, правильно. Я просто хотел проверить, что auto.arima
предлагал.
auto.arima
предлагал (0,1,2) параметры: AIC = 6759,638 SSE = 4774186 p-VALUE = 0,616866. Тем не менее, большинство других моделей имели меньшие значения AIC, например, arima (8,0,7): AIC = 6691,219 SSE = 3820932 p-VALUE = 0,9947854. или арима (3,1,7): AIC = 6709,794 SSE = 4177168 p-VALUE = 0,9993566.
Я не понимаю, правильно ли то, что я делаю, и почему это происходит. Я также проверил остатки (Остатки от STL + ARIMA (0,1,2)
Q * = 39,068, df = 18, значение p = 0,00279 Модель df: 2. Общее количество использованных лагов: 20). (Остатки от STL + ARIMA (3,1,7 Q * = 5,5735, df = 10, p-значение = 0,8497 Модель df: 10. Всего использованных лагов: 20) Любые предложения, как подойти к этой ситуации? Код ниже
data.hourly.msts=msts(ts.data,seasonal.periods =
c(24,168),start=c(1,1))
fixed.nValid=48
fixed.nTrain=length(ts.data)-fixed.nValid
datatrain.msts=window(data.hourly.msts,start=c(1,1),end=c(1,fixed.nTrain))
a <- mstl(datatrain.msts)
b<-a[,5]
for(p in 1:10){
for(q in 1:10){
for(d in 1:2){
if(p+d+q<=20){
model<-arima(x=b, order = c((p-1),(d-1),(q-1)),optim.control = list(maxit = 2500),method="ML")
pval<-Box.test(model$residuals, lag=log(length(model$residuals)))
sse<-sum(model$residuals^2)
cat(p-1,d-1,q-1, 'AIC=', model$aic, ' SSE=',sse,' p-VALUE=', pval$p.value,'\n')
}
}
}
}
data.hourly.stlm=stlm(data.hourly.msts,s.window="periodic",
modelfunction=Arima,order=c(8,0,7))
data.hourly.stlm.pred=forecast(data.hourly.stlm,h=48)