• Nie Znaleziono Wyników

Ekstrapolacja szeregów czasowych

N/A
N/A
Protected

Academic year: 2021

Share "Ekstrapolacja szeregów czasowych"

Copied!
6
0
0

Pełen tekst

(1)

Ekstrapolacja szeregów czasowych

Marcin Orchel

1 Wstęp

Sezonowość to zależność korelacyjna rzędu k między i-tym elementem szeregu a (i − k)- tym elementem. Miarą sezonowości jest autokorelacja.

Usunięcie składowej k poprzez różnicowanie szeregu – przekształcenie każdego i-tego elementu szeregu na jego różnicę z (i − k)-tym elementem.

Szeregi stacjonarne na potrzeby ARIMA, czyli szeregi o stałych w czasie średniej, wariancji i autokorelacji.

2 Zadania

2.1 Zadania na 3.0

Napisać skrypt w R. W skrypcie

• Przetestować wygładzanie szeregu za pomocą średniej ruchomej

• Przetestować transformację Boxa-Coxa logarytmiczną (λ = 0) i pierwiastkową (λ = 0, 5)

• Przetestować różną szerokość okna wygładzania oraz różne metody: simple, Trian- gular, Exponential Simple, Exponential Modified, Cumulative.

• Dokonać ekstrapolacji modelem ARIMA oraz modelem lm na wygenerowanym szeregu czasowym z sezonowością.

• Porównać jakość ekstrapolacji dla różnych modeli.

• Przetestować różne wartości parametrów tych modeli.

• Narysować na jednym wykresie punkty treningowe i funkcje ekstrapolacji dla wy- branych modeli.

• Sprawdzić czy zlogarytmowanie obserwacji pozwala na usunięcie trendu.

• Sprawdzić czy gdy w szeregu czasowym znajdują się obserwacje odstające, lepiej użyć mediany niż średniej kroczącej.

(2)

• Dodać komentarz do skryptu opisujący krótko na czym polegają użyte metody oraz wnioski z badań.

Wskazówki:

• opcjonalnie można przetestować najpierw model średniej kroczącej ma https://

www.rdocumentation.org/packages/forecast/topics/ma

• można sprawdzić dekompozycję szeregu na różne składniki takie jak sezonowość po- leceniem decomposehttps://www.rdocumentation.org/packages/stats/topics/

decompose

• jeśli szereg czasowy jest stacjonarny to nie ma potrzeby różnicowania, p-value to graniczny poziom istotności. Im mniejsza tym bardziej prawdopodobna jest hipoteza alternatywna, że szereg czasowy jest stacjonarny

• transformacja Boxa-Coxa przekształcenie potęgowe stosujemy gdy wariancja wa- riancja wzrasta lub maleje, gdy w szeregu występują obserwacje odstające, oraz aby uzyskać rozkład danych zbliżony do normalnego

• różnicowanie w celu przekształcenia do postaci stacjonarnej (np. wyeliminowanie trendu długoterminowego, sezonowości)

Wskazówki do R:

• przykładowe szeregi czasowe można znaleźć w pakiecie forecast lub standardowo w pakiecie MASS i datasets jak w konspekcie Wprowadzenie do R

• sprawdzenie czy szereg czasowy jest stacjonarny, funkcja Box.testhttps://stat.

ethz.ch/R-manual/R-devel/library/stats/html/box.test.htmllub funkcje adf.test https://www.rdocumentation.org/packages/aTSA/topics/adf.testi kpss.test https://www.rdocumentation.org/packages/tseries/topics/kpss.test

• https://www.rdocumentation.org/packages/forecast/topics/forecast

• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/arima.html

• https://www.rdocumentation.org/packages/forecast/topics/ets

• https://www.rdocumentation.org/packages/forecast/topics/auto.arima

• https://www.rdocumentation.org/packages/forecast/topics/tslm

• https://www.rdocumentation.org/packages/forecast/topics/forecast.lm

• https://www.rdocumentation.org/packages/forecast/topics/BoxCox

