2016-07-16 46 views
1

我試圖編寫基於簡單線性迴歸的配對交易代碼時,似乎在R中出現錯誤。我懷疑這可能是來自下載數據的錯誤?但是,我不確定我是對的還是如何處理這個錯誤。正如你可能看到的那樣,我在R這種事情上相對較新。任何有關這方面的幫助都將非常感激。lm和quantmod在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') 
+0

感謝。是的,這似乎是問題的根源,長度分別爲412和580。你知道如何去解決這個問題嗎?錯誤來自數據集,是嗎? –

+0

什麼是錯誤? – Rob

+0

@ZheyuanLi只是檢查... '> nrow(GOLDBEES.NS) [1] 1742 > nrow(NIFTYBEES.NS) [1] 1925' –

回答

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 
+1

非常感謝,超級有用。今天晚些時候會試用。 –