2011-07-06 29 views
5

Estoy tratando de (re) construir un modelo básico de predicción de la S & P 500 (orignates de datos de Yahoo finanzas)R: Error en XTS - order.by

me encontré con algunas dificultades con el " ordenar "de mi conjunto de datos.
Durante la acumulación de data.model produce el siguiente error

Error en xts (new.x, x.index): nRow (x) debe coincidir con la longitud (order.by)

Después de algún La investigación me da cuenta de que el problema está en el orden, y parece que no está ordenado como se requiere para el paquete zoológico subyacente.

¿Hay una manera elegante de resolver este problema? Gracias de antemano

library(xts) 
library(tseries) 
library(quantmod) 

GSPC <- as.xts(get.hist.quote("^GSPC",start="1970-01-02", 
quote=c("Open", "High", "Low", "Close","Volume","AdjClose"))) 

head(GSPC) 

T.ind <- function(quotes, tgt.margin = 0.025, n.days = 10) { 
v <- apply(HLC(quotes), 1, mean) 
r <- matrix(NA, ncol = n.days, nrow = NROW(quotes)) 
for (x in 1:n.days) r[, x] <- Next(Delt(v, k = x), x) 
x <- apply(r, 1, function(x) sum(x[x > tgt.margin | x < 
-tgt.margin])) 
if (is.xts(quotes)) 
xts(x, time(quotes)) 
else x 
} 


myATR <- function(x) ATR(HLC(x))[, "atr"] 
mySMI <- function(x) SMI(HLC(x))[, "SMI"] 
myADX <- function(x) ADX(HLC(x))[, "ADX"] 
myAroon <- function(x) aroon(x[, c("High", "Low")])$oscillator 
myBB <- function(x) BBands(HLC(x))[, "pctB"] 
myChaikinVol <- function(x) Delt(chaikinVolatility(x[, c("High", "Low")]))[, 1] 
myCLV <- function(x) EMA(CLV(HLC(x)))[, 1] 
myEMV <- function(x) EMV(x[, c("High", "Low")], x[, "Volume"])[, 2] 
myMACD <- function(x) MACD(Cl(x))[, 2] 
myMFI <- function(x) MFI(x[, c("High", "Low", "Close")], x[, "Volume"]) 
mySAR <- function(x) SAR(x[, c("High", "Close")])[, 1] 
myVolat <- function(x) volatility(OHLC(x), calc = "garman")[, 1] 

library(randomForest) 
data.model <- specifyModel(T.ind(GSPC) ~ Delt(Cl(GSPC),k=1:10) + 
myATR(GSPC) + mySMI(GSPC) + myADX(GSPC) + myAroon(GSPC) + 
myBB(GSPC) + myChaikinVol(GSPC) + myCLV(GSPC) + 
CMO(Cl(GSPC)) + EMA(Delt(Cl(GSPC))) + myEMV(GSPC) + 
myVolat(GSPC) + myMACD(GSPC) + myMFI(GSPC) + RSI(Cl(GSPC)) + 
mySAR(GSPC) + runMean(Cl(GSPC)) + runSD(Cl(GSPC))) 

Respuesta

7

traceback() revela el error se produce en la llamada Delt(Cl(GSPC),k=1:10):

> Delt(Cl(GSPC),k=1:10) 
Error in xts(new.x, x.index) : NROW(x) must match length(order.by) 

Delt espera un (1 m x) objeto, sino que estás pasando a (x 2 m) objeto. Esto es porque GSPC tiene dos columnas que coinciden con Cl ("Cerrar" y "AdjClose"). Esto probablemente también cause dolores de cabeza en otras áreas ...

Cl espera objetos como los devueltos por getSymbols, donde la columna de cierre ajustada se denomina "Ajustado". Si necesita usar get.hist.quote por algún motivo, simplemente cambie el nombre de la columna "AdjClose" después de descargar los datos.

colnames(GSPC) <- c("Open", "High", "Low", "Close","Volume","Adjusted") 
Delt(Cl(GSPC),k=1:10) # works now 
+0

Muchas gracias, funcionó! – Val

2
## Error in xts(x, order.by = order.by, frequency = frequency, ... 
##  NROW(x) must match length(order.by) 

que desperdicia las horas de funcionamiento en este error. Independientemente de si tuve exactamente el mismo problema, le mostraré cómo resolví este mensaje de error en caso de que le ahorre el dolor que tenía.

Importé un archivo de Excel o CSV (intenté ambos) a través de varias funciones de importación, intenté convertir mis datos (como un objeto data.frame o .zoo) en un objeto xts y seguí recibiendo errores, este incluido .

He intentado crear un vector de fechas por separado para pasar como el parámetro order.by. Intenté asegurarme de que el vector de fecha de las filas del data.frame fuera el mismo. A veces funcionaba y otras no, por razones que no puedo explicar. Incluso cuando funcionó, R había "coaccionado" todos mis datos numéricos en datos de caracteres. (Haciendo que me problemas sin fin, más tarde atento a la coacción, que aprendí..)

Estos errores se mantuvo hasta que ocurra:

Para la conversión XTS utilicé la columna de la fecha a partir de la hoja de Excel importado como parámetro order.by con un as.Date() modificador, Y yO * caer la columna de fecha durante la conversión a XTS *

Aquí está el código de trabajo:.

xl_sheet <- read_excel("../path/to/my_excel_file.xlsx") 
sheet_xts <- xts(xl_sheet[-1], order.by = as.Date(xl_sheet$date)) 

Tenga en cuenta que la columna de fecha fue la primera columna, por lo que xl_sheet [-1] eliminó la primera columna.

Cuestiones relacionadas