• https://www.rdocumentation.org/packages/xts/topics/xts

• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/ts.html

(3)

• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/tsdiag.html

• http://search.r-project.org/library/zoo/html/read.zoo.html

• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/stl.html

• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/lag.plot.html

• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/spectrum.html

• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/box.test.html

• https://stat.ethz.ch/R-manual/R-devel/library/stats/html/HoltWinters.

htmlorazhttps://www.rdocumentation.org/packages/forecast/topics/forecast.

HoltWinters

• https://www.rdocumentation.org/packages/SparseM/topics/slm.fit

• https://www.rdocumentation.org/packages/tframe/topics/tfwindow

• https://www.rdocumentation.org/packages/TTR/topics/GD

• https://www.rdocumentation.org/packages/forecast/topics/wineind

• https://www.rdocumentation.org/packages/forecast/topics/accuracy

• https://www.rdocumentation.org/packages/smatr/topics/sma Przykłady

• x = seq(from=1, to=50, by=0.1)

y = x + sin(x) + rnorm(length(x), 0, 1) zbior = cbind(x, y)

plot(x,y)

zbior.ts <- ts(y, start=c(1), frequency=length(x)/8.0) zbior.ts.dekompozycja = decompose(zbior.ts, "additive") plot(zbior.ts.dekompozycja)

• informacje o szeregu czasowym library(forecast)

zbior.ts <- ts(zbior, start=c(2009, 1), frequency=12) start(zbior.ts)

end(zbior.ts)

frequency(zbior.ts) zbior.ts

plot(zbior.ts) par(mfrow=c(2,1))

monthplot(zbior.ts, main="Miesieczny")

seasonplot(zbior.ts, year.labels=TRUE, col=rainbow(5), main="Sezonowy")

(4)

• wykres funkcji autokorelacji Acf(zbior.ts)

• dekompozycja szeregu na trend, sezonowość i losowe fluktuacje

zbior.ts.dekompozycja.add <- decompose(zbior.ts, "additive") plot(zbior.ts.dekompozycja.add)

• Transformacja Boxa-Coxa par(mfrow=c(3,1))

plot(zbior.ts, main="Dane", xlab="", ylab="") grid()

plot(BoxCox(zbior.ts, lambda=0.5), main="Box-Cox 1", xlab="", ylab="")

grid()

plot(BoxCox(zbior.ts, lambda=0), main="Box-Cox 2", xlab="", ylab="")

grid()

• logarytmowanie danych

tsZbior <- ts(zbior, frequency=12, start=c(1981, 1)) logTsZbior <- log(tsZbior)

par(mfrow=c(1,2))

