🔖
nutpie の R 版こんな感じでつくれそう、というメモ
nutpie は PyMC でも Stan でも書けるけど、Stan の方だけなら R でもできたりしないかな?と思って調べてみた(ので、誰か作ってください)
README の Usage with Stan というところを見ると、 bridgestan という Python モジュールを使ってるっぽい。
bridgestan というのはこれで、Stan モデルのメソッドにアクセスできるというものらしい。
Python だけでなく、R、Julia、Rust の binding がある。nutpie は Python パッケージを使ってたけど、Rust 版を使った方が受け渡しが Rust 内で完結してよさそうな感じもするけどどうなんだろう。
さて、README の例に戻って、こういう感じなので、関数を3つ実装できればとりあえず動きそう。
compiled = nutpie.compile_stan_model(code=code)
compiled = compiled.with_data(mu=3.)
trace = nutpie.sample(compiled)
compile_stan_model()
これは基本的には bridgestan の compile_model()
を呼び出してるだけっぽい。結果は CompiledStanModel
というクラスのオブジェクトになっている。
with_data()
ここは上記のオブジェクトのパラメータを書き換えたコピーを作っているだけ。
nutpie.sample()
このあたり。
_BackgroundSampler
をつくるときに、CompiledStanModel._make_sampler()
が呼ばれている。それはこのあたり。
この PySampler.from_stan()
は Rust にある関数。
Model は、bridgestan の Model をラップして nuts-rs の Model
trait を実装しないといけない。
というか、たぶんこの辺のラッパーは似たようなものを実装しないといけないので、思ったよりコードを書く必要がありそう。
Discussion