9 Stimmen

Wie lassen sich Zeitreihen in R am besten handhaben?

Ich verwende R für einige statistische Analysen von Zeitreihen. Ich habe versucht, zu googeln, aber ich kann keine endgültigen Antworten finden. Kann mir jemand, der mehr weiß, bitte die richtige Richtung weisen?

Beispiel:

Nehmen wir an, ich möchte eine lineare Regression von zwei Zeitreihen durchführen. Die Zeitreihen enthalten tägliche Daten, aber es könnten hier und da Lücken vorhanden sein, so dass die Zeitreihen nicht regelmäßig sind. Natürlich möchte ich nur Datenpunkte vergleichen, für die beide Zeitreihen Daten enthalten. So lese ich derzeit die csv-Dateien in einen Datenrahmen ein:

library(zoo)
apples <- read.csv('/Data/apples.csv', as.is=TRUE)
oranges <- read.csv('/Data/oranges.csv', as.is=TRUE)
apples$date <- as.Date(apples$date, "%d/%m/%Y")
oranges$date <- as.Date(oranges$date, "%d/%m/%Y")
zapples <- zoo(apples$close,apples$date)
zoranges <- zoo(oranges$close,oranges$date)
zdata <- merge(zapples, zoranges, all=FALSE)
data <- as.data.frame(zdata)

Gibt es eine elegantere Möglichkeit, dies zu tun?

Und wie kann ich die Daten aufteilen, z. B. die Einträge in data mit Daten innerhalb eines bestimmten Zeitraums?

2 Stimmen

Der Code ist nicht ganz richtig, und wir haben Ihre csv-Dateien nicht... vielleicht ein paar Dummy-Daten?

0 Stimmen

Ich habe die Tippfehler im Code korrigiert. Aber ich kann den Sinn von Dummy-Daten nicht wirklich erkennen. Nehmen Sie einfach beliebige Daten und legen Sie sie in zwei Spalten csv-Datei und nennen Sie eine Spalte Datum und die andere schließen.

9 Stimmen

Der Grund dafür ist, dass Ihre Frage nicht als minderwertig angesehen wird und dass die Beantworter den Code leicht ausführen können und mehrere Beantworter ihn alle mit der gleichen Eingabe ausführen können. Da dies etwas ist, das Sie selbst tun können, ohne die Antwort auf die Frage zu kennen, wird es im Allgemeinen als Ihre Verantwortung angesehen, diese bereitzustellen.

11voto

G. Grothendieck Punkte 232059

Versuchen Sie etwas in dieser Richtung. Dabei wird davon ausgegangen, dass die Daten in Spalte 1 stehen. Das Paket dyn kann verwendet werden, um die lm , glm und viele ähnliche Funktionen vom Typ Regression, die Zooreihen akzeptieren. Schreiben Sie dyn$lm anstelle von lm wie gezeigt:

library(dyn) # also loads zoo
fmt <- "%d/%m/%Y"
zapples <- read.zoo('apples.csv', header = TRUE, sep = ",", format = fmt)
zoranges <- read.zoo('oranges.csv', header = TRUE, sep = ",", format = fmt)
zdata <- merge(zapples, zoranges)
dyn$lm(..whatever.., zdata)

Sie brauchen keine all = FALSE seit lm ignoriert Zeilen mit NAs in der Standardeinstellung seiner na.action Argument.

En window.zoo Funktion kann zum Schneiden von Daten verwendet werden.

Je nachdem, was Sie vorhaben, sollten Sie sich auch die Pakete xts und quantmod ansehen.

6voto

J. Win. Punkte 6484

Warum haben Sie beide Datenrahmen in zoo dann zusammenführen und wieder in einen Datenrahmen konvertieren? Wenn Sie einen Datenrahmen wünschen, führen Sie einfach diese Zeile nach Ihrem read.csv() .

data <- merge(apples, oranges, by = "date")

Und so funktioniert die Unterteilung.

subset(data, date < slicemax & date > slicemin)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X