問題
rollapply を使用して、 stock_returns (xts オブジェクト) の列とmarket_return (個別の xts オブジェクト、市場のリターンを含む 1 つの列のみ)の 39 株のそれぞれの間のローリング相関を計算する場合:
rolling_3yearcor <- rollapply(stock_returns,width=750,FUN=cor,y=market_return)
次のエラーが表示されます。
Error in FUN(.subset_xts(data, (i - width + 1):i, j), ...) :
incompatible dimensions
market_returnの単一の列をサブセット化したとしても
rolling_3yearcor <- rollapply(stock_returns,width=750,FUN=cor,y=market_return$market)
寸法が同じなのに、エラーが発生しますか?! (1 列、同じ行数)。
私がしたいこと:
私は、stock_returns の毎日のリターンの代わりに、39 の在庫列のそれぞれで、stock[i] と 750 日のローリング ウィンドウの市場との相関を持つ xts オブジェクトが必要です。
rollapply はまさにそれを行うべきではありませんか?
編集 1: 1 日後方シフトの問題のデータ サンプル
Returns StockA
1997-01-03 -0.0054065397
1997-01-06 0.0024139001
1997-01-07 -0.0030085614
1997-01-08 0.0054329941
1997-01-09 -0.0005990317
1997-01-10 -0.0102205387
...
コードで:
ind <- market_return
ind[] <- seq_along(market_return)
rolling_3yearcor <- function(x,y,ind){
rollapply(ind,width=5,function(i) cor(x[i],y[i]))
}
rollcor_3year <- lapply(stock_returns,rolling_3yearcor,market_return,ind)
rollcor_3year <- as.data.frame(rollcor_3year,col.names=names(stock_returns))
colnames(rollcor_3year) <- colnames(stock_returns)
rollcor_3year <- as.xts(rollcor_3year)
私に与えます:
dput(head(rollcor_3year$StockA.N))
structure(c(NA, NA, NA, NA, 0.30868769358199, 0.576490782746284
), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct",
"POSIXt"), .indexTZ = "", tzone = "", class = c("xts", "zoo"), index =
structure(c(852246000,
852505200, 852591600, 852678000, 852764400, 852850800), tzone = "", tclass =
c("POSIXct",
"POSIXt")), .Dim = c(6L, 1L), .Dimnames = list(NULL, "StockA.N"))
次に:
indexTZ(rollcor_3year) <- "UTC"
dput(head(rollcor_3year$StockA.N))
structure(c(NA, NA, NA, NA, 0.30868769358199, 0.576490782746284
), .indexCLASS = c("POSIXct", "POSIXt"), tclass = c("POSIXct",
"POSIXt"), .indexTZ = c(TZ = "UTC"), tzone = c(TZ = "UTC"), class = c("xts",
"zoo"), index = structure(c(852246000, 852505200, 852591600,
852678000, 852764400, 852850800), tzone = c(TZ = "UTC"), tclass =
c("POSIXct",
"POSIXt")), .Dim = c(6L, 1L), .Dimnames = list(NULL, "StockA.N"))
それは私に与えます:
head(rollcor_3year$StockA.N)
1997-01-02 23:00:00 NA
1997-01-05 23:00:00 NA
1997-01-06 23:00:00 NA
1997-01-07 23:00:00 NA
1997-01-08 23:00:00 0.3086877
1997-01-09 23:00:00 0.5764908