Как rstan хранит апостериорные образцы для отдельных цепочек?

Я хотел бы понять, как вывод extract в rstan упорядочивает апостериорные образцы. Я понимаю, что могу просмотреть апостериорные образцы из каждой цепочки, используя as.array,

stanfit <- sampling(
  model,
  data = stan.data)
​
fitarray <- as.array(stanfit)

Например, fitarray[, 2, 1] даст мне образцы для второй цепочки первого параметра. Один из способов сохранить апостериорные отсчеты в выводе extract - просто объединить их. Когда я делаю,

fit <- extract(stanfit)
mean(fitarray[,2,1]) == mean(fit$ss[1001:2000]) 

для нескольких цепочек и параметров я всегда получаю TRUE (ss - первый параметр). Это создает впечатление, что апостериорные выборки объединяются в fit. Однако когда я это сделаю,

fitarray[,2,1] == fit$ss[1001:2000]

Я получаю FALSE (подтверждено, что разница не только в точности). Похоже, что fitarray и fit по-разному хранят итерации. Как просмотреть итерации (по порядку) каждой цепочки апостериорных выборок отдельно?


person NewNameStat    schedule 14.08.2018    source источник


Ответы (1)


Как видно из rstan:::as.array.stanfit, метод as.array по существу определяется как

extract(x, permuted = FALSE, inc_warmup = FALSE)

По умолчанию вы используете extract, чтобы сохранить разминку и переставить розыгрыши после разминки случайным образом, поэтому индексы не совпадают с выходными данными as.array.

person Ben Goodrich    schedule 14.08.2018