Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18

horihorio
October 22, 2011

Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18

horihorio

October 22, 2011
Tweet

More Decks by horihorio

Other Decks in Science

Transcript

  1. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 2 0.1. 自己紹介 >My.Profile $TwitterID *1+ “horihorio” $出身地

    *1+ “日本各地転々” $これまでの仕事 *1+ “統計分析@金融” *2+ “主にリスク管理系” $お勉強中 *1+ “DB, IFRS” $性格 *1+ “暇人” *2+ “物好き” $経験アリ統計ソフト *1+ “IBM SPSS” *2+ “IBM Modeler” *3+ “Matlab” *4+ “SAS” $R使用歴 *1+ “1ヶ月←え?”
  2. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 4 ◇ 全体構成 ◇ 1. 理論編 1. 投資のリターン

    2. 投資のリスクの考え方 3. リスク&リターンの考え方 4. トービンの分離定理 2. 実践編 1. データの用意 2. ポートフォリオ構築(2資産) 3. ポートフォリオ構築(多資産) 4. CAPM
  3. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 5 1.1. 投資のリターン 投資対象が2つの場合、リターンは以下のとおり (カラ売り) でも は、 個々の

    だが、 投資比率は への投資比率 資産   からのリターン 資産   OK 0 1 2 2 1 1        i i i i i P w w w i w i R R w R w R
  4. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 8 1.2. 投資のリスクの考え方 (とりあえず)リスクを、リターンの標準偏差とする リ ス ク (

    標 準 偏 差 ) 【追記】Rって幾何ブラウン運動によるパス生成が楽、と思うと@teramonagi さん が紹介済だった。 http://d.hatena.ne.jp/teramonagi/20101117/1289950470
  5. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 9 2資産に投資した時のリスク(σ)を求めると、 2 1 2 1 2 2

    2 2 2 1 2 1 2 2 1 12 12 2 1 2 2 2 2 2 1 2 1 2 2 2 1 1 2 ) ( , 2                w w w w w w w w R w R w R P ij P P             を導入し 相関係数  共分散)   標準偏差   (  なので 1.2. 投資のリスクの考え方
  6. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 10 (再掲)例1:資産1のリターンの標準偏差が18%、資 産2の期待リターンが12%、相関はゼロとする 010368 . 0 12 .

    0 6 . 0 18 . 0 4 . 0 2 2 2 2 2 2 1 2 1 2 2 2 2 2 1 2 1 2              w w w w P % 2 . 10 010368 . 0   P  よって、 1.2. 投資のリスクの考え方
  7. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 11 (再掲)例2:資産1のリターンの標準偏差が18%、資 産2の期待リターンが12%、相関はゼロとする 2 1 2 2 1

    2 2 1 2 1 2 2 2 2 2 1 2 1 2 ) 1 ( 12 . 0 18 . 0 2 w w w w w w P            1.2. 投資のリスクの考え方
  8. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 12 あれ?何か下に凸な放物線のような 2 1 2 1 2 2

    2 1 1 2 1 2 1 2 2 2 2 2 1 2 1 2 ) 1 ( 2 ) ( 2           w w w w w w w w P        1.2. 投資のリスクの考え方 2 2 1 1 1 1      w w P i      なので は非負、 この式の解釈:分散投資をすれば、個別投資よりリス クを削減することが出来る。
  9. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 19 ◇ 全体構成 ◇ 1. 理論編 1. 投資のリターン

    2. 投資のリスクの考え方 3. リスク&リターンの考え方 4. トービンの分離定理 2. 実践編 1. データの用意 2. ポートフォリオ構築(2資産) 3. ポートフォリオ構築(多資産) 4. CAPM
  10. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 20 【データ準備】 1. 株式 • データ:東証1部株式 各日調整後終値 •

    母集団:日経225採用銘柄 • 期間:2011/1/4~10/14(193営業日) • 入手方法:次のスライドで 2. 安全資産:日本国債 • データ:1年物日本国債利回り • 入手方法:財務省HP「国債金利情報」から加工 http://www.mof.go.jp/jgbs/reference/interest_rate/index.htm 2.1. データの用意
  11. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 21 株式データの取得方法 • パッケージ 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=""))) } 2.1. データの用意
  12. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 22 脱線:(10/14時点)年初比上昇/下降5傑 を見たい 銘柄 年初比 9501 東京電力 11.0%

    6767 ミツミ 39.4% 9107 川崎汽船 43.0% 6857 アドテスト 47.1% 6976 太陽誘電 47.7% 上昇 下降 銘柄 年初比 9766 コナミ 146.5% 5233 太平洋セメント 140.7% 5232 住友大阪セメント 133.3% 9412 スカパーJ 124.3% 9433 KDDI 122.3% ## 列名を付けたいつもり。絶対良い方法があるに決まっている、が… 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) 2.1. データの用意
  13. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 23 後で fPortfolio のために、timeSeries型に変換 2.1. データの用意 ## 【前工程】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])
  14. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 24 試しに、相関が低いのを探してみる 2.2. ポートフォリオ構築(2資産) ## 相関行列(225×225)を作成。計算はほぼ一瞬なのね。へぇ。 tmp <-

    cor(Nikkei225_close.ts) ## 最小値とその値を出す組み合わせを探す。 min(tmp) ## 最小値 which(tmp==min(tmp), arr.ind=TRUE) ## 最小値を出す列名取得 結果: SUMCO (3436) と コナミ (9766‎ ) で、 相関係数は、 -0.899 ※SUMCO:住友金属と三菱マテリアルのシリコンウエハ事業統合、 コマツ系も合流。半導体用世界首位級(YJ Financeより)
  15. 2011/10/22 27 先のソース ## @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) Rで学ぶ現代ポートフォリオ理論入門 2.2. ポートフォリオ構築(2資産)
  16. 2011/10/22 29 ## 今度は日本国債をポートフォリオに追加 # 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) Rで学ぶ現代ポートフォリオ理論入門 先のソース 2.2. ポートフォリオ構築(2資産)
  17. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 31     CML P F

    P F CML r r E r r E r        とすると 、リターンを リスクを 国債とポートフォリオとの接点を結ぶ線を資本市場 線といい、式で書くと、こんな感じ: 引数の意味: CML→資本市場線 F →安全資産 P →株の組合せ(ポートフォリオ) 切片:国債 分子:期待超過リターン • リスク・プレミアム • シャープ比 という 2.2. ポートフォリオ構築(2資産)
  18. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 32 で、データを対国債比の期待超過リターンに変換 ## 単位株・株価数値の水準を揃える。初値を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]) 2.3. ポートフォリオ構築(多資産)
  19. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 33 次は3資産を考える。 SUMCO (3436) , コナミ (9766‎ )

    に、旭硝子 (5201) 追加←コナミと2番目に低い相関 (-0.887) SUMCO(3436) コナミ(9766‎ ) 旭硝子(5201‎ ) 2.3. ポートフォリオ構築(多資産)
  20. 2011/10/22 35 ## 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) Rで学ぶ現代ポートフォリオ理論入門 先のソース 2.3. ポートフォリオ構築(多資産)
  21. 2011/10/22 37 で、日経225銘柄を全部投入。接点ポートフォリオの 結果は以下のとおり Rで学ぶ現代ポートフォリオ理論入門 2.3. ポートフォリオ構築(多資産) 銘柄 組入割合 1812

    鹿島 14.5% 4502 武田薬品 40.4% 4503 アステラス 7.3% 4523 エーザイ 27.4% 5233 太平洋セメント 0.5% 6366 千代田化工建設 4.2% 7751 キャノン 1.8% 8304 あおぞら銀行 3.9%
  22. 2011/10/22 39 ポートフォリオのお値段は、単位株数でしか取引でき ないため、約3.4億かかる。個人では無理 Rで学ぶ現代ポートフォリオ理論入門 2.3. ポートフォリオ構築(多資産) 銘柄 10/14 終値(A)

    単位 株数(B) (A)*(B) 構成 割合 1812 鹿島 259 1,000 259,000 14.5% 4502 武田薬品 3,585 100 358,500 40.4% 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% 鹿島を145, 武田を404, …として 計算
  23. 2011/10/22 41 【マーケット・ポートフォリオ】市場に供給されるすべての証券 のバスケット → 日経平均? ならば、日経平均 vs お手製ポートフォリオを比較しよう Rで学ぶ現代ポートフォリオ理論入門

    2.4. CAPM ## 日経平均取得 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")
  24. 2011/10/22 43 最適ポート探索は10/14までのデータを使用。この構 成比で、10/20終値に当ててみる Rで学ぶ現代ポートフォリオ理論入門 2.4. CAPM 項目 日経平均 お手製

    イン サンプル リターン(平均値) -7.29% 0.17% リスク(標準偏差) 6.31% 1.22% 【参考】相関係数 0.335 アウト サンプル リターン(平均値) -7.51% 0.29% リスク(標準偏差) 6.38% 1.21% 留意事項 • 東日本大震災のショック有、CAPMの前提が成立? • 所要3.4億円 等々 勝 利 、 で い い の か な … ?
  25. 2011/10/22 44 3.1. まとめ • 相関係数が小さい程、リスク削減効果が大きくなる • 【トービンの分離定理】安全資産があると、効率的 ポートフォリオは、安全資産と接点ポートフォリオの 組合せで実現可能

    • RFinanceYJを使用し東証の株価を取得し、 fPortfolioを使って効率的ポートフォリオを作成 • 【CAPM第一定理】マーケット・ポートフォリオは効率 的ポートフォリオ → を確認しようとした Rで学ぶ現代ポートフォリオ理論入門 ※ CAPM第一定理があるので、当然?CAPM第二定理 (βの話)もあるが、今回は準備時間切れで放置
  26. 2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 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/