Zeitreihenanalyse in R

Zeitreihenanalyse in R

Zeitreihen sind Datensätze, die in regelmäßigen Abständen über einen bestimmten Zeitraum erfasst werden, wie zum Beispiel tägliche Aktienkurse, monatliche Umsatzzahlen oder jährliche Klimadaten. Die Analyse von Zeitreihen hilft uns, Muster und Trends in diesen Daten zu erkennen und zukünftige Werte vorherzusagen. In diesem Beitrag zeige ich dir, wie du mit der Programmiersprache R eine effektive Zeitreihenanalyse durchführen kannst.

Einfache Zeitreihenobjekte in R erstellen

Um eine Zeitreihenanalyse in R zu machen und mit den einfachsten Zeitreihen in R zu arbeiten, verwenden wir ein ts-Objekt (Time Series). Um dieses zu erstellen, benötigst du einen Vektor mit Datenpunkten, die in regelmäßigen Zeitintervallen erfasst wurden. In diesem Beispiel verwenden wir eine Zeitreihe mit monatlichen Durchschnittstemperaturen in einer Stadt über einen Zeitraum von zwei Jahren, insgesamt 24 Elemente:

temp <- c(4, 6, 12, 18, 21, 26, 28, 27, 22, 17, 11, 9,
          5, 7, 11, 17, 22, 23, 27, 26, 24, 17, 12, 7)
ts_temp <- ts(temp, frequency=12, start=c(2020, 1))

So, wir haben die Temperaturdaten für 24 Monate als ts-Objekt erstellt. Der frequency-Parameter gibt an, dass es sich um monatliche Daten handelt, und der start-Parameter zeigt, dass die Zeitreihe im Januar 2020 beginnt.

Funktionen für Zeitreihenobjekte

R verfügt über eine Vielzahl von Funktionen, die speziell für die Arbeit mit ts-Objekten entwickelt wurden. Beispielsweise kann man mithilfe der window()-Funktion einen bestimmten Zeitraum innerhalb Ihrer Zeitreihe auswählen:

first_year <- window(ts_temp, start=c(2020, 1), end=c(2020, 12))

Hier haben wir die Temperaturdaten für das erste Jahr (Januar bis Dezember 2020) ausgewählt und als neues ts-Objekt gespeichert.

Man kann auch die lag()-Funktion verwenden, um die zeitliche Verzögerung (Lag) einer Zeitreihe zu berechnen, was nützlich sein kann, um zeitliche Abhängigkeiten in den Daten zu untersuchen:

ts_lag <- lag(ts_temp, k=1)

In diesem Beispiel haben wir die zeitliche Verzögerung der Temperaturdaten um einen Monat berechnet und als neues ts-Objekt gespeichert. So kannst du die Beziehung zwischen den Temperaturen des aktuellen Monats und des Vormonats analysieren.

Zusammenfassung

Sobald Du ein Zeitreihenobjekt erstellt hast, kannst du verschiedene Funktionen (und auch weitere Pakete) nutzen, um die Daten z.B. zu verändern oder zu analysieren. Schauen wir uns nun an, wie du Zeitreihen in R visualisieren kannst.

Visualisierung von Zeitreihen

Zur Zeitreihenanalyse in R gehört auch die Visualisierung der Zeitreihendaten. Diese ist ein wichtiger Schritt, um Muster, Trends und Anomalien in den Daten zu erkennen. Dies wird häufig in der explorativen Datenanalyse angewendet. Schauen wir uns mal verschiedene Möglichkeiten an, wie man Zeitreihen in R visualisieren kann.

Grundlegende Liniendiagramme

Das erstellen eines Liniendiagramms der monatlichen Durchschnittstemperaturen ist ganz einfach und funktioniert mit base R (also ohne zusätzliches Package):

plot(
  ts_temp, 
  main ="Monatliche Durchschnittstemperaturen", 
  xlab="Zeit", ylab ="Temperatur (°C)",
  col="steelblue", lwd=2
)

