Странные результаты моделирования монеты с помощью 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

Определенно, я что-то здесь упустил.

0 ответов

Другие вопросы по тегам