обрезка mcmc.list в зазубринах / рягах / бегах - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть выход runjags модели в R как mcmc.list. Ниже приведен код для генерации 3 цепочек из 1000 образцов. Я хотел бы урезать все 12 цепей до последних 400 образцов. Я могу разделить цепочки и сохранить матрицы вывода цепочек в списке, но это больше не mcmc.list, и я не могу понять, как превратить его обратно в mcmc.list.

Вот некоторые данные для запуска модели runjags и преобразования выходных данных в mcmc.list:

y <- rnorm(100)

jags.model ="
model {
#model
for (i in 1:N){
      y[i] ~ dnorm(y.hat[i], tau) 
  y.hat[i] <- m0
}

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

jags.data <- list(y = y, N = length(y))
jags.out <- runjags::run.jags(jags.model,
                              data = jags.data,
                              n.chains = 3,
                              adapt = 100,
                              burnin = 100,
                              sample = 1000,
                              monitor = c('m0'))
z <- coda::as.mcmc.list(jags.out)

1 Ответ

0 голосов
/ 26 апреля 2018

Самый простой способ сделать это - использовать окно:

z2 <- window(z, start=601, end=1000, thin=1)
summary(z2)

Смотри также:

?window.mcmc.list

В качестве альтернативы вы можете использовать as.mcmc и as.mcmc.list для преобразования ваших (списка) усеченных матриц обратно в объект mcmc.list:

library('coda')
z3 <- as.mcmc.list(lapply(z, function(x) as.mcmc(x[601:1000,])))
summary(z3)

Но я бы продолжал использовать окно на твоем месте!

Мэтт

...