本記事では「glmmstanとbrmsでwaicの比較」についてサクッと解説しています。
[備忘録]glmmstanとbrmsでwaicの比較
glmmstanとbrmsで研究データを解析しています。
waicを比較する方法を調べたので、忘れないうちにメモです。
以下すべて太字がwaicの比較に必要なコードです。
間違っていたり、もっと良いやり方があったら、ぜひご指摘ください。
glmmstanでwaicの比較
glmmstanでwaicの比較は、どうしたらよいかわからなかったので、ちょっと調べたら以下のように記述すると出力できました。
looパッケージを呼び出して比較しています。
library(glmmstan) library(loo)fit0 <- Pglmmstan(a ~ b + (1|d), data = dat, chains = 4, tier = 5000, family = “gaussian”)fit1 <- Pglmmstan(a ~ b + c + (1|d), data = dat, chains = 4, tier = 5000, family = “gaussian”)log_lik1 <- extract_log_lik(fit0) waic1 <- waic(log_lik1) print(waic1) log_lik2 <- extract_log_lik(fit1) waic2 <- waic(log_lik2) print(waic2) compare(waic1, waic2)
結果は、以下のようにelpd_waicの差で示されます。
> log_lik1 <- extract_log_lik(fit0) > waic1 <- waic(log_lik1) > print(waic1) Computed from 10000 by 86 log-likelihood matrixEstimate SE elpd_waic -158.5 3.6 p_waic 4.8 0.5 waic 317.0 7.3 > log_lik2 <- extract_log_lik(fit1) > waic2 <- waic(log_lik2) > print(waic2) Computed from 10000 by 86 log-likelihood matrixEstimate SE elpd_waic -139.4 4.4 p_waic 53.8 3.4 waic 278.9 8.8 > compare(waic1, waic2)elpd_diff se weight1 weight2 19.1 2.0 0.0 1.0
ちなみにglmmstanの並列化は、Pglmmstanと書くだけでOKです。
brmsでwaicの比較
brmsはパッケージに書いてある通り、以下のように記述するとwaicの比較ができます。
library(brms)rstan_options(auto_write = TRUE) options(mc.cores = parallel::detectCores())fit0 <- brm(a ~ b + (1|d), data = dat, n.chains = 4, n.iter = 2000, n.warmup = 1000, n.cluster = 2, family = “gaussian”)fit1 <- brm(a ~ b + c+ (1|d), data = dat, n.chains = 4, n.iter = 2000, n.warmup = 1000, n.cluster = 2, family = “gaussian”)WAIC(fit0) WAIC(fit1) WAIC(fit0,fit1)
結果は、以下のようにwaicの差で示されます。
> WAIC(fit0) WAIC SE 316.48 7.3 > WAIC(fit1) WAIC SE 301.9 8.91 > WAIC(fit0,fit1) WAIC SE Weights fit0 316.48 7.30 0 fit1 301.90 8.91 1 fit0 - fit1 14.57 3.89
ちなみに、library(brms)の直下にある以下のコードは、並列化するために書いています。
rstan_options(auto_write = TRUE) options(mc.cores = parallel::detectCores())
その他、参考になる資料は以下です。
brmsパッケージ
まとめ:【備忘録】glmmstanとbrmsでwaicの比較
本記事では「glmmstanとbrmsでwaicの比較」についてサクッと解説しました。
役に立てば嬉しいです。