投資信託「eMAXIS」のデータを分析する−3(ポートフォリオのパフォーマンス編)

前回までの記事

前回までで個別資産クラスのファンドデータを見たので、今回はeMAXISポートフォリオを組んだらどうなるのかというお話。まず前回作成した関数を使ってデータを取得して、それをリターン系列に倒す。GetSpecificColumn・GeteMAXISの両関数は前回の記事からコピペして使用。そのまま全部使うと資産が10資産あってめんどくさいのでここではTOPIX・国内債券・国内REIT指数に連動するファンドに絞って分析。

eMAXIS.return <- CalculateReturns(GetSpecificColumn(GeteMAXIS(), "GCV"))
eMAXIS.return <- eMAXIS.return[,2:4]

これでリターン時系列を取得できた。まずはこの三種類のファンドを等ウェイトで持った場合のパフォーマンスを見てみる。使用する関数はPerformanceAnalyticsパッケージに入っているReturn.portfolio関数。引数は

  • R:元となるリターンデータ
  • weights:ポートフォリオウェイト、パーセンテージで指定
  • wealth.index:よくわからん。よくわからんけどFALSEにしておかないと結果が気持ち悪い。デフォルトはFALSE
  • contribution:各資産ごとのリターン寄与も計算するか否か。リターン寄与の和=全体のリターン。デフォルトはFALSE
  • geometric:リターン(FALSE)か累積リターン(TRUE)かを指定。デフォルトはTRUE

って感じ。試しに適当なデータを定義して計算してみる。

> y <- xts(matrix(rep(1,10),ncol=2),order.by=Sys.Date()+1:5)
> colnames(y) <- c("A","B")
> y
           A B
2011-04-13 1 1
2011-04-14 1 1
2011-04-15 1 1
2011-04-16 1 1
2011-04-17 1 1
> Return.portfolio(y, contribution = TRUE)
             A   B portfolio.returns
2011-04-13 0.5 0.5                 1
2011-04-14 1.0 1.0                 2
2011-04-15 2.0 2.0                 4
2011-04-16 4.0 4.0                 8
2011-04-17 8.0 8.0                16
 警告メッセージ: 
In Return.portfolio(y, contribution = TRUE) :
  weighting vector is null, calulating an equal weighted portfolio

ウェイトを指定しないと等ウェイトで保有したと仮定して処理されるようだ。contribution = TRUEとしているのでリターン寄与も計算されている。累積リターンで出されると使いにくいので、geometric = FALSEとして累積せずに日々のリターンのままにしておくと

> Return.portfolio(y, geometric = FALSE)
           portfolio.returns
2011-04-13                 1
2011-04-14                 1
2011-04-15                 1
2011-04-16                 1
2011-04-17                 1
 警告メッセージ: 
In Return.portfolio(y, geometric = FALSE) :
  weighting vector is null, calulating an equal weighted portfolio

と等ウェイトで資産AとBを保有した場合のリターンが計算できる。特に必要ないのでcontributionの設定ははずした。これと同様の計算をeMAXISのリターン系列に適用すると、「TOPIX・国内債券・国内REIT」の三ファンドに等しいウェイトで投資場合のパフォーマンスが計算できる。図示してやると

return.portfolio <- merge(Return.portfolio(eMAXIS.return, geometric = FALSE),eMAXIS.return)
charts.PerformanceSummary(return.portfolio, main = "等ウェイトポートフォリオのパフォーマンス")

となった。直近の下落を国内債券で緩和しているようなイメージか。投資ウェイトをコントロールするにはweights引数を指定するようにすればいい。この時、関数内で列名をキーに引いているようなので、そこは揃えておくようにする。ここでは「TOPIX:国内債券:国内REIT=0.2:0.6:0.2」という割合で投資するようにして計算してみた。

w <- matrix(c(0.2, 0.6, 0.2),nrow=1)
colnames(w) <- colnames(eMAXIS.return)
return.portfolio <- merge(Return.portfolio(eMAXIS.return, geometric = FALSE, weights = w),eMAXIS.return)
charts.PerformanceSummary(return.portfolio, main = "ポートフォリオのパフォーマンス")