2013-03-24 2 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 등). 나는 서로 일치 할 수 있도록 US10yRate 날짜를 기반으로 GSPC를 서브 세트하고 싶습니다. 이 작업은 SQL에서의 병합과 똑같습니다. R의 xts 객체를 어떻게 처리 할 수 ​​있습니까?다른 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 병합으로 안내해 주셔서 감사합니다. 코드를 사용해 보았지만 작동하지 않습니다. dat은 xts [0]의 구조입니다. – zsljulius

+0

xts에서 시간대 문제 일 수 있습니다. 'Sys.setenv (TZ = "GMT")'를 먼저하면 어떻게됩니까? – GSee

관련 문제