Hello,
I’m encountering difficulties concerning divergent transitions in brms (system information is pasted at the end of the post).
I have 2 data sets (dat_c.txt (13.9 KB) and dat_v.txt (14.3 KB)) that stem from the same experiment, in which 3 extremely-rare-to-find participants took part (subject_id) and 16 items were included (item_id). There are 3 independent variables (var_c, var_p, var_m), each with 2 levels coded as 1 and -1. The dependent variable (dv) is the duration of some kind of a phoneme, but it is not the same type of phoneme in both data sets, which is why I want to fit two separate models, one for each dependent variable.
Since I don’t have much data, my intention initially was to estimate only random intercepts for participants and items, besides the fixed effects, like here:
# random intercepts model for dat_c
fit_c_ranInt <- brm(dv ~ var_c * var_p * var_m + (1 | subject_id) + (1 | item_id),
data=dat_c, chains=4, iter=3000,
prior=c(set_prior("normal(0,50)",class="b"),
set_prior("normal(0,50)", class="Intercept"),
set_prior("normal(0,50)",class="sigma"),
set_prior("normal(0,50)",class="sd")),
control=list(adapt_delta=0.99, max_treedepth=15, stepsize=.001))
# random intercepts model for dat_v
fit_v_ranInt <- brm(dv ~ var_c * var_p * var_m + (1 | subject_id) + (1 | item_id),
data=dat_v, chains=4, iter=3000,
prior=c(set_prior("normal(0,50)",class="b"),
set_prior("normal(0,50)", class="Intercept"),
set_prior("normal(0,50)",class="sigma"),
set_prior("normal(0,50)",class="sd")),
control=list(adapt_delta=0.99, max_treedepth=15, stepsize=.001))
Now, when I run the fit_c_ranInt model, there are 4 divergent transitions. But when I fit a more complex model, with the most complex random effects structure allowed by the experimental design (fit_c_complex; pasted below), no divergent transitions occur and everything is fine.
By contrast, the random-intercepts model for the other dependent variable (fit_v_ranInt) produces 27 divergent transitions, whereas the more complex fit_v_complex model produces 6 divergent transitions.
# complex model for dat_c
fit_c_complex <- brm(dv ~ var_c * var_p * var_m + (var_c * var_p * var_m | subject_id) + (var_c * var_m | item_id),
data=dat_c, chains=4, iter=3000,
prior=c(set_prior("normal(0,50)",class="b"),
set_prior("normal(0,50)", class="Intercept"),
set_prior("normal(0,50)",class="sigma"),
set_prior("normal(0,50)",class="sd"),
set_prior("lkj(2)",class="cor")),
control=list(adapt_delta=0.99, max_treedepth=15, stepsize=.001))
# complex model for dat_v
fit_v_complex <- brm(dv ~ var_c * var_p * var_m + (var_c * var_p * var_m | subject_id) + (var_c * var_m | item_id),
data=dat_v, chains=4, iter=3000,
prior=c(set_prior("normal(0,50)",class="b"),
set_prior("normal(0,50)", class="Intercept"),
set_prior("normal(0,50)",class="sigma"),
set_prior("normal(0,50)",class="sd"),
set_prior("lkj(2)",class="cor")),
control=list(adapt_delta=0.99, max_treedepth=15, stepsize=.001))
My questions are:
- Why do I get (more) divergent transitions in the less complex model, and less or none in the more complex one, given that I have so little data?
- How I can solve the divergence problem for dat_v, for which I didn’t manage to get a well-working model?
- Any idea why it should be harder to eliminate the divergent transitions for dat_v more than for dat_c?
Thanks
Yair
System information:
> sessionInfo()
R version 3.5.2 (2018-12-20)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)
Matrix products: default
BLAS: /opt/R/3.5.2/lib64/R/lib/libRblas.so
LAPACK: /opt/R/3.5.2/lib64/R/lib/libRlapack.so
locale:
[1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C LC_TIME=fr_FR.UTF-8
[4] LC_COLLATE=fr_FR.UTF-8 LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
[7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] rstan_2.18.2 StanHeaders_2.18.1 brms_2.7.0 ggplot2_3.1.0 Rcpp_1.0.0
loaded via a namespace (and not attached):
[1] Brobdingnag_1.2-6 gtools_3.8.1 threejs_0.3.1 shiny_1.2.0 assertthat_0.2.0
[6] stats4_3.5.2 yaml_2.2.0 backports_1.1.3 pillar_1.3.1 lattice_0.20-38
[11] glue_1.3.0 digest_0.6.18 promises_1.0.1 colorspace_1.4-0 htmltools_0.3.6
[16] httpuv_1.4.5.1 Matrix_1.2-15 plyr_1.8.4 dygraphs_1.1.1.6 pkgconfig_2.0.2
[21] purrr_0.3.0 xtable_1.8-3 mvtnorm_1.0-8 scales_1.0.0 processx_3.2.1
[26] later_0.7.5 tibble_2.0.1 bayesplot_1.6.0 DT_0.5 withr_2.1.2
[31] shinyjs_1.0 lazyeval_0.2.1 cli_1.0.1 magrittr_1.5 crayon_1.3.4
[36] mime_0.6 ps_1.3.0 nlme_3.1-137 xts_0.11-2 pkgbuild_1.0.2
[41] colourpicker_1.0 prettyunits_1.0.2 rsconnect_0.8.12 tools_3.5.2 loo_2.0.0
[46] matrixStats_0.54.0 stringr_1.3.1 munsell_0.5.0 bindrcpp_0.2.2 callr_3.1.1
[51] compiler_3.5.2 rlang_0.3.1 grid_3.5.2 ggridges_0.5.1 rstudioapi_0.8
[56] htmlwidgets_1.3 crosstalk_1.0.0 igraph_1.2.2 miniUI_0.1.1.1 base64enc_0.1-3
[61] codetools_0.2-15 gtable_0.2.0 inline_0.3.15 abind_1.4-5 markdown_0.9
[66] reshape2_1.4.3 R6_2.3.0 gridExtra_2.3 rstantools_1.5.1 zoo_1.8-4
[71] bridgesampling_0.6-0 dplyr_0.7.8 bindr_0.1.1 shinystan_2.5.0 shinythemes_1.1.2
[76] stringi_1.2.4 parallel_3.5.2 tidyselect_0.2.5 coda_0.19-2