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

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

4

1 回答 1

0

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

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

然后,您可以调用您创建的对数似然函数来评估您的模型,其中包含任何观察(以前看到或未看到)以及一组参数估计值。

于 2019-03-27T23:14:39.620 回答