2011-07-06 34 views
5

Tôi cố gắng để (lại) xây dựng một mô hình cơ bản dự báo chỉ số S & P 500 INDEX (orignates dữ liệu từ Yahoo Finance)R: Lỗi trong XTS - order.by

tôi chạy vào một số khó khăn với " đặt hàng "của tập dữ liệu của tôi.
Trong vóc dáng người data.model lỗi sau xảy ra

Lỗi trong XTS (new.x, x.index): NROW (x) phải phù hợp với chiều dài (order.by)

Sau khi một số nghiên cứu tôi nhận ra rằng vấn đề là với việc đặt hàng, và nó dường như thiếu thứ tự như là cần thiết cho gói sở thú cơ bản.

Có cách nào thanh lịch để giải quyết vấn đề này không ?! Cảm ơn trước

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))) 

Trả lời

7

traceback() tiết lộ các lỗi xảy ra trong Delt(Cl(GSPC),k=1:10) gọi:

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

Delt hy vọng một (m x 1) đối tượng nhưng bạn đang đi qua một (m x 2) đối tượng. Điều này là do GSPC có hai cột được đối sánh bởi Cl ("Đóng" và "AdjClose"). Điều này có thể sẽ gây ra đau đầu ở các khu vực khác ...

Cl mong muốn các đối tượng như được trả về bởi getSymbols, trong đó cột được điều chỉnh gần được đặt tên là "Đã điều chỉnh". Nếu bạn cần sử dụng get.hist.quote vì một số lý do, chỉ cần đổi tên cột "AdjClose" sau khi bạn tải xuống dữ liệu.

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

Cảm ơn rất nhiều, nó đã hoạt động! – Val

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

tôi lãng phí giờ chạy vào lỗi này. Bất kể có hay không tôi có cùng một vấn đề chính xác, tôi sẽ chỉ cách tôi giải quyết cho thông báo lỗi này trong trường hợp nó giúp bạn tiết kiệm nỗi đau mà tôi có.

Tôi đã nhập tệp Excel hoặc CSV (thử cả hai) thông qua một số hàm nhập, sau đó cố chuyển đổi dữ liệu của tôi (dưới dạng đối tượng data.frame hoặc .zoo) thành đối tượng xts và tiếp tục nhận lỗi. .

Tôi đã thử tạo một vectơ các ngày riêng biệt để chuyển vào làm tham số order.by. Tôi đã cố gắng đảm bảo rằng ngày tháng vector các hàng của data.frame đều giống nhau. Đôi khi nó làm việc và đôi khi nó không, vì lý do tôi không thể giải thích. Ngay cả khi nó đã làm việc, R đã "ép buộc" tất cả dữ liệu số của tôi vào dữ liệu ký tự. (Gây tôi vấn đề vô tận, sau Xem cưỡng chế, tôi đã học..)

Những lỗi này xảy ra cho đến khi giữ:

Đối với chuyển đổi XTS Tôi đã từng cột ngày từ nhập khẩu Excel tờ như tham số order.by với một as.Date() sửa đổi, VÀ tÔI * giảm cột ngày trong chuyển đổi sang XTS *

Dưới đây là đoạn code làm việc:.

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

Lưu ý cột ngày của tôi là cột đầu tiên, vì vậy xl_sheet [-1] đã loại bỏ cột đầu tiên.

Các vấn đề liên quan