Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18
- 2. 0.1. 自己紹介
>My.Profile $性格
$TwitterID *1+ “暇人”
*1+ “horihorio” *2+ “物好き”
$出身地 $経験アリ統計ソフト
*1+ “日本各地転々” *1+ “IBM SPSS”
$これまでの仕事 *2+ “IBM Modeler”
*1+ “統計分析@金融” *3+ “Matlab”
*2+ “主にリスク管理系” *4+ “SAS”
$お勉強中 $R使用歴
*1+ “DB, IFRS” *1+ “1ヶ月←え?”
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 2
- 4. ◇ 全体構成 ◇
1. 理論編
1. 投資のリターン
2. 投資のリスクの考え方
3. リスク&リターンの考え方
4. トービンの分離定理
2. 実践編
1. データの用意
2. ポートフォリオ構築(2資産)
3. ポートフォリオ構築(多資産)
4. CAPM
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 4
- 9. 1.2. 投資のリスクの考え方
2資産に投資した時のリスク(σ)を求めると、
RP w1 R1 w2 R2 なので
w w 2 w1w2 12
2
P
2
1
2
1
2
2
2
2
( 標準偏差 ij 共分散)
,
相関係数 12 ( 1 2 ) を導入し
w w 2 w1w2 1 2
2
P
2
1
2
1
2
2
2
2
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 9
- 12. 1.2. 投資のリスクの考え方
あれ?何か下に凸な放物線のような
w w 2w1w2 1 2
2
P
2
1
2
1
2
2
2
2
( w1 1 w2 2 ) 2(1 ) w1w2 1 2
2
iは非負、 1 1なので
P w1 1 w2 2
この式の解釈:分散投資をすれば、個別投資よりリス
クを削減することが出来る。
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 12
- 19. ◇ 全体構成 ◇
1. 理論編
1. 投資のリターン
2. 投資のリスクの考え方
3. リスク&リターンの考え方
4. トービンの分離定理
2. 実践編
1. データの用意
2. ポートフォリオ構築(2資産)
3. ポートフォリオ構築(多資産)
4. CAPM
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 19
- 20. 2.1. データの用意
【データ準備】
1. 株式
• データ:東証1部株式 各日調整後終値
• 母集団:日経225採用銘柄
• 期間:2011/1/4~10/14(193営業日)
• 入手方法:次のスライドで
2. 安全資産:日本国債
• データ:1年物日本国債利回り
• 入手方法:財務省HP「国債金利情報」から加工
http://www.mof.go.jp/jgbs/reference/interest_rate/index.htm
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 20
- 21. 2.1. データの用意
株式データの取得方法
• パッケージ RFinanceYJ を使用
→尐々疑問:どこまでアクセスして良いの???
## パッケージ RFinanceYJ の呼び出し
library("RFinanceYJ")
## (Ticker, 企業名)の2列 リスト。データはHP「日経平均プロフィル」よりコピペ&EXCEL
Nikkei225_ls <- read.csv("Nikkei225_ls.csv", sep=",", header=T)
## とりあえずゼロ行列作成
Nikkei225_close <- matrix(0, nrow=193, ncol=225)
## あとはひたすらループ。配列は怖くてやらなかった
for (i in 1:225){
eval(parse(text=paste("T.", Nikkei225_ls[i,1],
“<- quoteStockTsData('", Nikkei225_ls[i,1], ".t','2011-01-01')", sep="")))
eval(parse(text=paste("Nikkei225_close[,", i,
"] <- T.", Nikkei225[i,1] ,"[,7]", sep="")))
eval(parse(text=paste("rm(T.", Nikkei225_ls[i,1],")", sep="")))
}
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 21
- 22. 2.1. データの用意
脱線:(10/14時点)年初比上昇/下降5傑 を見たい
上昇 下降
銘柄 年初比 銘柄 年初比
9766 コナミ 146.5% 9501 東京電力 11.0%
5233 太平洋セメント 140.7% 6767 ミツミ 39.4%
5232 住友大阪セメント 133.3% 9107 川崎汽船 43.0%
9412 スカパーJ 124.3% 6857 アドテスト 47.1%
9433 KDDI 122.3% 6976 太陽誘電 47.7%
## 列名を付けたいつもり。絶対良い方法があるに決まっている、が…
colnames(Nikkei225_close) <- c(“T.1332”, ~略~,“T.9984”)
## 最終日(10/14) / 年初(1/4) を計算して並び替え
sort_ls <- t(sort( tail(Nikkei225_close, n=1) / head(Nikkei225_close, n=1) ))
## 頭と最後の5件を取得
head(sort_ls ,n=5)
tail(sort_ls ,n=5)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 22
- 23. 2.1. データの用意
後で fPortfolio のために、timeSeries型に変換
## 【前工程】1列目を日付にしたい
## 営業日をPOSIXct型で取得のDUMMY。多分営業日パッケージがある筈
T.1332 <- quoteStockTsData('1332.t',since='2011-01-01', date.end='2011-10-14')
## 結合。1列目のcastが分からず、かなりハマった。
Nikkei225_close <- cbind(Date=as.POSIXct(T.1332[,1]), Nikkei225_close)
## 内容確認
head(Nikkei225_close[1:3])
str(Nikkei225_close[1:3])
## 【ここから本番】
library(timeSeries)
## timeSeriesオブジェクトへ変換
Nikkei225_close.ts <- as.timeSeries(Nikkei225_close)
## 内容確認
head(Nikkei225_close.ts[1:3])
str(Nikkei225_close.ts[1:3])
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 23
- 27. 2.2. ポートフォリオ構築(2資産)
先のソース
## @teramonagi さんのをコピペ改変
## 元ソース:http://d.hatena.ne.jp/teramonagi/20090712/1247387723
# ポートフォリオ用ライブラリロード
library("fPortfolio")
# SUMCO(3436)とコナミ(9766)を抽出
data <- as.timeSeries( cbind(Nikkei225_close.ts$T.3436, Nikkei225_close.ts$T.9766) )
# 作成するフロンティアの条件設定。フロンティア上のポートを100個作成。
conditions <- portfolioSpec()
setNFrontierPoints(conditions) <- 100
# データ、効率的フロンティアの作成
efficientFrontier <- portfolioFrontier(data ,conditions)
# 効率的フロンティアを描画
plot(efficientFrontier,1)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 27
- 29. 2.2. ポートフォリオ構築(2資産)
先のソース
## 今度は日本国債をポートフォリオに追加
# 1年国債データを用意
JGB1YR <- read.table("JGByield.csv", header=F, sep=",")
colnames(JGB1YR) <- c("DATE","YR1")
# 3資産でデータ作成
data <- as.timeSeries( cbind(Nikkei225_close.ts$T.3436, Nikkei225_close.ts$T.9766,
JGB1YR$YR1) )
# 前掲の繰り返し
conditions <- portfolioSpec()
setNFrontierPoints(conditions) <- 100
efficientFrontier <- portfolioFrontier(data ,conditions)
plot(efficientFrontier,1)
# 各2資産を保有した場合をプロット
plot(efficientFrontier,6)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 29
- 32. 2.3. ポートフォリオ構築(多資産)
で、データを対国債比の期待超過リターンに変換
## 単位株・株価数値の水準を揃える。初値を1に基準化し、国債との超過リターンにする
## 平均・分散は各々 (¥mu-国債)/初値, ¥sigma/初値 になる
# 初期化
Nikkei225_adj <- c()
# 初値で割った列ベクトルを次々結合
for (i in 2:226) {Nikkei225_adj <- cbind(Nikkei225_adj,
Nikkei225_close[,i]/Nikkei225_close[1,i])}
# 国債からの超過リターンに変換
Nikkei225_adj <- Nikkei225_adj - JGB1YR[,2]/100
# 営業日をくっつける
Nikkei225_adj <- cbind(Date=as.POSIXct(Nikkei225_close[,1]), data.frame(Nikkei225_adj))
#列名をくっつける
colnames(Nikkei225_adj) <- c("Date","T.1332", ~略~,"T.9984")
## timeSeriesオブジェクトへ変換
Nikkei225_adj.ts <- as.timeSeries(Nikkei225_adj)
Nikkei225_adj.ts <- Nikkei225_adj.ts - JGB1YR[,2]/100
## 内容確認
head(Nikkei225_adj.ts[1:3]); str(Nikkei225_adj.ts[1:3])
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 32
- 35. 2.3. ポートフォリオ構築(多資産)
先のソース
## 3資産での効率的フロンティア
data <- as.timeSeries(
cbind(Nikkei225_adj.ts$T.3436, Nikkei225_adj.ts$T.5201, Nikkei225_adj.ts$T.9766) )
# 作成するフロンティアの条件設定
conditions <- portfolioSpec()
# 効率的フロンティアの作成
efficientFrontier <- portfolioFrontier(data ,conditions)
# 今度は効率的フロンティアの描画関数を使ってみる
tailoredFrontierPlot(efficientFrontier, risk = c("Sigma"), twoAssets=TRUE)
# 接点ポートフォリオを取得
## 余談:get*** なるコマンドで色々な指標が取れる
p.tan <- tangencyPortfolio(data)
getWeights(p.tan)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 35
- 39. 2.3. ポートフォリオ構築(多資産)
ポートフォリオのお値段は、単位株数でしか取引でき
ないため、約3.4億かかる。個人では無理
銘柄 10/14 単位 (A)*(B) 構成
終値(A) 株数(B) 割合
1812 鹿島 259 1,000 259,000 14.5% 鹿島を145,
4502 武田薬品 3,585 100 358,500 40.4% 武田を404,
…として
4503 アステラス 2,865 100 286,500 7.3%
計算
4523 エーザイ 3,085 100 308,500 27.4%
5233 太平洋セメント 152 1,000 152,000 0.5%
6366 千代田化工建設 870 1,000 870,000 4.2%
7751 キャノン 3,445 100 344,500 1.8%
8304 あおぞら銀行 190 1,000 190,000 3.9%
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 39
- 40. 2.4. CAPM (Capital Asset Pricing Model)
そういえば、こんなお話がある
【CAPM第一定理】安全資産があると、市場の均衡状態では
マーケット・ポートフォリオ(後述)は接点ポートフォリオと一致。
よって、マーケット・ポートフォリオは効率的ポートフォリオ
リ
タ マーケット・ポートフォリオ
ー
ン = 接点ポートフォリオ
ポートフォリオ
国債
2011/10/22
リスク
Rで学ぶ現代ポートフォリオ理論入門 40
- 41. 2.4. CAPM
【マーケット・ポートフォリオ】市場に供給されるすべての証券
のバスケット → 日経平均?
ならば、日経平均 vs お手製ポートフォリオを比較しよう
## 日経平均取得
library("RFinanceYJ")
N225 <- quoteStockTsData('998407.O',since='2011-01-04', date.end='2011-10-14')
## 作成ポートフォリオの系列作成
data <- as.timeSeries(cbind(
0.1450 * Nikkei225_adj.ts$T.1812 + 0.4040 * Nikkei225_adj.ts$T.4502
+ 0.0734 * Nikkei225_adj.ts$T.4503 + 0.2742 * Nikkei225_adj.ts$T.4523
+ 0.0053 * Nikkei225_adj.ts$T.5233 + 0.0417 * Nikkei225_adj.ts$T.6366
+ 0.0177 * Nikkei225_adj.ts$T.7751 + 0.0388 * Nikkei225_adj.ts$T.8304) )
## 日経平均と、作成ポートフォリオの結合作業
N225 <- cbind( Date=as.POSIXct(N225[,1]) , data.frame(N225[,5]/N225[1,5] - JGB1YR[,2]/100) ,
data.frame(data) )
N225.ts <- as.timeSeries(N225); colnames(N225.ts) <- c("Nikkei225","Create")
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 41
- 43. 2.4. CAPM
最適ポート探索は10/14までのデータを使用。この構
成比で、10/20終値に当ててみる
項目 日経平均 お手製
勝
リターン(平均値) -7.29% 0.17%
イン か利
リスク(標準偏差) 6.31% 1.22% な、
サンプル で
【参考】相関係数 0.335
…
アウト リターン(平均値) -7.51% 0.29% ?い
い
サンプル リスク(標準偏差) 6.38% 1.21% の
留意事項
• 東日本大震災のショック有、CAPMの前提が成立?
• 所要3.4億円 等々
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 43
- 44. 3.1. まとめ
• 相関係数が小さい程、リスク削減効果が大きくなる
• 【トービンの分離定理】安全資産があると、効率的
ポートフォリオは、安全資産と接点ポートフォリオの
組合せで実現可能
• RFinanceYJを使用し東証の株価を取得し、
fPortfolioを使って効率的ポートフォリオを作成
• 【CAPM第一定理】マーケット・ポートフォリオは効率
的ポートフォリオ → を確認しようとした
※ CAPM第一定理があるので、当然?CAPM第二定理
(βの話)もあるが、今回は準備時間切れで放置
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 44
- 45. 3.2. 参考資料
【ファイナンス理論】
• 「一人で学べるファイナンス理論」佐野三郎
http://selflearn.web.infoseek.co.jp/
• 2011年証券アナリスト1次レベルテキスト 第3回
「現代ポートフォリオ理論」、小林孝雄、本多俊毅
【R初心者が使った資料】
• R-Tips,舟尾 暢男
http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
• 以下Blogから引用コピペ
里さん(@ yokkuns) http://d.hatena.ne.jp/yokkuns/
てなもなぎさん(@teramonagi)
http://d.hatena.ne.jp/teramonagi/
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 45