Saisonale Subreihen

Um die saisonalen Muster in den Daten besser verstehen zu können, müssen wir uns bereits von base R und ts entfernen. Wir benutzen das ggplot2-Package für die Visualisierung (siehe hier für mehr zu ggplot2). Zuerst erstellen wir die Daten in einer anderen Struktur mit Hilfe der Packages data.table und lubridate (siehe hier und hier):

dates <- seq(as.Date("2020-01-01"), as.Date("2021-12-31"), by="1 month")
dt_temp <- data.table(date=dates, temp=as.numeric(ts_temp))
ggplot(dt_temp, aes(x=month(date, label=TRUE), y=temp, group=year(date))) +
    geom_line(aes(color=factor(year(date))), linewidth=2) +
    xlab("Monat") + ylab("Temperatur (°C)") + 
    ggtitle("Saisonale Subreihen der Durchschnittstemperaturen") +
    theme_minimal()

Die resultierende Grafik zeigt die Temperaturverläufe für jedes Jahr getrennt und hilft dabei, saisonale Muster und Unterschiede zwischen den Jahren zu erkennen.

Zeitreihen mit rollierenden Statistiken

Rollierende Statistiken, wie gleitende Durchschnitte oder rollierende Standardabweichungen, können dabei helfen, die Zeitreihe zu glätten und etwas „Ruhe“ hereinzubringen. Im folgenden Beispiel nutzen wir das Package zoo und erstellen einen Line Chart der monatlichen Durchschnittstemperaturen zusammen mit einem gleitenden Durchschnitt über drei Monate:

ts_rollmean <- rollmean(ts_temp, k=3, fill=NA)
plot(
    ts_temp, 
    main="Monatliche Durchschnittstemperaturen mit rollierendem Durchschnitt",
    xlab="Zeit", 
    ylab="Temperatur (°C)",
    lwd=2
)
lines(ts_rollmean, col="lightgreen", lwd=2)
legend(
    "topleft", 
    legend=c("Temperatur", "Rollierender Durchschnitt"), 
    col=c("black", "lightgreen"), 
    lty=1, bty="n"
)

Wir haben einen gleitenden Durchschnitt über drei Monate mit der rollmean-Funktion aus dem zoo-Package erstellt und ihn als hellgrüne Linie zum ursprünglichen Chart hinzugefügt. Kurzer Hinweis: Die rollmean-Funktion zentriert den gleitenden Durchschnitt, sofern wir nichts anderes für den align-Parameter angeben.

Autokorrelation und partielle Autokorrelation bei Zeitreihen

Um die zeitliche Abhängigkeit und mögliche Verzögerungen (Lags) in Zeitreihen zu analysieren, kannst du die Autokorrelationsfunktion (ACF) oder die partielle Autokorrelationsfunktion (PACF) plotten. Diese Funktionen geben Aufschluss darüber, wie stark die Werte einer Zeitreihe mit früheren Werten in verschiedenen Verzögerungen korreliert sind.

par(mfrow=c(2, 1))
acf(ts_temp, main = "Autokorrelationsfunktion (ACF)")
pacf(ts_temp, main = "Partielle Autokorrelationsfunktion (PACF)")
par(mfrow=c(1, 1))

In diesem Beispiel erstellen wir ACF- und PACF-Grafiken für die monatlichen Durchschnittstemperaturen. Die ACF zeigt, wie stark die Werte einer Zeitreihe mit früheren Werten korreliert sind, während die PACF die Korrelation zwischen Werten und früheren Werten unter Berücksichtigung der Korrelationen bei kürzeren Verzögerungen zeigt.

Zeitreihenkomponenten analysieren

In der Zeitreihenanalyse in R können wir verschiedene Komponenten einer Zeitreihe herausfiltern. Es gibt verschiedene Komponenten, die eine Zeitreihe beeinflussen können, wie zum Beispiel saisonale Schwankungen, Trends und zyklische Muster. Mit R können wir die verschiedenen Komponenten einer Zeitreihe analysieren und visualisieren:

