Beweise für Ähnlichkeiten zweier Zeitreihen


7

Nehmen wir an, ein analytisches Modell sagt einen epidemischen Trend über die Zeit voraus, dh die Anzahl der Infektionen über die Zeit. Wir haben auch eine Computersimulationsergebnisse im Laufe der Zeit, um die Leistung des Modells zu überprüfen. Ziel ist es zu beweisen, dass die Simulationsergebnisse und die vorhergesagten Werte des analytischen Modells (beide Zeitreihen) statistisch nahe beieinander liegen oder ähnlich sind. Mit Ähnlichkeit meine ich, dass das Modell die Werte vorhersagt, die nahe an dem liegen, was die Simulation liefert.

Hintergrund : Bei der Recherche zu diesem Thema bin ich auf folgende Beiträge gestoßen:

  1. /programming/13835924/similarity-of-trends-in-time-series-analysis

  2. Wie kann man zwei Zeitreihen statistisch vergleichen?

Beide Diskussionen schlagen drei Ansätze vor, bei denen ich grundsätzlich an zwei interessiert bin:

(1). Verwendung von ARIMA; (2). Verwendung des Granger-Tests

Für die erste vorgeschlagene Lösung wurde dies in Bezug auf ARIMA in (1) geschrieben:

Führen Sie ARIMA für beide Datensätze aus. (Die Grundidee hier ist zu sehen, ob der gleiche Parametersatz (aus dem das ARIMA-Modell besteht) beide temporären Zeitreihen beschreiben kann. Wenn Sie auto.arima () in Prognose (R) ausführen, werden die Parameter ausgewählt p, d, q für Ihre Daten, eine große Bequemlichkeit.

Ich habe auto.arima für die Simulationswerte ausgeführt und dann die Prognose ausgeführt. Hier sind die Ergebnisse:

ARIMA(2,0,0) with zero mean     

Coefficients:
         ar1      ar2
      1.4848  -0.5619
s.e.  0.1876   0.1873

sigma^2 estimated as 121434:  log likelihood=-110.64
AIC=227.27   AICc=229.46   BIC=229.4

Ich habe auto.arima für vorhergesagte Modellwerte ausgeführt und dann prognostiziert. Dies ist das Ergebnis des vorhergesagten Modells:

ARIMA(2,0,0) with non-zero mean 

Coefficients:
         ar1      ar2  intercept
      1.5170  -0.7996  1478.8843
s.e.  0.1329   0.1412   290.4144

sigma^2 estimated as 85627:  log likelihood=-108.11
AIC=224.21   AICc=228.21   BIC=227.05

Frage 1 Welche Werte müssen verglichen werden, um zu beweisen, dass die beiden Reihen ähnlich sind, insbesondere der zeitliche Trend?

In Bezug auf die zweite vorgeschlagene Option habe ich darüber gelesen und festgestellt, dass der Granger-Test normalerweise verwendet wird, um festzustellen, ob die Werte der Serie A zum Zeitpunkt t die Werte der Serie B zum Zeitpunkt t + 1 vorhersagen können .

Frage 2 Grundsätzlich möchte ich in meinem Fall die Werte der Zeitreihen A und B gleichzeitig vergleichen. Wie ist diese dann für meinen Fall relevant?

Frage 3 Gibt es eine verfügbare Methode, um zu beweisen, dass der Trend zweier Zeitreihen über die Zeit ähnlich ist?

Zu Ihrer Information. Ich habe eine andere Methode gesehen, die den Pearson-Korrelationskoeffizienten verwendet, und ich konnte den Überlegungen dort folgen. Darüber hinaus ist die Überprüfung analytischer Modelle mit Simulationen in der Literatur weit verbreitet. sehen:

  1. Räumlich-zeitliche Modellierung der Malware-Ausbreitung bei der Netzwerkmodellierung
  2. Modellierungs- und Simulationsstudie zur Ausbreitung und Verteidigung von Internet-E-Mail-Würmern

Diese Frage hat ziemlich viele Hypothesen. Könnten Sie es so umformulieren, wie Sie es tatsächlich versuchen? Viel hängt davon ab, was Sie unter "ähnlich" verstehen. Wie wurde die Simulation generiert, wenn nicht bereits von einem Modell? In welchem ​​Fall können Sie die beiden Modelle nicht analytisch vergleichen? Wenn sie unterschiedlich sind, woher wissen Sie, dass dies etwas über die Gültigkeit des ersten Modells und nicht über die Simulation aussagt?
Peter Ellis

Danke Peter für deinen Kommentar. Das endgültige Ziel ist zu sagen, dass das Modell die Werte nahe an dem vorhersagt, was die Simulation ergibt. Das habe ich mit Ähnlichkeit gemeint. Ich habe die Frage auch bearbeitet, um sicherzustellen, dass andere Leser nicht verwirrt werden. Ich habe nicht ganz verstanden, was Sie unter "Warum können Sie die beiden Modelle nicht analytisch vergleichen?" Meinen. Welche Methoden gibt es dafür? und in Bezug auf Ihren letzten Kommentar ist es meines Wissens üblich, analytische Modelle mit Simulationen zu verifizieren.
Moe

Ich bin verwirrt darüber, wie Sie die Ergebnisse simuliert haben. vermutlich mit einem zweiten Modell (ich weiß nicht, wie man sie ohne Modell simulieren könnte). Es sei denn, Sie meinen eine physikalische Simulation? Ich hatte angenommen, Sie generieren die Simulation mit einem Computerprogramm, dh einem Modell. In welchem ​​Fall ist es besser als das erste Modell?
Peter Ellis

Das Überprüfen von Modellen mithilfe von Simulationen ist bei Computer-Malware üblich, die als epidemiologische Infektionen eingestuft werden kann. Siehe beispielsweise die folgenden Referenzen: Räumlich-zeitliche Modellierung der Ausbreitung von Malware in Netzwerken Modellierung und Simulation Untersuchung der Ausbreitung und Verteidigung von Internet-E-Mail-Würmern und Unter der Annahme, dass dies eine korrekte Methode zur Überprüfung von Modellen ist, stellt sich die Frage, wie zwei Zeitreihen bewiesen werden können sind statistisch nah an jedem anderen?
Moe

Nach den ARIMA-Ergebnissen zu urteilen, beziehen sich die Simulationswerte auf eine stationäre Zeitreihe, die im Intervall [-10, 10] (ungefähr) schwankt. Dies sieht nicht nach einer Reihe von Infektionen aus. oder sogar eine Reihe von Neuinfektionen. Haben Sie es transformiert oder zweimal Differenzen genommen oder so, bevor Sie auto.arima angepasst haben?
Peter Ellis

Antworten:


8

Ich verstehe die Situation wie folgt. Sie haben ein Modell, das Sie Ihre Simulation nennen und von dem Sie sicher sind, dass es einen Datensatz generiert, der genau darstellt, was tatsächlich in der Epidemie passieren wird. Aus irgendeinem Grund (vermutlich, weil das Erstellen und Ausführen teuer oder langsam ist oder theoretisches Interesse an einer einfachen Gleichung besteht, die ähnliche Ergebnisse wie das komplexe Modell generiert), haben Sie ein alternatives Modell (das Sie als Modell bezeichnen), das ebenfalls generiert werden kann eine Reihe von Daten, und Sie möchten überprüfen, ob die von diesem Modell generierte Version der vom bekanntermaßen guten Modell generierten Version nahe kommt.

Ich gehe auch davon aus, dass jedes Mal, wenn eines der Modelle Daten generiert, ein ähnlicher und ziemlich regelmäßiger Trend zu anderen Zeiten generiert wird. Andernfalls (zum Beispiel, wenn es einen zufälligen "Start" -Moment gibt, in dem die Serie plötzlich bricht) gibt es eine weitere große Komplikation.

Erstens ist die Methode zum Vergleichen von Parametern aus einem ARIMA mit automatischer Anpassung schlecht (ich vermute, der Grund für die Antwort, die Sie mit "Überlebt" verknüpft haben, ist, dass es sich eher um einen Stapelüberlauf als um eine Kreuzvalidierung handelt, bei der die statistischen Probleme aufgetreten wären wahrscheinlich abgeholt). Der Grund dafür ist, dass dieselbe Zeitreihe mit ganz unterschiedlichen Kombinationen von automatisch regressiven und gleitenden Durchschnittswerten gut passt. Es gibt keine offensichtliche Möglichkeit, die "Ähnlichkeit" zweier verschiedener ARIMAs zu betrachten - solche, die sehr unterschiedlich aussehen, können tatsächlich ähnlich sein. Wie @IrishStat in seiner Antwort auf die zweite Frage , mit der Sie verlinkt haben, sagt , könnten Sie einen F-Test eines gemeinsamen Parametersatzes für beide Modelle erstellen , aber das würde etwas erfordern, das etwas komplexer ist alsauto.arima(). Und selbst dann stellen Sie möglicherweise fest, dass sie keine gemeinsamen Parameter haben, sondern ähnliche Vorhersagen des Trends liefern, an dem Sie tatsächlich interessiert sind, und nicht die Details des ARMA-Prozesses, der einen Teil des zufälligen Rauschens um den Trend erzeugt .

Was würde ich stattdessen empfehlen? Es hört sich so an, als wären Sie nicht besorgt über die kleinen Schwankungen, sondern nur über den allgemeinen Trend. Ich würde eine geglättete Version des Trends jedes Datensatzes vergleichen und zunächst einen visuellen Vergleich durchführen. In dem Fall, den Sie haben, zeigt dies, dass es sich definitiv nicht um dieselbe Zeitreihe handelt. einer von ihnen schwebt um 1478, der andere um Null, und das ist gut genug für mich. Aber wenn es eine Mehrdeutigkeit gäbe, würde ich wahrscheinlich die Quadrate oder Absolutwerte der Differenz zwischen den beiden geglätteten Reihen summieren und feststellen, ob dies nah genug ist, für eine willkürlich gewählte Bedeutung von "nah genug", die am Ende abhängen muss auf Ihrer Domain und die Kosten für das Unrecht. Auf jeden Fall würde ich mit der Grafik beginnen.

Wenn Sie einen objektiveren Benchmark wünschen, würde ich versuchen, beide Simulationen mehrmals auszuführen und festzustellen, wie groß der Unterschied (Summe der Quadrate oder absoluten Unterschiede) zwischen verschiedenen Instanzen derselben Simulation ist, und diesen mit den Unterschieden zwischen den Simulationen vergleichen. Wenn sie gleich sind, zeigt dies, dass Sie nicht sagen können, welches Modell die Simulation erzeugt hat. Wenn sie unterschiedlich sind, müssen Sie immer noch ein Urteil darüber fällen, wie unterschiedlich zu viel ist, aber Sie haben einige Zahlen, die Ihnen helfen.

Geben Sie hier die Bildbeschreibung ein

Das Anpassen von ARIMA-Modellen ist zwar eine schlechte Idee, um Ähnlichkeiten in Trends zu erkennen, aber es ist eine gute Möglichkeit, einige Daten zu generieren. Im Folgenden wird beschrieben, wie ich das gemacht habe. Ich vermute, dass etwas mit den Daten nicht stimmt. Vielleicht passen Sie das ARIMA-Modell an eine transformierte oder differenzierte Version der Daten an. In diesem Fall möchten Sie möglicherweise den nächsten Schritt zur Quantifizierung des Unterschieds zwischen den beiden Trends ausführen.

library(forecast)
library(ggplot2)
library(tidyr)
library(dplyr)

# generate some data
good_model <- arima.sim(model = list(ar = c(1.4848, -0.5619)), n = 1000)
test_model <- arima.sim(model = list(ar = c(1.5170, -0.7996)), n = 1000) + 1478


combined <- data.frame(good = good_model, test = test_model, time = 1:1000)  %>%
 gather(variable, value, -time) %>%
 mutate(value = as.numeric(value))

 ggplot(combined, aes(x = time, colour = variable, y = value)) +
    geom_line(alpha = 0.5) +
    geom_smooth(se = FALSE, size = 2) +
    theme_minimal()

Bearbeiten

Ich habe darüber unter http://ellisp.github.io/blog/2015/09/20/timeseries-differences gebloggt und im Grunde nur untersucht, wie Sie mithilfe von Brute Force-Simulationen feststellen können, ob zwei Modelle ähnlich sind. Ich komme jedoch zu dem Schluss, dass Sie noch eine (wahrscheinlich) subjektive Entscheidung über eine Kostenfunktion benötigen - natürlich sind Ihre beiden Methoden unterschiedlich, aber wie unterschiedlich sind Sie bereit, sich damit abzufinden?


Über den Vergleich von ARMA-Modellen: Selbst wenn wir keine Koeffizienten vergleichen können, könnten wir die Impulsantwortfunktionen, Spektraldichten oder Autokorrelationsfunktionen als Maß für die Nähe zweier Prozesse verwenden. Dies würde auch funktionieren, wenn wir nur Prozesse vergleichen und in beiden Fällen nicht dieselben Ereignisse oder Vorhersagen haben.
Josef

Danke, es könnte helfen, aber selbst dann können Sie identische acfs und zwei sehr unterschiedliche Prozesse haben, z . B. siehe ellisp.github.io/blog/2015/09/19/timeseries-same-acf . Ich bin mir ziemlich sicher, dass die Antwort mehrere Durchläufe jeder Datenbox erfordert und eine Ähnlichkeitsstatistik erstellt.
Peter Ellis

Interessanter Beitrag und ich bin nicht anderer Meinung. Einige Punkte 1) Wollen wir Prozesse oder Realisierungen vergleichen: Wenn wir dieselben Schocks für das System verwenden können (Innovationen), können wir die Prognosen direkt vergleichen, und dies könnte die Hauptantwort auf die ursprüngliche Frage sein. Wenn wir keine vergleichbare Realisierung haben, können wir Prozesse nur unter bestimmten Voraussetzungen für den Innovationsprozess vergleichen. Ich dachte an den stationären linearen Kovarianzmodellfall (reines ARMA), bei dem die Impulsantwortfunktion (Darstellung des gleitenden Durchschnitts) die Vorhersagen und Auswirkungen eines Schocks zusammenfasst.
Josef

