24. Mehr Bayesianismus

Leitfragen

Bayesian Updating

Wenn wir über eine Familie von Priors verfügen, können wir unseren Prior den Daten anpassen: Bayesian Updating. Idee dabei: nach jeder Beobachtung ω wird Pneu(μp) = Palt(μp|ω).

Das geht mit diskreten Verteilungen als Prioren, was den Vorteil hat, dass man sich viel hässliche Mathematik erspart. Im folgenden Bild wurde von einer Gleichverteilung auf 28 Werten für p zwischen 0 und 1 ausgegangen und für 20 Bernoulli-Experimente mit p= 0.33 die Verteilung P(μp) per Bayesian Updating geschätzt.

Will man wie im Beispiel den Parameter eines Bernoulli-Experiments schätzen, muss man nur Pneu(p) = b(n;N,p)Palt(b) ausrechnen (die Zahl der Erfolge n kommt natürlich aus einem Experiment, z.B. einer wiederholten Auswertung eines Zufallszahlengenerators, die Zahl der ” Würfe“ N in einem Experiment ist im Prinzip frei wählbar, aber natürlich konvergiert der Schätzer schneller, wenn N größer ist) und das ausreichend lange iterieren.

Man kann nun die resultierenden Verteilungen so aufsummieren, dass ∑ p=p1p2P(μp) >1 -α und hat so etwas wie einen Schätzer zum Niveau α. Das Intervall [p1,p2] entspricht dann in etwa unseren Konfidenzintervallen, aber nicht ganz, weshalb man diese Intervalle belief intervals nennt. Der Hit dabei ist, dass hier die ” natürliche“ Interpretation – wonach unser Parameter mit einer Wahrscheinlichkeit von 1 -α im Intervall liegt – richtig ist.

Bayes’sche Entscheidungen

Bayes hilft auch, Entscheidungen zwischen Hypothesen zu treffen. Eine Hypothese kann etwas sein wie p >0.3 bei einem Bernoulli-Experiment. In der Regel wird man aber eine ganze Menge von Hypothesen H= {h1,h2,...} haben, die dann etwas wie h1 : 0 < p <0.2, h2 : 0.2 < p <0.4 usf. sein könnten. In diesem Sinne ist die (diskrete) Schätztheorie ein Spezialfall des Entscheidens – allerdings werden wir uns beim Entscheiden nicht für Belief Intervals interessieren, sondern nur für die plausibelste Hypothese.

Gegeben sei eine Beobachtung DΩ sowie ein Prior auf der Hypothesenmenge P(h). Die Hypothese gibt die Wahrscheinlichkeit für die Beobachtung von D. Wenn wir die wahrscheinlichste Hypothese suchen, müssen wir

hMAP   = arhgm∈aHx P (h |D )
       = argmax  P(D--|h)P-(h)-
          h ∈H      P (D )

berechnen.

MAP steht hier für Maximum a posteriori.

Ein klassisches Beispiel kann wieder die medizinische Diagnostik sein. Anknüpfend an unser Burizystose-Beispiel von der bedingten Wahrscheinlichkeit wollen wir jetzt den Hypothesenraum H= {g,k} (für Gesund und Krank) untersuchen. Die Verbreitung der Krankheit in der Bevölkerung stellt sich hier als Prior dar, nämlich P(g) = 0.999 und P(k) = 0.001. Wir brauchen zur Berechnung noch die P(D|h).

Das Experiment läuft hier ab über Ω = {pP,nP}, nämlich dem positiven und negativen Ergebnis des Plutopharma-Tests. Nach der Problemstellung gilt

P (pP |g) = 0.01     P (pP |k) = 0.9

P (nP |g) = 0.99     P (nP |k) = 0.1

(natürlich müssen sich die bedingten Wahrscheinlichkeiten auch zu eins ergänzen, was formal einfach nachzuweisen ist, aber auch anschaulich klar ist: Egal, ob jemand krank oder gesund ist, fällt der Test auf jeden Fall positiv oder negativ aus).

Wir rechnen jetzt den Posterior aus; P(D) müssen wir erstmal nicht ausrechnen, weil sich das nachher ohnehin aus der Normalisierung ergibt. Nehmen wir an, pP tritt ein, der Test ist also positiv.

P (g |p ) = P (p  |g)P (g)∕P (D ) = 0.00999 ∕P (D )
       P        P
P (k |pP) = P (pP |k)P (k)∕P (D ) = 0.0009∕P (D )

Nach Normalisierung ergibt sich:

PpostP(g) = 0.91735537   PpostP(k ) = 0.0826446281

