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 对象?

谢谢!

4

2 回答 2

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)
于 2013-03-24T18:57:12.587 回答
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
于 2013-03-24T18:45:56.337 回答