2016-04-28 21 views
1

Wenn ich folgende monatlich -> Quartal Umwandlungxts to.quarterly falsche Ergebnisse gibt für die monatlichen

xts.testm <- xts(rnorm(440*12, mean=0, sd=10), order.by=timeBasedSeq(155001/1989)) 
xts.testq<-to.quarterly(xts.testm, OHLC = FALSE) 
tail(xts.testm) 
tail(xts.testq) 

bekomme ich folgende Ausgabe, die die ursprüngliche Monats- und neue Quartal Ausgabe zeigt:

   [,1] 
Jul 1989 4.4441175 
Aug 1989 -0.2839412 
Sep 1989 -3.3491154 
Oct 1989 -1.9351425 
Nov 1989 7.5427961 
Dec 1989 -4.5846861 
> tail(xts.testq) 
      [,1] 
1988 Q4 -1.537608 
1989 Q1 -7.190733 
1989 Q2 9.430785 
1989 Q3 4.444117 
1989 Q4 -1.935143 
1989 Q4 -4.584686 

Beachten Sie das letzte Quartal und die falschen Werte. to.quarterly soll den letzten Wert erfassen. Es ist nicht. Sep 1989 -3.349 sollte 1989Q3 -4.44 und Dec 1989 -4.58 sollte 1989Q4 -4.58 sein. Irgendwie gibt es zwei 1989Q4 Werte. Irgendwie werden die Werte von Oktober und Juli anstelle von September und Dezembers Werten genommen.

Was zum Teufel ist los?

Antwort

0

Dies ist ein Fehler in der Version von xts auf CRAN, die in den development version behoben wurden.

Das Problem ist, dass Ihr xts.testm Objekt Ihre lokale Zeitzone verwendet, obwohl der Index eine yearmon Klasse ist (die keine Zeitzone hat). Dies wird in der Entwicklungsversion behoben, indem sichergestellt wird, dass alle Indexklassen, die keine Zeitzone haben (z. B. Date, Yearmon, Yearqtr, Chron), eine TZ von "UTC" haben.

Mit xts von CRAN:

R> set.seed(21) 
R> xts.testm <- xts(rnorm(440*12, sd=10), order.by=timeBasedSeq(155001/1989)) 
R> str(xts.testm) # "TZ: " implies local timezone 
An ‘xts’ object on Jan 1550/Dec 1989 containing: 
    Data: num [1:5280, 1] 7.93 5.22 17.46 -12.71 21.97 ... 
    Indexed by objects of class: [yearmon] TZ: 
    xts Attributes: 
NULL 
R> xts.testq <- to.quarterly(xts.testm, OHLC = FALSE) 
R> tail(xts.testq) 
       [,1] 
1988 Q4 -17.874026 
1989 Q1 3.346780 
1989 Q2 18.418469 
1989 Q3 9.461461 
1989 Q4 -16.074923 
1989 Q4 -3.615878 

aktuelle Entwicklungsversion von xts Verwendung:

R> set.seed(21) 
R> xts.testm <- xts(rnorm(440*12, sd=10), order.by=timeBasedSeq(155001/1989)) 
R> str(xts.testm) # note "TZ: UTC" 
An ‘xts’ object on Jan 1550/Dec 1989 containing: 
    Data: num [1:5280, 1] 7.93 5.22 17.46 -12.71 21.97 ... 
    Indexed by objects of class: [yearmon] TZ: UTC 
    xts Attributes: 
NULL 
R> xts.testq <- to.quarterly(xts.testm, OHLC = FALSE) 
R> tail(xts.testq) 
       [,1] 
1988 Q3 4.936151 
1988 Q4 5.404136 
1989 Q1 -3.331241 
1989 Q2 -23.621581 
1989 Q3 2.687675 
1989 Q4 -3.615878 
+0

Vielen Dank für Ihre Antwort! Ich bin immer noch neu in R, also bitte vergib mir meine Unwissenheit, aber wie würde ich die Entwicklungsversion verwenden, die du freundlicherweise verlinkt hast? Brauche ich dieses "R-devel", von dem ich gelesen habe? –

+0

@Knixd: es ist nur die Entwicklungsversion von XTS, nicht die Entwicklungsversion von R. –

+0

Wunderbar. Ich werde die Entwicklungsversion von xts.Thanks nochmal für die Hilfe nutzen! –

0

Es funktioniert für mich. Versuchen Sie mit einem reproduzierbaren Beispiel mit set.seed().

set.seed(10) 
xts.testm <- xts(rnorm(440*12, mean=0, sd=10), order.by=timeBasedSeq(155001/1989)) 
xts.testq<-to.quarterly(xts.testm, OHLC = FALSE) 
tail(xts.testm,12) 
tail(xts.testq,8) 

Haben Sie diesen Ausgang?

tail(xts.testm,12) 
       [,1] 
dic 1988 -16.984259 
gen 1989 -13.103928 
feb 1989 -3.515761 
mar 1989 23.712606 
apr 1989 6.635250 
mag 1989 13.826195 
giu 1989 1.771894 
lug 1989 -11.096838 
ago 1989 14.664982 
set 1989 12.516992 
ott 1989 11.572212 
nov 1989 -18.763949 
> tail(xts.testq,8) 
       [,1] 
1988 Q1 4.2217167 
1988 Q2 0.4267038 
1988 Q3 25.3994248 
1988 Q4 -16.9842591 
1989 Q1 23.7126065 
1989 Q2 1.7718940 
1989 Q3 12.5169922 
1989 Q4 -18.7639487