Étant donné que je suis un ingénieur logiciel essayant d'apprendre plus de statistiques, vous devrez me pardonner avant même de commencer, c'est un nouveau territoire sérieux ...
J'ai appris PyMC et travaillé à travers des exemples vraiment (vraiment) simples. Un problème pour lequel je ne peux pas travailler (et je ne trouve aucun exemple connexe) est l'ajustement d'un modèle aux données générées à partir de deux distributions normales.
Disons que j'ai 1000 valeurs; 500 générés à partir d'un Normal(mean=100, stddev=20)
et 500 autres générés à partir d'un Normal(mean=200, stddev=20)
.
Si je veux leur adapter un modèle, c'est-à-dire déterminer les deux moyennes et l'écart-type unique, en utilisant PyMC. Je sais que c'est quelque chose comme ...
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)
c'est-à-dire que le processus de génération est Normal, mais mu est l'une des deux valeurs. Je ne sais tout simplement pas comment représenter la "décision" entre le fait qu'une valeur provienne de m1
ou m2
.
Peut-être que je prends complètement la mauvaise approche pour modéliser cela? Quelqu'un peut-il me donner un exemple? Je peux lire les BUGS et JAGS donc tout va bien vraiment.
Quelques points, liés à la discussion ci-dessus:
Le choix de la normale diffuse par rapport à l'uniforme est assez académique, sauf si (a) vous vous inquiétez de la conjugaison, auquel cas vous utiliseriez la normale ou (b) il y a une chance raisonnable que la vraie valeur puisse être en dehors des points limites de l'uniforme . Avec PyMC, il n'y a aucune raison de s'inquiéter de la conjugaison, sauf si vous souhaitez spécifiquement utiliser un échantillonneur Gibbs.
Un gamma n'est en fait pas un excellent choix pour un non informatif avant un paramètre de variance / précision. Cela peut finir par être plus informatif que vous ne le pensez. Un meilleur choix est de mettre un a priori uniforme sur l'écart-type, puis de le transformer par un carré inverse. Voir Gelman 2006 pour plus de détails.
la source
tau = std_dev**-2