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.
źródło
predict()
służy do prognozowania, afitted()
przywraca dopasowanie modelu do okresu historycznego. Jeśli potrzebujesz bardziej szczegółowej pomocy, powinieneś opublikować powtarzalny przykład z jakimś kodem.heat
się liniowego wzrostu wraz z godziną dnia, a następnie zeskoczysz z powrotem, gdy godzina powróci do 1. Jeśli użyjesz zmiennych obojętnych, każda godzina dnia uzyska swój własny efekt. Uruchom mój przykładowy kod i zwróć szczególną uwagę na to, jak skonstruować mój obiekt xreg.stats
iforecast
jest to, że nie pasują one do funkcji transferu sondy. Dokumentacjastats::arima
funkcji stwierdza, co następuje: Jeśli uwzględniony jest termin xreg, regresja liniowa (ze stałym terminem, jeśli parametr include.mean ma wartość true i nie ma różnicowania) jest dopasowywana do modelu ARMA dla terminu błędu. Tak więc, jeśli rzeczywiście potrzebujesz dopasować funkcje przesyłania, wygląda naTSA::arimax
to, że jest to sposób na wejścieR
.Używam R do prognozowania obciążenia przez jakiś czas i mogę zasugerować, abyś użył
forecast
pakietu i jego nieocenionych funkcji (jakauto.arima
).Możesz zbudować model ARIMA za pomocą następującego polecenia:
z
y
twoim przewidywaniem (przypuszczamdayy
),order
kolejnością twojego modelu (biorąc pod uwagę sezonowość) iexogenous_data
twoją temperaturą, promieniowaniem słonecznym itp. Ta funkcjaauto.arima
pomaga ci znaleźć optymalną kolejność modeli. Można znaleźć krótki tutorial na temat prognozowanej”pakietu` tutaj .źródło
Ja osobiście nie rozumiem funkcji transferu, ale myślę, że dostał
xtransf
ixreg
odwrócony. Przynajmniej w bazie R jestarima
toxreg
, że zawiera zmiennych egzogenicznych. Mam wrażenie, że funkcja przesyłania opisuje, w jaki sposób (opóźnione dane wpływają na przyszłe wartości), a nie co .Spróbowałbym użyć
xreg
dla twoich zmiennych egzogenicznych, być może używając,arima
jeśliarimax
wymaga funkcji przeniesienia. Problem polega na tym, że Twój model jest codzienny, ale twoje dane mają sezonowość zarówno dzienną, jak i roczną, i nie jestem teraz pewien, czy pierwsza różnica (order=(*, 1, *)
poradzi sobie z tym), czy nie. (Na pewno nie uzyskasz magicznych prognoz przez cały rok z modelu, który uwzględnia tylko codzienną sezonowość).PS Jakiego
time
używasz w swoimlm
? Dosłowny zegar lub 1-up numer obserwacji? Myślę, że można coś uzyskać za pomocą modelu z efektem mieszanym (lmer
wlme4
pakiecie), chociaż nie zorientowałem się, czy prawidłowe wykonanie tej korelacji powoduje autokorelację, która wystąpi w szeregu czasowym. Jeśli nie zostanie to uwzględnione, colm
nie jest możliwe, możesz uzyskać ciekawe dopasowanie, ale Twoja koncepcja dokładności prognozy będzie zbyt optymistyczna.źródło