2016-10-15 8 views
1

Es ist eine grundlegende Frage, aber ich habe versucht zu suchen und war nicht in der Lage, eine Antwort zu erhalten.Datenstruktur für Zeitreihenanalyse in R

Ich habe mehr als 10 Tausend Zeitreihendatensätze, die sich auf 420 verschiedene Unternehmen beziehen. Für jede Firma habe ich einen Zeitstempel (Monat/Jahr) und eine Anzahl von Variablen. Zeitreihen sind nicht gleich lang.

In dieser Phase werden alle Datensätze sind in einer dataframe, die wie dieser ich Kreuzkorrelation, Zeitreihen Clustering zu tun, wird später brauchen

Date   Code Var1 Var2 Var3 Var3 
01/01/2010 AAA     
01/02/2010 AAA     
01/03/2010 AAA     
01/01/2010 BBB     
01/02/2010 BBB     
01/03/2010 BBB     
01/04/2010 BBB     
01/01/2010 CCC     
01/02/2010 CCC     
01/03/2010 CCC     

aussieht und ein Vektor-Autoregressionsmodell aufzubauen.

Frage:

Was die Richtlinien sind mit solchen Daten zu arbeiten: - verwenden dataframe wie es ist - es zu einzelnen Zeitreihen verdeckte für jedes Unternehmen.

Gerne andere Vorschläge zu nehmen!

Antwort

3

Es gibt keine Schwarz-Weiß-Antwort: beide Objekttypen haben ihre Stärken für verschiedene Zwecke (Obwohl ich würde fast immer data.table anstelle von data.frame in Ihre Frage zu stellen, weil Sie weit mehr Möglichkeiten bekommen.). Ich persönlich benutze beide austauschbar in der Forschung, aber im Allgemeinen behalten die ursprünglichen rohen darunterliegenden Daten im Format xts zu beginnen (Tick oder OHLC Bar Daten in xts Objekte).

Beiden Objekttypen sind schnell, mit rechenintensiven Code in C geschrieben

Wenn die Abmessungen (Länge oder Breite) Ihre Zeitreihe nicht groß sind, können Sie leicht hin und her übertragen (zB data.table("index" = index(xtsobj), coredata(xtsobj)) bei die Sicherheitsstufe, und fusionieren Sie dann data.tables, wenn Sie Wertpapiere für Querschnittstypen der Modellierung kombinieren möchten. Ich schalte normalerweise hin und her zwischen den beiden Objekttypen für Zeitreihen, die ich mit

arbeiten

xts Objekte müssen alle Spalten des gleichen Typs verwenden (numeric oder character sind die häufigsten Arten), die eine Einschränkung sein kann, wenn man kategorisch haben Variablen gemischt mit numerischen Daten (Sie können die kategorialen Variablen numerischen Werten zuordnen, um dies zu umgehen, aber das ist zusätzliche Arbeit und kann die Übersichtlichkeit beim Modellieren Ihrer Daten verringern).

xts macht Zusammenführen Zeitreihendaten (mit merge), insbesondere bei verschiedenen Zeitfrequenzen zusammen, sehr einfach zu tun. Es funktioniert auch sehr gut mit dem Bau beweglicher Fenster technische Indikatoren in TTR und quantmod. Sie können auch quantmod (chart_Series und add_TA) und xts Plotwerkzeuge (siehe ?plot.xts) verwenden, um die Candlestick-/OHLC-Bar-Daten aus der Box zu visualisieren. xts aggregiert Tick-Daten in OHLC-Balken-Daten und ändert die Häufigkeit von Balken-Datenreihen (zB von 5 Minuten Balken zu 1 Stunde Balken oder zu täglichen Balken) sehr einfach mit nützlichen Funktionen wie to.period, period.apply und endpoints (und es ist schnell tun es mit C-Code).

Wenn Sie Vorhersagemodelle (viele lineare Regressionen oder komplexere Modelle) mit vielen kategorischen Variablen in Ihren Vorhersagemodellen (z. B. Sicherheitssektor, Stimmungskategorien) erstellen möchten, die Sie nicht auf Zahlen abbilden möchten möglicherweise besser mit data.table arbeiten.Viele Vorhersagemodelle in R (und unüberwachte Methoden wie Clustering) erfordern Daten im Format data.frame. In diesem Fall kann das Speichern/Speichern/Laden Ihrer Daten im Format data.table/data.frame sinnvoller sein, wenn Ihr Endziel die Vorhersagemodellierung ist. VAR Modelle in den var/urca R-Paketen verwenden auch data.frame Format. Es wird jedoch darauf hingewiesen, dass viele Vorhersagemodelle (über caret usw.) Daten im numerischen Format matrix benötigen, die Sie einfach aus xts Objekten mit coredata(xtsobj) extrahieren können (das Konvertieren von data.frame Daten in matrix Format ist in der Regel auch einfach).

Wenn Ihre Datensätze wirklich groß sind (jede Sicherheit hält n GBs von Preisdaten im Speicher für große n), und Sie wollen von Gruppen wiederholt Aggregationen tun (zB berechneten Mittelwert/sd der Renditen für Monat und Symbol oder Monat und Sektor, werden Sie wahrscheinlich finden data.table natürlicher zu arbeiten), werden Sie wahrscheinlich finden effizienter es ist entworfen, um große Mengen an Daten im Speicher/RAM zu behandeln und neigen dazu, weniger kopieren als xts Operationen.