βはいかにして時系列推移するのか?の続き
βはいかにして時系列推移するのか? - My Life as a Mock Quantで書いた話の続きのようなもの、私の金融工学先生の興味にあてられて、私も興味が出てきましたよというお話。
お題は「市場リスクへの感応度であるβ(ベータ)を推計する際に、プラスのリターンだけを使って推計した場合と、マイナスのリターンだけを使って推計した場合、どの程度違うのか」というお話。
まずは前回と同じ銘柄でやりたいってことで、三菱UFJフィナンシャルグループと日経平均株価データを取得(via RFinanceYJ パッケージ、期間:2010年11月〜2011年11月)
library(RFinanceYJ) #download stock prices of nikkei-225 and MUFJ Financial group mufg <- quoteStockXtsData("8306.T", since="2010-11-30",date.end="2011-11-30")$Close nikkei <- quoteStockXtsData("998407.O", since="2010-11-30",date.end="2011-11-30")$Close
そして取得した株価データをリターン系列に倒す
#convert to return returns <- merge(mufg / lag(mufg) - 1, nikkei / lag(nikkei) - 1) names(returns) <- c("MUFG","NIKKEI")
各日に対して直近125日分のデータから三菱UFJFGのベータを推計。その際に、上述したように日経平均のリターンが正のものだけ、あるいは負のものだけのデータを使うというケースも用意。
#estimate beta by rolling regression size.window <- 125 #function for estimate beta estimate.normal <- function(x){coef(lm(x[, 1] ~ x[, 2]))[2]} estimate.positive <- function(x){coef(lm(subset(x[, 1], x[, 2] > 0) ~ subset(x[, 2], x[, 2] > 0)))[2]} estimate.negative <- function(x){coef(lm(subset(x[, 1], x[, 2] <= 0) ~ subset(x[, 2], x[, 2] <= 0)))[2]} #estimate each case beta.normal <- rollapplyr(returns, size.window, estimate.normal , by.column = FALSE) beta.positive <- rollapplyr(returns, size.window, estimate.positive, by.column = FALSE) beta.negative <- rollapplyr(returns, size.window, estimate.negative, by.column = FALSE) beta <- merge(beta.normal, beta.positive, beta.negative)
推計結果をPLOTすると
plot(beta, screen = 1, col = 1:3, lwd = 3) legend(first(as.numeric(index(beta))), 0.8, legend = c("Normal","Positive","Negative"), col = 1:3, lty = 1,lwd = 3)
となる(横軸は月)。全データを使った場合のベータがほぼ1あたりで推移し、かつ値として一番大きい感じか。リターンに条件を入れた場合だとほぼ「リターンが正のものだけを使った場合」>「リターンが負のものだけを使った場合」って感じかな。あとはこれをどう解釈するか、他の例とかもいじりつつ良く考えたい。