Je suis nouveau dans la recherche sur les statistiques bayésiennes. J'ai entendu des chercheurs dire que les chercheurs bayésiens mettaient mieux en œuvre MCMC par eux-mêmes plutôt que d'utiliser des outils comme JAGS / Stan. Puis-je demander quel est l'avantage d'implémenter l'algorithme MCMC par soi-même (dans des langages "pas assez rapides" comme R), sauf à des fins d'apprentissage?
13
Réponses:
En général, je suggérerais fortement de ne pas coder votre propre MCMC pour une véritable analyse bayésienne appliquée. C'est à la fois beaucoup de travail et de temps et très susceptible d'introduire des bogues dans le code. Les échantillonneurs Blackbox, tels que Stan, utilisent déjà des échantillonneurs très sophistiqués. Croyez-moi, vous ne coderez pas un échantillonneur de ce calibre pour une seule analyse!
Il y a des cas particuliers où cela ne sera pas suffisant. Par exemple, si vous deviez effectuer une analyse en temps réel (c'est-à-dire une décision informatique basée sur des données entrantes), ces programmes ne seraient pas une bonne idée. En effet, Stan nécessite la compilation de code C ++, ce qui peut prendre beaucoup plus de temps que l'exécution d'un échantillonneur déjà préparé pour des modèles relativement simples. Dans ce cas, vous souhaiterez peut-être écrire votre propre code. De plus, je pense qu'il y a des cas particuliers où des paquets comme Stan font très mal, comme les modèles d'espace d'état non gaussiens (divulgation complète: je crois que Stan fait mal dans ce cas, mais je ne sais pas). Dans ce cas, il peut être utile d'implémenter un MCMC personnalisé. Mais c'est l'exception, pas la règle!
Pour être tout à fait honnête, je pense que la plupart des chercheurs qui écrivent des échantillonneurs pour une seule analyse (et cela arrive, je l'ai vu) le font parce qu'ils aiment écrire leurs propres échantillonneurs. À tout le moins, je peux dire que je tombe dans cette catégorie (c'est-à-dire que je suis déçu que l'écriture de mon propre échantillonneur ne soit pas la meilleure façon de faire les choses).
De plus, même si cela n'a pas de sens d'écrire votre propre échantillonneur pour une seule analyse , il peut être très logique d'écrire votre propre code pour une classe d'analyses.. Étant donné que les JAG, Stan, etc. sont des échantillonneurs à boîte noire, vous pouvez toujours accélérer les choses en vous spécialisant pour un modèle donné, bien que le degré d'amélioration dépend du modèle. Mais écrire un échantillonneur extrêmement efficace à partir de zéro représente peut-être 10 à 1 000 heures de travail, selon l'expérience, la complexité du modèle, etc. Si vous faites des recherches sur les méthodes bayésiennes ou que vous écrivez des logiciels statistiques, c'est bien; c'est ton boulot. Mais si votre patron dit "Hé, pouvez-vous analyser cet ensemble de données de mesures répétées?" et que vous passez 250 heures à écrire un échantillonneur efficace, votre patron sera probablement contrarié. En revanche, vous auriez pu écrire ce modèle dans Stan en, disons, 2 heures et avoir eu 2 minutes de temps de fonctionnement au lieu du temps de 1 minute atteint par l'échantillonneur efficace.
la source
Cette question est principalement basée sur l'opinion, mais je pense qu'il y en a assez ici, écrivez une réponse. Il pourrait y avoir de nombreuses raisons de coder son propre échantillonneur pour un problème de recherche. En voici quelques uns
Proposition: Comme le suggère fcop dans leur commentaire, si l'échantillon est MH, le codage de votre propre échantillonneur vous permet de jouer avec les distributions de proposition pour obtenir le meilleur échantillonneur de mixage.
Flexibilité: les programmes intégrés peuvent ne pas vous donner la flexibilité que vous souhaitez. Vous pouvez commencer par une valeur aléatoire spécifique ou utiliser une structure de départ spécifique.
Comprendre: coder votre propre échantillonneur vous aide à comprendre le comportement de l'échantillonneur, donnant un aperçu du processus de chaîne de Markov. Ceci est utile pour un chercheur travaillant sur le problème.
Fardeau de la preuve: si les données sur lesquelles je fais toute ma déduction bayésienne proviennent d'un programme que je n'ai pas codé, alors la responsabilité de la déduction ne m'appartient plus. En tant que chercheur, je voudrais assumer l'entière responsabilité des méthodes / résultats que je présente. L'utilisation de méthodes intégrées ne vous permet pas de le faire.
Il y a probablement plus de raisons, mais ce sont les quatre qui me font coder mes propres échantillonneurs.
la source
J'ai donné un +1 à la réponse de Cliff AB. Pour ajouter une petite friandise, si vous voulez travailler à un niveau inférieur mais pas au niveau du code tout-vous-même, vous devriez fouiller pour le package LaplacesDemon . L'auteur original était brillant, mais semble avoir disparu de la grille, et le paquet a été repris par quelqu'un d'autre. (C'est sur Github, je crois.)
Il implémente un nombre impressionnant d'algorithmes utilisés dans MCMC et les vignettes incluses valent la peine d'être lues même si vous n'utilisez pas le package. À peu près n'importe quel type d'échantillonneur que vous lisez, il l'a fait. Vous codez d'une manière différente de BUGS / JAGS ou Stan, et tout est en R, mais souvent c'est tellement efficace qu'il est compétitif.
la source
LaplacesDemon
, si vous êtes familier avec cela. Heureux d'en entendre parlernimble
également. Je vais au moins le télécharger. (Bien que les multiples vignettes de LaplacesDemon puissent valoir le coup d'être téléchargées même si vous utilisez Nimble.) ... Ohhh, je viens de visiter la page. Si son SMC est facile à utiliser, je deviendrai un grand fan. Le seul package R que j'ai vu qui utilise SMC est horriblement complexe.nimble
site Web, c'est assez impressionnant. Pourquoi n'en ai-je jamais entendu parler? Cela ressemble à une excellente option pour les personnes habituées au langage de modélisation BUGS / JAGS. Bien sûr, ils feront les meilleures comparaisons possibles sur le site Web, mais je l'aime toujours jusqu'à présent. (Sauf qu'avecrstanarm
etbrms
, qui utilisent Stan sous le capot, le champion de la facilité d'utilisation en R serait Stan.)