Pour quelles distributions les paramétrisations dans BUGS et R sont-elles différentes?

31

J'ai trouvé quelques distributions pour lesquelles BUGS et R ont des paramétrisations différentes: Normal, log-Normal et Weibull.

Pour chacun d'eux, je suppose que le deuxième paramètre utilisé par R doit être transformé inversement (1 / paramètre) avant d'être utilisé dans BUGS (ou JAGS dans mon cas).

Quelqu'un connaît-il une liste complète de ces transformations qui existe actuellement?

Le plus proche que je puisse trouver serait de comparer les distributions du tableau 7 du manuel d'utilisation de JAGS 2.2.0 avec les résultats de ?rnormetc. et peut-être quelques textes de probabilité. Cette approche semble nécessiter que les transformations devront être déduites des pdfs séparément.

Je préférerais éviter cette tâche (et d'éventuelles erreurs) si cela a déjà été fait, sinon commencer la liste ici.

Mise à jour

Sur la base des suggestions de Ben, j'ai écrit la fonction suivante pour transformer une trame de données de paramètres de R en paramétrisation BUGS.

##' convert R parameterizations to BUGS paramaterizations
##' 
##' R and BUGS have different parameterizations for some distributions. 
##' This function transforms the distributions from R defaults to BUGS 
##' defaults. BUGS is an implementation of the BUGS language, and these 
##' transformations are expected to work for bugs.
##' @param priors data.frame with colnames c('distn', 'parama', 'paramb')
##' @return priors with jags parameterizations
##' @author David LeBauer

r2bugs.distributions <- function(priors) {

  norm   <- priors$distn %in% 'norm'
  lnorm  <- priors$distn %in% 'lnorm'
  weib   <- priors$distn %in% 'weibull'
  bin    <- priors$distn %in% 'binom'

  ## Convert sd to precision for norm & lnorm
  priors$paramb[norm | lnorm] <-  1/priors$paramb[norm | lnorm]^2
  ## Convert R parameter b to JAGS parameter lambda by l = (1/b)^a
  priors$paramb[weib] <-   1 / priors$paramb[weib]^priors$parama[weib]
  ## Reverse parameter order for binomial
  priors[bin, c('parama', 'paramb')] <-  priors[bin, c('parama', 'paramb')]

  ## Translate distribution names
  priors$distn <- gsub('weibull', 'weib',
                       gsub('binom', 'bin',
                            gsub('chisq', 'chisqr',
                                 gsub('nbinom', 'negbin',
                                      as.vector(priors$distn)))))
  return(priors)
}

##' @examples
##' priors <- data.frame(distn = c('weibull', 'lnorm', 'norm', 'gamma'),
##'                     parama = c(1, 1, 1, 1),
##'                     paramb = c(2, 2, 2, 2))
##' r2bugs.distributions(priors)
David LeBauer
la source
2
Pas vraiment une réponse, mais j'ai trouvé cette feuille de triche utile, Quelques distributions utiles en analyse bayésienne avec des modèles de mesure éducative (RJ Mislevy, 2001) - elle couvre principalement les distributions BUGS.
chl

Réponses:

36

Je ne connais pas de liste en conserve.

mise à jour : cette liste (ainsi que des informations supplémentaires) est maintenant publiée sous Translating Probability Density Functions: From R to BUGS and Back Again (2013), DS LeBauer, MC Dietze, BM Bolker R Journal 5 (1), 207-209.

Voici ma liste (modifications fournies par l'interrogateur d'origine):

τσσ2τ=1/σ2=1/var

Beta, Poisson, Exponential, Uniform sont tous les mêmes

Le binôme négatif dans BUGS n'a que le paramétrage discret (taille, prob), pas le paramétrage "écologique" (taille, mu, où la taille peut être non entière).

νshapeλlambdaashapebscaleλ=(1/b)a

Gamma dans BUGS est ( shape, rate). C'est la valeur par défaut dans R, mais R permet également (forme, échelle) [si l'argument d'échelle est nommé]; taux = 1 / échelle

L'ordre est important , en particulier dans BUGS (qui n'a pas d'arguments nommés), par exemple R dbinom(x,size,prob)vs BUGS dbin(p,n)[mêmes paramètres, ordre opposé].

Différences de nom :

  • Binôme : R = dbinom, BUGS =dbin
  • Chi carré : R = dchisq, BUGS =dchisqr
  • Weibull : R = dweibull, BUGS =dweib
  • Binôme négatif : R = dnbinom, BUGS =dnegbin

modifier : pour les distributions tronquées BUGS utilisations I(), Jags utilisations dinterval()[il vaut la peine de regarder dans la documentation JAGS si vous allez l' utiliser, il peut y avoir d' autres différences subtiles]

Ben Bolker
la source
Excellente réponse - merci. Cela me fera économiser beaucoup de puissance cérébrale, de temps et, surtout, contre les erreurs potentielles.
David LeBauer
1
N'oubliez pas les différences dans la façon dont BUGS et JAGS traitent la troncature, la censure et l'ordre préalable de ces distributions (section 8 du manuel). En particulier, JAGS a une dintervaldistribution, où BUGS travaille avec I ().
conjugateprior