2012-06-21 12 views
6

Ich möchte SPX Diagramm quantmod mit :: chart_Series() und unter Unentschieden Veränderungen des BIP und 12 Monate SMA von Veränderungen des BIP. Egal wie ich versuche, es zu tun (welche Kombinationen ich verwende) eithe Fehler auftreten oder quantmod :: chart_Series() zeigt nur Teilstück.quantmod :: chart_Series() Fehler?

require(quantmod) 

FRED.symbols <- c("GDPC96") 

getSymbols(FRED.symbols, src="FRED") 
SPX <- getSymbols("^GSPC", auto.assign=FALSE, from="1900-01-01") 

subset="2000/" 

chart_Series(SPX, subset=subset) 
add_TA(GDPC96) 
add_TA(ROC(GDPC96, type="discrete")) 
add_TA(SMA(ROC(GDPC96, type="discrete"), n=4), on=3, col="blue") 

EDIT: Eigentlich, so scheint es mir, dass dies eine quantmod ist :: chart_series() Problem bei der Quartalsdaten:

subset <- "2000/" 
chart_Series(to.quarterly(SPX, drop.time=TRUE), subset=subset) 
add_TA(SMA(Cl(to.quarterly(SPX, drop.time=TRUE)))) 

> subset <- "2000/" 
> chart_Series(to.quarterly(SPX, drop.time=TRUE), subset=subset) 
> add_TA(SMA(Cl(to.quarterly(SPX, drop.time=TRUE)))) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 

Das SPX Grundstück an der Hauptplatte produziert, lässt aber leer zweites und drittes Panel. Dann habe ich versucht, mit mit demselben Index auf Daten, gleiche Längen usw.

chart_Series(head(to.quarterly(SPX, drop.time="TRUE"), -1), subset=subset) 
add_TA(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)) 
add_TA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete")) 
add_TA(SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4), on=3, col="blue") 

Und Ergebnis zu spielen, um Fehler sind überall:

> chart_Series(head(to.quarterly(SPX, drop.time="TRUE"), -1), subset=subset) 
> add_TA(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 
> add_TA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete")) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 
> add_TA(SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4), on=3, col="blue") 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 

Mit
tail(to.quarterly(SPX, drop.time="TRUE")) 
tail(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)) 
tail(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete")) 
tail(SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4)) 

dput(to.quarterly(SPX, drop.time="TRUE")) 
dput(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)) 
dput(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete")) 
dput(SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4)) 

sieht alles gut mir.

Meine Session():

> sessionInfo() 
R version 2.15.0 (2012-03-30) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8   LC_NUMERIC=C     
[3] LC_TIME=en_US.UTF-8   LC_COLLATE=en_US.UTF-8  
[5] LC_MONETARY=en_US.UTF-8  LC_MESSAGES=en_US.UTF-8  
[7] LC_PAPER=en_US.UTF-8   LC_NAME=en_US.UTF-8   
[9] LC_ADDRESS=en_US.UTF-8  LC_TELEPHONE=en_US.UTF-8  
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] quantmod_0.3-18 TTR_0.21-0  xts_0.8-7  zoo_1.7-7  
[5] Defaults_1.1-1 rj_1.1.0-4  

loaded via a namespace (and not attached): 
[1] grid_2.15.0 lattice_0.20-0 tools_2.15.0 

Irgendwelche Ideen, was die Lösung für diese Probleme sein könnte?

EDIT: Dies scheint ein quantmod :: chart_Series() bug zu sein. Wenn ich dies tue:

subset <- "1990/" 
test <- cbind(head(to.quarterly(SPX, drop.time="TRUE"), -1)[subset], 
      to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE)[subset], 
      ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE),  type="discrete")[subset], 
      SMA(ROC(to.quarterly(GDPC96, drop.time="TRUE", OHLC=FALSE), type="discrete"), n=4)[subset]) 

test$test <- 1 

subset <- "2000/" 
chart_Series(OHLC(test), subset=subset) 
add_TA(test$test) 
add_TA(test$GDPC96) 

> test$test <- 1 
> subset <- "2000/" 
> chart_Series(OHLC(test), subset=subset) 
> add_TA(test$test) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 
> add_TA(test$GDPC96) 
Error in xy.coords(x, y) : 'x' and 'y' lengths differ 
In addition: Warning messages: 
1: In as_numeric(H) : NAs introduced by coercion 
2: In as_numeric(H) : NAs introduced by coercion 
3: In as_numeric(H) : NAs introduced by coercion 
> traceback() 
14: stop("'x' and 'y' lengths differ") at chart_Series.R#510 
13: xy.coords(x, y) at chart_Series.R#510 
12: plot.xy(xy.coords(x, y), type = type, ...) at chart_Series.R#510 
11: lines.default(ta.x, as.numeric(ta.y[, i]), col = col, ...) at chart_Series.R#510 
10: lines(ta.x, as.numeric(ta.y[, i]), col = col, ...) at chart_Series.R#510 
9: plot_ta(x = current.chob(), ta = get("x"), on = NA, taType = NULL, 
     col = 1) at replot.R#238 
