Мне нужно построить функцию супер-правдоподобия из нескольких случайных величин. Распределение каждой переменной является стандартным.
Используя в качестве примера две случайные переменные, целевое супер-правдоподобие выглядит следующим образом:
S = F1 ^ w1 * F2 ^ w2 (s.t w1 + w2 = 1)
или эквивалентно,
logS = w1 logF1 + w2 log F1 (s.t. w1 + w2 = 1).
Где F1 ~ Нормальное распределение и F2 ~ Распределение Бернулли
Я использую следующие коды
data = <load my data>
[w1,w2] = [0.5,0.5]
with Model() as model:
mu = pm.Uniform('mu',lower=0,upper=1)
sd = pm.Uniform('sd',lower=0,upper=1)
p = pm.Uniform('p',lower=0,upper=1)
F1 = pm.Normal("F1", mu = mu, sigma = sd)
F1 = pm.Bernoulli("F2",p)
S = pm.Deterministic('S',F1**w1*F2**w2, observed=data)
step = Metropolis()
trace = pm.sample(2000, step=step)
Но это не работает.
Помогите, пожалуйста, реализовать такую модель взвешенного правдоподобия в pyMC3.