Zeitreihen und Prognosen in R
R verfügt über umfangreiche Möglichkeiten zur Analyse von Zeitreihendaten. Dieser Abschnitt beschreibt die Erstellung einer Zeitreihe, die saisonale Zerlegung, die Modellierung mit Exponential- und ARIMA-Modellen und die Prognose mit dem Prognosepaket.
Erstellen einer Zeitreihe
Die Funktion ts() wandelt einen numerischen Vektor in ein R-Zeitreihenobjekt um. Das Format ist ts(vector, start=, end=, frequency=), wobei start und end die Zeiten der ersten und letzten Beobachtung sind und frequency die Anzahl der Beobachtungen pro Zeiteinheit angibt (1=jährlich, 4=vierteljährlich, 12=monatlich usw.).
# save a numeric vector containing 72 monthly observations
# from Jan 2009 to Dec 2014 as a time series object
myts <- ts(myvector, start=c(2009, 1), end=c(2014, 12), frequency=12)
# subset the time series (June 2014 to December 2014)
myts2 <- window(myts, start=c(2014, 6), end=c(2014, 12))
# plot series
plot(myts)
Saisonale Zersetzung
Eine Zeitreihe mit additiven Trend-, saisonalen und unregelmäßigen Komponenten kann mit der Funktion stl() zerlegt werden. Beachte, dass eine Reihe mit multiplikativen Effekten oft durch eine Log-Transformation in eine Reihe mit additiven Effekten umgewandelt werden kann (d.h. newts <- log(myts)).
# Seasonal decomposition
fit <- stl(myts, s.window="period")
plot(fit)
# additional plots
monthplot(myts)
library(forecast)
seasonplot(myts)
Exponentialmodelle
Sowohl die Funktion HoltWinters() in der Basisinstallation als auch die Funktion ets() im Prognosepaket können zur Anpassung von Exponentialmodellen verwendet werden.
# simple exponential - models level
fit <- HoltWinters(myts, beta=FALSE, gamma=FALSE)
# double exponential - models level and trend
fit <- HoltWinters(myts, gamma=FALSE)
# triple exponential - models level, trend, and seasonal components
fit <- HoltWinters(myts)
# predictive accuracy
library(forecast)
accuracy(fit)
# predict next three future values
library(forecast)
forecast(fit, 3)
plot(forecast(fit, 3))
ARIMA-Modelle
Die Funktion arima() kann verwendet werden, um ein autoregressives integriertes gleitendes Durchschnittsmodell anzupassen. Weitere nützliche Funktionen sind:
lag(ts, k) | verzögerte Version der Zeitreihe, um k Beobachtungen zurückversetzt |
diff(ts, differences= d) | Differenz der Zeitreihen d mal |
ndiffs(ts) | Anzahl der Differenzen, die erforderlich sind, um Stationarität zu erreichen (aus dem Prognosepaket ) |
acf(ts) | Autokorrelationsfunktion |
pacf(ts) | partielle Autokorrelationsfunktion |
adf.test(ts) | Erweiterter Dickey-Fuller-Test. Die Ablehnung der Nullhypothese legt nahe, dass eine Zeitreihe stationär ist (aus dem tseries-Paket ) |
Box.test(x, type="Ljung-Box") | Pormanteau-Test, dass die Beobachtungen in einem Vektor oder einer Zeitreihe x unabhängig sind |
Beachte, dass das Prognosepaket etwas schönere Versionen von acf() und pacf() hat, die Acf() bzw. Pacf() heißen.
# fit an ARIMA model of order P, D, Q
fit <- arima(myts, order=c(p, d, q)
# predictive accuracy
library(forecast)
accuracy(fit)
# predict next 5 observations
library(forecast)
forecast(fit, 5)
plot(forecast(fit, 5))
Automatisierte Vorhersage
Das Prognosepaket bietet Funktionen für die automatische Auswahl von Exponential- und ARIMA-Modellen. Die Funktion ets() unterstützt sowohl additive als auch multiplikative Modelle. Die Funktion auto.arima() kann sowohl saisonale als auch nicht saisonale ARIMA-Modelle verarbeiten. Die Modelle werden so ausgewählt, dass sie eines von mehreren Anpassungskriterien maximieren.
library(forecast)
# Automated forecasting using an exponential model
fit <- ets(myts)
# Automated forecasting using an ARIMA model
fit <- auto.arima(myts)
Weiter gehen
Es gibt viele gute Online-Ressourcen zum Erlernen der Zeitreihenanalyse mit R. Dazu gehören A little book of R for time series von Avril Chohlan und der DataCamp-Kurs Manipulating time series in R von Jeffrey Ryan.