Hace poco leí el excelente libro Programación probabilística y métodos bayesianos para hackers y estoy tratando de resolver algunos problemas por mi cuenta:
Realizo un experimento para estimar la fiabilidad de un dispositivo (por ejemplo CPU, coche, ventilador, etc.) comprando 1000 dispositivos y haciéndolos funcionar durante un período de 1 año para ver cuántos fallan. Mi experimento muestra que 0 de de ellos han fallado durante ese periodo. ¿Cuál es mi intervalo de confianza del 95% de la tasa de fallos?
Si el número de dispositivos que fallaron fuera distinto de cero, podría estimar la media y el intervalo de confianza con técnicas estándar como el cálculo del error estándar o el bootstrap. El hecho de que hayan fallado 0 dispositivos lo hace mucho más complicado. Intento utilizar PyMC para resolverlo:
import numpy as np
import pymc as pm
data = np.zeros(1000) # observed data: zero failures out of 1000 devices
p = pm.Uniform('p', 0, 1) # model the failure rate as a uniform distribution from 0 to 1
obs = pm.Bernoulli('obs', p, value=data, observed=True) # each device can fail or not fail. i.e. the observations follow a Bernoulli distribution
model = pm.Model([obs, p])
mcmc = pm.MCMC(model)
mcmc.sample(40000, 10000, 1)
print np.percentile(mcmc.trace('p')[:], [2.5, 97.5])
> [3.3206054853225512e-05, 0.0037895137242935613]
- ¿Es correcto mi modelo?
- ¿Es correcto mi uso de PyMC?
- ¿Puede alguien confirmar mi respuesta con otro método? ¿Tal vez de forma analítica utilizando una distribución de Poisson?
P.D. Prácticamente no sé nada de la teoría que hay detrás de MCMC, pero el enfoque de la aplicación, primero, y de las matemáticas, después, del libro es excelente.