Logarithmische Gleichverteilung |
27.02.2012, 19:34 | vogelstrauss | Auf diesen Beitrag antworten » | |||||||||||||||
Logarithmische Gleichverteilung ich habe ein Problem beim samplen von einer logarithmischen Gleichverteilung in R mit Hilfe des Metropolis-Hasting Algorithmus. Bei der nichtlogarithmischen Gleichverteilung im Intervall [a,b] mit der Dichtefunktion klappt es (siehe Code unten), ich sample x 10000 mal und bekomme einen Mittelwert von ca 0.5 bei a=0 und b=1. Bei der logarithmischen Glecihverteilung mit Dichtefunktion sample ich x 10000 mal, aber der Mittelwert von exp(aller x-Werte) ist ungefaehr 1. Wie kann das sein? Warum kann ich nicht meine Verteilung als logarithmierte Werte samplen und dann mit der e-Funktion wieder auf eine nicht-logarithmische Skala bringen? Irgendwas wichtiges bei logarithmischen Verteilungen scheint mir noch nicht klar zu sein... Hier mein Code in R:
Ich hoffe, mir kann jemand helfen, ich bin schon sehr lange am Raetseln!! Vielen Dank und viele Gruesse, vogelstrauss |
|||||||||||||||||
27.02.2012, 19:59 | HAL 9000 | Auf diesen Beitrag antworten » | |||||||||||||||
Kann es sein, dass deine Funktionen gar nicht die Dichten, sondern die Logarithmen der Dichten zurückliefern müssen? Aus welchen Gründen sonst soll hier statt 0 stehen? Bei der Gleichverteilung fällt der Unterschied nicht auf, da MCMC die Dichten sowieso nur bis auf einen Vorfaktor genau benötigt - bei der anderen Verteilung schon! |
|||||||||||||||||
28.02.2012, 12:33 | vogelstrauss | Auf diesen Beitrag antworten » | |||||||||||||||
Ich glaube nicht, dass die Funktion die Logarithmen der Dichten liefern muss... Hier ein Auszug aus der Dokumentation der metrop-Funktion:
Deswegen scheint auch das Beispiel fuer die non-logarithmische Skala mir den erwarteten Mittelwert zu geben (~0.5), aber ich verstehe immer noch nicht, wie ich es anstellen kann, im Logspace zu samplen damit mean(exp(alle_samples)) wieder 0.5 ist... Danke fuer die Antwort! |
|||||||||||||||||
28.02.2012, 13:42 | HAL 9000 | Auf diesen Beitrag antworten » | |||||||||||||||
Ohne weiteren Kommentar
------------------------------------- Nachdem diese Sache geklärt ist, dann doch noch ein Wort zu deiner "logarithmischen Gleichverteilung", dieser Begriff ist ja nicht gerade allgemein gebräuchlich: Du sprichst davon, dass auf logarithmisch gleichverteilt ist, wenn auf stetig gleichverteilt ist - oder? In dem Fall ist aber , was im Fall einen Wert erwarten lässt, d.h. gewiss nicht die von dir erwarteten 0.5. EDIT: An sich hätte ich ja noch irgendeine Reaktion erwartet - nicht die des Vogels Strauß, der seinen Kopf in den Sand steckt... |
|||||||||||||||||
07.03.2012, 15:37 | vogelstrauss | Auf diesen Beitrag antworten » | |||||||||||||||
Hallo HAL, Entschuldigung fuer das Kopf-in-den-Sand-Stecken; nach der Antwort hab ich mich nicht getraut, nochmal nachzufragen, obwohl ich es immer noch nicht verstanden habe (wegen dem Titel "Ohne weiteren Kommentar", ich dachte das Problem ist wohl zu trivial...). Zudem bekomme ich leider keine email-Benachrichtigung, wenn ein Kommentar nochmal editiert wird, deshalb habe ich nicht gewusst, dass noch was kam... "Logarithmische Gleichverteilung" war wohl nicht das, was ich meinte. Ich beschreibe mal mein ganzes Problem: Ich habe einen Vektor aus 5 parametern, die ich mit Metropolis gleichzeitig samplen will. Diese 5 Parameter will ich mit meinen Messdaten vergleichen und mit least-squares die Kosten fuer diese Parameter berechnen. Ausserdem weiss ich aus der Literatur, dass Parameter #5 normalerweise Werte zwischen 0 und 1 hat und sehr selten Werte ein wenig ueber 1. Also moechte ich, dass fuer Parameter #5 Werte zwischen 0 und 1 mit hoeherer W-keit gesampled werden. dazu verbinde ich eine Gleichverteilung mit einer Lognormalverteilung (mit mean=1). Da es keinen Sinn macht, dass ein Parameter <0 ist, moechte ich gerne im Logspace samplen, die least-squares-Berechnung soll aber mit nicht-logarithmierten Werten arbeiten. Also habe ich eine 'normale' und eine log-Kostenfunktion:
Die Berechnung der Least-squares kosten ist hier weggelassen, aber das ist hier glaube ich auch nicht das Problem. Wenn ich jetzt sample und die Verteilung des 5. Parameters plotte:
bekomme ich auch genau die Verteilung, die ich wollte. Aber hier liegt mein grosses Problem: Ich will ja (und hab ja) im Logspace gesampled!! Und deshalb koennen in meinem batch die Werte von den anderen 4 Parametern negativ werden, was ich ja verhindern wollte! Was ich genau will, ist dass exp(out$batch[,5]) mir die gewuenschte Verteilung (uniform in [0,1] und lognormal fuer >1) gibt! Ich verstehe einfach nicht, wie das funktionieren kann und ich verstehe auch nicht, was in der Hilfe mit "log unnormalized probability density" gemeint ist... Zum Beispiel hier
gebe ich doch den Logarithmus der Dichtefunktion zurueck, das ist doch dann nicht "log unnormalized"?? Sorry fuer den langen Beitrag, aber jetzt hab ich das komplette Problem beschrieben. Falls Sie noch interessiert sind, mir zu helfen, waere ich sehr dankbar. Ich denke, ich verstehe die Essenz der logarithmischen Verteilungen noch nicht. viele Gruesse vogelstrauss |
|||||||||||||||||
07.03.2012, 16:42 | HAL 9000 | Auf diesen Beitrag antworten » | |||||||||||||||
Ich bin nicht völlig unbewandert mit MCMC, insbesondere Metropolis-Hastings. Und nachdem ich zwischenzeitlich die Dokumentation von deinem R-Paket "mcmc" überflogen habe - leider konnte ich es auf meiner Windows-Version von R nicht zum Laufen bringen, weil ich keine vorkomplierte Windows-DLL-gefunden habe und keine Lust hatte, mich selber durch die Erzeugung einer solchen zu kämpfen - bin ich mir vollkommen sicher, dass mit "log unnormalized density" einfach der Logarithmus der Dichte deiner zu simulierenden Verteilung gemeint ist. Allerdings musst du diese Dichte nur bis auf einen Vorfaktor genau kennen, d.h. du musst nur ein kennen, für das es einen Proportionalitätsfaktor gibt, so dass für alle gilt. Man symbolisiert das gern mit . In dem Sinne kann man für eine Gleichverteilung auf dem Intervall schlicht und einfach durch die nicht-normalisierte Dichte beschreiben, in dem Sinne wäre dann der Proportionalitätsfaktor . Deine R-Prozedur muss nun den Logarithmus einer solchen nicht-normalisierten Dichte liefert, hier bei der Gleichverteilung wäre das demnach . Während also nur bis auf einen Faktor eindeutig bestimmt ist, bewirkt der Logarithmus, dass nur bis auf eine additive Konstante eindeutig bestimmt ist. D.h., der Metropolis-Algorithmus arbeitet für jede beliebige Wahl von in gleich - alle diese "log unnormalized densities" beschreiben ein- und dieselbe Verteilung, eben jene stetige Gleichverteilung auf . |
|||||||||||||||||
Anzeige | |||||||||||||||||
|
|||||||||||||||||
07.03.2012, 18:02 | vogelstrauss | Auf diesen Beitrag antworten » | |||||||||||||||
Vielen Dank fuer die Hilfe, Das mit den log-unnormalized densities habe ich jetzt glaub ich verstanden, auch das mit der Konstanten ist klar, da Die Dichte in ueberall gleich ist. Da ich fuer Werte >1 die (logarithmierte) Dichte der Normalverteilung zurueckgeben will, sieht meine logarithmierte Dichte nun so aus: Wenn ich das mit mcmc sample funktioniert das auch sehr gut, das Histogramm der Verteilung sieht so aus, wie ich es erwarte. Mein Problem ist, dass beim Samplen recht viele negative Werte vorgeschlagen werden, bei der die Dichte immer ist, was natuerlich dann mein acceptance-ratio verringert. Negative Werte machen in meinen Berechnungen keinen Sinn, da ich Messdaten simuliere. Deshalb wuerde ich gerne im Logspace samplen, so dass alle vorgeschlagenen Parameterwerte positiv sind. Ich wuerde also gerne anstatt
und dann die Verteilung erhalten, die ich auch beim normalen samplen, ohne Logspace bekommen wuerde. Macht das Sinn? In dem code Beispiel hier funktioniert das natuerlich nicht und ich verstehe nicht, warum. Wie kann ich im logspace so samplen, dass der Exponent meiner posterior-Verteilung (exp(batch)) die oben genannte Dichte hat? Ich hoffe, mein Problem ist verstaendlich, Gruesse vogelstrauss |
|||||||||||||||||
07.03.2012, 18:18 | HAL 9000 | Auf diesen Beitrag antworten » | |||||||||||||||
Nein, so richtig verstehe ich nicht, was du da genau betrachtest. Das mag u.a. auch an der befremdlichen Symbolik liegen - man muss sich alles erstmal aus dem R-Quelltext mühsam rücküberlegen, weil die mathematischen Formeln nur sehr schwer zu gebrauchen sind: Was soll z.B. sein? Soll das die Dichte der -Verteilung an der Stelle sein? Da hätte ich zumindest in der Parameterliste jender Funktion erwartet, also etwa , wenn schon nicht in der allgemein gebräuchlichen Variante mit Dichte der Standardnormalverteilung. Sätze wie
finde ich erst recht unverständlich. Du darfst nicht davon ausgehen, dass jeder die Sonderbezeichnungen ("batch" ???) deines R-Pakets kennt.
Das liegt ja nicht an der zu sampelnden Dichte, sondern an der Wahl der Vorschlagsverteilung ("proposal distribution"). Im einfachen Metropolis-Algorithmus ist das ja schlicht Random-Walk, aber auch da kann man wenigstens die Schrittweite wählen. Ich vermag nicht zu erkennen, wo das bei dir im R-Quelltext geschieht, dazu kenne ich das Paket "mcmc" zu wenig. |
|||||||||||||||||
08.03.2012, 19:53 | vogelstrauss | Auf diesen Beitrag antworten » | |||||||||||||||
Ich versuche gerade, das alles in korrekter Notation aufzuschreiben, habe leider gestern und heute nicht so viel Zeit gehabt, ich bleib aber dran!! |
|||||||||||||||||
15.03.2012, 16:55 | vogelstrauss | Auf diesen Beitrag antworten » | |||||||||||||||
Also, ich probier nochmal, mein Problem zu erlaeutern: Ich moechte meine 5 Parameter gleichzeitig mit Metropolis-Hasting samplen, wobei der fuenfte Parameter die Dichte haben soll. Weil die Energie-Funktion in der Implementation im mcmc-Paket den Logarithmus der nichtnormalisierten Dichte verlangt, uebergebe ich der Metropolis-Funktion die folgende Dichte: ,also den Logarithmus von . Wenn ich diese Verteilung num mit dem R-Paket sample, sieht die Posterior-Verteilung des Parameters so aus wie ich es erwarte: Ein Histogramm der Posterior-Verteilung zeigt, dass der Parameter gleichverteilt zwischen 0 und 1 ist (), fuer Werte > 1 wird die Dichte geringer.
Was mir die Metropolis-Funktion als "batch" zurueckgibt, ist genau die o.g. Posterior-Verteilung der Parameter. So weit, so gut. Jetzt weiss ich zusaezlich, dass keiner meiner Parameter <=0 sein kann. Fuer den fuenften Parameter mit der oben beschriebenen Posterior-Verteilung ist das auch kein Problem, es steht ja in , dass die Wahrscheinlichkeit bei Werten <0 gleich 0 ist.
Man kann in dem R-Paket die Schrittweite waehlen, die Sache ist nur, dass wenn ich die Schrittweite zu klein mache, werden vielleicht nicht so viele negative Werte vorgeschlagen, aber der Algorithmus brauch laenger, zu konvergieren. Daher wuerde ich gerne im logspace samplen. Ich wuerde als Startwerte die Logarithmen meiner Startwerte der Metropolis-Funktion uebergeben und die Werte einer Posterior-Verteilung erhalten. Diese Posterior-Verteilung sollte so aussehen, dass . Mein Problem ist nur, wie muss ich dann definieren?? Wenn ich die Wahrscheinlichkeit nicht von x, sondern von exp(x) berechne, also wenn der Logarithmus der nichtnormalisierten Dichtefunktion so aussieht: bekomme ich nicht die gewuenschte Dichte so dass . Ich habe das in R ausprobiert und bekomme eine andere Verteilung. Ich hoffe mein Problem ist ein bisschen genauer beschrieben... |
|||||||||||||||||
15.03.2012, 17:11 | HAL 9000 | Auf diesen Beitrag antworten » | |||||||||||||||
Das ist der Preis: kleine Schrittweite = langsame Konvergenz, hohe Akzeptanzraten große Schrittweite = schnelle Konvergenz, falls man hohe Akzeptanzraten hätte - hat man da aber leider nicht Irgendwo gibt es ein Optimum, zumindest etwas, was dem nahekommt. Auf deine Ausführungen will ich nicht im einzelnen eingehen, zumal ich immer noch nicht den Begriff "im logspace sampeln" verstehe. Was ich nicht begreife, ist folgendes: Du willst doch eine feste Verteilung simulieren, da ist das doch aber (bis auf einen Vorfaktor) festgelegt, da kannst du doch nicht dran herumdrehen. Das einzige, woran du in Hinblick auf Konvergenzrate da drehen darfst, ist doch bei Metropolis-Hastings die Vorschlagsverteilung (bei Metropolis reduziert sich diese Stellschraube leider nur auf die Wahl der Schrittweite). Insofern ist mir dein Herumdoktorn am ein Buch mit sieben Siegeln. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
Die Neuesten » |
|