Up

PyStan 3Windowsでの利用

 

PyStan 3は、直接Windows上で実行できないが、WindowsにインストールされたUbuntu上では実行できる。

UbuntuWindowsへのインストールは、このウェブサイトで説明している。

WindowsWSLによりインストールしたUbuntuにおいてminicondaをインストールすると使い易い。Minicondaに作成したPython仮想環境においてPyStan 3を利用すればよい。Anacondaの簡易版であるminicondaのインストールは、このウェブサイトで説明している。

 

PyStan 3の利用例を示すが、スクリプトはリスト1リスト2に分けられている。リスト1においてPyStan3が利用されているが、Python3.12/miniconda/Ubuntu/WSL/Windowsにおいて実行した。WSLではGUIが利用できなかったので(2025.01)、リスト1におけるPyStan 3によるMCMCサンプルをファイルに保存して、Windows上でのPythonにより、保存されたMCMC
サンプルのグラフ表示を行った。リストの実行例を以下に示す。

 

 

リスト1の実行

 

リスト1のスクリプト(sample.py)は、PyStan3を利用しているので、miniconda/Ubuntu24/WSL/Windows10Python 3.12仮想環境で実行した。

スクリプトは、次のコマンドで実行された。

 

(py312) yasuharu@PSY-PM-PC:/mnt/*****/files$ python sample.py

 

実行が終わると、以下のメッセージが端末に出力される。

 

<stan.Fit>

Parameters:

    p: ()

Draws: 4000

fit.pkl was saved.

(py312) yasuharu@PSY-PM-PC:/mnt/*****/files$

 

MCMCサンプルは、Pandas DataFrameの形式でファイルfit.pklに保存される。

MCMCサンプルのグラフを表示するために、リスト2のスクリプトdisplay.pyWindows上で実行した。すなわち、Python3.12/Windows10において実行した。

 

 

リスト2の実行

 

リスト2のスクリプトdisplay.pyPython3.12/Windows10において実行すると、リスト1の実行において出力されたファイルfit.pklが読み込まれる。

ファイルfit.pklの読み込み後、パラメータpの事後分布のグラフが表示される。

 

 

 

MCMCサンプリングの統計量は、Arvizを利用すると得ることができるが、これはリスト1の実行時に行う必要がある。リスト1のスクリプトに統計量を求めるコードを追加した例をリストに示す。リスト3のスクリプトを実行するときは、scipyのバージョンを1.12.0にする必要がある。これは、コマンド

 

conda install scipy=1.12

 

により、インストールあるいは上書きされる。

 

リスト3を実行すると、以下の出力が端末に表示される。

 

<stan.Fit>

Parameters:

    p: ()

Draws: 4000

fit.pkl was saved.

    mean     sd  hdi_3%  hdi_97%  mcse_mean  mcse_sd  ess_bulk  ess_tail  r_hat

p  0.667  0.129   0.436      0.9      0.003    0.002    1499.0    2073.0    1.0

(py312) yasuharu@PSY-PM-PC:/mnt/*****/files$

 

 

 

リスト1 MCMCサンプリング(sample.py

 

import stan

import pickle

 

stan_code = """

    data {

        int n;

        int k;

    }

    parameters {

        real<lower=0, upper=1> p;

    }

    model {

        k ~ binomial(n, p);

    }

"""

 

sm = stan.build(stan_code, {'n':10, 'k':7})

fit = sm.sample()

print(fit)

dframe = fit.to_frame()           # MCMCサンプルをPandas DataFrameにまとめる

with open('fit.pkl', 'wb') as f:  # DataFrameをファイルfit.pklに保存

    pickle.dump(dframe, f)

 

print('fit.pkl was saved.')

 

 

 

リスト2 描画(display.py

 

import pickle

import matplotlib.pyplot as plt

import seaborn as sb

 

with open('fit.pkl', 'rb') as f:

    dframe = pickle.load(f)

 

sb.kdeplot(dframe['p'])   # pの事後分布の描画

plt.show()

 

 

 

リスト3 Rhatの計算(sample_Rhat.py

 

import stan

import pickle

import arviz as az

 

stan_code = """

    data {

        int n;

        int k;

    }

    parameters {

        real<lower=0, upper=1> p;

    }

    model {

        k ~ binomial(n, p);

    }

"""

 

sm = stan.build(stan_code, {'n':10, 'k':7})

fit = sm.sample()

print(fit)

dframe = fit.to_frame()           # MCMCサンプルをPandas DataFrameにまとめる

with open('fit.pkl', 'wb') as f:  # DataFrameをファイルfit.pklに保存

    pickle.dump(dframe, f)

 

print('fit.pkl was saved.')

 

inf_data = az.from_pystan(posterior=fit, posterior_model=sm)

print(az.summary(inf_data))

 

 

 

 

Home