def mixture_of_real_and_int(): loc = ed.Normal(loc=0., scale=1., name="loc") flip = ed.Bernoulli(probs=0.5, name="flip") if tf.equal(flip, 1): x = ed.Normal(loc=loc, scale=0.5, sample_shape=5, name="x") else: x = ed.Poisson(rate=tf.nn.softplus(loc), sample_shape=3, name="x") return x
def model(home_id, away_id, score1_obs=None, score2_obs=None): # priors alpha = ed.Normal(loc=0.0, scale=1.0, name="alpha") sd_att = ed.StudenT(df=3.0, loc=0.0, scale=2.5, name="sd_att") sd_def = ed.StudenT(df=3.0, loc=0.0, scale=2.5, name="sd_def") home = ed.Normal(loc=0.0, scale=1.0, name="home") # home advantage nt = len(np.unique(home_id)) # team-specific model parameters attack = ed.Normal(loc=0, scale=sd_att, sample_shape=nt, name="attack") defend = ed.Normal(loc=0, scale=sd_def, sample_shape=nt, name="defend") # likelihood theta1 = tf.exp(alpha + home + attack[home_id] - defend[away_id]) theta2 = tf.exp(alpha + attack[away_id] - defend[home_id]) s1 = ed.Poisson(theta1, name="s1") s2 = ed.Poisson(theta2, name="s2") return s1, s2