评估rstan中看不见的数据的对数似然性

问题描述 投票:1回答:1

我知道我可以计算采样过程中每个样本的对数似然,例如

...

model {

  for (i in 1:N) {
    (y[i] - 1) ~ bernoulli(p[i, 2]);
  }

}

generated quantities {

  vector[N] log_lik;
  for (i in 1:N){
    log_lik[i] = bernoulli_lpmf((y[i] - 1) | p[i, 2]);
  }

}

拟合后,我可以使用loo包提取对数似然:

log_lik_m <- extract_log_lik(stan_fit)

但我想评估看不见的数据的对数可能性。这在brms中是可能的:

ll <- log_lik(fit_star, newdata = new_df)

但我想用rstan这样做,因为我不能轻易地在brms中定义我的模型(我假设)。

作为参考,我试图使用Estimated LFO-CV来评估和比较我的时间序列模型。 (例如https://github.com/paul-buerkner/LFO-CV-paper/blob/master/sim_functions.R#L186

(Qazxswpoi)

r bayesian stan rstan log-likelihood
1个回答
0
投票

感谢@dipetkov的链接,我自己解决了这个问题。我没有使用https://mc-stan.org/loo/articles/loo2-lfo.html中的确切方法,但提出了另一种选择。您可以从R调用stan函数来使其计算模型的对数似然,即使是看不见的数据(也非常快!)。

首先,我将我的link块中的所有内容放入stan的transformed parameters块中的函数中。然后,我创建了第二个包装第一个函数的函数,并评估给定观察的对数似然和提供的参数估计(然后我删除了我的functions块)。 generated_quantities有一个函数rstan,它将stan expose_stan_functions块中的所有函数添加到R环境中。

然后,您可以调用您使用任何观察值(先前已见或未见过)评估模型的对数似然函数,以及一组参数估计值。

© www.soinside.com 2019 - 2024. All rights reserved.