研究・リサーチ

Rで効率的フロンティアを計算!なでしこ銘柄の最小分散ポートフォリオを目指す(1)

日頃から「効率的フロンティアへの投資が~」と語っていると, ある日, 知り合いに肩を叩かれて「君は投資に詳しいんだね. この銘柄で効率的フロンティアを計算してくれないかな?」と頼まれることがあるかもしれません.

そんな時に, 「じ, 実は自分では計算したことがなくて...(しどろもどろ)」となってしまうと悲しいですよね. そこで, R言語を用いて効率的フロンティアを計算する手順についてまとめておきたいと思います.

ただし, 効率的フロンティアの計算については同じような記事がたくさんあるので, 経済産業省が毎年公表している「なでしこ銘柄」で最小分散ポートフォリオを作ることを目標にしたいと思います. 日本も女性活躍の時代ですからね.

今回は, 準備編としてデータの確認から始めます.

スポンサーリンク

データ

まずは準備編ということで, 日本株の3銘柄から分析を始めたいと思います. 分析対象は「2229:カルビー」, 「2502:アサヒグループHD」, 「2914:JT」の3銘柄としました. 毎年, 経済産業省が公表しているなでしこ銘柄のうち, 令和元年度「なでしこ銘柄」選定企業から証券コード順に3銘柄を選びました.

日本株の分析では, 「7203:トヨタ自動車」, 「8306:三菱UFJフィナンシャル・グループ」, 「9984:ソフトバンクグループ」などが分析対象となることが多いですね. この記事では, 女性活躍時代のファイナンス分析を意識してみたいと思います.

株価データはYahoo!ファイナンスから取得しています. Yahoo!ファイナンスはデータのスクレイピングが禁止されているため, コピペの繰り返しで株価データを取得. Yahoo!ファイナンスでは配当込みのリターンは取得できないため, 株価の終値から計算したプライスリターンで分析を行いました. 分析期間は, 2016年1月から2020年12月です.

スポンサーリンク

基本統計量

まずは株価の推移を確認してみます.

###########################################
############# パッケージのインストール #############
###########################################

library(dplyr)
library(ggplot2)
library(reshape2)

###########################################
################# 株価の推移 #################
###########################################

data.g <- data

for(i in 2:ncol(data.g)){
for(j in nrow(data.g):1){

	data.g[j,i] <- data.g[j,i]/data.g[1,i]*100
}}

data.g[,1] <- as.Date(paste0(data.g[,1], "01"),"%Y%m%d")

data.g <- melt(data = data.g, id.vars = "DATA_DATE")
colnames(data.g)[2:3] <- c("STOCK","PRICE")

ggplot(data.g, aes(x = DATA_DATE, y = PRICE, colour = STOCK)) +
	geom_line() +
	theme(legend.position = "bottom") +
	guides(color = guide_legend(title = NULL))
出所:Yahoo!ファイナンス

2016年12月末から2020年12月末の5年間で株価が上昇したのは, アサヒグループHDのみでした. ただし, 新型コロナウィルスによる下落以降は, 外食自粛の影響によってビールの消費も落ち込んでいるのか, 株価の戻りも弱いようです.

カルビーとJTの株価については, 株価はこの5年間で右肩下がりとなっています. タバコもスナック菓子も人口減少で国内市場には伸びしろがありませんし, 最近の健康志向の高まりは業績に追い打ちをかけているのかもしれません.

続いて, 横軸をリスク(標準偏差), 縦軸をリターン(平均リターン)とした散布図です.

###########################################
################ 基本統計量 #################
###########################################

data.r <- data
data.g <- NULL

for(i in 2:ncol(data.r)){
for(j in nrow(data.r):2){

	data.r[j,i] <- data.r[j,i]/data.r[j-1,i]-1
}}

data.r <- data.r[-1,]

for(i in 2:ncol(data.r)){
tmp <- cbind(colnames(data.r)[i], mean(data.r[,i]), sd(data.r[,i]))
data.g <- rbind(data.g, tmp)
}

data.g <- data.frame(data.g)
colnames(data.g) <- c("STOCK", "RETURN", "RISK")

for(i in 2:ncol(data.g)){

	data.g[,i] <- as.numeric(as.character(data.g[,i]))
}

ggplot(data.g, aes(x = RISK, y = RETURN, colour = STOCK)) +
	geom_point(size = 3) +
	guides(color = guide_legend(title = NULL))

出所:Yahoo!ファイナンス

最もリスクが高い銘柄はアサヒグループHD, 最もリスクが低い銘柄はJTとなりました. この3銘柄においては, リスクが高いほどリターンも高いという標準的な関係が成立しています. ただし, 3銘柄のうち2銘柄のリターンはマイナスになっているので, 銘柄の選定があまり良くなかったかもしれません.

スポンサーリンク

分散共分散行列

最後に, 3銘柄の分散共分散行列を求めます.

###########################################
############### 分散共分散行列 ###############
###########################################

var(data.r[,2:ncol(data.r)])
出所:Yahoo!ファイナンス

分散共分散行列は, 名前の通り各銘柄の分散と共分散を表しています. 赤で示した行列の対角成分には各銘柄の分散, 青で示したその他の成分には銘柄ペアの共分散が入っています.

分散に着目すると, 最も分散が大きいのはアサヒグループHD, 最も分散が小さいのはJTとなりました. リスク(標準偏差)を2乗すると分散が求まるので, 先ほどの散布図と整合的な結果になります.

共分散に着目すると, アサヒグループHDとJTのペアの共分散が最も大きく, カルビーとJTのペアの共分散が最も小さくなっています. 銘柄ペアの共分散が小さいほど株価の連動性が低くなるため, 分散投資によるリスクの低減が期待されます.

次回の記事では, 3銘柄の効率的フロンティアの計算に入りたいと思います.

スポンサーリンク

参考文献

Rのプログラムについては, 以下の書籍を参考にしながら書いています.

オライリー・ジャパン
応援クリックお願いします!

Betmob|投資家ブログまとめメディア


研究・リサーチ
スポンサーリンク
インデックス投資家のアタマノナカ

コメント

  1. […] Rで効率的フロンティアを計算!なでしこ銘柄の最小分散ポートフォリオを… […]