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-05等)。我想根据US10yRate日期对GSPC进行子集化,以便它们可以相互匹配。此操作与SQL中的合并完全相同。我怎样才能用R?
中的xts对象处理这个问题谢谢!
答案 0 :(得分: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 :(得分: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)