Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

R stan導入公開版

28,873 views

Published on

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

Published in: Education
  • Be the first to comment

R stan導入公開版

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

×