Mam cztery różne serie czasowe pomiarów godzinnych:
- Zużycie ciepła w domu
- Temperatura na zewnątrz domu
- Promieniowanie słoneczne
- Prędkość wiatru
Chcę być w stanie przewidzieć zużycie ciepła w domu. Istnieje wyraźny trend sezonowy, zarówno w ujęciu rocznym, jak i codziennym. Ponieważ istnieje wyraźna korelacja między różnymi seriami, chcę je dopasować za pomocą modelu ARIMAX. Można to zrobić w R, używając funkcji arimax z pakietu TSA.
Próbowałem przeczytać dokumentację dotyczącą tej funkcji i przeczytać o funkcjach przesyłania, ale do tej pory mój kod:
regParams = ts.union(ts(dayy))
transferParams = ts.union(ts(temp))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams,xtransf=transferParams,transfer=list(c(1,1))
pred10 = predict(model10, newxreg=regParams)
daje mi:
gdzie czarna linia to faktycznie zmierzone dane, a zielona linia to mój dopasowany model w porównaniu. To nie tylko dobry model, ale oczywiście coś jest nie tak.
Przyznaję, że moja wiedza na temat modeli ARIMAX i funkcji przesyłania jest ograniczona. W funkcji arimax (), (o ile rozumiem), xtransf jest egzogenicznym szeregiem czasowym, którego chcę użyć (używając funkcji transferu) do przewidzenia moich głównych szeregów czasowych. Ale jaka jest naprawdę różnica między xreg i xtransf?
Mówiąc bardziej ogólnie, co zrobiłem źle? Chciałbym być w stanie uzyskać lepsze dopasowanie niż to osiągane z lm (ciepło ~ temperatura radi wiatr * czas).
Edycje: Na podstawie niektórych komentarzy usunąłem transfer i zamiast tego dodałem xreg:
regParams = ts.union(ts(dayy), ts(temp), ts(time))
model10 = arimax(heat,order=c(2,1,1),seasonal=list(order=c(0,1,1),period=24),xreg=regParams)
gdzie dzień jest „numerem dnia w roku”, a czas jest godziną dnia. Temp to znowu temperatura na zewnątrz. To daje mi następujący wynik:
co jest lepsze, ale nie prawie to, czego się spodziewałem.