Add_criterion with moment_match=TRUE failing even when save_pars(all=TRUE) was set during model fit

@avehtari I can work on a reproducible example, but I still get an error in some cases. Let me know if this is related to your fix or something else, please. I can make a reprex as necessary. I’ve confirmed this errors on both my Mac and PC with the Dev ‘loo’ update.

sart_mean_bf_dist <- bf(sartmean1 ~ Environment+Workload + (1|part_id),
                        phi ~ Environment+Workload + (1|part_id)) +   Beta()
sart_eo_bf_dist <- bf(sart_eox ~ Environment+Workload + (1|part_id),
                      phi ~ Environment+Workload + (1|part_id)) +  Beta()
sart_ec_bf_dist <- bf(sart_ecx ~ Environment+Workload + (1|part_id),
                      phi ~ Environment+Workload + (1|part_id)) +  Beta()

sart_fit1_dist <- brm(
  sart_mean_bf_dist + sart_eo_bf_dist + sart_ec_bf_dist + set_rescor(FALSE),
  data = virtra_dat, chains = 4, cores = 4, iter = 10000, warmup = 8000,
  prior = c(prior(normal(0, 3), class=b, resp= sartmean1), prior(gamma(1.5, .7), class=b, resp= sartmean1, dpar= phi, lb=0), 
            prior(normal(0, .5), class=sd, resp= sartmean1), prior(normal(0, .5), class=sd, resp= sartmean1, dpar= phi),
            prior(normal(0, 3), class=b, resp= sarteox), prior(gamma(1.5, .7), class=b, resp= sarteox, dpar= phi, lb=0),
            prior(normal(0, .5), class=sd, resp= sarteox), prior(normal(0, .5), class=sd, resp= sarteox, dpar=phi),
            prior(normal(0, 3), class=b, resp= sartecx), prior(gamma(1.5, .7), class=b, resp= sartecx, dpar= phi, lb=0),
            prior(normal(0, .5), class=sd, resp= sartecx), prior(normal(0, .5), class=sd, resp= sartecx, dpar=phi)),
            
  control = list(adapt_delta = 0.99), save_pars=save_pars(all=TRUE), seed = 711, 
)

sart_fit1_dist <- add_criterion(sart_fit1_dist, "loo", moment_match = TRUE, reloo=TRUE) 

It then returns the following error:

Error : Exception: beta_lpdf: Second shape parameter is 0, but must be positive finite! (in 'string', line 226, column 6 to column 111)
Error: Moment matching failed. Perhaps you did not set 'save_pars = save_pars(all = TRUE)' when fitting your model? If you are running moment matching on another machine than the one used to fit the model, you may need to set recompile = TRUE.

What makes it peculiar to me is that the initial model does not error and more complex models with the same data do not error nor do their moment matching. Am I missing something or is it a software bug?

1 Like