How to model/deal with weighted binary outcomes

Hi,

I just wanted to add the solution I’m using now to give weights to my observed data with a Bernoulli likelihood:

import numpy as np
import pymc3 as pm
import theano.tensor as T

N = 1000
P = 0.2

data = np.zeros(N)
data[:int(N * P)] = 1.0
weights  = np.zeros(N)
weights[:int(N * P)] = 4.2

with pm.Model() as model:
    
    p_ = pm.Normal('p_',
                  mu=0.0,
                  sd=1000.0)
    p = pm.Deterministic('p', pm.math.invlogit(p_))
    
    lk = pm.Bernoulli('lk', p=p, observed=data)
    
    pm.Potential('weights', 
                 weights * T.switch(data,
                                    T.log(p),
                                    T.log(1.0 - p)))

    trace = pm.sample(10000)
    
trace['p'].mean()  # 0.5652725372506145
1 Like