シュンカの日記

基本的に書きたいことを書いていくスタイル。

「基礎からのベイズ統計学」のサンプルコードを実行してみた

【スポンサーリンク】

最近ベイズ統計学を勉強しています。

「基礎からのベイズ統計学」という本のサンプルコードを利用したベイズ推定(パラメータの推定)を実行する手順をまとめておきます。

基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

環境の確認

以下のような環境でStanを利用します。

  • OS:Linux(Ubuntu16.04)
  • Rのバージョン:3.2.3

Stan利用のための環境構築

まずは、Stanを利用できるように環境構築します。

Rを立ち上げ、以下のようなコマンドを実行し、「inline」と「Rcpp」というパッケージをインストールします。
これらのパッケージは、RからC++コンパイラを実行できるようにするためのものです。(StanがC++ベースのパッケージのため)

install.packages("inline")
install.packages("Rcpp")

次に、以下のようなコマンドを実行し、Stanをインストールします。(5分くらいかかりました)

library(inline)
library(Rcpp)
install.packages("rstan", dependencies=TRUE)

以上で、環境構築は完了です。

利用するコードについて

【スポンサーリンク】



朝倉書店| 基礎からのベイズ統計学 ハミルトニアンモンテカルロ法による実践的入門
上記サイトからコードはそのまんまダウンロードできます。

章番号6.1.1 のサンプルコードを利用します。

  • data611.R(パラメータを推定するためのデータ)
  • model611.stan(stanコード)
  • chap6.R(Rコード)

パラメータを推定するためのデータ(data611.R)とStanコード(model611.stan)は、以下のように外部ファイルとしてRの作業ディレクトリに保存しておきましょう。
f:id:nukano0522:20161226211112p:plain
(現在の作業ディレクトリは getwd()、作業ディレクトリの設定は setwd()  でできます。)

次章で、Rからdata611.R と model611.stan を呼び出してStanプログラムを実行することになります。

なお、Stanコードの解説は以下サイトが参考になりました。
logics-of-blue.com

Stanによるベイズ推定の実行

chap6.R に書いてあるコードを実行します。
今回は、平均と分散の2つのパラメータを推定したいので、ちょこっと書き換えたものを載せておきます。

# chap6.R
###6.1.1 正規分布の平均と分散に関する推測

library(rstan)

source("data611.R")
scr<-"model611.stan"
data <-list(N=N, x=x)

par<-c("mu","sigma")

war<-1000               #バーンイン期間
ite<-11000              #サンプル数
see<-12345              #シード
dig<-3                  #有効数字
cha<-1                  #チェーンの数

fit <- stan(file = scr, data = data, iter=ite, seed=see, warmup=war,
	      pars=par,chains=cha)

print(fit,pars=par,digits_summary=dig)

traceplot(fit,inc_warmup=F)
plot(fit)

traceplotによる、平均と分散の推移は以下のようになりました。
f:id:nukano0522:20161226205056p:plain

以上です。