Your SlideShare is downloading. ×
R stan導入公開版
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

R stan導入公開版

313
views

Published on

Rstanのインストール,簡単な使い方を紹介しています

Rstanのインストール,簡単な使い方を紹介しています

Published in: Education

0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
313
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. RStanの導入 & 基本的な使い方 小杉考司(山口大学教育学部)
  • 2. 自己紹介 • 小杉考司(こすぎこうじ) • 山口大学教育学部 • 専門;数理社会心理学 • kosugi@yamaguchi-u.ac.jp • Twitter; @kosugitti
  • 3. お品書き • RStanのインストール • RStanをつかってみましょう • 実践!世界一,二番目に簡単なRStanコード
  • 4. 対象 • ベイズ推定/MCMCを使ってみたいなぁと最近思い 始めた人 • コンピュータプログラミングは敷居が高いと思うん だけど,R言語ぐらい(の難易度)なら頑張って書い てみようと思っている人
  • 5. MCMC使ってみたい! • 商用ソフトの一機能として;Amos, Mplus • BUGS(WinBUGS,OpenBUGS,JAGS) • Bayesian inference Using Gibbs Sampling • ギブスサンプリングを使ったベイズ推定 • 残念ながら開発が終わっちゃったみたい
  • 6. Stan登場 • ハミルトニアン・モンテカルロ法, Not-U-Turnテクニックなど新しい手法 を取り入れたMCMCエンジン • 高速で収束しやすいのが売り スタニスワフ・マルチン・ウラム (Stanistaw Marcin Ulam,1909-1984) モンテカルロ法を考案(命名はノイマン)
  • 7. Stanの特徴 • コンパイル後の計算が速い • NUTSなので収束が速い • 手続き型でわかりやすい • 公式マニュアルが結構丁寧 • 様々な環境に対応 • RStan,PyStan,CmdStan,MatlabStan,Stan.jl…いずれstataにも
  • 8. Stanの特徴 • コンパイル後の計算が速い,とは ! 人間がわかる 言葉 機械がわかる言葉に 翻訳=コンパイル ネイティブなので 理解が早いです ∼
  • 9. Stanの特徴 ∼
  • 10. RStanの導入 • パッケージとしてCRANからダウンロード・・・と 行けるようになったらいいんだけど,まだ(́Д` ) • でもたった3行のコードを走らせるだけで入る。 • ただし,C++環境も同時に用意しなければならない
  • 11. Rstanのインストール
  • 12. 必要なルートを見ててね C++導入部Rは導入済み RStanへ
  • 13. RStan導入 ∼Windows編∼ • RtoolsをRと合わせてインストールしておく必要が あります。 • http://cran.r-project.org/bin/windows/Rtools/ • Rのバージョンに合わせたものをダウンロードして おくこと!
  • 14. RStan導入 ∼Windows編∼ • Rtoolsをインストールするとき,「パス」の編集の ステップに注意。 C++コンパイラがRtoolsに含 まれていますが,「パスの編集」 の時にチェックが入ってないと 動かなくなっちゃいます。
  • 15. RStan導入 ∼Windows編∼ • Rtoolsがちゃんと入ったかどうかのチェックをして おくと万全! >Sys.getenv(‘PATH’) >system(‘g++ -v’) >system(‘where make’)
  • 16. RStan導入 ∼Mac編∼ • Rは入っているものとして • C++環境はXcodeと呼ばれるツールにあります • OS X 10.9 Marvericks ,10.8 Mountain Lion • App Storeで「Xcode」を検索してダウンロード&イ ンストール • OS X 10.7 Lion , 10.6 Snow Leopard • Apple Developerに登録(無料)して,Xcodeと Command-Line Toolsをダウンロード&インストール
  • 17. RStan導入 ∼Luinux編∼ • sudo apt-get install build-essential
  • 18. ここからコードは3行 • Sys.setenv(MAKEFLAGS = "-j4") • source('http://mc-stan.org/rstan/install.R', echo = TRUE, max.deparse.length = 2000) • install_rstan() のサイトからコピペしたほうが早い https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started
  • 19. ここからコードは3行 • インストールには少し時間(5∼30分ぐらい?)が かかります。 • これは各環境でRStanをコンパイルしながら進むか らです。 • Macで警告が出ることがありますが,「この機能は 使ってないから問題ないよ」by作者とのこと。
  • 20. インストールが終わったら • 一旦Rを終了→再起動して使います。 • あとは
  • 21. RStanを つかってみましょう
  • 22. サンプルを見てみる • まずはStan公式サイトにある公式サンプルコード, eight schoolsをやってみましょう。 • 中身の説明はあとまわしで,まずRStanの挙動をみ てみたいとおもいます。
  • 23. 八学校 このコードをメモ帳に Copy&Pasteし, 8schools.stan という ファイル名で保存 このコードを  で実行
  • 24. 八学校 何かじーっとしてると思ったら・・・
  • 25. 八学校 なんかいっぱい出た
  • 26. で,何が起こったの? • 結果を確認してみる。 • 平均値,パーセンタイル,Rhatなどが出る。
  • 27. で,何が起こったの? • >traceplot(fit,ask=T)
  • 28. で,何が起こったの? • >plot(fit)
  • 29. の使い方
  • 30. おちついて見てみよう • 上の部分は,リスト型のデータを作っているだけ • 下の部分がstanという関数でstanを呼んでいる
  • 31. おちついて見てみよう • さらによくみると,stan関数には • stanファイル • データ    • iter    • chains • を渡している ←おそらくstanのひみつ ←1000サンプリング(反復回数) ←さっき見たN=8のデータセット ←4セットやる
  • 32. おちついて見てみよう ←1000回サンプリング ←4セット目 Warmup=Burnin デフォルトでは サンプリング回数の 半分を当てる
  • 33. stanファイルの構成 四つのセクションに分かれている
  • 34. stanファイルの構成 データセクション 外部から受け取るデータに対応 int(整数型)や real(実数型)などを指定 <lower=0>は非負の数,という指定(メモリ節約) 大かっこ[]はベクトルであることとそのサイズを意味する。
  • 35. stanファイルの構成 パラメタセクション 今から組みたいモデルで使うパラメタを宣言 実数型とか,非負であるとかの指定ができる。 ベクトルで宣言したほうが効率的(後述)。 ここではmuとtauとetaを使う,としている。
  • 36. stanファイルの構成 モデルセクション パラメタとその変換セクションで宣言したもので モデルを書く。 etaは平均0分散1の正規分布に従う,とある。 データyは平均thetaと分散sigmaに従う。 theta?
  • 37. stanファイルの構成 パラメタ変換セクション データとパラメタの橋渡し。 今回はthetaというパラメタを新しく作っている。 それは(mu+tau*eta[j])の別名。 これを直接モデルに書いてもいいけど,わかりやすくするた めに書き直している。  for文は反復を意味するC言語的表現。
  • 38. stanファイルの構成
  • 39. モデルと分布 ここで 残差が正規分布する,ということに注目すると 左側のところは平均に関するモデルなんだから
  • 40. モデルと分布 ほぼそのまま書いている 丁寧に全部書いたらこうなる
  • 41. モデルと分布 j回同じ式を繰り返すのは 無駄なので省略(ベクトル化) ここがなんか長いのでtheta にまとめちゃった
  • 42. Stanの文法 • ブロックを中かっこ{}でくくる • ブロックは6つ。全部なくてもいいけど,順番を変 えちゃダメ。 • data/transformed data • parameters/transformed parameters • model • generated quantities • コードの終わりはセミコロン;で
  • 43. Stanの文法 • data{} / transformed data{}セクション • 外部から読み込むデータの型やサイズを宣言 • 以後の分析でデータを書き換えるのがtransdormed dataセクション • 例えばローデータを読み込んで中でCov行列に変え てから使ったりできる。
  • 44. Stanの文法 • parameters/transformed parametersセクション • 推定するパラメタの宣言 • モデルでパラメタを書き換えるのがtransdormed parameterセクション
  • 45. Stanの文法 • modelセクション • これがないと始まらない • generated quantities • 推定値を変換して使いたい数字にして出力 • 例)項目反応理論の項目母数の形に変えるなど
  • 46. Stanの文法;宣言 • 整数型は int,実数型はreal • <lower=0>や<upper=1>などで制限をかけられる • real<lower=0,upper=1> eta; • ベクトルや行列で宣言することもできる • vector<lower=0>[3] y; • matrix[M,A] L; • vector[A] F[N]; 詳しくはstan-reference2.6.0.pdfをみてね
  • 47. Stanの文法;文 • 使える確率分布の一例 • 正規分布;y~normal(mu,sigma); • コーシー分布;y~cauchy(mu,sigma); • 二項分布;y~binominal(N,theta); • 逆ガンマ分布;y~inv_gamma(alpha,beta); 詳しくはstan-reference2.6.0.pdfをみてね
  • 48. RでStanを使うとき • Rの文中にstanコードを書き入れてもいい。 ∼ 中略 ∼ クォーテーションで括る stan関数にコードを引き渡す時の書き方
  • 49. RでStanを使うとき • parallelパッケージで並列化も(高速化するかな?) 8コア使った4鎖の例(Mac/Linux) 詳しくは公式サイトに https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started ※Windowsでは書き方が少し異なります
  • 50. 実践! 世界一,二番目に簡単なRStanコード
  • 51. 分布で考える • 従来型の統計をやってきた人にとって違和感を覚え る最初のポイント • パラメータが分布する? • モデルがどんな分布を仮定するか誰も教えてく れなかった(どうせ正規分布なんでしょ?)
  • 52. 頻度論vsベイズ (c)岡田先生 頻度論 ベイズ 母数θ 定数 確率変数 データy 確率変数 定数
  • 53. 分布で遊んでみたら わかりやすいかも
  • 54. 世界一簡単なrstanコード •   には様々な分布に基づいて乱数を発生させる関 数が用意されている。 • 分布に基づいて発生させた乱数データで,stanが分 布を推定するかどうか確かめるという遊び。
  • 55. http://kosugitti.net/archives/4823 世界一簡単なrstanコード rstanを読み込みます 平均mu,分散sigの正規乱数に従う データをn個つくります。
  • 56. http://kosugitti.net/archives/4823 世界一簡単なrstanコード T個のデータを読み込み, Nとします。 推定したいパラメタは 平均と分散です。 分散は非負です。 データは正規分布, 分散はコーシーに従います
  • 57. http://kosugitti.net/archives/4823 世界一簡単なrstanコード データをリストで渡します 1000回サンプリングを 4セットやります。
  • 58. 世界一簡単なrstanコード データ通りにでてます。
  • 59. 二番目に簡単なrstanコード http://qiita.com/hoxo_m/items/ad4ffb091aec535f3125
  • 60. 二番目に簡単なrstanコード http://qiita.com/hoxo_m/items/ad4ffb091aec535f3125
  • 61. 二番目に簡単なrstanコード http://qiita.com/hoxo_m/items/ad4ffb091aec535f3125
  • 62. 最尤推定との比較
  • 63. Tips • alpha,betaに事前分布を置いてやるとなお良い • stanは明示的に事前分布を指定しないと,一様 分布を当てはめる
  • 64. 慣れてきたでしょうか?
  • 65. 世界一簡単な 収束しないrstanコード • 逆にどういうことをしたら収束しないのか?という のを知るのもいい勉強になる。 http://goo.gl/ZafBgX 例1
  • 66. 世界一簡単な 収束しないrstanコード http://goo.gl/ZafBgX 例2
  • 67. stanの恩恵 • 分布を考える,初期値をうまく置くなど,確かにコ ツがいることは否定できない。 • しかし,考えることがかなり少なくて済むようになっ たこと喜ぼう。 • stanは対数尤度関数を書かなくても良い!
  • 68. ex)回帰分析の最尤法 http://goo.gl/5LY9N9 NY i=1 1 p 2⇡ 2 exp( ei 2 2 ) N 2 log(2⇡ 2 ) 1 2 2 NX i=1 e2 i 尤度 対数尤度 そのまま 書ける
  • 69. 書きたくない • これで許してくれる これはすごいことです。
  • 70. Enjoy ! and ねえちゃん,明日って,今さ!