So spezifizieren Sie das Bayes'sche Mischeffektmodell in BUGS

8

Ich habe dies früher in der Woche gepostet und dann die Frage zurückgezogen, als ich eine gute Quelle gefunden habe, um nicht die Zeit der Leute zu verschwenden. Ich fürchte, ich habe nicht viel Fortschritte gemacht. Wenn ich versuche, hier ein guter Bürger zu sein, werde ich das Problem so klar wie möglich machen. Ich vermute, es wird nur wenige Abnehmer geben.

Ich habe einen Datenrahmen in RI, den ich in BUGS oder R analysieren möchte. Er ist im Langformat. Es besteht aus mehreren Beobachtungen an 120 Personen mit insgesamt 885 Zeilen. Ich untersuche das Auftreten eines kategorialen Ergebnisses - aber das ist hier nicht wirklich relevant. Die Frage betrifft etwas Tieferes.

Das Modell, das ich bisher hier verwendet habe, ist

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

mit einem Randmodell, das im Wesentlichen die Häufung von Patienten berücksichtigt. Ich habe dann untersucht

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

um die zeitliche Reihenfolge der Beobachtungen an den einzelnen Personen zu berücksichtigen.

Das hat sich nicht viel geändert.

Dann habe ich versucht, sie mit den folgenden MCMCPack-Befehlen zu modellieren:

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

Eine Untersuchung des Outputs war spannend und zeigte statistische Signifikanz für viele Prädiktoren. Ich begrüßte mich als neu konvertierten Bayesianer, bis mir klar wurde, dass ich wiederholte Maßnahmen bei Patienten nicht berücksichtigt hatte.

Ich verstehe, dass ich das erklären muss. Ich verstehe, dass dies bedeuten kann, für jeden Einzelnen einen Hyperprior zu finden - stimmt das? Wie wird dies bei BUGS aussehen?

Hier ist ein grundlegendes Log-Reg-Modell: (ein großes Lob an 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 )
  }
}

Allerdings kein Hyperprior hier für den Einzelnen. Hier ist mein bisher bester Versuch eines innerindividuellen Designs, bei dem wiederholte Maßnahmen innerhalb von Menschen berücksichtigt werden:

Hier ist Jackmans Modell für 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)

}}

Hier ist mein Bastard-Kind-Modell für 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)
  }

Kann mich jemand wissen lassen, ob ich in die richtige Richtung gehe? Mein Verständnis dafür wächst, aber langsam. Bitte sei höflich. Ich bin ein Sanitäter, keine Statistik! Ich habe R ziemlich oft benutzt, aber ich bin neu bei BUGS und neu bei Bayes.

Vielen Dank,

R.

Ross Dunne
quelle
1. Wie groß ist n in Ihrem Modell? 2. was ist j? eine Kovariate, richtig? 3. Ich dachte, Ihre abhängige (Antwort-) Variable sei binär. 4. Warum mu.y und demVote? 5. Passen Sie eine einfache Regression (nicht hierarchisch) in Bugs an und vergleichen Sie sie mit der klassischen Regression. Sie sollten ähnlich sein. Und passen Sie ein schnelles hierarchisches Modell in R mit lmer-Funktion in lme4 pacage ...
Manoel Galdino

Antworten:

8

Sie sind (waren) fast da. Nur ein paar Kommentare - Sie müssen den Prior für die beta[,1:2]Parameter nicht zu einem gemeinsamen MV normal machen; Sie können die vor so machen , dass beta[i,1]und beta[i,2]sind unabhängig, die Dinge vereinfacht (zum Beispiel keine vorherige Kovarianz angegeben werden muss.) Hinweis , dass dies nicht bedeutet , sie im hinteren unabhängig sein wird.

Sonstige Kommentare: Da Sie alphain der Regression einen konstanten Term - - haben, sollten die Komponenten beta[,1]im Prior einen Mittelwert von Null haben. Außerdem haben Sie alphaim Code kein Prior für .

Hier ist ein Modell mit hierarchischen Schnitt- und Steigungstermen. Ich habe versucht, mich an Ihre Prioritäten und Notationen zu halten, wenn dies möglich ist, angesichts der Änderungen:

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)
}

Eine sehr nützliche Ressource für hierarchische Modelle, einschließlich einiger "Tricks" zur Beschleunigung der Konvergenz, sind Gelman und Hill .

(Etwas spät mit der Antwort, kann aber für zukünftige Fragesteller hilfreich sein.)

Jbowman
quelle