plot(tsZbior, lwd=4, xlab="Years", ylab="Y1", main="Main") plot(logTsZbior, lwd=4, xlab="Years", ylab="Y1", main="Main po

zlogarytmizowaniu")

• wygładzanie library(TTR)

tsZbiorSmooth <- SMA(zbior.ts, n=5) par(mfrow=c(2,1))

plot(zbior.ts, lwd=4, xlab="Indeks", ylab="Y1", main="Main") plot(tsZbiorSmooth, lwd=4, xlab="Indeks", ylab="Y1",

main="Wygladzony")

• wygładzanie medianą par(mfrow = c(3, 1))

tsZbiorSMooth3 <- smooth(zbior) tsZbiorSmooth5 <- runmed(zbior, 5)

plot(tsZbior, lwd=4, xlab="Indeks", ylab="Y1", main="Main") plot.ts(tsZbiorSmooth3, lwd=4, xlab="Indeks", ylab="Y1",

main="Wygladzony 1")

(5)

plot.ts(tsZbiorSmooth5, lwd=4, xlab="Indeks", ylab="Y1", main="Wygladzony 2")

• różnicowanie szeregów czasowych diffTsZbior <- diff(zbior.ts)

plot(zbior.ts, lwd=4, xlab="Years", ylab="Y1", main="Main") plot(diffTsZbior, lwd=4, xlab="Years", ylab="Y1", main="Main")

• różnicowanie szeregów czasowych 2 tsdisplay(diff(zbior.ts, 12))

• sprawdzenie stacjonarności szeregu czasowego library(tseries)

Box.test(zbior, lag=10, type="Box-Pierce") Box.test(zbior, lag=10, type="Ljung-Box") adf.test(zbior, alternative="stationary") kpss.test(zbior)

• podział na zbiór treningowy i testowy

zbior.learn <- window(zbior.ts, end=c(6)) start(zbior.learn)

end(zbior.learn)

zbior.test <- window(zbior.ts, start=c(6.001)) start(zbior.test)

end(zbior.test) length(zbior.test)

ts.plot(zbior.learn, zbior.test, col=1:2, lty=c(1,2)) abline(v=time(zbior.test)[1], lty=3)

legend("topleft", legend=c("training", "test"), col=1:2, lty=c(1,2))

• model ARIMA

model.ARIMA1 <- auto.arima(zbior.learn) summary(model.ARIMA1)

tsdiag(model.ARIMA1)

• ręczny wybór modelu

tsdisplay(diff(zbior.learn, 12), lag.max=12)

model.ARIMA2 <- Arima(zbior.learn, order=c(1,0,0), season=c(0,1,0)) summary(model.ARIMA2)

tsdiag(model.ARIMA2)

(6)

• model dekompozycji

model.tslm <- tslm(zbior.learn ~ trend + season) summary(model.tslm)

Acf(residuals(model.tslm))

Box.test(residuals(model.tslm), type="Ljung-Box", lag=20)

• model ETS (Exponential Smoothing) model.ets <- ets(zbior.learn) summary(model.ets)

tsdiag(model.ets)

• prognozowanie

horyzont <- length(zbior.test)

snaive.prognozy <- snaive(zbior.learn, h=horyzont) ARIMA1.prognozy <- forecast(model.ARIMA1, h=horyzont) ARIMA2.prognozy <- forecast(model.ARIMA2, h=horyzont) tslm.prognozy <- forecast(model.tslm, h=horyzont) ets.prognozy <- forecast(model.ets, h=horyzont) par(mfrow=c(2,2))

plot(snaive.prognozy)

lines(zbior.test, col="red", lty=2)

legend("topleft", legend=c("historyczne", "prognozy"), lty=c(2,1), col=c("red", "blue"))

grid()

plot(ARIMA2.prognozy)

lines(zbior.test, col="red", lty=2) grid()

plot(tslm.prognozy)

lines(zbior.test, col="red", lty=2) grid()

plot(ets.prognozy)

lines(zbior.test, col="red", lty=2) grid()

• porównanie jakości prognoz

kryteria <- c("RMSE", "MAE", "MAPE", "MASE") accuracy(snaive.prognozy, zbior.test)[, kryteria]

accuracy(ARIMA1.prognozy, zbior.test)[, kryteria]

accuracy(ARIMA2.prognozy, zbior.test)[, kryteria]

accuracy(tslm.prognozy, zbior.test)[, kryteria]

accuracy(ets.prognozy, zbior.test)[, kryteria]

Cytaty

Powiązane dokumenty

is non-elementary.. W~x~y~z)~u, (*) It follows that codes of reachable words are denable.. The hard part:

Omówiona wyniku działania „miękkich” metod obliczeń komputerowych w procesie zostanie metoda prognozowania krótkich szeregów czasowych z zastosowaniem

[r]

step 1 Write both sides of the equation as a power of the same number.. krok 2 Equate the exponents

step 1 Write both sides of the equation as a power of the same number.. step 2 Equate the exponents

In our example these will be polynomial functions and sometimes functions involving absolute value....

The denominator is then always positive, so the greater the denominator, the smaller the whole fraction and vice versa.. So the range of the function will be ]0, 2[ (0 when

Sprawdzić, że proces jest sss i znależć funkcję kowariancji tego procesu2. Skonstruować proces sss, dla którego funkcja kowariancji nie ma