Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: Wahrscheinlichkeitsverteilungen

18 views
Skip to first unread message
Message has been deleted

Bernd Funke

unread,
Jul 20, 2012, 1:17:04 AM7/20/12
to
Andreas Mattheiss wrote:

[...]

> Ich suche nun
> also einen Weg, die Normalverteilung in eine *aequivalente*
> Dreiecksverteilung zu ᅵbertragen. Die Idee, die ich hatte, besteht
> darin, die Flaeche zwischen den kumulativen Verteilungsfunktionen der
> beiden Verteilungen zu minimieren,

Warum nicht einfach Gleichheit von Erwartungswert und Varianz? Oder welche
Forderung stellst Du an die *ᅵquivalenz*?


> 2.) Am besten waere es natᅵrlich, den Manager zu bewegen, *irgendeine*
> Verteilungsfunktion fᅵr seine Simulation zu verwenden - z.B. die von
> mir erzeugte. Der Haken dabei ist: wie erzeugt man aus der
> gleichverteilten Zufallsgrᅵsse, die der Zufallsgenerator liefert,
> eine vorgeschriebene Verteilungsfunktion, die "irgendwie" aussieht?
> Fᅵr die Dreiecksverteilung ist das einfach, fᅵr die Normalverteilung
> (z.B. mit BOX-MULLER) auch, aber fᅵr eine allgemeine
> Verteilungsfunktion?

Die Du als Formel kennst oder nicht?


> 3.) Bitte, gibt es einen besseren (freien, wie in "freedom"
> *und* "beer" ...) Zufallsgenerator als den von g77, etwas, was man in
> ein Programm hereinlinken kann? Der g77 - Zufallsgenerator hat in der
> Dichtefunktion satte Zappler.

Was heiᅵt das prᅵzise?

Fragt
Bernd

Christian Gollwitzer

unread,
Jul 20, 2012, 2:15:59 AM7/20/12
to
Hallo Andreas,

Am 19.07.12 20:59, schrieb Andreas Mattheiss:
> 2.) Am besten waere es natᅵrlich, den Manager zu bewegen, *irgendeine*
> Verteilungsfunktion fᅵr seine Simulation zu verwenden - z.B. die von mir
> erzeugte. Der Haken dabei ist: wie erzeugt man aus der gleichverteilten
> Zufallsgrᅵsse, die der Zufallsgenerator liefert, eine vorgeschriebene
> Verteilungsfunktion, die "irgendwie" aussieht? Fᅵr die Dreiecksverteilung
> ist das einfach, fᅵr die Normalverteilung (z.B. mit BOX-MULLER) auch,

1D ? Dann ist es simpel: Invertieren der kumulativen
Verteilungsfunktion. Fᅵr Gauᅵ sᅵhe das so aus, die kumulative Verteilung
ist

F(x)=0.5+0.5*erf(x/s2), s2=sigma*sqrt(2)

Ziehe eine gleichverteilte Zufallszahl u aus 0..1. Berechne

v=F^(-1)(u) = s2*erf^(-1)(2u - 1)

dann ist v normalverteilt mit s2. Das gilt genauso fᅵr jede beliebige
andere Verteilung, also auch fᅵr eine gesampelte Dichtefunktion aus
Monte-Carlo. Berechne also zunᅵchst aus der gesampelten Dichtefunktion
durch Aufsummieren der Bins eine gesampelte Verteilungsfunktion. Ziehe
Dann eine gleichverteilte Zufallszahl u , suche das Bin i so dass

F(i) < u < F(i+1)

i ist dann F-verteilt. Du kannst natᅵrlich noch linear interpolieren,
damit nicht nur diskrete Werte entstehen.

Falls Du eine multivariate Verteilung hast, geht das Verfahren "auf
blᅵd" auch noch, indem Du die Indizes in das Array aufzᅵhlst und darᅵber
die "Verteilung" bestimmst, anschlieᅵend den gezogenen Index wieder
zurᅵckkonvertierst.

> 3.) Bitte, gibt es einen besseren (freien, wie in "freedom"
> *und* "beer" ...) Zufallsgenerator als den von g77, etwas, was man in ein
> Programm hereinlinken kann?

Mersenne-Twister? Das ist so ein Klassiker. Gibts bestimmt auch als free
beer Fortran Source, wenn nicht, kannst ihn bei Wikipedia abschreiben:

http://de.wikipedia.org/wiki/Mersenne-Twister

Christian

Message has been deleted
Message has been deleted

Christian Gollwitzer

unread,
Jul 21, 2012, 1:40:17 AM7/21/12
to
Hallo Andreas,

