2016-07-16 5 views
1

Кажется, что я получаю сообщение об ошибке в 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

Спасибо большое, супер полезно. Попробуем это позже сегодня. –