Currently, I’m working on a model which involves Bernoulli distributions. As I’m utilizing ADVI, it is not possible to utilize discrete/binary RVs. Therefore, I was trying to implement the continuous Bernoulli distribution: https://arxiv.org/abs/1907.06845 . There is also a wikipedia article based on the paper: https://en.wikipedia.org/wiki/Continuous_Bernoulli_distribution
However, I have some difficulties in implementing the distribution by using pm.DensityDist. My formulation is inspired by other posts here in the forum, still I get a TypeError. Below is a simplified model where I get the error. Is there anything I miss here?
import numpy as np import pymc3 as pm from theano import tensor as T from theano.ifelse import ifelse def logp_cont_bernoulli(x, lam_psi): C = ifelse(T.eq(lam_psi, 1 / 2), np.float64(2), (2 * T.arctanh(1 - 2 * lam_psi)) / (1 - 2 * lam_psi)) return T.log(C * lam_psi ^ x * (1 - lam_psi) ^ (1 - x)) obs_data = np.array([1,0,0,0,0,0,1,1]).astype('int16') with pm.Model() as model: # prior lam_psi = pm.Bound(pm.Normal, lower=0.0, upper=1.0)('lam_psi', mu=0.3, sd=0.05, testval=0.3) # likelihood like = pm.DensityDist('like', logp_cont_bernoulli, observed=dict(x=obs_data, lam_psi=lam_psi)) # sampling trace = pm.sample(2000)