Zeitreihen-und stl-Daten in R: Fehler nur univariate Serie erlaubt sind
Ich bin die Analyse der stündlichen Niederschläge auf eine Datei, die unorganisiert. Jedoch habe ich es geschafft, um es zu säubern und speichern Sie es in einem dataframe (genannt CA1), die die form wie folgt:
Station_ID Guage_Type Lat Long Date Time_Zone Time_Frame H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23
1 4457700 HI 41.52 124.03 1948-07-01 8 LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0
2 4457700 HI 41.52 124.03 1948-07-05 8 LST 0 1 1 1 1 1 2.0000000 2.0000000 2.0000000 4.0000000 5.0000000 5.0000000 4 7 1 1 0 0 10 13 5 1 1 3
3 4457700 HI 41.52 124.03 1948-07-06 8 LST 1 1 1 0 1 1 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0
4 4457700 HI 41.52 124.03 1948-07-27 8 LST 3 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0
5 4457700 HI 41.52 124.03 1948-08-01 8 LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0
6 4457700 HI 41.52 124.03 1948-08-17 8 LST 0 0 0 0 0 0 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 6 1 0 0 0 0 0 0 0 0 0 0
Wo H0 durch H23 repräsentieren die 24 Stunden pro Tag (Zeile)
Nur mithilfe von CA1 (dataframe oben), nehme ich jeden Tag (Zeile) 24 Punkte an und transponieren Sie Sie vertikal und verketten Sie die restlichen Tage (Zeilen) auf eine variable, ich nenne Sie dat1:
> dat1[1:48,]
H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 2 2 2 4 5 5 4 7 1 1 0 0 10 13 5 1 1 3
Über die variable dat1 ich die Eingabe als argument, um eine Reihe von Daten:
> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon),
frequency = 24)
Einige Dinge zu beachten:
>dim(CA1)
[1] 5636 31
>length(dat1)
[1] 135264
Damit 5636*24 (Gesamtzahl der Daten, die Punkte [24] pro Zeile) = 135264 Summe der Punkte.
Die Länge(rainCA1) stimmt der Punkte oben. Allerdings, wenn ich ein Ende setzen, in der ts-Funktion, wie
>rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon),
end = c(1900+as.POSIXlt(CA1[5636,5])$year, 1+as.POSIXlt(CA1[5636,5])$mon),
frequency = 24)
Ich bekomme 1134 Gesamtlänge der Punkte, wo ich bin, fehlen viele Daten. Ich gehe davon aus, dass dies aufgrund der Termine nicht aufeinander folgende-und da bin ich nur Monat und Jahr als argument für den Ausgangspunkt.
Weiterhin, was ich denke, ist der richtige Pfad, mit dem ersten ts-Berechnung ohne die end-argument, ich liefere es als input für stl:
>rainCA1_2 <-stl(rainCA1, "periodic")
Leider bekomme ich eine Fehlermeldung:
Error in stl(rainCA1, "periodic") : only univariate series are allowed
Welches ich nicht verstehe oder wie Sie gehen über es. Jedoch, wenn ich zurück in die ts-Funktion und stellen Sie die Ende-argument, stl, funktioniert einwandfrei ohne Fehler.
Habe ich recherchiert in vielen Foren, aber niemand (oder meinem Verständnis) bietet eine gut Lösung um die Daten, die Attribute, die der stündlichen Daten. Wenn jemand mir helfen könnte, ich werde es zu schätzen wissen. Danke!
InformationsquelleAutor Luciano Rodriguez | 2012-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Fehler ist ein Ergebnis der Form Ihrer Daten. Versuchen
> dim(rainCA1)
; ich vermute, daß es so etwas wie> [1] 135264 1
.Ersetzen
rainCA1 <- ts(dat1 ...
durchrainCA1 <- ts(dat1[[1]] ...
, und es sollte funktionieren.Ob es so richtig ist, Frage ich mich...
Es scheint mir der erste Auftrag des Geschäfts ist, um Ihre Daten von einem einheitlichen format. Stellen Sie sicher, dass
ts()
bekommt den richtigen Eingang. Check-out die genaue Spezifikationts
.ts()
nicht interpretieren, Datum-Zeit-Formate.ts()
erfordert aufeinander folgende Datenpunkte, die mit einem festen Intervall. Es verwendet eine große Theke und eine kleinere Zähler (von denenfrequency
passen in einen wichtigen Zähler). Zum Beispiel, wenn Ihre Daten stündlich, und Sie erwarten, Saisonalität, auf der täglichen Ebenefrequency
gleich 24.start
undend
sind daher in Erster Linie Kosmetik:start
lediglich angibt, t(0) für die großen Theke, in der Erwägung, dassend
bedeutet t(Ende).InformationsquelleAutor oddman
Ich versuchte zu erklären, die schreib-Weise mit einem sehr einfachen Beispiel zu vermeiden, diese Art von Fehler in einer anderen Frage, die hier verlinkt:
stl() Zersetzung nicht akzeptieren univariaten ts-Objekt?
InformationsquelleAutor Elias
Einer Lösung, die ich gefunden ist
time_series_var <- ts(data[, c("var_of_interest")])
und danntime_series_var <- ts(as.vector(time_series_var))
und dann die Fehler mit Bezug auf die univariaten verschwindet, denn die Dimensionen sind nun korrekt.InformationsquelleAutor roarkz