我了解我可以计算出采样期间每个样本的对数似然,例如
...
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)
答案 0 :(得分:0)
感谢@dipetkov的链接,我自己解决了这个问题。我没有在link中使用确切的方法,但是想出了一个替代方法。您可以从R调用stan函数来获取它,以计算模型的对数似然,即使有看不见的数据(而且速度非常快!)。
首先,我将transformed parameters
块中的所有内容放入stan的functions
块中的函数中。然后,我创建了第二个函数,该函数包装了第一个函数,并针对给定的观测值和提供的参数估计值评估了对数似然(然后删除了generated_quantities
块)。 rstan
具有函数expose_stan_functions
,该函数将stan functions
块中的所有函数添加到R环境。
然后,您可以调用对数似然函数,以使用任何观测值(先前已看到或未看到)以及一组参数估计值来评估模型。