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

时间:2019-03-27 17:30:34

标签: r bayesian stan rstan log-likelihood

我了解我可以计算出采样期间每个样本的对数似然,例如

...

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定义我的模型(我假设)。

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

https://mc-stan.org/loo/articles/loo2-lfo.html

1 个答案:

答案 0 :(得分:0)

感谢@dipetkov的链接,我自己解决了这个问题。我没有在link中使用确切的方法,但是想出了一个替代方法。您可以从R调用stan函数来获取它,以计算模型的对数似然,即使有看不见的数据(而且速度非常快!)。

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

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