Странные результаты моделирования монеты с помощью Pymc Stochastic
Я имитирую случайную величину, которая принимает два значения - 1 и 9 с равной вероятностью. Я знаю, что могу сделать это с помощью pymc.Bernoulli, но хочу просто быть уверенным, как работает @stochastic.
import pymc as pm
import numpy as np
@pm.stochastic(dtype=int, observed=False)
def coin(value=1):
if ( value != 1 and value != 9):
return -np.inf
return -np.log(2)
model = pm.Model([coin])
mcmc = pm.MCMC(model)
SAMPLE_NUM = 20000
mcmc.sample(SAMPLE_NUM)
samples = mcmc.trace("coin")[:]
onesCount = sum(filter(lambda x: x == 1, samples))/1 # count number of 1
ninesCount = sum(filter(lambda x: x == 9, samples))/9 # count number of 9
allCount = len(samples)
print "\nnumber of samples=%d, number of ones=%d, number of nines=%d, probability of nine=%f" % (allCount, onesCount, ninesCount, ninesCount/float(allCount))
Это дает следующий вывод
number of samples=20000, number of ones=20000, number of nines=0, probability of nine=0.000000
Вероятность 9 должна быть несколько близка к 0,5, но она равна 0! Что интересно, если я возьму 2 и 3 вместо 1 и 9, результат выглядит нормально
probability of three=0.496650
Определенно, я что-то здесь упустил.