2014-06-05 6 views
4

Я пытаюсь установить ограничения при затягивании переменных через подход MCMC с PyMC К примеру, я определил следующие стохастические модели в PyMCPyMC: Установка ограничений при затягивании Модель

import pymc as pm 
a=pm.Uniform('a',lower=0.,upper=1.,value=0.2) 
b=pm.Uniform('b',lower=0.,upper=1.,value=0.2) 

Как я могу определить модель так что b всегда меньше или равно a? Действительно ли это правильный подход?

a=pm.Uniform('a',lower=0.,upper=1.,value=0.2) 
b=pm.Uniform('b',lower=0.,upper=b,value=0.2) #used a as the upper bound for b 

ответ

0

Я считаю, что вы имеете в виду «верхний = а».

Я думаю, вы можете определить «Ъ» в качестве стохастической переменной, в зависимости от «а», как в следующем примере:

import pymc as pm 
import numpy as np 
import scipy.stats as scs 

@pm.stochastic 
def b(value=0.0, a=a): 
    def logp(value, a): 
     if 0 <= value <= a: 
      return np.log(1/a) 
     else: 
      return -np.inf 

    def random(a): 
     return scs.uniform(0, a).rvs() 

Теперь вы можете проверить переменную, вызвав «b.random() ', и вы должны увидеть равномерное распределение, ограниченное сверху символом' a '(' a.value ').

Посмотрите документацию PyMC на variables.