📑

RをPythonで実行⁉CmdStanPyを使ってみよう!

に公開

0.はじめに

本記事はDAL Tech Blog Advent Calendar 2025として投稿しました。全ての記事は以下からご確認いただけます。

https://adventar.org/calendars/12288

私はデータサイエンティストとして働いています。業務ではPythonを使ってベイズ統計(MCMCなど)に基づいた分析をしています。その中で調べ物をしていると、参考のコードがR言語だったり、使いたい機能がR言語にしかないなどということに度々直面します。
もちろんRが使えるにこしたことはありませんが、Pythonに慣れ親しんだ身からすると、ウッとなることがあります(笑)
そこで今回私が紹介したいのがCmdstanpyです。これは端的に言えばRをPython上で実行できるよーということです。デメリットやセッティングに時間がかかるなどはありますが、この記事で可能な限り分かりやすく説明していきます。

1.CmdStanPyとは

Stan公式のコマンドライン版である「CmdStan」を、Pythonから操作できるようにした公式ラッパーライブラリです。これにより、StanモデルをPythonから実行することができ、推定結果をNumPy/pandas形式で取得しmatplotlibやseabornで可視化することが可能になります。
そのため、タイトルで「RをPythonで実行⁉」とありますが、Rを直接Pythonで走らせている訳ではなく、「Rで使っていたStanをPythonから実行できる」という意味になります。
↓公式チュートリアルです。
https://mc-stan.org/cmdstanpy/

Stan、CmdStanPyの関係

まず押さえておきたいのが、StanとCmdStanPyは別物だという点です。
Stanは、ベイズ統計モデルを記述するための「確率的プログラミング言語」で、回帰や階層モデルなどを数式に近い形で書けるのが特徴です。
Stanそのものは「言語」であり、単体で実行環境を持つわけではありません。そのStanを実際に計算できる形にした公式実装がCmdStanです。

2.CmdStanPyのインストール方法

Python環境でCmdstanpyを導入して、Stanを実行可能な状態にするまでを解説します。

pipでインストール
pip install cmdstanpy
CmdStan本体のインストール

以下のコードを1回実装してください。

from cmdstanpy import install_cmdstan
install_cmdstan()
インストールの確認

Cmdstanが正しく動いているか確認します。

from cmdstanpy import cmdstan_path
print(cmdstan_path())

cmdstan-2.xx.xのようなパスが表示されれば成功です。

3.実際に動かしてみる

今回は分かりやすさ重視のため、簡単な1次関数の予測を実例として取り上げたいと思います。

予測に用いるstanモデルです。

data {
  int<lower=0> N;
  vector[N] x;
  vector[N] y;
}
parameters {
  real alpha;
  real beta;
  real<lower=0> sigma;
}
model {
  y ~ normal(alpha + beta * x, sigma);
}

ここまできたらあとはサンプリングを行うだけです。

# 実行
model = CmdStanModel(stan_file=r"YOUR_FILE")
fit = model.sample(data=data)

YOUR_FILEにはstanのパスを入れてください。これで学習は完了です。
最後に実際にうまく学習が完了したかを確認してみます。

うまくパラメータが収束していますね。最後に予測を確認してみます。

いいですね!実際の観測データのほとんどが95%信頼区間内にあることがみてとれます。

4.つまずきポイント

私が実際につまずいたのが、.stan ファイルのパス指定でした。
Stanモデルを読み込む際、model = CmdStanModel(stan_file="model.stan")のようにファイルパスを指定しますが、ファイル名やディレクトリパスに日本語(全角文字)が含まれていると、コンパイル時にエラーが発生することがあります。
私の環境では、

  • モデルファイル名に日本語が含まれていた
  • 日本語を含むフォルダ配下で実行していた

という条件下で、CmdStanのC++コンパイル時のパス処理に問題が起き、正常にビルドされませんでした。

5.まとめ

CmdStanPyは、Stanの公式コマンドライン実装であるCmdStanをPythonから操作するための軽量なラッパーで、シンプルかつ安定している点が非常に魅力的です。
Stanのモデルファイル(.stan)はRStanで使っていたものをそのままPythonで流用できるため、サイトや書籍に記載されているコードをPythonでそのまま実装できます。

DAL Tech Blog

Discussion