Fehlermeldung, wenn Sie versuchen zu verwenden, stl und zerlegen der Funktionen in R
Habe ich eine einfache Zeit-Serie, ich habe ein wenig Lärm, um eine sin-Funktion und versucht zu zerlegen, es mit der "stl" und "zerlegen" Funktion in R, während meine Serie hat definitiv mehr als 2 Periode und periodisch ist, R gibt mir die folgende Fehlermeldung für beide Funktionen:
x
[1] 1.4537365796 2.7185844368 2.8394728999 3.8926989923 4.3405508086 5.1959080871
[7] 5.6602505790 5.4829985648 5.6357660330 4.6084976233 4.6617322922 4.0286486832
[13] 3.3641752333 1.7408063182 0.8815147612 0.2895139342 -0.5402768515 -1.5612641107
[19] -2.1584502547 -2.9878043526 -3.5545638149 -4.0530074199 -4.0748538612 -4.7581704662
[25] -4.6555349052 -4.0726206240 -3.1646413472 -2.6934453823 -2.2364605277 -1.2643569882
[31] -0.1202011946 1.1136371449 2.2504199271 3.0313528996 3.5384449109 4.5176211013
[37] 5.4013172839 5.4252837451 5.4768196692 5.8979709077 5.6698285659 4.5133489450
[43] 4.2702602998 3.5180837069 2.2652913344 1.1975595698 0.5412697849 -0.5966162032
[49] -1.0827728340 -1.8488242277 -3.4118061838 -3.9009752140 -3.9102671954 -4.3486102172
[55] -4.7481017993 -4.0097598695 -3.9078554267 -3.8070416888 -2.5968567322 -2.2567568949
[61] -1.1423907008 0.0002492447 0.4338279080 1.2431986797 2.3216397323 3.3235925116
[67] 4.1591487169 4.9028481873 5.4535861470 5.0579349546 5.1548777627 4.9707124992
[73] 5.4496833187 4.4563072487 4.1301372986 2.4594352788 1.7253019929 0.6961453965
[79] 0.4281167695 -1.3152944759 -1.8645880957 -2.5764132038 -3.7681528112 -4.3731672862
[85] -3.9940201611 -4.5497596299 -4.9496796983 -4.1233093447 -3.7759837204 -3.3359027749
[91] -2.3518009102 -1.7488933797 -0.7225148838 0.5395759836 1.0496249652 2.0383715782
[97] 3.2357449979 3.8028316517 5.0346866280 5.2154265148
fit<- stl(x, t.window=15, s.window="per", robust=TRUE)
Error in stl(x, t.window = 15, s.window = "per", robust = TRUE) :series is not periodic or has less than two periods
fit<- decompose(x,type="multiplicative")
Error in decompose(x, type = "multiplicative") :time series has no or less than 2 periods
Würde mir jemand helfen mit diesem problem bitte?
Wie immer, die Regel Nummer Eins ist: zeichnen Sie Ihre Daten, um sicherzustellen, dass es ist, was Sie wollte, es zu sein.
versuchen Sie z.B.
versuchen Sie z.B.
stl(ts(x,freq=10), t.window=15, s.window="per", robust=TRUE)
InformationsquelleAutor user3183867 | 2014-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es nicht offensichtlich aus der Fehlermeldung:
? R ist nicht sagen Ihnen, Ihre Daten nicht periodische, nur dass die Daten, die Sie übergeben, es habe keine Angabe, dass Sie periodisch.
Ihre Zeit-Serie
x
keine Periodizität aus der Sicht von R. Es sieht aus wie Sie vergessen zu erzählen, oder einen Fehler gemacht zu erzählen,ts()
was die Periodizität ist. Als Sie nicht zeigen, wiex
erstellt wurde, gibt es nicht viel was wir tun können, außer Ihnen sagen, gehen Sie zurück und erstellen Siex
so dass Sie nicht haben, >=2 Perioden.Der Punkt hier ist, dass auf seine eigene, R kann nicht ableiten, welche die Häufigkeit der Beobachtung, die pro Zeiteinheit. Sie haben, um zu sagen
ts()
diese Informationen. Sie können dies in einer Reihe von Möglichkeiten:Wenn Sie nicht bieten diese,
ts()
verwendet die Standardeinstellungenfrequency = 1
,deltat = 1
was darauf hindeuten würde, eine Zeit-Serie eine Beobachtung, die pro Zeiteinheit (einen pro Jahr, zum Beispiel).stl()
erfordert eine"ts"
eingestuft Objekt - wenn Sie nicht liefern, wird es zwingen, die eingegebenen Daten zu einer"ts"
Objekt überas.ts()
. Diese Funktion verwenden Sie die Standardeinstellungen, die ich oben beschreiben.Was ich glaube, was hier passiert ist, ist, dass Sie nicht erkennen, dass
stl()
erfordert eine"ts"
Objekt der Klasse noch, dass es erstellt eine unangemessen für Ihre Daten, wenn Sie nur versorgt den Vektor der Beobachtungen.Die Lösung wäre, explizit erstellen, die
"ts"
eingestuft Objekt überts()
und geben Sie einen derfrequency
oderdeltat
.E. g.
Hier habe ich
frequency = 12
zu zeigen, dass es 12 Beobachtungen pro Zeiteinheit --- wie mit den monatlichen Daten.Den oben genannten gibt für mich
Für Ihre Daten, ich vermute, Sie wollen
frequency = 10
angesichts der Länge der Zeitreihen; das würde sagen, dass Sie zehn Beobachtungen pro Jahr. Wenn die Serie hat mehr Beobachtungen pro Jahr, sagen, 12 für monatsdaten, aber Sie don;t haben die beiden letzten oder der ersten zwei Monate (d.h. es gibt keine fehlenden DatenNA
en), die Sie gerade erst begonnen (beendet) später (früher) im Jahr und damit nicht ein volles Jahr im Wert von Daten, die an einem oder an beiden enden der Reihe.Ja, aber so weit wie der computer weiß, oder kümmert sich, es ist einfach ein Vektor von zahlen ohne Angabe der Zeitpunkte, an denen diese beobachtet wurden.
Gute und ausführliche Antwort, aber ich bekomme diese Fehlermeldung, wenn Sie versuchen zu analysieren, die stündlich Daten (
xxx <- ts(x, freq=24)
). Gibt es vielleicht ein limit an Zeit Serie Länge oder der Anzahl der Beobachtungen pro Zyklus? Edit: ich habe fehlende Werte, und ich habe versucht, mit beidenna.action=na.pass
undna.action=na.exclude
.Ich kann nicht Ihr problem reproduzieren (
stl(ts(rnorm(1000), frequency = 24), "periodic")
) so einige andere Details von Bedeutung, sondern Sie den code betrachten, sehen wirif (period < 2 || n <= 2 * period)
so, es sei denn, Sie haben mehr als 2 "Perioden" in die Daten erhalten Sie diese Fehlermeldung. Entspricht das Ihre Daten?Sie, dass der check kommt nachdem die
NA
s entfernt worden sind, so ist es wahrscheinlich, dass Sie tun, müssen mehr Beobachtungen als 2 * 24 bisNA
s entfernt und, nachdem Sie entfernt Ihre Daten nicht machen, die Länge der Schwelle. Es scheint, dass diena.action
argument nicht wirklich etwas tun.InformationsquelleAutor Gavin Simpson