def expectation_z(mu, var, L, w = 3):
"""
USE LAPLACE approx
Evaluate the expectation of log[ S(u)^L (1-S(u))^(1-L) ]
when u ~ Normal(mu, var)
"""
if L == 1:
f = lambda u: np.log(S(u))
fpp = lambda x: -np.exp(x) / pow(1 + np.exp(x), 2)
return f(mu) + 0.5* fpp(mu)*var
else:
f = lambda u: np.log(1 - S(u))
fpp = lambda x: -np.exp(x) / pow(1 + np.exp(x), 2)
return f(mu) + 0.5* fpp(mu)*var
# need: E[u~N](f)
return scipy.integrate.quad(f, mu - w*std, mu + w*std)[0]
评论列表
文章目录