– mithin ist die wahrscheinlichste Hypothese nach wie vor, dass der/die PatientIn gesund ist (klar, weil die Wahrscheinlichkeit, dass sie krank ist, eben so niedrig ist), aber unser Glaube an die Gesundheit ist angekratzt. P(D) hätte man hier natürlich auch direkt berechnen können als P(pP|g) + P(pP|k) = 0.01089 – der Weg über die Normalisierung ist aber in Anwendungen meistens bequemer.

Meist muss P(D) aber gar nicht berechnet werden, denn es ist bei Variation von h konstant und spielt damit in der Berechnung von argmax keine Rolle.

Das Tolle an Bayesianischen Methoden ist nun, dass sie die Integration von Evidenz ermöglichen. Wir können nämlich nach diesem ersten, hoffentlich billigen Test, einen besseren und teureren machen, sagen wir die Buropsie. Für sie könnte

P (pB  |g) = 0.01      P(pB |k ) = 0.99
P(nB  |g) = 0.99     P (nB |k ) = 0.01

gelten. Wir können den Posterior aus der letzten Untersuchung als Prior der neuen verwenden und rechnen diesemal von vorneherein nichtnormalisiert; dabei soll der Test wieder positiv ausgefallen sein. Wir haben dann

˜P (g |pB ) = PpostP(g)P (pB |g) = 0.00917    P˜(k |pB ) = PpostP(k)P (pB |k) = 0.0818

– also allen Grund, alarmiert zu sein, denn nun ist unsere MAP-Hypothese mit weitem Vorsprung k, in Worten krank.

Beachtet, dass die zweite, die Nobeluntersuchung, alleine nicht zu diesem Schluss gereicht hätte. Setzt man den ursprünglichen Prior ein, ergibt sich hier

˜P(g |pB ) = P(pB | g)P(g) = 0.00999

P(k |pB ) = P(pB | k)P(k ) = 0.00099,

die MAP-Hypothese wäre also weiterhin ” gesund“

Übungen zu diesem Abschnitt

Ihr solltet euch wenigstens an den rötlich unterlegten Aufgaben versuchen

(1)

Besorgt euch den Quellcode von discPrior.py von der Webseite zur Vorlesung. Lest den Docstring von ScaledArray und macht euch klar, was diese Klasse eigentlich tut und inwieweit sie für einen Prior über kontinuierlichen Verteilungen geeignet ist.

(2)

Lest den Quellcode für getBeliefInterval und vergleicht ihn mit dem, was ihr bei der automatischen Berechnung der Konfidenzintervalle (confInter.py) analysiert habt.

(3)

Wir wollen hier den Parameter einer Binomialverteilung schätzen. Das tut die Klasse BayesianUpdateBernoulliTester. Sie wird konstruiert mit der Zahl der Diskretisierungspunkte und dem Parameter. Die toss-Methode gibt dann die Zahl der Erfolge bei numberOfTosses individuellen Bernoulli-Experimenten zurück. Könnt ihr sehen, warum? Macht euch klar, wie in updateFor die Zahl der Erfolge numberSucc bei numberExp Einzelexperimenten zur Berechnung des neuen Priors verwendet wird.

(4)

Die Funktion runIt steuert mit ihren unzähligen Argumenten einen Testlauf des BayesianUpdateBernoulliTesters. Macht euch klar, was die Argumente bedeuten, seht zu, wie sich die Konfidenzintervalle mit der Zeit verändern. Probiert verschiedene Parameter durch, lasst das Programm (für kleine totalIters) auch mehrmals mit identischen Parametern laufen. Erklärt die Beobachtungen.

(5)

Ihr könnt euch die ” zeitliche“ Entwicklung der Prioren auch ansehen. Das Programm schreibt – so, wie es hier gemacht ist – den aktuellen Prior jeweils in eine Datei priors.log. Mit bloßem Auge ist darin praktisch nichts zu erkennen, gnuplot kann die Daten aber per

splot "priors.log" matrix with lines

visualisieren. Seht euch an, wie das mit verschiedenen Parametern aussieht. Ihr könnt die Ausgabe noch verschönern, etwa mit Anweisungen wie

set hidden  # "hidden lines" werden nicht angezeigt
set view 60, 10  # Richtung, aus der der/die BeobachterIn guckt
set ticslevel 0 # lässt die z-Achse am "Boden" anfangen
set contour # Malt am Boden Höhenlinien

help splot kann euch weitere Ideen geben.

Dateien zu diesem Abschnitt


Markus Demleitner

Copyright Notice