2) Ein ARMA-Prozess definiert nur die Reaktion eines Systems auf Schock oder Innovationen. Dies beinhaltet nicht die Varianz des Innovationsprozesses selbst. Eine ähnliche Autokorrelation reicht nicht aus, um alle Merkmale der Daten zu beschreiben. Als Korrelation basiert es auf standardisierten Daten, wir brauchen noch Mittel und Abweichungen. Selbst Autokovarianzfunktionen hätten keine Informationen über den Mittelwert. Die Impulsantwortfunktion würde jedoch die Systemantwort zusammenfassen, nachdem Differenzierung, Drift, Mittelwerte und deterministische oder exogene Effekte herausgenommen wurden.
Josef

3) (Absicherung meiner Wetten) Wenn wir das lineare ARMA-Framework verlassen und auch Markov-Switching, Regime-Switching oder andere nichtlineare Modelle in Betracht ziehen, ist es schwieriger, die Implikation von Modellen zu vergleichen. Ich weiß nicht genug über diese Fälle, um viel zu sagen. Ich denke an diese, weil es für mich nicht offensichtlich ist, dass ein Zwei-Regime-Modell, bei dem ein Zustand ohne mehr als ein paar Ausreißerinfektionsfälle und ein zweiter Zustand mit einer Epidemie vorliegt, nicht das bessere Referenzmodell ist als ein (lineares) Modell ) ARMA-Prozess.
Josef
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.