2013-11-19 3 views
1

Я пытаюсь изучить скрытые переменные из наблюдения с помощью pymc. Упрощенная версия состоит в следующем:PyMC: сумма двух значений из независимого распределения

Я хочу узнать два скрытых параметров $ \ lambda_0 \ lambda_1 $,

пока есть два распределения $ X_0, X_1 $ с помощью этих параметров соответственно:

$ X_0 \ sim Expon (\ lambda_0) $, $ X_1 \ sim Expon (\ lambda_1) $.

У меня нет наблюдений за $ X_i $. Вместо этого у меня есть линейные комбинации этих переменных: $ x_0^{(0)} + x_1^{(1)} + x_1^{(1)} = 6 $, $ x_0^{(1)} = 2 $.

Мой первоначальный подход был похож на это, но я не думаю, что это работает:

import pymc 

lambda0 = pymc.Uniform('lambda0', 0, 10) 
lambda1 = pymc.Uniform('lambda1', 0, 10) 
x00 = pymc.Exponential('x00', lambda0) 
x01 = pymc.Exponential('x01', lambda0) 
x10 = pymc.Exponential('x10', lambda1) 
x11 = pymc.Exponential('x11', lambda1) 
z = pymc.Normal('z', mu=[x00+x10+x11, x01], tau=1.0, value=[6, 2], observed=True) 

model = pymc.Model([lambda0, lambda1, x00, x01, x10, x11, z]) 
mcmc = pm.MCMC(model) 
mcmc.sample(10000) 

Не могли бы вы помочь мне с этой игрушкой, например?

+0

Спасибо, я согласен, что переполнение стека - лучший выбор. Я отметил это. – jason

ответ

0

Прежде чем использовать их в качестве аргументов, вы должны создать детерминистическую информацию об экспоненциальных переменных. Попробуйте это:

mu = [x00+x10+x11, x01] 
z = pymc.Normal('z', mu=mu, tau=1.0, value=[6, 2], observed=True) 

Кроме того, вам не нужно, чтобы создать экземпляр как в Model и MCMC объект. Только последнее:

mcmc = pymc.MCMC([lambda0, lambda1, mu, z]) 
Смежные вопросы