Am 21.07.12 00:01, schrieb Andreas Mattheiss:
>>> 3.) Bitte, gibt es einen besseren (freien, wie in "freedom" *und*
>>> "beer" ...) Zufallsgenerator als den von g77, etwas, was man in ein
>>> Programm hereinlinken kann?
>>
>> http://de.wikipedia.org/wiki/Mersenne-Twister
>>
> Auch ein guter Hinweis. Unter
> http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/FORTRAN/fortran.html
> sind entsprechende Sourcen angegeben -
> http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/VERSIONS/FORTRAN/mt19937ar.f
> geht mit g77 sehr gut.
>
> Ich bin da wohl etwas anspruchsvoll. Ich bestimme die Dichte der vom
> Zufallsgenerator ausgeworfenen Zahlen so, dass ich sie sortiere und dann
> einfach bei 5000 Versuchen ᅵber 100 Versuche 100/((x(n+100)-x(x))*5000)
> berechne, fᅵr alle Versuche. Das zappelt dann deutlich; die Zappler haben
> eine Standardabweichung, die bei mir so aussieht:
>
> gcc-Generator 0.112
> openssl-hack 0.105
> mersenne-twister 0.101
>
> So weit liegen die nun auch wieder nicht auseinander. Vielleicht reichen
> 5000 Versuche einfach nicht, erstaunlich.

wenn Dich die Qualitᅵt der Zufallszahlen interessiert, dann sieh Dir mal
die diehard-Tests an:

http://en.wikipedia.org/wiki/Diehard_tests

Das ist eine Suite von statistischen Tests fᅵr Zufallszahlen, mit vielen
verschiedenen Monte-Carlo-Simulationen. Deine Formel oben habe ich mir
jetzt nicht genauer angeschaut, entscheidest Du da auf Grundlage des
Bauchgefᅵhls ᅵber die Qualitᅵt?? Wenn einzig allein die Dichte mᅵglichst
homogen sein soll, dann wᅵren Quasi-Zufallszahlen deutlich besser, z.B.
die Halton-Sequenz

http://en.wikipedia.org/wiki/Halton_sequence

Davon wᅵrde ich aber eher Abstand nehmen, wenn Du nicht weiᅵt, ob Dich
die Korrelationen in den Hintern beiᅵen. Der Mersenne-Twister hat
immerhin 624 Dimensionen. Auᅵerdem kann es sein, dass Du nach dem Seed
des Mersenne-Twisters erstmal noch so eine Million Zahlen ziehen
solltest, so dass er sich gut "einschwingen" kann.

Viel Spaᅵ noch beim Simulieren,

Christian

Message has been deleted

Bernd Funke

unread,
Jul 23, 2012, 4:56:16 AM7/23/12
to
Andreas Mattheiss wrote:
> Hallo,
>
> uuups -
>
> Am Sat, 21 Jul 2012 00:03:30 +0200 schrieb Andreas Mattheiss:
>
>> gibt es Aerger: die Standardnormalverteilung hat die Varianz 1, die
>> - auf diese Art aequivalente Dreiecksverteilung - haette dann die
>> Varianz 1, wenn a=18^0.5 ist (a ist die hier bestimmende "Ecke" der
>> Verteilung).
>
> da habe ich ein Vorzeichen ᅵbersehen - es muss heissen: a=6^0.5=2.45.
> Das deckt sich jetzt gut mit der nach meiner Idee ermittelten
> "aequivalenten" Dreiecksverteilung (a=2.35). Es waere interessant
> herauszufinden, wo der Unterschied herkommt;

Ich sehe keinen Grund fᅵr eine Gleichheit.


> ob es wirklich ein unterschiedliches Verstaendnis von "Aequivalenz" ist,

Das ist es wohl. Ich kann zumindest kein stochastisches Prinzip hinter der
minimalen quadratischen Abweichung zwischen den Verteilungsfunktionen
erkennen. Die Momentengleichheit dagegen ist wichtig: Ich weiᅵ ja nicht, was
Dein "Manager" macht, aber auch er wird (mind.) eine stochastische Variable
als Output haben. Und von der willst Du sicher zumindest die niedrigen
Momente korrekt heraus bekommen (also im Einklang mit den Momenten, die sich
mit der eigentlich gewᅵnschten Verteilung ergᅵben). Dazu ist es aber
notwendig, dass zumindest die niedrigen Momente der Eingangsverteilung
stimmen. Trivialbeispiel Random Walk: Mit Deiner Methode bekᅵmest Du da eine
um 4% zu kleine Diffusionskonstante heraus. Was nᅵtzt da dann die minimale
quadratischen Abweichung zwischen den Verteilungsfunktionen?



> oder ob beide Ansaetze auf das
> gleiche fᅵhren wᅵrden und die Differenz der etwas laessigen
> "Integration" im Tabellenkalkulationsprogramm geschuldet ist
> (Trapezsummen, zu grosse Schrittweite, man kann logischerweise nicht
> von -inf bis +inf aufaddieren etc.).

Nein, der Grund ist nicht numerischer Natur. Dein Integral ist analytisch
lᅵsbar und wird fᅵr a=2.349805 minimal.

