2017-08-21 3 views
1

Ich habe ein runjags-Objekt, das zwei Ketten hat, die sehr gut gemischt sind (Ketten 1 und 3), und eine, die nicht (Kette 2) hat. Wie kann ich das runjags-Objekt so beschneiden, dass es nur die Ketten 1 und 3 enthält?Entferne eine Kette von einem runjags-Objekt in R

Hier ist ein reproduzierbares Beispiel für die Generierung eines JAGS-Modells mit runjags (obwohl die Ketten hier gut gemischt sind).

library(runjags) 

#generate the data 
x <- seq(1,10, by = 0.1) 
y <- x + rnorm(length(x)) 

#write a jags model 
j.model = " 
model{ 
#this is the model loop. 
for(i in 1:N){ 
y[i] ~dnorm(y.hat[i], tau) 
y.hat[i] <- m*x[i] 
} 

#priors 
m ~ dnorm(0, .0001) 
tau <- pow(sigma, -2) 
sigma ~ dunif(0, 100) 
} 
" 

#put data in a list. 
data = list(y=y, x=x, N=length(y)) 

#run the jags model. 
jags.out <- run.jags(j.model, 
        data = data, 
        n.chains=3, 
        monitor=c('m')) 

Eine Möglichkeit, dies zu erreichen, ist die runjags zu einem mcmc.list Objekt zu konvertieren, dann die Kette entfernen Sie den folgenden Code:

trim.jags <- as.mcmc.list(jags.out) 
trim.jags <- mcmc.list(trim.jags[[1]], trimjags[[3]]) 

jedoch einmal in diese Richtung umgewandelt, können die Daten nicht zurück in das runjags Format. Ich möchte wirklich eine Lösung, die die Ausgabe im Format runjags behält, da meine aktuellen Workflows auf der von der runjags-Zusammenfassung ausgegebenen Formatierung beruhen.

+1

Es wäre einfacher, Ihnen zu helfen, wenn Sie ein [reproduzierbares Beispiel] zur Verfügung gestellt (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible- Beispiel) mit Beispieleingabedaten, Code, den Sie ausführen, und der gewünschten Ausgabe für diesen Eingang. – MrFlick

+2

Kannst du ein kleines runjags-Beispiel hinzufügen, da mit rjags/coda das Ergebnis eine mcmc.list ist, die genau wie eine normale Liste untergeordnet werden kann – user20650

Antwort

3

einen Blick auf das 'Take (zugegebenermaßen nicht sehr offensichtlich genannt) divide.jags Funktion:

jags_13 <- divide.jags(jags.out, which.chains=c(1,3))      
jags_13 
extend.jags(jags_13) 
# etc 

Hoffentlich ist dies genau das, was Sie wollen.

Matt

+0

Wie immer, vielen Dank Matt! – colin

Verwandte Themen