`neg_binomial_2_rng` can obstruct `loo_moment_match()`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza con R/loo_moment_matching.R en las líneas enlazadas 130–131 y 142–143, y luego reproduce el fallo usando un bloque de cantidades generadas de Stan que contenga neg_binomial_2_rng y loo_moment_match(). Rastrea cómo afecta la excepción de RNG a loo_moment_match_i_fun() y mm_list, y verifica que el comportamiento resultante se gestione o se informe de manera coherente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I'm working on a Stan program that includes a generated quantities block that generates log_lik for use with loo and yrep for posterior predictive checks. This looks something like (with some parts abbreviated as ...):
generated quantities {
vector[n] log_lik;
array[n] int yrep;
...
for (i in 1:n) {
...
log_lik[i] = neg_binomial_2_lpmf(y[i] | mu[i], phi[i]);
}
yrep = neg_binomial_2_rng(mu, phi);
}
I'm using cmdstanr to fit the model and run loo with moment-matching:
mod <- cmdstanr::cmdstan_model(...)
fit <- mod$sample(...)
fit_loo <- fit$loo(moment_match = TRUE, cores = 4)
During the operation of loo_moment_match(), I sometimes get a couple error/exception messages that appear to stem from overflow in the *_rng function in the generated quantities block. These all look like:
Error : Exception: neg_binomial_2_rng: Random number that came from gamma distribution is 1.47285e+09, but must be less than 1073741824.000000 (in '/var/folders/2k/c0vy7xwj4kb9x7hbgtpq5m640000gn/T//RtmpE8xV8L/model-6c3130f99d6e.stan', line 83, column 4 to column 39)
Further, these messages are sometimes (but not usually) followed by an error that causes loo_moment_match() to fail:
Error in mm_list[[ii]]$i : $ operator is invalid for atomic vectors
In addition: Warning message:
In parallel::mclapply(X = I, mc.cores = cores, FUN = function(i) loo_moment_match_i_fun(i)) :
scheduled cores 4, 1, 3 encountered errors in user code, all values of the jobs will be affected
To the best of my understanding, this appears to happen because loo_moment_match_i_fun() is failing for one or more cases. Perhaps mm_list[[ii]] is NA?
I get a small number (~1-3) of the error/exception messages pretty consistently, but the error that causes loo_moment_match() to fail is less common. One place that I've been able to produce this error consistently is within a targets pipeline, which suggests to me that this is something that can be influenced by the RNG state. When I did get this error, it was preceded by ~10 of those error/exception messages. I can confirm that this error can also be produced without targets or callr, just less consistently. I'm using cores = 4 here, but the error can still occur with cores = 1. Commenting out code for yrep and *_rng in the Stan file eliminates the issue entirely, but it is (very so slightly) inconvenient to have to make this change depending on whether I want to use loo_moment_match() with the fitted model. I haven't encountered this problem when the *_rng function is something that is less likely to overflow than the negative binomial.
I wanted to report this issue here since it seems to have something to do with loo_moment_match(). It feels like it could be something related to or not entirely covered by #262. If this is expected behavior, I would appreciate any tips on how to better deal with having both log_lik and yrep in the generated quantities block when it comes to using loo_moment_match(). I'm sorry if any of this is off base, as I do not have a good understanding of the inner workings of the moment-matching code.
Some system info:
> packageVersion("loo")
[1] ‘2.8.0.9000’
> packageVersion("cmdstanr")
[1] ‘0.8.1’
> cmdstanr::cmdstan_version()
[1] "2.35.0"
> R.version
_
platform aarch64-apple-darwin20
arch aarch64
os darwin20
system aarch64, darwin20
status
major 4
minor 4.1
year 2024
month 06
day 14
svn rev 86737
language R
version.string R version 4.4.1 (2024-06-14)
nickname Race for Your Life
- Lenguaje dominante
- R
- Estrellas
- 157
- Forks
- 38
- Merge medio
- 4 d 16 h
- PR fusionados (30 d)
- 2
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de stan-dev/loo
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Extend loo_plot_difference Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
-
Clean up issues Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
Todos los issues de stan-dev/loo
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
robjhyndman/forecast#1220 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
JamesHWade/deputy#192 ·
-
bug triage_needed
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
pharmaverse/rtables#1123 · 1 comentario · 1 reacción ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100