Nochmal zum g77:

> Ich bin da wohl etwas anspruchsvoll. Ich bestimme die Dichte der vom
> Zufallsgenerator ausgeworfenen Zahlen so, dass ich sie sortiere und
> dann einfach bei 5000 Versuchen ᅵber 100 Versuche
> 100/((x(n+100)-x(x))*5000) berechne, fᅵr alle Versuche.

Ich verstehe Deine Methode nicht wirklich. Was z.B. ist x(x)? Ach so, damit
ist x(n) gemeint. Du wertest also die Steigungen in der empirisch gewonnen
Verteilungsfunktion aus, okay. Hast Du Dir ᅵberlegt, "Zappler" welcher Grᅵᅵe
bei 5000*100 Ziehungen denn zu erwarten sind?

Eine direktere und leicht zu analysierende Test-Methode ist die Unterteilung
von [0,1] in k Zᅵhltᅵpfe ("bins"). Nach der Ziehung von N Zufallszahlen
sollten deren Zᅵhlerstᅵnde binomialverteilt mit p=1/k sein, also um den
Mittelwert Np=N/k schwanken und die relative Schwankung wie sqrt((k-1)/N)
gegen Null gehen.

Eine indirekte, einfachere (wenn auch nicht 100%ig wasserdichte) Methode ist
es, das zweite Moment <xᅵ> zu bestimmen. Dessen Abweichungen von 1/3 sollten
auch ~ sqrt(1/N) verschwinden.

http://picload.org/image/drgawwa/g77_rand.png zeigt, dass g77s rand() diese
Bedingungen erfᅵllt. Angesichts des verwendeten Algorithmus' in rand() (Park
and Miller, minstd) war auch nicht zu erwarten, dass er die Gleichverteilung
nicht richtig hinbekᅵme (Probleme machen eher Korrelationen und geringe
Sequenzlᅵnge). Das heiᅵt nicht, dass Du rand() bedenkenlos verwenden
solltest. Du darfst ja ruhig hohe Ansprᅵche haben, die sollten aber immer
relativ zur hᅵchtsmᅵglichen Messlattenposition sein. D.h. Du solltest Dir
vorher ᅵberlegen, welches Ergebnis der ideale Zufallszahlengenerator liefern
wᅵrde.

Warum verwendest Du eigentlich g77? gfortran hat einen moderneren RNG namens
random_number().


> Vielleicht reichen 5000 Versuche einfach nicht, erstaunlich.

Fluktuationen verschwinden gemeinhin wie sqrt(1/N), das sind bei N=5000
immerhin noch gut 1%.

Ciao
Bernd

Bernd Funke

unread,
Jul 23, 2012, 2:41:55 PM7/23/12
to
Bernd Funke wrote:

[...]

> Trivialbeispiel Random Walk: Mit Deiner
> Methode bekᅵmest Du da eine um 4% zu kleine Diffusionskonstante
> heraus.

Oops, Rechenfehler (1x zuviel Wurzel): 7.9% zu klein vielmehr

Ciao
Bernd

Message has been deleted

Bernd Funke

unread,
Jul 25, 2012, 6:29:04 PM7/25/12
to
Andreas Mattheiss wrote:
> Hallo Bernd,
>
> vielen Dank für die ausführliche Antwort. Es ist schön zu sehen, dass
> der Newsgroup-Spirit noch lebt.
>
> Ich habe jetzt eine Menge Anregungen und muss das erst mal verdauen.
> Trotzdem, wie Colombo: eine Frage haette ich noch:
>
>
> Am Mon, 23 Jul 2012 10:56:16 +0200 schrieb Bernd Funke:
>
>> Nein, der Grund ist nicht numerischer Natur. Dein Integral ist
>> analytisch lösbar und wird für a=2.349805 minimal.
>
> Em - Du sagst jetzt aber nicht, Du hast das mit Bleistift und Papier
> gemacht?

Nein, natürlich nicht. Bin ja faul... :-)


> Ausdrücke wie int(x^2*erf(x/2^.5)) finde ich jetzt nicht so
> offensichtlich... Wolfram hat in der freien Version ziemlich sofort
> das weisse Handtuch gehisst, zumal wir ja den Parameter (die "Ecke")
> im Integralkern und in der Integrationsgrenze berücksichtigen müssen.

Man kann ihm ein bisschen entgegen kommen, eigentlich braucht man ja "nur"
http://www.wolframalpha.com/input/?i=Integrate%5B%28b+x%5E2%2Bc+x%2Bd-Erf%5Bx%2FSqrt%5B2%5D%5D%29%5E2%2Cx%5D
und muss für die vier Abschnitte die Koeffizienten b, c, d und die
Integralgrenzen anpassen. Trotzdem ist natürlich sogar das Endergebnis
unschön lang und nicht analytisch zu minimieren.

Bernd

0 new messages