Hogyan illeszthető egy ARIMAX-modell R-hez?

Négy különböző óránkénti mérésem van:

  1. Egy ház belsejében a hőfogyasztás
  2. A házon kívüli hőmérséklet
  3. A napsugárzás
  4. A szél sebessége

Szeretném megjósolni a házon belüli hőfogyasztást . Világos szezonális trend figyelhető meg, mind éves szinten, mind napi szinten. Mivel egyértelmű összefüggés van a különböző sorozatok között, szeretnék illeszteni őket egy ARIMAX-modell segítségével. Ezt R-ben lehet megtenni, a TSA csomag arimax függvényének felhasználásával.

Megpróbáltam elolvasni ennek a függvénynek a dokumentációját és az átviteli függvényeket, de eddig a kódom:

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) 

megadja: ide írja be a kép leírását

ahol a fekete vonal a tényleges mért adatok, és a zöld vonal az összehasonlított modellem. Nem csak nem jó modell, de nyilvánvalóan valami nincs rendben.

Elismerem, hogy az ARIMAX modellekről és az átviteli funkciókról korlátozott ismereteim vannak. Az arimax () függvényben (amennyire megértettem) az xtransf az az exogén idősor, amelyet használni szeretnék (átviteli függvényekkel) a fő idősorom megjóslásához. De mi a különbség valójában az xreg és az xtransf között?

Általánosabban véve mit csináltam rosszul? Szeretnék jobb illeszkedést szerezni, mint az lm (hő ~ temp rádió szél * idő) által elért illeszkedés.

Szerkesztések: Néhány megjegyzés alapján eltávolítottam az átvitelt, és helyette hozzáadtam az xreg-et:

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) 

ahol napos az “év számnapja”, az idő pedig a nap órája. A hőmérséklet ismét a kinti hőmérséklet. Ez a következő eredményt adja:

ide írja be a kép leírását

ami jobb, de közel sem olyan, mint amilyet vártam.

Válasz

Kicsit nehézségekbe ütközik 2 szezonalitású sorozat ARIMA modell használatával történő modellezése . Ennek a jognak a megszerzése nagyban függ a dolgok helyes beállításától. Gondolt már egy egyszerű lineáris modellre? Sokkal gyorsabbak és könnyebben illeszthetők, mint az ARIMA modellek, és ha dummy változókat használ a különböző szezonalitás szintekhez, gyakran elég pontos.

  1. Feltételezem, hogy óránkénti adataid vannak, ezért győződj meg arról, hogy a TS objektumod 24-es frekvenciával van beállítva.
  2. Modellezhetsz más szintű szezonalitás dummy változók használatával. Például 0/1-es próbabábu-készletet szeretne használni, amely az év hónapját képviseli.
  3. A dummy változókat foglalja bele a xreg érv, minden kovariánssal együtt (mint a temperatu re).
  4. Illessze be a modellt az R bázis arima függvényével. Ez a függvény képes kezelni az ARMAX modelleket az xreg argumentum használatával.
  5. Próbálja ki az előrejelzési csomag Arima és auto.arima funkcióit. Az auto.arima kedves, mert automatikusan megtalálja az arima modell jó paramétereit. Mindazonáltal MINDIG kell, hogy elférjen az adatkészleten.
  6. Próbálja ki az arima csomag tslm függvényét, a szezonalitás minden szintjének dummy változókkal. Ez sokkal gyorsabban illeszkedik, mint az Arima modell, és még jobban is működhet az Ön helyzetében.
  7. Ha a 4/5/6 nem működik, AKKOR kezdjen aggódni az átviteli funkciók miatt. Mielőtt feltérképezné sétálhat.
  8. Ha a jövőre tervez előrejelzést, akkor először meg kell előrejeleznie az xreg változókat. Ez a szezonális bábuk számára könnyű, de el kell gondolkodnia azon, hogyan készítsen egy jó időjárás-előrejelzés. Esetleg használja a történelmi adatok mediánját?

Íme egy példa arra, hogyan közelíteném meg ezt:

#Setup a fake time series set.seed(1) library(lubridate) index <- ISOdatetime(2010,1,1,0,0,0)+1:8759*60*60 month <- month(index) hour <- hour(index) usage <- 1000+10*rnorm(length(index))-25*(month-6)^2-(hour-12)^2 usage <- ts(usage,frequency=24) #Create monthly dummies. Add other xvars to this matrix xreg <- model.matrix(~as.factor(month))[,2:12] colnames(xreg) <- c("Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec") #Fit a model library(forecast) model <- Arima(usage, order=c(0,0,0), seasonal=list(order=c(1,0,0), period=24), xreg=xreg) plot(usage) lines(fitted(model),col=2) #Benchmark against other models model2 <- tslm(usage~as.factor(month)+as.factor(hour)) model3 <- tslm(usage~as.factor(month)) model4 <- rep(mean(usage),length(usage)) #Compare the 4 models library(plyr) #for rbind.fill ACC <- rbind.fill( data.frame(t(accuracy(model))), data.frame(t(accuracy(model2))), data.frame(t(accuracy(model3))), data.frame(t(accuracy(model4,usage))) ) ACC <- round(ACC,2) ACC <- cbind(Type=c("Arima","LM1","Monthly Mean","Mean"),ACC) ACC[order(ACC$MAE),] 

Megjegyzések

  • Mi a felszerelt () függvény. Ha ezt használom, sokkal jobb eredményeket érek el, mint a prediktálással (model10, newxreg = regParams).
  • @utdiscant: predict() az előrejelzéshez, míg a fitted() visszaadja a modell illeszkedését a történelmi időszakra. Ha konkrétabb segítségre van szüksége, akkor tegyen közzé egy megismételhető példát valamilyen kóddal.
  • @utdiscant: ha a dayy-t xreg-ként használja, fennáll annak a veszélye, hogy túl illeszkedik, mivel csak 24 megfigyelése van naponta. Jobb előrejelzési eredményeket érhet el, ha az év hónapját használja.
  • @utdiscant: Ezenkívül az időalapú xreg-eknek dummy változóknak kell lenniük. Most azt modellezted, hogy azt várod, hogy a heat lineárisan növekszik a nap órájával, majd visszaugrik, amikor az óra 1-re tér vissza. Ha dummy változókat használsz, mindegyik a nap órája megkapja ' saját hatását. Futtassa át a példakódomat, és gondosan figyeljen arra, hogy miként szerkesztem az xreg objektumomat.
  • Az ARIMA függvények egyik hátránya a stats és forecast csomagokban az, hogy nem felelnek meg a prober átviteli függvényeknek . A stats::arima függvény dokumentációja a következőket állítja: Ha xreg tag szerepel, akkor lineáris regressziót (állandó taggal, ha az true.mean igaz, és nincs különbség ) egy ARMA modellel van felszerelve a hibakifejezéshez. Tehát, ha valóban át kell alakítanunk az átviteli függvényeket, úgy tűnik, hogy a TSA::arimax függvény a R.

Válasz

R-t használtam végezze el egy ideig a terhelés előrejelzését, és azt tudom javasolni, hogy használja a forecast csomagot és annak felbecsülhetetlen funkcióit (például auto.arima).

ARIMA modellt a következő paranccsal készíthet:

model = arima(y, order, xreg = exogenous_data) 

a y paranccsal tegyük fel, hogy dayy), order a modell sorrendje (figyelembe véve a szezonalitást) és exogenous_data hőmérséklet, napsugárzás stb. A auto.arima függvény segít megtalálni az optimális modell sorrendet. Az `előrejelzés« csomagról egy rövid bemutató található itt .

Megjegyzések

  • Az előrejelzés a hő (a ház hőfogyasztása).

Válasz

I személyesen nem érti az átviteli függvényeket, de szerintem megfordította a xtransf és xreg elemeket. Legalábbis az R “bázis arima xreg tartalmazza az exogén változókat. Az a benyomásom, hogy egy átviteli függvény leírja a hogyan (a lemaradt adatok befolyásolják a jövőbeli értékeket), nem pedig a mi re.

Megpróbálnám használni a xreg exogén változói, esetleg a arima használatával, ha a arimax átviteli függvényt igényel. A probléma az, hogy a modellje napi, de az adatai mindkettőben vannak napi és éves szezonalitás, és jelenleg nem vagyok biztos abban, hogy az első különbség (a order=(*, 1, *)) gondoskodik-e erről vagy sem. (Biztosan nem fog varázslatos, egész éves előrejelzéseket kapni egy olyan modellből, amely csak a napi szezonalitást veszi figyelembe.)

PS Mi az a time, amelyet használ a lm? Szó szerinti óraidő vagy 1-szeres megfigyelési szám? Azt hiszem, vegyes hatású modell használatával (lmer a lme4 csomagban), bár még nem jöttem rá, hogy ennek helyes elvégzése figyelembe veszi-e az idősorokban bekövetkező autokorrelációt. Ha ezt nem számolják el, amit egy lm nem tesz meg, érdekes illeszkedést kaphat, de az elképzelése, hogy mennyire pontos az előrejelzése, túl optimista lesz.

Megjegyzések

  • Megvan mind a mérés órája, mind az év " napja " a mérés.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük