gretaパッケージをMac環境でインストールする

gretaパッケージは、TensorFlow Probabilityを活用してHamiltonian Monte Carlo法による統計モデリングを行うRのパッケージです。

greta-stats.org

StanやBUGSなどと違い、すべてR上でモデルの構築が出来るため、学習のハードルが低くなっているのが特徴です。
また、上のページにもある通り、モデルの構造を綺麗に表示してくれる機能が標準で備わっています。

f:id:yoshidk6:20200602000100p:plain
Example model structure visualization

TensorFlowを使っているためPythonをRにリンクする必要があり、Get started with greta • gretaに従っただけだとインストールがうまく行きませんでした。
デフォルトで選択されるPython環境をいじる必要があったので、備忘録的に手順を残しておきます。

"R reticulateの設定"などで検索するといろいろな情報が出てきますが、今回の手順は基本的に下のページに従いました。

Chapter 15 Install Tensorflow, greta, and causact | A Business Analyst’s Introduction to Business Analytics

PythonとTensorFlow, TensorFlow Probabilityをインストールする

r-tensorflowという名前のenvironmentをAnaconda上*1に作り、その中に適切なバージョンのPythonとTensorFlow, TensorFlow Probabilityをインストールするという流れになります。

  • まずはAnacondaをインストールします Anaconda | Individual Edition
  • Anacondaのプロンプト上(Macではターミナル)で以下のコマンドを打ちます
    1. conda create -n r-tensorflow python=3.7 tensorflow=1.14 pyyaml requests Pillow pip numpy=1.16
    2. conda activate r-tensorflow
    3. 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倍になるそうです。