Como soy un ingeniero de software que intenta obtener más estadísticas, tendrás que perdonarme incluso antes de que comience, este es un nuevo territorio serio ...
He estado aprendiendo PyMC y trabajando con algunos ejemplos muy (muy) simples. Un problema con el que no puedo trabajar (y no puedo encontrar ningún ejemplo relacionado) es ajustar un modelo a los datos generados a partir de dos distribuciones normales.
Digamos que tengo 1000 valores; 500 generados a partir de a Normal(mean=100, stddev=20)
y otros 500 generados a partir de a Normal(mean=200, stddev=20)
.
Si quiero ajustar un modelo a ellos, es decir, determinar las dos medias y la desviación estándar única, usando PyMC. Sé que es algo parecido a ...
mean1 = Uniform('mean1', lower=0.0, upper=200.0)
mean2 = Uniform('mean2', lower=0.0, upper=200.0)
precision = Gamma('precision', alpha=0.1, beta=0.1)
data = read_data_from_file_or_whatever()
@deterministic(plot=False)
def mean(m1=mean1, m2=mean2):
# but what goes here?
process = Normal('process', mu=mean, tau=precision, value=data, observed=True)
es decir, el proceso de generación es Normal, pero mu es uno de los dos valores. Simplemente no sé cómo representar la "decisión" entre si un valor proviene m1
o no m2
.
¿Quizás solo estoy tomando el enfoque equivocado para modelar esto? ¿Alguien puede señalarme un ejemplo? Puedo leer BUGS y JAGS para que todo esté bien realmente.
Un par de puntos, relacionados con la discusión anterior:
La elección de normal difuso versus uniforme es bastante académica a menos que (a) esté preocupado por la conjugación, en cuyo caso usaría lo normal o (b) existe una posibilidad razonable de que el valor verdadero pueda estar fuera de los puntos finales del uniforme . Con PyMC, no hay razón para preocuparse por la conjugación, a menos que desee usar específicamente una muestra de Gibbs.
Una gamma en realidad no es una gran opción para un no informativo antes de un parámetro de varianza / precisión. Puede terminar siendo más informativo de lo que piensas. Una mejor opción es poner un uniforme antes de la desviación estándar, luego transformarlo en un cuadrado inverso. Ver Gelman 2006 para más detalles.
fuente
tau = std_dev**-2