Comment spécifier le modèle d'effets mixtes bayésiens dans BUGS


8

J'ai posté cela plus tôt dans la semaine, puis j'ai retiré la question lorsque j'ai trouvé une bonne source, ne voulant pas perdre le temps des gens. Je n'ai pas fait beaucoup de progrès, je le crains. En essayant d'être un bon citoyen ici, je rendrai le problème aussi clair que possible. Je soupçonne qu'il y aura peu de preneurs.

J'ai une trame de données en RI que je souhaite analyser en BUGS ou R. Elle est en format long. Il consiste en de multiples observations sur 120 individus, avec un total de 885 lignes. J'examine l'occurrence d'un résultat catégorique - mais ce n'est pas vraiment pertinent ici. La question concerne quelque chose de plus profond.

Le modèle que j'utilisais jusqu'ici est

  mymodel<-gee(Category ~ Predictor 1 + Predictor 2..family=binomial(link="logit"),
  data=mydata, 
   id=Person)

avec un modèle marginal représentant essentiellement le regroupement des patients. J'ai ensuite examiné

 mymodel<-gee(Category ~ Predictor 1 + Predictor 2.. , family=binomial(link="logit"), 
  corstr = "AR-M", 
  data=mydata, id=Person)

afin de tenir compte de l'ordre chronologique des observations sur les personnes individuelles.

Cela n'a pas beaucoup changé.

J'ai ensuite essayé de les modéliser à l'aide de l'ensemble de commandes MCMCPack suivant:

 mymodel<-MCMCglmm(category~  Predictor1 + Predictor2..,  
 data=mydata, family=binomial(link="logit"))

Un examen des résultats a été passionnant, montrant une signification statistique pour de nombreux prédicteurs. Je me suis salué comme un bayésien nouvellement converti, jusqu'à ce que je réalise que je n'avais pas pris en compte les mesures répétées chez les patients.

Je comprends que je dois en tenir compte. Je comprends que cela peut signifier adapter un hyperprior pour chaque individu - est-ce vrai? Quelle forme cela prendra-t-il dans BUGS?

Voici un modèle de base de reg log: (bravo à Kruschke, J., Indiana)

    model {
  for( i in 1 : nData ) {
    y[i] ~ dbern( mu[i] )
    mu[i] <- 1/(1+exp(-( b0 + inprod( b[] , x[i,] ))))
  }
  b0 ~ dnorm( 0 , 1.0E-12 )
   for ( j in 1 : nPredictors ) {
    b[j] ~ dnorm( 0 , 1.0E-12 )
  }
}

Cependant, aucun hyperprior ici pour l'individu. Voici ma meilleure tentative jusqu'à présent pour une conception intra-individuelle, tenant compte des mesures répétées chez les personnes:

Voici le modèle de Jackman pour JAGS

1 model{
2 ## loop over data for likelihood
3 for(i in 1:n){
4  y[i] ~ dbern( mu[i] )
    mu[i] <- 1/(1+exp(-( b0 + inprod( b[] , x[i,] ))))
6 }
7 sigma ˜ dunif(0,20) ## prior on standard deviation
8 tau <- pow(sigma,-2) ## convert to precision
9
10 ## hierarchical model for each state’s intercept & slope
11 for(p in 1:50){
12 beta[p,1:2] ˜ dmnorm(mu[1:2],Tau[,]) ## bivariate normal
13 }
14
15 ## means, hyper-parameters
16 for(q in 1:2){
17 mu[q] ˜ dnorm(0,.0016)

}

Voici mon modèle bâtard-enfant pour BUGS

1 model{
2 ## loop over data for likelihood
3 for(i in 1:n){
4 mu.y[i] <- alpha + beta[s[i],1] + beta[s[i],2]*(j[i]-jbar)
5 demVote[i] ˜ dnorm(mu.y[i],tau)
6 }
7 sigma ˜ dunif(0,20) ## prior on standard deviation
8 tau <- pow(sigma,-2) ## convert to precision
9
10 ## hierarchical model for each state’s intercept & slope
11 for(p in 1:120){
12 beta[p,1:2] ˜ dmnorm(mu[1:2],Tau[,]) ## bivariate normal
13 }
14
15 ## means, hyper-parameters
16 for(q in 1:2){
17 mu[q] ˜ dnorm(0,.0016)
  }

Quelqu'un peut-il me dire si je vais dans la bonne direction? Ma compréhension de cela grandit, mais lentement. Soyez gentil s'il vous plait. Je suis médecin, pas statistique! J'ai utilisé R un peu, mais je suis nouveau sur BUGS et nouveau sur Bayes.

Merci,

R


1. Quelle est la taille de n dans votre modèle? 2. qu'est-ce que j? une covariable, non? 3. Je pensais que votre variable dépendante (réponse) était binaire. 4. Pourquoi mu.y et demVote? 5. Ajustez une régression simple (non hiérarchique) dans Bugs et comparez avec la régression classique. Ils devraient être similaires. Et adapter un modèle hiérarchique rapide en R avec fonction lmer dans lme4 pacage ...
Manoel Galdino

Réponses:


8

Vous êtes (étiez) presque là. Juste quelques commentaires - vous n'avez pas à faire de l'a priori pour les beta[,1:2]paramètres un MV commun normal; vous pouvez rendre l'a priori tel que beta[i,1]et beta[i,2]sont indépendants, ce qui simplifie les choses (par exemple, aucune covariance préalable n'a besoin d'être spécifiée.) Notez que cela ne signifie pas qu'ils seront indépendants dans la partie postérieure.

Autres commentaires: Puisque vous avez un terme constant - alpha- dans la régression, les composantes beta[,1]doivent avoir une moyenne nulle dans l'a priori. De plus, vous n'avez pas de priorité alphadans le code.

Voici un modèle avec des termes d'interception et de pente hiérarchiques; J'ai essayé de garder vos priorités et votre notation dans la mesure du possible, compte tenu des changements:

model {
  for(i in 1:n){
    mu.y[i] <- alpha + beta0[s[i]] + beta1[s[i]]*(j[i]-jbar)
    demVote[i] ~ dnorm(mu.y[i],tau)
  }

  alpha ~ dnorm(0, 0.001) ## prior on alpha; parameters just made up for illustration
  sigma ~ dunif(0,20) ## prior on standard deviation
  tau <- pow(sigma,-2) ## convert to precision

  ## hierarchical model for each state’s intercept & slope
  for (p in 1:120) {
     beta0[p] ~ dnorm(0, tau0)
     beta1[p] ~ dnorm(mu1, tau1)
  }

  ## Priors on hierarchical components; parameters just made up for illustration
  mu1 ~ dnorm(0, 0.001) 
  sigma0 ~ dunif(0,20)
  sigma1 ~ dunif(0,20)
  tau0 <- pow(sigma0,-2)
  tau1 <- pow(sigma1,-2)
}

Gelman et Hill sont une ressource très utile pour les modèles hiérarchiques, y compris quelques "astuces" pour accélérer la convergence .

(Un peu tard avec la réponse, mais peut être utile à un futur intervenant.)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.