8: eval(expr, envir, enclos) at replot.R#238 
7: eval(aob, env) at replot.R#238 
6: FUN(X[[12L]], ...) at replot.R#230 
5: lapply(x$Env$actions, function(aob) { 
     if (attr(aob, "frame") > 0) { 
      x$set_frame(attr(aob, "frame"), attr(aob, "clip")) 
      env <- attr(aob, "env") 
      if (is.list(env)) { 
       env <- unlist(lapply(env, function(x) eapply(x, eval)), 
        recursive = FALSE) 
      } 
      eval(aob, env) 
     } 
    }) at replot.R#230 
4: plot.replot(x, ...) 
3: plot(x, ...) 
2: print.replot(<environment>) 
1: print(<environment>) 

Irgendwelche Ideen, wie Sie das behoben bekommen?

Antwort

3

Ich schrieb eine lange „Antwort“ Ihre Probleme bestätigt, auch nach einigen Massieren Daten und sogar die älteren chartSeries Funktion. Dann habe ich festgestellt, dass add_TA() vielleicht die falsche Funktion ist. Dieser Ansatz funktioniert:

par(mfrow=c(2,1)) 
chart_Series(SPX) 
chart_Series(GDPC96) 

(R/quantmod: multiple charts all using the same y-axis für einen alternativen Ansatz Siehe layout Befehl.)

Oder mit der Teilmenge.

par(mfrow=c(2,1)) 
chart_Series(SPX,subset="2000/") 
chart_Series(GDPC96,subset="2000/") 

(NB die beiden Datensätze an anderer Stelle beenden , also nicht ganz line up)

Übrigens gibt es einen bestimmten Fehler in chart_Series mit Quartalsdaten. die x-Achse Etiketten lo ok wie "% n% b% n2010".

q.SPX=to.quarterly(SPX) 
chart_Series(q.SPX) 
+2

Gute Arbeit um.Re: der Formatierungsfehler der Achsenbeschriftung, das Problem ist, dass 'zoo ::: format.yearqtr' die'% n' _umwandlungsspezifikation_ nicht unterstützt. 'chart_Series' verwendet' xts ::: axTicksByTime', das das generische 'format' verwendet. Seit 'to.quarterly' gab den Index eine Klasse von' yearqtr', '' format' entsendet mit einem String format.yearqtr', die '% n' enthält (aber anders auf Ihrem Betriebssystem abhängig). Eine, zugegebenermaßen nicht großartige, Möglichkeit, dies auf der Benutzerebene zu umgehen, ist die Indexklasse zu ändern: 'indexClass (q.SPX) <-" Date "; chart_Series (q.SPX) ' – GSee

5

Ich hatte vor einigen Tagen einen ähnlichen Fehler. Ich fand, dass das Problem in add_TA mit der Linie war:

ta.x <- as.numeric(na.approx(ta.adj[, 1])) 

na.approx verbraucht ca. mit Regel = 1 standardmäßig, die nationalen Agenturen in der Liste verläßt Hinter, wenn der letzte Zeitstempel in den ursprünglichen Daten vor dem letzten Zeitstempel in den TA-Daten. Durch Ändern dieser Zeile, um Regel = 2 festzulegen, wurde das Problem behoben.

ta.x <- as.numeric(na.approx(ta.adj[, 1], rule=2)) 
+0

SVN Angewandt in [r581] (https://r-forge.r-project.org/scm/viewvc.php/pkg/R/chart_Series.R?view=markup&revision=581&root= quantmod). Danke @ Michael741. –

+0

Willkommen in SO, Maddogg! :) – GSee

+0

+1, Leider funktioniert es immer noch nicht mit @ Samos erstem Beispiel, wo SPX eine höhere Frequenz als GDPC96 hat. Aber das Umwandeln von "zu" vierteljährlich ist eine ziemlich einfache Umgehung. Außerdem wirft der gepatchte Code noch eine Menge Warnungen von 'as_numeric (H)', die aus einer 'parse.side' Funktion kommt, die' .parseISO8601' lokal ist. (Ja, ja, ich weiß, das sind nur Warnungen) – GSee

Verwandte Themen