2013-03-24 3 views
1
require(quantmod) 
require(TTR) 
require(PerformanceAnalytics) 

tckr<-"^GSPC" 

start<-"1986-12-31" 
end<- format(Sys.Date(),"%Y-%m-%d") # yyyy-mm-dd 

getSymbols(tckr, from=start, to=end) 
US10yRate<-getSymbols("DGS10",src="FRED",auto.assign=FALSE,from=start, to=end) 

US10yRate<-to.daily(US10yRate)[,1] 

#running 25 day correlation 
correlationSPand10y<-runCor(US10yRate[,1],GSPC[1:12789,2],n=25) 

Этот код из блога TimelyPortfolio. Это дает мне ошибку в последней строке runCor. Причина в том, что количество наблюдений за US10yRate отличается от числа наблюдений GSPC. US10yRate имеет несмежные даты (1990-01-02, 1990-01-05 и т. Д.). Я хочу подмножество GSPC на основе дат US10yRate, чтобы они соответствовали друг другу. Эта операция похожа на слияние в SQL. Как я могу справиться с этим с объектами xts в R?Как использовать индекс объекта xts для подмножества другого объекта xts?

Спасибо!

ответ

1

Посмотрите на GSPC, в частности, это количество строк.

> dim(GSPC) 
[1] 6612 6 

> GSPC[1:12789,2] 
Error in `[.xts`(GSPC, 1:12789, 2) : subscript out of bounds 

U <- US10yRate[index(US10yRate) %in% index(GSPC),1] 
G <- GSPC[index(GSPC) %in% index(US10yRate), 2] 
dim(U) 
# [1] 6552 1 
dim(G) 
# [1] 6552 1 
1

Вы можете объединить их в первую очередь, чтобы убедиться, что они оба имеют одинаковое число строк.

dat <- merge(US10yRate[, 1], GSPC[, 2], all=FALSE) 
# or, 
# dat <- na.locf(merge(US10yRate[, 1], GSPC[, 2])) 

correlationSPand10y <- runCor(dat[, 1], dat[, 2], n=25) 
+0

Спасибо, что указал мне на соединение functino. Я пробовал ваш код, но он не работает. это структура xts [0]. – zsljulius

+0

Это может быть проблема с часовым поясом с помощью xts. Что произойдет, если вы сначала выполните «Sys.setenv (TZ =« GMT »)? – GSee

Смежные вопросы