Corner case in `dirichlet_lpdf`: error when both alpha - 1 = theta = 0
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- cpp
- Domaine
- machine-learning
Piste de recherche
Commencez dans stan/math/prim/prob/dirichlet_lpdf.hpp au niveau du calcul theta_log indiqué, puis examinez la gestion correspondante de partials_vec<1>. Déterminez si le cas alpha - 1 = theta = 0 doit contribuer zéro sans produire d’erreur, et assurez-vous que le comportement autodiff associé est cohérent.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
In the code there is currently:
const auto& theta_log
= to_ref_if<!is_constant_all<T_prior_size>::value>(theta_dbl.log());
if (include_summand<propto, T_prob, T_prior_size>::value) {
lp += (theta_log * alpha_m_1).sum();
}
I understand that by the convention (and also by Stan documentation) for Dirichlet distribution, we usually require theta > 0. But when you think about it, for the corner case when alpha -1 == theta == 0, it is reasonable to define the lpdf to be 0 by the same logic why we define pow(0,0)=1. This is relevant in my application, where I may have on input an information that certain index of theta is a forbidden state and may thus be represented as hard constrained to be equal to 0, but then the Dirichlet prior crashes no matter what. This would be very inefficient for me to workaround by deleting the offending array element as I need to do this over a matrix with many rows each of which may have different constraints, so currently I needed to make my custom implementation of dirichlet_lpdf just to deal with that. I thus propose we change the code to something like:
if (include_summand<propto, T_prob, T_prior_size>::value) {
lp += lmultiply(alpha_m_1, theta).sum();
}
The partials_vec<1> may need a corresponding adjustment.
- Langage dominant
- C++
- Étoiles
- 845
- Forks
- 225
- Merge moyen
- 4 j 21 h
- PR mergées (30 j)
- 13
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de stan-dev/math
-
Difficulté 3/5 1-2 jours Accessibilité débutants 54/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 54/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 1 jour
-
numerics performance
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
stan-dev/math#3481 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
`eigendecompose_sym`, `eigenvalues_sym` and `eigenvectors_sym` do not compile for complex matrices of `fvar<var>` or `fvar<fvar<double>>`Peut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouvertebug
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
stan-dev/math#3477 · 5 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de stan-dev/math
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
pocoproject/poco#5664 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
charmplusplus/charm#4210 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
cp-algorithms/cp-algorithms#1748 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
Les mainteneurs répondent en général sous 1 jour