βはいかにして時系列推移するのか?の続き

βはいかにして時系列推移するのか? - 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あたりで推移し、かつ値として一番大きい感じか。リターンに条件を入れた場合だとほぼ「リターンが正のものだけを使った場合」>「リターンが負のものだけを使った場合」って感じかな。あとはこれをどう解釈するか、他の例とかもいじりつつ良く考えたい。