gretaパッケージをMac環境でインストールする
gretaパッケージは、TensorFlow Probabilityを活用してHamiltonian Monte Carlo法による統計モデリングを行うRのパッケージです。
StanやBUGSなどと違い、すべてR上でモデルの構築が出来るため、学習のハードルが低くなっているのが特徴です。
また、上のページにもある通り、モデルの構造を綺麗に表示してくれる機能が標準で備わっています。
TensorFlowを使っているためPythonをRにリンクする必要があり、Get started with greta • gretaに従っただけだとインストールがうまく行きませんでした。
デフォルトで選択されるPython環境をいじる必要があったので、備忘録的に手順を残しておきます。
"R reticulateの設定"などで検索するといろいろな情報が出てきますが、今回の手順は基本的に下のページに従いました。
PythonとTensorFlow, TensorFlow Probabilityをインストールする
r-tensorflowという名前のenvironmentをAnaconda上*1に作り、その中に適切なバージョンのPythonとTensorFlow, TensorFlow Probabilityをインストールするという流れになります。
- まずはAnacondaをインストールします Anaconda | Individual Edition
- Anacondaのプロンプト上(Macではターミナル)で以下のコマンドを打ちます
-
conda create -n r-tensorflow python=3.7 tensorflow=1.14 pyyaml requests Pillow pip numpy=1.16
-
conda activate r-tensorflow
-
pip install tensorflow-probability==0.7
-
Rに結びつけるPythonのバージョン設定
Rにreticulateをインストールし、Pythonの環境を設定します。
Mac上(MacOS 10.14 Mojave)だとデフォルトではPython 2.xが選ばれてしまい、毎回Rを起動するたびにPythonの環境を選ぶ必要があって面倒です。
そのため、デフォルトで使うPythonを~/.Rprofile
で設定してしまいます。
グローバルに設定を変えたくない場合は、プロジェクトごとに設定することも出来るはずです。
- reticulateをインストールする
install.packages("reticulate")
- RStudio上で.Rprofileを開く
file.edit(file.path("~", ".Rprofile"))
- 次のコマンドを.Rprofileに追記して保存する
reticulate::use_condaenv("r-tensorflow")
- Rを再起動し、
reticulate::py_config()
を打って r-tensorflow が選ばれていることを確認します
gretaのインストール
R/RStudio上でgretaをインストールします。
install.packages("greta")
library(greta)
動作確認
ここまでの手順がエラーなく進めば、gretaが使えるようになっているはずです。
Get started with greta • greta上にある簡単な例を試してみてください。
library(greta) # data x <- as_data(iris$Petal.Length) y <- as_data(iris$Sepal.Length) # variables and priors int <- normal(0, 1) coef <- normal(0, 3) sd <- student(3, 0, 1, truncation = c(0, Inf)) # operations mean <- int + coef * x # likelihood distribution(y) <- normal(mean, sd) # defining the model m <- model(int, coef, sd) # plotting # plot(m) # This works only if you installed igraph and DiagrammeR # sampling draws <- mcmc(m, n_samples = 1000) # result summary summary(draws)
*1:Anaconda上のPython/TensorFlowだとサンプリング速度が2-8倍になるそうです。