2024-06-16 13:14:09 发布
网友
我需要对数似然项的后验样本来运行psi here,这样
log_lik : ndarray Array of size n x m containing n posterior samples of the log likelihood terms :math:`p(y_i|\theta^s)`.
其中小例子here就是pip install pystan和
pip install pystan
如何获得PyStan拟合模型对数似然的后验样本?
您可以通过以下操作获得对数似然的后验样本:logp = fit.extract()['lp__']
logp = fit.extract()['lp__']
我相信在这种情况下计算对数可能性的正确方法是:
generated quantities { vector[J] log_lik; for (i in 1:J) log_lik[i] = normal_lpdf(y[i] | theta, sigma); }
之后,您可以运行以下PSI:
完整代码将变成:
import pystan from psis import psisloo schools_code = """ data { int<lower=0> J; // number of schools real y[J]; // estimated treatment effects real<lower=0> sigma[J]; // s.e. of effect estimates } parameters { real mu; real<lower=0> tau; real eta[J]; } transformed parameters { real theta[J]; for (j in 1:J) theta[j] = mu + tau * eta[j]; } model { eta ~ normal(0, 1); y ~ normal(theta, sigma); } generated quantities { vector[J] log_lik; for (i in 1:J) log_lik[i] = normal_lpdf(y[i] | theta, sigma); } """ schools_dat = {'J': 8, 'y': [28, 8, -3, 7, -1, 1, 18, 12], 'sigma': [15, 10, 16, 11, 9, 11, 10, 18]} sm = pystan.StanModel(model_code=schools_code) fit = sm.sampling(data=schools_dat, iter=1000, chains=4) loo, loos, ks = psisloo(fit['log_lik']) print('PSIS-LOO value: {:.2f}'.format(loo))
您可以通过以下操作获得对数似然的后验样本:
logp = fit.extract()['lp__']
我相信在这种情况下计算对数可能性的正确方法是:
之后,您可以运行以下PSI:
^{pr2}$完整代码将变成:
相关问题 更多 >
编程相关推荐