【備忘録】rethinkingパッケージのstanコードを出力する方法

ちょいと前に、stanコードの確認&写経がしたくて、以下の書籍を買いました。



が、パラパラパラーっと頁をめくっても、rethinkingパッケージのコードが見つかるばかりで、肝心のstanコードがみつからず。

rethinkingパッケージから取りだす方法があるだろうと思ったら、やっぱりありました。

以下のサイトにのっていますが、ぼく自身が忘れたときのために、このblogにも残しておきます。

https://github.com/rmcelreath/rethinking


1.rethinkingパッケージのインストール

まずパッケージの入手は以下のコードを実行します。

install.packages(c("coda","mvtnorm","devtools","loo"))
library(devtools)
devtools::install_github("rmcelreath/rethinking")

2.stanコードの取り出し方

例として、上記のサイトのモデルをそのまま実行します。

library(rethinking)

fit.stan <- 0="" 10="" 1="" alist="" code="" dcauchy="" dnorm="" mu="" sigma="" y=""><- chains="4," cores="4," data="list(y=c(-1,1))," f="" fit.stan="" font="" iter="2000," map2stan="" nbsp="" start="list(mu=0,sigma=1)," summary="" warmup="1000)">

上記のモデルを実行したら、以下のコードを走らせます。

rethinkingパッケージからのstanコードの出力はこれでOKです。

stancode(fit.stan)

例えば、上記のモデルの背後にあるstanコードは以下になります。

data{ int  N;
 real y[N];
}
parameters{
 real mu;
 real sigma;
}
model{
 sigma ~ cauchy(0, 1);
   mu ~ normal(0, 10);
 y ~ normal(mu, sigma);
}
generated quantities{
 real dev;
 dev = 0;
 dev = dev+(-2)*normal_log(y, mu, sigma);
} 
以上です。