PyMC: получение нуля или значения, близкого к нулю

Я пытаюсь оценить ставки по стохастической модели Петри. Я не понимаю, почему, но я получаю ошибку ZeroProbability даже при составлении данных, которые точно соответствуют ожидаемому количеству наблюдений с учетом начальных значений, которые я определяю для скоростей.

Например, следующие показатели [0,01, 2, 10, 1] соответствуют вероятности 3 различных исходов [0,33, 0,66, 0,01]. Если бы я наблюдал, 100 результатов, я ожидал бы наблюдать, что [33, 66, 1] попадают в каждый из результатов.

Тем не менее, если я запускаю следующую модель, я получаю ошибку ZeroProbability (я упрощаю функцию prob, которая подключается к гораздо большему куску кода):

data=[33,66,1]
rates=pymc.Uniform('rates',0,100,size=4,value=[0.01,2,10,1])

@pymc.deterministic
def prob(rates=rates):
    return np.array([0.33,0.66,0.01])

likelihood=pymc.Categorical('likelihood',p=prob,value=data,observed=True)

Вызов pymc.categorical_like(data,prob.value) возвращает -1,8 e308...

Что мне не хватает?

1 ответ

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

Категориальное распределение эквивалентно полиномиальному распределению с числом испытаний, равным единице.

Следовательно, Категориальная вероятность имеет только вероятности различных результатов в качестве параметра и принимает частоты в качестве наблюдаемых данных.

С другой стороны, мультиномиальное распределение принимает вероятности различных результатов И количество испытаний в качестве параметров и принимает количество наблюдений за результат в качестве данных.

Следующий код работает как я ожидал:

data=np.array([33,66,1])
rates=pymc.Uniform('rates',0,100,size=4,value=[0.01,2,10,1])

@pymc.deterministic
def prob(rates=rates):
    return np.array([0.33,0.66,0.01])

likelihood=pymc.Multinomial('likelihood',n=sum(data),p=prob,value=data,observed=True)

И две следующие вероятности очень похожи:

pymc.categorical_like(data/data.sum(),prob.value)
pymc.multinomial_like(data,sum(data),prob.value)
Другие вопросы по тегам