decomp <- decompose(ts_temp)
plot(decomp)

Wie man sieht, kannst du die decompose-Funktion nutzen, um die Zeitreihe in ihre verschiedenen Komponenten zu zerlegen und sie dann zu visualisieren.

Zeitreihenprognose

Die Prognose von Zeitreihen ist ein wichtiger Aspekt der Zeitreihenanalyse, bei dem es darum geht, zukünftige Werte basierend auf historischen Daten vorherzusagen. In R stehen verschiedene Pakete und Methoden zur Verfügung, um Prognosemodelle für Zeitreihendaten zu erstellen. Hier sind einige gängige Methoden und Techniken zur Zeitreihenprognose.

Autoregressive Integrated Moving Average (ARIMA)

ARIMA ist ein klassisches statistisches Modell zur Prognose von Zeitreihen. Es berücksichtigt drei Hauptkomponenten: Autoregression (AR), Integration (I) und gleitende Durchschnitte (MA). Das ARIMA-Modell kann saisonale und nicht saisonale Zeitreihenprognosen erstellen. Das R-Paket forecast bietet umfangreiche Funktionen zur Modellierung und Prognose von Zeitreihen mit ARIMA:

mdl_arima <- auto.arima(ts_temp)
pred_arima <- forecast(mdl_arima, h=12)
plot(pred_arima)

Exponentialglättung (ETS)

Exponentialglättungsmodelle, auch bekannt als ETS-Modelle (Error, Trend, Seasonality), sind eine Familie von Prognosemodellen, die sich gut für univariate Zeitreihen eignen. ETS-Modelle verwenden exponentiell gewichtete gleitende Durchschnitte, um zukünftige Werte vorherzusagen. Das forecast-Paket bietet auch Funktionen zur Modellierung und Prognose von Zeitreihen mit ETS-Modellen:

mdl_ets <- ets(ts_temp)
pred_ets <- forecast(mdl_ets, h=12)
plot(pred_ets)

Prophet

Prophet ist ein Prognoseverfahren, das von Facebook entwickelt wurde und speziell für Zeitreihen mit starker Saisonalität und Feiertagen konzipiert ist. Das prophet-Paket in R ermöglicht die Erstellung und Prognose von Zeitreihenmodellen unter Verwendung des Prophet-Verfahrens. In diesem Beispiel verwende ich eine längere synthetische Zeitreihe:

dates <- seq(as.Date("2020-01-01"), as.Date("2021-12-31"), by="1 day")
values <- 10*sin(seq(0, 4*pi, by=0.0172)) + rnorm(731, 0, 3)
dt_prophet <- data.table(ds=dates, y=values)
mdl_prophet <- prophet(dt_prophet)
future_dates <- seq(as.Date("2022-01-01"), as.Date("2022-12-31"), by="1 day")
dt_future <- data.table(ds=future_dates)
pred_prophet <- predict(mdl_prophet, dt_future)
plot(mdl_prophet, pred_prophet)

Nun haben wir einen Überblick über einige gängige Methoden zur Zeitreihenprognose in R, nämlich ARIMA, ETS und Prophet. Es gibt viele weitere Techniken und Pakete zur Verfügung, auf die ich nun nicht weiter eingehen werde: z.B. neuronale Netze, Zustandsraummodelle, oder Zeitreihenregression.

Zusammenfassung

Die Zeitreihenanalyse ist ein mächtiges Werkzeug, um Muster und Trends in zeitlich geordneten Daten zu erkennen und zukünftige Werte vorherzusagen. R bietet eine Vielzahl von Funktionen und Paketen, mit denen du Zeitreihen effektiv analysieren und prognostizieren kannst.

Viel Erfolg beim Herumhantieren mit Zeitreihen – ich hoffe der Post konnte dir dabei helfen! Wenn du weitere Fragen oder Anregungen hast, schreib gerne einen Kommentar oder eine E-Mail.

Ähnliche Beiträge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.