2017-08-21 2 views
1

J'ai un objet runjags qui a deux chaînes qui se sont très bien mélangées (chaînes 1 et 3), et une qui n'en a pas (chaîne 2). Comment puis-je ajuster l'objet runjags pour ne contenir que les chaînes 1 et 3?Supprimer une chaîne d'un objet runjags dans R

Voici un exemple reproductible de génération d'un modèle JAGS à l'aide de runjags (bien que les chaînes ici se mélangent bien).

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

Une façon d'y parvenir est de convertir les runjags objet à un mcmc.list, puis retirez la chaîne en utilisant le code suivant:

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

Cependant, une fois converti dans ce sens, les données ne peuvent pas être remettre dans le format runjags. Je voudrais vraiment une solution qui garde la sortie au format runjags, car mes flux de travail actuels reposent sur cette mise en forme générée par la sortie du résumé runjags.

+1

Il serait plus facile de vous aider si vous avez fourni un [exemple reproductible] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible- exemple) avec des données d'entrée d'échantillon, le code que vous utilisez et la sortie désirée pour cette entrée. – MrFlick

+2

Pouvez-vous ajouter un petit exemple de runjags, comme avec rjags/coda le résultat est un mcmc.list qui peut simplement être sous-ensemble la même chose qu'une liste normale – user20650

Répondre

3

Jetez un oeil à la (certes pas très évidemment nommé) divide.jags fonction:

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

Espérons que cela signifie exactement ce que vous voulez.

Matt

+0

Comme toujours, merci beaucoup Matt! – colin