为 WAIC 编写对数似然(逻辑层次 stan 模型)
Posted
技术标签:
【中文标题】为 WAIC 编写对数似然(逻辑层次 stan 模型)【英文标题】:Writing log likelihood for WAIC (logistic hierarchal stan model) 【发布时间】:2018-08-15 00:28:48 【问题描述】:我正在创建一个新模型,我想将它与另一个使用 WAIC 的模型进行比较。我知道我需要编写一个生成的数量块。但是,我正在努力转换 beta 的 logsumexp。我将不胜感激任何线索/帮助。我的模型块如下所示:
model
//prior for phi,b
phi ~ cauchy(0,5);
mu_b ~ normal(0,1);
sigma_b ~ cauchy(0,1);
mu ~ normal(0,1);
sigma ~ cauchy(0,1);
//model
log_b_z ~ normal(0, 1);
theta_raw ~ normal(mu, sigma);
for (i in 1:n)
vector[number_segments] test;
for (j in 1:number_segments)
test[j] = beta_lpdf(response[i] | p[j][i]*phi, (1-p[j][i])*phi) + log(prob_segment[j]);
target += log_sum_exp(test);
【问题讨论】:
看看R库loo
,它提供了一种基于stan
模型计算WAIC的方法。
【参考方案1】:
您需要定义一个生成量块,用于定义每个数据点的后验预测对数可能性。
您可以通过这种方式实现重新计算最少的混合。
transformed parameters
vector[n] log_lik;
vector[number_semgnents log_prob_segment = log(prob_segment);
for (i in 1:n)
vector[number_segments] lp = log_prob_segment;
for (j in 1:number_segments)
lp[j] += beta_lpdf(response[i] | p[j, i] * phi, (1 - p[j, i]) * phi);
log_lik[i] = log_sum_exp(lp);
...
model
target += sum(log_lik);
...
您还可以将log_lik
定义为生成的数量——如果您可以对可能性进行矢量化处理(这对于 Stan 中的混合尚不可行),效率会更高。
完成后,您可以使用 loo 包计算 WAIC 等,如小插图和参考资料中所述。
【讨论】:
以上是关于为 WAIC 编写对数似然(逻辑层次 stan 模型)的主要内容,如果未能解决你的问题,请参考以下文章