lm中的错误和R中的quantmod

时间:2016-07-16 11:37:52

标签: r lm quantmod quantitative-finance

在尝试编写基于对的交易代码的简单线性回归时,我似乎在R中出现错误。我怀疑这可能是来自下载数据的错误?但是,我不确定我是对的还是如何处理这个bug。正如你可能看到的那样,我对R中的这类事情相对较新。任何对此的帮助都将非常感激。

symbols <- c("GOLDBEES.NS", "NIFTYBEES.NS")
getSymbols(symbols)

#[1] "GOLDBEES.NS"  "NIFTYBEES.NS"
startT  <- "2011-01-01"
endT    <- "2014-01-01"
rangeT  <- paste(startT,"::",endT,sep ="")
tGOLDBEES   <- GOLDBEES.NS[,6][rangeT]
tNIFTYBEES   <- NIFTYBEES.NS[,6][rangeT]
startO  <- "2014-02-01"
endO <- "2016-04-01"
rangeO  <- paste(startO,"::",endO,sep ="")
oGOLDBEES   <- GOLDBEES.NS[,6][rangeO]
oNIFTYBEES   <- NIFTYBEES.NS[,6][rangeO]
pdtGOLDBEES <- diff(tGOLDBEES)[-1]
pdtNIFTYBEES <- diff(tNIFTYBEES)[-1]
model <- lm(pdtGOLDBEES ~ pdtNIFTYBEES - 1)
#Error in model.frame.default(formula = pdtGOLDBEES ~ pdtNIFTYBEES - 1,         
#:   variable lengths differ (found for 'pdtNIFTYBEES')

1 个答案:

答案 0 :(得分:1)

正如您已经注意到的那样,nrow(GOLDBEES.NS)给出了1742而nrow(NIFTYBEES.NS)给出了1925年。让我们仔细看看:

a <- attr(GOLDBEES.NS, "index")
a <- as.integer((a - a[1]) / 86400)    # number of days since 2008-01-01
b <- attr(NIFTYBEES.NS, "index")
b <- as.integer((b - b[1]) / 86400)    # number of days since 2008-01-01

你实际上没有连续的每日观察。我们只应处理来自普通日期的数据。

GOLDBEES.NS <- GOLDBEES.NS[a %in% b]
NIFTYBEES.NS <- NIFTYBEES.NS[b %in% a]
nrow(GOLDBEES.NS)  # 1740
nrow(NIFTYBEES.NS)  # 1740

现在您可以使用您的代码:

startT  <- "2011-01-01"
endT    <- "2014-01-01"
rangeT  <- paste(startT,"::",endT,sep ="")
tGOLDBEES   <- GOLDBEES.NS[,6][rangeT]
tNIFTYBEES   <- NIFTYBEES.NS[,6][rangeT]
pdtGOLDBEES <- diff(tGOLDBEES)[-1]
pdtNIFTYBEES <- diff(tNIFTYBEES)[-1]
model <- lm(pdtGOLDBEES ~ pdtNIFTYBEES - 1)

#Call:
#lm(formula = pdtGOLDBEES ~ pdtNIFTYBEES - 1)

#Coefficients:
#pdtNIFTYBEES  
#     -0.6383