Da ich ein Softwareentwickler bin, der versucht, mehr Statistiken zu lernen, müssen Sie mir vergeben, bevor ich überhaupt anfange. Dies ist ein ernstes Neuland ...
Ich habe PyMC gelernt und einige wirklich (wirklich) einfache Beispiele durchgearbeitet . Ein Problem, bei dem ich nicht zur Arbeit kommen kann (und für das ich keine verwandten Beispiele finden kann), ist das Anpassen eines Modells an Daten, die aus zwei Normalverteilungen generiert wurden.
Angenommen, ich habe 1000 Werte. 500 generiert von a Normal(mean=100, stddev=20)
und weitere 500 generiert von a Normal(mean=200, stddev=20)
.
Wenn ich ihnen ein Modell anpassen möchte, dh die beiden Mittelwerte und die einzelne Standardabweichung mithilfe von PyMC bestimmen. Ich weiß, es ist etwas in der Art von ...
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)
Das heißt, der Erzeugungsprozess ist Normal, aber mu ist einer von zwei Werten. Ich weiß nur nicht, wie ich die "Entscheidung" zwischen einem Wert von m1
oder darstellen soll m2
.
Vielleicht gehe ich einfach völlig falsch vor, um dies zu modellieren? Kann mich jemand auf ein Beispiel hinweisen? Ich kann BUGS und JAGS lesen, also ist wirklich alles in Ordnung.
Einige Punkte im Zusammenhang mit der obigen Diskussion:
Die Wahl zwischen diffusem Normal und Uniform ist ziemlich akademisch, es sei denn (a) Sie sind besorgt über die Konjugation. In diesem Fall würden Sie das Normal verwenden oder (b) es besteht eine vernünftige Wahrscheinlichkeit, dass der wahre Wert außerhalb der Endpunkte der Uniform liegt . Bei PyMC gibt es keinen Grund, sich über die Konjugation Gedanken zu machen, es sei denn, Sie möchten speziell einen Gibbs-Sampler verwenden.
Ein Gamma ist eigentlich keine gute Wahl für einen Uninformativen vor einem Varianz- / Präzisionsparameter. Es kann informativer sein, als Sie denken. Eine bessere Wahl ist es, der Standardabweichung eine Uniform vorzuziehen und sie dann durch ein umgekehrtes Quadrat zu transformieren. Siehe Gelman 2006 für Details.
quelle
tau = std_dev**-2