pystan ライブラリがない???
書籍『AI・データ分析モデルのレシピ』は Python 上で動く各種機械学習モデルについてサンプルデータを用いながら解説している。
第3章で pystan を用いた重回帰分析を行っているが、公式サイトが提供しているJupyterファイルを Google Colab 上で動かしても pystan が見つからないとエラーになってしまう。
公式サイトの正誤表には何ら記載が無く、サポートも期待できない(初版2021年6月であり、3年半もサポートすることは難しいか)。
ということで、ネットの情報をもとにコードを修正して動かせないか試すことにした。
ライブラリ名は stan に変更、エラー回避も必要
まずライブラリが見つからない件は、ライブラリ名の変更が理由だとわかった。
インストールするモジュールは pystan であるが、 import するライブラリ名は stan に変わってしまった。
(ちなみに pystan は Google Colab に最初からインストールされなくなったようなので、 !pip install pystan
で手動インストールが必要である。)
関数も変わっており、 pystan.stan
を stan.stan
に変更しても動かない。
pystan Getting Start を参考に
fit = pystan.stan(model_code=model, data=dat, seed=12345)
をいったん
fit = stan.build(model, data=dat, random_seed=12345)
に修正する。
asyncio.run()
でエラーが発生してしまうので、
を参考に
import nest_asyncio
nest_asyncio.apply()
stan 関数→build + sample
これでエラーは発生しないように見えるが、それ以降の arviz によるサンプリング結果の可視化が全く動かない。
さらにネットの情報を探すと、以下のページが見つかった。
このページのソースコードによると、モデルの実行は
sm = stan.build(model, data=dat, random_seed=12345)
fit = sm.sample()
というように、モデル作成とサンプリングの2つに分けてやらないといけないようだ(おそらく前者はpystan.stanModel関数に相当するのだろう)。
要約統計量の出力も print だけではダメ
これで arviz によるサンプリングの可視化はできるようになった。
が、今度は最後の各種統計量が表示されない。
「Stan (PyStan 3) 事始め」のページを再度参照し、 arviz を使って
print(fit)
を
i_data = arviz.from_pystan(posterior = fit, posterior_model = sm)
smry = arviz.summary(i_data)
print('Summary =\n',smry)
これで無事統計量も表示できた。
なお、表示される要素が print(fit)
の結果(以下参照)と若干異なるため、同一の要素を表示したい場合は arviz のドキュメントを参照する等、さらに調べる必要がある。