Как получить полное предельное распределение параметра в стандарте
При запуске стандартного примера из stan
веб-страница, как показано ниже:
schools_code <- '
data {
int<lower=0> J; // number of schools
real y[J]; // estimated treatment effects
real<lower=0> sigma[J]; // s.e. of effect estimates
}
parameters {
real theta[J];
real mu;
real<lower=0> tau;
}
model {
theta ~ normal(mu, tau);
y ~ normal(theta, sigma);
}
'
schools_dat <- list(J = 8,
y = c(28, 8, -3, 7, -1, 1, 18, 12),
sigma = c(15, 10, 16, 11, 9, 11, 10, 18))
fit <- stan(model_code = schools_code, data = schools_dat,
iter = 1000, n_chains = 4)
(это было получено здесь)
однако это только дает мне квантили задних параметров. поэтому мой вопрос: как получить другие процентили? я думаю, это должно быть похоже на ошибки (?)
примечание: я попытался ввести тег stan
однако, у меня слишком мало репутации;) извините за это
2 ответа
Вот моя попытка надеюсь, что это правильно:
предполагать fit
это объект, полученный из stan(...)
, тогда апостериор для любого процентиля получается из:
quantile(fit@sim$sample[[1]]$beta, probs=c((1:100)/100))
где число в квадратных скобках - это цепочка, я думаю. в случае, если это не было ясно: я использую rstan
Как из rstan v1.0.3
(еще не выпущен), вы сможете использовать рабочую лошадку apply()
функционировать непосредственно на объекте stanfit class
что производится stan() function
, Если подходит это объект, полученный из stan()
то, например,
apply(fit, MARGIN = "parameters", FUN = quantile, probs = (1:100) / 100)
или же
apply(as.matrix(fit), MARGIN = 2, FUN = quantile, probs = (1:100) / 100)
Первый применяет FUN к каждому параметру в каждой цепочке, а последний объединяет цепочки перед применением FUN к каждому параметру. Если вас интересует только один параметр, то что-то вроде
beta <- extract(fit, pars = "beta", inc_warmup = FALSE, permuted = TRUE)[[1]]
quantile(beta, probs = (1:100) / 100)
это вариант.