Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Hiroshi Shimizu
PDF, PPTX
12,811 views
Cmdstanr入門とreduce_sum()解説
Cmdstanrとreduce_sum()の使い方を解説します
Science
◦
Read more
4
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 55
2
/ 55
3
/ 55
4
/ 55
5
/ 55
6
/ 55
7
/ 55
8
/ 55
9
/ 55
10
/ 55
11
/ 55
12
/ 55
13
/ 55
14
/ 55
15
/ 55
16
/ 55
17
/ 55
18
/ 55
19
/ 55
20
/ 55
Most read
21
/ 55
22
/ 55
23
/ 55
24
/ 55
25
/ 55
26
/ 55
27
/ 55
28
/ 55
29
/ 55
30
/ 55
31
/ 55
32
/ 55
33
/ 55
34
/ 55
Most read
35
/ 55
36
/ 55
37
/ 55
38
/ 55
39
/ 55
40
/ 55
41
/ 55
42
/ 55
43
/ 55
44
/ 55
45
/ 55
46
/ 55
47
/ 55
48
/ 55
49
/ 55
50
/ 55
51
/ 55
52
/ 55
53
/ 55
Most read
54
/ 55
55
/ 55
More Related Content
PDF
Stanコードの書き方 中級編
by
Hiroshi Shimizu
PPTX
MCMCでマルチレベルモデル
by
Hiroshi Shimizu
PPTX
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
by
Shushi Namba
PDF
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
by
Hiroshi Shimizu
PDF
Stanの便利な事後処理関数
by
daiki hojo
PDF
階層ベイズとWAIC
by
Hiroshi Shimizu
PPTX
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
by
nocchi_airport
PPTX
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
by
nishioka1
Stanコードの書き方 中級編
by
Hiroshi Shimizu
MCMCでマルチレベルモデル
by
Hiroshi Shimizu
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
by
Shushi Namba
StanとRでベイズ統計モデリング読書会 導入編(1章~3章)
by
Hiroshi Shimizu
Stanの便利な事後処理関数
by
daiki hojo
階層ベイズとWAIC
by
Hiroshi Shimizu
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
by
nocchi_airport
NagoyaStat#7 StanとRでベイズ統計モデリング(アヒル本)4章の発表資料
by
nishioka1
What's hot
PDF
Stan超初心者入門
by
Hiroshi Shimizu
PDF
正準相関分析
by
Akisato Kimura
PDF
階層ベイズによるワンToワンマーケティング入門
by
shima o
PDF
Stan勉強会資料(前編)
by
daiki hojo
PDF
階層ベイズと自由エネルギー
by
Hiroshi Shimizu
PPTX
心理学者のためのGlmm・階層ベイズ
by
Hiroshi Shimizu
PDF
『バックドア基準の入門』@統数研研究集会
by
takehikoihayashi
PDF
Chapter9 一歩進んだ文法(前半)
by
itoyan110
PPTX
Rで因子分析 商用ソフトで実行できない因子分析のあれこれ
by
Hiroshi Shimizu
PDF
あなたの心にBridgeSampling
by
daiki hojo
PDF
pymcとpystanでベイズ推定してみた話
by
Classi.corp
PDF
心理学におけるベイズ統計の流行を整理する
by
Hiroshi Shimizu
PDF
Rでisomap(多様体学習のはなし)
by
Kohta Ishikawa
PDF
階層モデルの分散パラメータの事前分布について
by
hoxo_m
PDF
2 3.GLMの基礎
by
logics-of-blue
PDF
不均衡データのクラス分類
by
Shintaro Fukushima
PDF
ノンパラベイズ入門の入門
by
Shuyo Nakatani
PDF
これからの仮説検証・モデル評価
by
daiki hojo
PDF
基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法
by
Ken'ichi Matsui
PPTX
ベイズファクターとモデル選択
by
kazutantan
Stan超初心者入門
by
Hiroshi Shimizu
正準相関分析
by
Akisato Kimura
階層ベイズによるワンToワンマーケティング入門
by
shima o
Stan勉強会資料(前編)
by
daiki hojo
階層ベイズと自由エネルギー
by
Hiroshi Shimizu
心理学者のためのGlmm・階層ベイズ
by
Hiroshi Shimizu
『バックドア基準の入門』@統数研研究集会
by
takehikoihayashi
Chapter9 一歩進んだ文法(前半)
by
itoyan110
Rで因子分析 商用ソフトで実行できない因子分析のあれこれ
by
Hiroshi Shimizu
あなたの心にBridgeSampling
by
daiki hojo
pymcとpystanでベイズ推定してみた話
by
Classi.corp
心理学におけるベイズ統計の流行を整理する
by
Hiroshi Shimizu
Rでisomap(多様体学習のはなし)
by
Kohta Ishikawa
階層モデルの分散パラメータの事前分布について
by
hoxo_m
2 3.GLMの基礎
by
logics-of-blue
不均衡データのクラス分類
by
Shintaro Fukushima
ノンパラベイズ入門の入門
by
Shuyo Nakatani
これからの仮説検証・モデル評価
by
daiki hojo
基礎からのベイズ統計学 輪読会資料 第4章 メトロポリス・ヘイスティングス法
by
Ken'ichi Matsui
ベイズファクターとモデル選択
by
kazutantan
Similar to Cmdstanr入門とreduce_sum()解説
PDF
R stan導入公開版
by
考司 小杉
PDF
統計解析環境Rによる統計処理の基本―検定と視覚化―
by
SAKAUE, Tatsuya
PPT
R intro
by
yayamamo @ DBCLS Kashiwanoha
PPTX
Rプログラミング01 はじめの一歩
by
wada, kazumi
ODP
第2回関西ゼロから始めるR言語勉強会
by
Iida Keisuke
PDF
Introduction to R
by
Yukihiro NAKAJIMA
PPT
K010 appstat201201
by
t2tarumi
PDF
Tokyor60 r data_science_part1
by
Yohei Sato
PDF
Tokyo r94 beginnerssession3
by
kotora_0507
PDF
Tokyor23 doradora09
by
Nobuaki Oshiro
PDF
Rでreproducible research
by
Shintaro Fukushima
PPTX
R超入門機械学習をはじめよう
by
幹雄 小川
PDF
初心者講習会資料(Osaka.R#7)
by
Masahiro Hayashi
PDF
Hiroshimar4_Rintro
by
SAKAUE, Tatsuya
PPTX
Tokyo r30 beginner
by
Takashi Minoda
PDF
初心者講習会資料(Osaka.r#6)
by
Masahiro Hayashi
PDF
統計解析ソフトR
by
Yoshitomo Akimoto
PDF
R note 01_ver1.2
by
Satoshi Kume
PPTX
Tokyo r47 beginner
by
Takashi Minoda
PPTX
関東第1回r勉強会
by
Iida Keisuke
R stan導入公開版
by
考司 小杉
統計解析環境Rによる統計処理の基本―検定と視覚化―
by
SAKAUE, Tatsuya
R intro
by
yayamamo @ DBCLS Kashiwanoha
Rプログラミング01 はじめの一歩
by
wada, kazumi
第2回関西ゼロから始めるR言語勉強会
by
Iida Keisuke
Introduction to R
by
Yukihiro NAKAJIMA
K010 appstat201201
by
t2tarumi
Tokyor60 r data_science_part1
by
Yohei Sato
Tokyo r94 beginnerssession3
by
kotora_0507
Tokyor23 doradora09
by
Nobuaki Oshiro
Rでreproducible research
by
Shintaro Fukushima
R超入門機械学習をはじめよう
by
幹雄 小川
初心者講習会資料(Osaka.R#7)
by
Masahiro Hayashi
Hiroshimar4_Rintro
by
SAKAUE, Tatsuya
Tokyo r30 beginner
by
Takashi Minoda
初心者講習会資料(Osaka.r#6)
by
Masahiro Hayashi
統計解析ソフトR
by
Yoshitomo Akimoto
R note 01_ver1.2
by
Satoshi Kume
Tokyo r47 beginner
by
Takashi Minoda
関東第1回r勉強会
by
Iida Keisuke
More from Hiroshi Shimizu
PDF
Stanでガウス過程
by
Hiroshi Shimizu
PPTX
rstanで簡単にGLMMができるglmmstan()を作ってみた
by
Hiroshi Shimizu
PDF
社会心理学とGlmm
by
Hiroshi Shimizu
PDF
負の二項分布について
by
Hiroshi Shimizu
PPTX
マルチレベルモデル講習会 理論編
by
Hiroshi Shimizu
PDF
エクセルで統計分析 統計プログラムHADについて
by
Hiroshi Shimizu
PDF
Rで潜在ランク分析
by
Hiroshi Shimizu
PDF
Mplusの使い方 中級編
by
Hiroshi Shimizu
PDF
媒介分析について
by
Hiroshi Shimizu
PDF
エクセルで統計分析5 マルチレベル分析のやり方
by
Hiroshi Shimizu
PPTX
マルチレベルモデル講習会 実践編
by
Hiroshi Shimizu
PDF
SapporoR#6 初心者セッションスライド
by
Hiroshi Shimizu
PDF
エクセルでテキストマイニング TTM2HADの使い方
by
Hiroshi Shimizu
PPTX
Latent rank theory
by
Hiroshi Shimizu
PDF
エクセルで統計分析3 回帰分析のやり方
by
Hiroshi Shimizu
PDF
エクセルで統計分析2 HADの使い方
by
Hiroshi Shimizu
PDF
エクセルで統計分析4 因子分析のやり方
by
Hiroshi Shimizu
PDF
Tokyo r53
by
Hiroshi Shimizu
PPTX
Excelでも統計分析 HADについて SappoRo.R#3
by
Hiroshi Shimizu
PDF
glmmstanパッケージを作ってみた
by
Hiroshi Shimizu
Stanでガウス過程
by
Hiroshi Shimizu
rstanで簡単にGLMMができるglmmstan()を作ってみた
by
Hiroshi Shimizu
社会心理学とGlmm
by
Hiroshi Shimizu
負の二項分布について
by
Hiroshi Shimizu
マルチレベルモデル講習会 理論編
by
Hiroshi Shimizu
エクセルで統計分析 統計プログラムHADについて
by
Hiroshi Shimizu
Rで潜在ランク分析
by
Hiroshi Shimizu
Mplusの使い方 中級編
by
Hiroshi Shimizu
媒介分析について
by
Hiroshi Shimizu
エクセルで統計分析5 マルチレベル分析のやり方
by
Hiroshi Shimizu
マルチレベルモデル講習会 実践編
by
Hiroshi Shimizu
SapporoR#6 初心者セッションスライド
by
Hiroshi Shimizu
エクセルでテキストマイニング TTM2HADの使い方
by
Hiroshi Shimizu
Latent rank theory
by
Hiroshi Shimizu
エクセルで統計分析3 回帰分析のやり方
by
Hiroshi Shimizu
エクセルで統計分析2 HADの使い方
by
Hiroshi Shimizu
エクセルで統計分析4 因子分析のやり方
by
Hiroshi Shimizu
Tokyo r53
by
Hiroshi Shimizu
Excelでも統計分析 HADについて SappoRo.R#3
by
Hiroshi Shimizu
glmmstanパッケージを作ってみた
by
Hiroshi Shimizu
Cmdstanr入門とreduce_sum()解説
1.
cmdstanr入門+ reduce_sum()解説 rstanはもうダメです 清水裕士 関西学院大学 2021/9/13
2.
自己紹介 • 清水裕士 • 関西学院大学社会学部 •
専門 • 社会心理学 • Web • @simizu706 • https://norimune.net
3.
rstanからcmdstanrへ • 実をいうと、rstanはもうダメです • 突然こんなこと言ってごめんね。 •
でも本当です。 • rstanはまったく更新されていない • 2020年7月から更新されてない(2021/9/13現在) • 最新のStanが使える機能が使えない • Stanチームもcmdstanrを推奨している • 君もcmdstanrに乗り換えよう!
4.
reduce_sum()って? • チェイン内並列化の機能 • サンプルサイズが大きかったり、尤度の計算が重い ときに時間がかかる・・・ •
これを使えばチェイン内で並列計算が可能 • Stanに結構前に実装 • しかし、rstanにはまだ実装されてないのであまり使 われてない印象 • この資料ではそのやり方を紹介
5.
cmdstanrを使おう
6.
Stanの家族(Rの話) • cmdstan • Stanをcmdで動かすためのコア部分 •
これだけだと使いづらいので、さまざまなインターフェ イスでcmdstanを動かせるようになっている • rstan • R内部でcmdstanを動かすためのパッケージ • Rで使うためのさまざまな関数やオプションがある • cmdstanr • Rからcmdstanを動かす命令を出すパッケージ • 出力はcsvファイルで出たものを読み取る
7.
rstanとcmdstanrの違い rstan cmdstan cmdstanr cmdstan Rの内部(rcpp)で cmdstanを動かす Rからcmdstanを動か す命令を出す
8.
rstanとcmdstanrの違い • rstanのメリット • 豊富な関数 •
出力や、結果を要約するための関数を揃えている • 他のパッケージとの連携 • bridgesamplingとか、stanfitを入れたらそのまま動くパッ ケージが多い • cmdstanrのメリット • 速い・軽い • 安定している(爆発しにくい) • 依存パッケージが少なく、インストールしやすい • cmdstanのバージョンアップにすぐ対応できる
9.
rstanはバージョンが古い • cmdstanの最新版は2.27.0(2021/9/13現在) • rstanは2.21 •
古い! • 後述するreduce_sum()は2.23から対応 • cmdstanrはcmdstanを別にインストールする • install_cmdstan(cores = 2) • cmdstanrのバージョンに関わらず、cmdstanの最新版 を使うことができる
10.
rstanは重い • 最近よく爆発するようになった • あぼーん •
Rのrcppで動かしてることが原因? • stopボタンを押しても止まってくれない • 結果、あぼーん • とくにVBだとほぼ確実に止まらない • cmdstanr • R内部ではなく、cmdstanをR外部で動かしている • R自体は重くならない • stopボタンをおしたら確実にcmdstanを殺す • VBでもしっかり殺す
11.
rstanは遅い • N=10000のロジスティック回帰分析 • rstanのiter=2000の平均時間
13.5秒ぐらい • cmdstanrのiter=2000の平均時間 8秒ぐらい rstan cmdstanr
12.
cmdstanrの準備
13.
cmdstanrの導入 • 基本的にはここを見てください • https://mc-stan.org/cmdstanr/articles/cmdstanr.html •
Windowsユーザーはこちらも参考にしてみてください • https://norimune.net/3609
14.
今回使うパッケージ library(magrittr) library(rstan) library(bayesplot) library(bridgesampling) コピペ用のテキスト 僕は非tidyverse民なので magrittrを入れてますが、 普通にtidyverse入れてください rstanは自力でいれてください https://github.com/stan- dev/rstan/wiki/RStan-Getting-Started- (Japanese) が参考になります。
15.
インストールの仕方 • まずはインストール • コンパイル環境の確認 •
cmdstanをインストール install.packages("cmdstanr", repos = c("https://mc-stan.org/r-packages/", getOption("repos"))) check_cmdstan_toolchain() library(cmdstanr) install_cmdstan(cores = 2) バージョンを指定したい場合 install_cmdstan(cores = 2,version = "2.26.1")
16.
cmdstanのバージョンを変更 • バージョンの確認 • cmdstan_version() •
パスの確認 • cmdstan_path() • バージョンの変更 set_cmdstan_path(path = "/home/[hoge]/.cmdstanr/cmdstan-2.26.1")
17.
cmdstanrの使い方
18.
cmdstanrの使い方の基本 • オブジェクト指向 • モデルオブジェクトにメソッドがある •
sample, variational, optimizeなど • メソッドはRでいう関数なのでそこに引数をいれる • ほとんどはposteriorパッケージの関数 • bayesplotパッケージと相性がいい • bayesplotはStanチームが開発している事後分布を可 視化するためのパッケージ
19.
モデルのコンパイル • cmdstan_model()をつかう • model
<- cmdstan_model(“reg.stan”) • ちょっと前は相対パスが使えなかったが今は使える のでrstanと同じ感覚でOK • コンパイルが速い! • 体感的にはrstanの2/3~1/2 • あと視覚的にコンパイルしてくれてる のがちゃんとわかるのでなんか安心 これがクルクル回る
20.
サンプルデータ生成 set.seed(123) N <- 10000 P
<- 2 alpha <- -3 beta <- rep(1,P) X1 <- rnorm(N, 5, 2) X2 <- rnorm(N, 3, 4) mu <- alpha + beta[1]*X1 + beta[2]*X2 logistic <- function(x){ 1/(1+exp(-x)) } Y <- rbinom(N,1,logistic(mu)) X <- data.frame(X1,X2) Y %>% hist glm(Y ~ X1 + X2,family=binomial) %>% summary
21.
今回使うStanコード data{ int N; int P; int
Y[N]; matrix[N,P] X; } parameters{ real alpha; vector[P] beta; } model{ Y ~ bernoulli_logit(alpha + X*beta); alpha ~ normal(0, 10^2); beta ~ normal(0, 10^2); } generated quantities{ vector[100] mu = alpha + X[1:100,]*beta; }
22.
サンプリング • rstanとちょっと癖が違う • fit
<- model$sample(data = “datastan”) • モデルオブジェクトにメソッドがある • sample():MCMCを行う • variational():VBを行う • オプションが違う • iter_warmup:ウォームアップ期間のサイズ • iter_sampling:ウォームアップ後のサイズ • chains:マルコフ連鎖の数 • parallel_chains:並列コアの数
23.
サンプリング datastan <- list(N=N,
P=P, Y=Y, X=X) model <- cmdstan_model(“logistic.stan") fit <- model$sample(datastan, iter_warmup = 1000, iter_sampling = 1000, chains = 4, parallel_chains = 4, refresh = 200)
24.
cmdstanrの結果の要約 • 結果の要約は$print() • fit$print(c(“alpha”,”beta”)) •
$summaryもあるが、tibble表記が嫌いなので僕は こっち。 • 注意点 • デフォルトでは「90%」信用区間が表示される
25.
$print()メソッドのオプション • max_rows= :表示列の最大値を選ぶ •
デフォルトでは10 • 要約統計量関数を指定できる
26.
僕が使ってる感じ map <- function(z){ density(z)$x[which.max(density(z)$y)] } quantile95
<- function(x){ quantile(x, probs = c(0.025, 0.975), names = TRUE) } ess_tail95 <- function(x){ min(posterior::ess_quantile(x, probs = c(0.025, 0.975), names = TRUE)) } r_hat <- posterior::rhat pd_out <- c("mean","sd","map","quantile95","ess_bulk","ess_tail95", "r_hat") fit$print(c("alpha","beta"),pd_out,max_rows = 30) 貼り付け可能なテキストは こちら
27.
出力 • 結果の出力は$draws() • beta
<- fit$draws(“beta”) • iteration×chain×variable • 3次元配列になっている • rstanと違うので注意!
28.
収束判断 rhatのグラフ • 収束判断はbayesplotパッケージを活用 •
drawsしたものをそのまま関数にいれる library(bayesplot) fit %>% bayesplot::rhat() %>% hist
29.
トレースプロット • mcmc_traceを使う • fit$draws("alpha")
%>% mcmc_trace
30.
自己相関 • mcmc_acf()を使う • fit$draws("beta")
%>% mcmc_acf
31.
事後分布の可視化 • ぜんぶbayesplotに頼る fit$draws("alpha") %>%
mcmc_dens fit$draws("alpha") %>% mcmc_hist fit$draws("alpha") %>% mcmc_dens_overlay fit$draws(c("beta")) %>% mcmc_pairs
32.
結果の取り出し
33.
MCMCサンプルの出力 • いわゆるextract • cmdstanrではdraws alpha
<- fit$draws("alpha") alpha %>% hist 基本的には$print()と$draws()の2つを覚えてたらOK!
34.
tidyなデータに変える • posteriorパッケージ • cmdstanrの従属パッケージ •
cmdstanrをいれたら自動的に付いてくる • as_draws_df() library(posterior) temp <- fit$draws("beta") %>% as_draws_df temp
35.
いろいろできる • 中身は実際はこうなっている • data.frame(temp) •
.chain • .iteration • .draw • がindex変数として格納 • 特定のチェインだけ除きたい場合 temp <- fit$draws("beta") %>% as_draws_df() %>% dplyr::filter(.chain != 3)
36.
事後平均値をRに保存 • 非tidyverse民の僕はapply() • mu
<- fit$draws("mu") %>% apply(3,mean) • VBのときはchainの次元がないのでapply(2,mean)
37.
outputまわり
38.
cmdstanの結果はどこに? • $output_files()メソッドをつかう • fit$output_files() •
注意! • tmpフォルダにはいったcsvファイルは日をまたぐと 消える(Ubuntuだと) • 一度$printとかをすれば多分大丈夫 • 気になるなら、場所を変えてやることもできる • fit$save_output_files("cmdstan/")
39.
注意! • そのままだと消える • tmpフォルダにはいったcsvファイルは日をまたぐと 消える(Ubuntuだと) •
あと、jobsを使うとoutputファイルが迷子になる • 一度$print()とかをすれば多分大丈夫 • 気になるなら、場所を変えてやることもできる • fit$save_output_files("cmdstan/")
40.
rstanfitオブジェクトを作る • cmdstanrfit →
rstanfit fit.rstan <- fit$output_files() %>% rstan::read_stan_csv() fit.rstan
41.
bridgesampling の使い方
42.
cmdstanrの欠点 • bridgesamplingパッケージと連携しない • 2021年9月現在 •
一度、rstanfitオブジェクトに変換する必要がある • どうやらcmdstan単体ではモデル全体の対数確率を 出力する機能がないので対応厳しいらしい • ちょい面倒 • rstanfitオブジェクトを作って、iter=0でもう一度か らのrstanfitオブジェクトを作る fit.sf <- rstan::read_stan_csv(fit$output_files()) path <- model$stan_file() sf <- rstan::stan(path,data=data,iter=0) bs <- bridge_sampler(fit.sf, stanfit_model = sf)
43.
関数を作ったよ • cmdstanr_bs() cmdstanr_bs <-
function(fit,model,data){ require(rstan) require(bridgesampling) path <- model$stan_file() fit.sf <- rstan::read_stan_csv(fit$output_files()) sf <- rstan::stan(path,data=data,iter=0) bs <- bridge_sampler(fit.sf, stanfit_model = sf) return(bs) } bs <- cmdstanr_bs(fit,model,datastan) MCMCのサンプルが入ったfitオブジェ クト、モデル、データの順に入れる
44.
reduce_sum導入
45.
reduce_sumとは? • ベクタライズしたlpdf(lpfm)関数を並列化 • 10000人の尤度の計算 •
どの順番に計算しても問題ない(交換可能だから) • つまり分割して計算してあとで足しても問題ない • 今のrstanは対応が追いついていない • stan2.23から対応したため、reduce_sumを使うため にはcmdstanrを使う必要がある • rstan最新版は2.21.2
46.
具体的な使い方 • functionsブロックで関数を定義 • partial_sum_lpdf() •
目的変数が離散データなら最後をlpmfにする • 変数宣言の順番が決まってるので注意 • 1番目:目的変数 • 2番目:int start • 3番目:int end • 4番目以降:モデルで使う変数たち
47.
partial_sum_lpmfのコード • こんな感じ • 関数内で、bernoulli_logit_lumf()にモデルを入れる •
slice_Yは適当につけた名前で、特に決まってない。別にYで も走る。 • 目的変数はそのまま入れればいいけど、説明変数などは start:endで配列を指定する必要あり • 内部システム的に、startとendには分割された配列の範囲が割 り振られる real partial_sum_lpmf(int[] slice_Y, int start, int end, real alpha, vector beta, matrix X){ return bernoulli_logit_lupmf(slice_Y | alpha + X[start:end,]*beta); }
48.
reduce_sum()をtargetに • reduce_sum()の引数 • 1番目:partial_sum_lpmf()
つまり関数が引数 • 2番目:目的変数 ここではY • 3番目:grainsize 一度に計算するサイズ • grainsize=1の場合、Stanが自動決定する • それ以外の整数をいれたらそのサイズで計算 • 1が常に最速とは限らないので、N/par_chainとかから試し てみる • 4番目以降:モデルで使う変数 target += reduce_sum(partial_sum_lpmf, Y, grainsize, alpha, beta, X);
49.
Stanコード
50.
テキストバージョン functions{ real partial_sum_lpmf(int[] slice_Y,
int start, int end, real alpha, vector beta, matrix X){ return bernoulli_logit_lupmf(slice_Y | alpha + X[start:end,]*beta); } } data{ int N; int P; int Y[N]; matrix[N,P] X; } transformed data{ int grainsize = 1; } parameters{ real alpha; vector[P] beta; } model{ target += reduce_sum(partial_sum_lpmf, Y, grainsize, alpha, beta, X); alpha ~ normal(0, 10^2); beta ~ normal(0, 10^2); }
51.
コンパイル時の注意 • Rstudioのコンパイルチェック機能 • rstanのバージョンに合わせている •
reduce_sum()は2.23で追加したものなので、コンパ イルエラーがでる • そんな関数ねぇよ • 気にせずコンパイルする • 並列化のためのコンパイルをやる必要がある • cpp_options = list(stan_threads = TRUE) model.rs <- cmdstan_model("logistic_rs.stan", cpp_options = list(stan_threads = TRUE))
52.
サンプリングのやり方 • threads_per_chainを指定 • PCのコアが32個あるなら、4×8まで可能 •
ただコアの数が多くなると計算結果の統合に時間がか かってしまって余計効率が悪いこともある • モデルの複雑さやサンプルサイズなどでうまく調整する • 2~4で十分な気がする fit.rs <- model.rs$sample(datastan, iter_warmup = 1000, iter_sampling = 1000, chains = 4, parallel_chains = 4, threads_per_chain = 2, refresh = 200)
53.
スピード比較 • 2つに分割 4つに分割 •
8.5秒→5.5秒 8.5秒→4.5秒
54.
まとめ • cmdstanrを使おう! • rstanは重くて遅くて爆発する •
cmdstanrは軽くてバージョンを選べて速い • reduce_sum()も使おう! • もしコアが多いPCをお持ちならオススメ • rstanで普通に推定するよりも、cmdstanrを使って、 かつ、reduce_sum()を活用したら、断然スピードが 違う! • rstanで13.5秒→cmdstanで最速4.5秒
55.
Enjoy!
Download