Skript
Transcription
Skript
1 Pseudozufallszahlen und Monte-Carlo Methoden Die Generierung von Pseudozufallszahlen an einem PC bildet die Grundlage für die stochastische Simulation. Pseudozufallszahlen sind, wie der Name schon sagt, keine echten Zufallszahlen, sondern werden durch Generatoren erzeugt. Denition 1. Ein Generator (uniformer) Pseudozufallszahlen ist ein Algorithmus, der von einem u0 (seed) und einer Transformation T ausgehend, eine rekursive deterministische Zahi lenfolge ui = T u0 ([0,1]wertiger) Folgeglieder erzeugt, die sich wie eine zufällige i. i. d. (unabhängig Startwert und identisch verteilt) Folge von echten (uniformen) Zufallszahlen verhalten soll. Das Kriterium für ein Verhalten wie echte Zufallszahlen liefern dabei gängige Test und Analysemethoden. Echte Zufallszahlen können von physikalischen Generatoren, unter anderem durch die Beobachtung radioaktiver Zerfälle, erzeugt werden (z. Bsp. Kooperation PicoQuant GmbH und Nano-Optics Gruppe am Institut für Physik der Humbolt-Universität zu Berlin: QuantenZufallszahlengenerator basierend auf einer Einzelphotonenquelle, welche die zufällige Erzeugung einzelner Photonen für die Generierung von Zufallszahlen nutzt). Es werden aber zumeist Pseudozufallszahlen herangezogen, da sie sich jederzeit neu erzeugen lassen und replizierbar sind. Bei Vorgabe eines festen Startwertes erzeugt der Generator jedesmal wieder dieselben Pseudozufallszahlen. Pseudozufallszahlen werden zur stochastischen bzw. MonteCarlo-Simulation genutzt, daneben aber auch in der Kryptographie und beispielsweise bei der Erzeugung von TAN-Listen zum onlineBanking. Denition 2. Monte-Carlo Methoden basieren auf der häugen Wiederholung eines Zufallsex- perimentes bzw. Erzeugung von Pseudozufallszahlen um (zumeist komplexe) analytische Probleme näherungsweise zu lösen, wobei das Gesetz der groÿen Zahlen die Grundlage hierfür bildet. Anwendungen nden Monte-Carlo Methoden vor allem in der Numerik zur Monte-CarloIntegration oder Lösung partieller Dierentialgleichungen, in der Finanzmarktanalyse, der Meteorologie, bei Transportproblemen im Operations Research und in vielen weiteren Anwendungsbereichen. Wir werden nun zunächst Pseudozufallszahlen in R erzeugen und deren Replizierbarkeit nachvollziehen. Durch set .seed wird der Startwert des verwendeten Pseudozufallszahlengenerators (stan- dardmäÿig der MersenneTwister) festgelegt. Mit dem Befehl von > > n runif(n) erzeugen wir ein Sample unabhängigen auf dem Einheitsintervall uniform verteilten Pseudozufallszahlen. set . s e e d ( 4 7 1 1 ) runif ( 1 0 ) [ 1 ] 0.96560033 0.56061066 0.91472513 0.18295641 0.88421380 0.61809459 [ 7 ] 0.34204836 0.16194603 0.27060681 0.07892783 > set . s e e d ( 4 7 1 1 , kind="Wichmann− H i l l " ) > runif ( 1 0 ) [ 1 ] 0.2352532 0.3178765 0.6508297 0.3306231 0.6041524 0.5420896 0.3464831 [ 8 ] 0.8995322 0.1182666 0.0614466 Im nächsten Unterkapitel werden wir bestimmte Generatoren zur Erzeugung solcher Zufallszahlen näher kennen lernen. Die in R zur Verfügung stehenden Pseudozufallszahlengeneratoren kann man der Hilfe zu set .seed entnehmen. Es lassen sich auch neue eigene Algorithmen einbinden. 1.1 Generierung uniformer Pseudozufallszahlen 1.1.1 Der lineare Kongruenzgenerator Der erstmals 1948 vorgestellte lineare Kongruenzgenerator von Lehmer (1951) ist einer der ersten und einfachsten Algorithmen zur Erzeugung auf dem Einheitsintervall uniform verteilter Pseudozufallszahlen. Ausgehend von der rekursiven Gleichung xi = axi−1 mod m (multiplikativer linearer Kongruenzgenerator) 1 oder der verallgemeinerten Form xi = (axi−1 + c) mod m (gemischter linearer Kongruenzgenerator) ui = xi /m, also c mod 1 ui = aui−1 + m lässt sich die Pseudozufallszahlenfolge 0 < ui < 1 , erzeugen. Der lineare Kongruenzgenerator hat zwei oensichtliche Beschränkungen, die auch für komplexere Algorithmen typisch sind. 1. Es können höchstens m unterschiedliche Werte erzeugt werden und in der Folge auftreten. 2. Der Algorithmus erzeugt periodische Folgen. Im einfachen Fall des multiplikativen linearen Kongruenzgenerators beginnt für ein k ∈ N mit ak = 1 mod m die Periode von vorne. Nach dem kleinen Fermat'schen Satz ist aφ(m) = 1 mod m, damit ist die Länge einer Periode auf maximal (m − 1) beschränkt. Dies liefert auch schon einen Ansatz, wie man die Werte zu wählen hat. Klarerweise sollte m wesentlich gröÿer als die Länge der zu erzeugenden Zufallsfolge sein. Auÿerdem wählt man den Faktor a meist als Primitivwurzel. Die Vorgabe eines Startwertes x0 und die Wahl des (möglichen) Inkrementes c sind dagegen von geringerer Bedeutung. Es gibt zahlreiche Ansätze allgemeinerer Kongruenzgeneratoren, die Weiterentwicklungen dieser einfachen Methode darstellen. 1.1.2 Der MersenneTwister Der MersenneTwister ist ein moderner Zufallszahlengenerator, der auch in R zur Erzeugung uniform verteilter Zufallszahlen Verwendung ndet. Es sei F2 kation . F2 = {0, 1} mit der Addition ⊕ und der Multipliω ∈ N, n ∈ N, m ∈ {1, . . . , n} und r ∈ {0, . . . , ω − 1} = {0, 1}ω seien weiterhin der Körper der Charakteristik 2, also Für den Algorithmus werden nun gewählt bzw. vorgegeben. Für y ∈ Fω 2 y l = (y1 , . . . , yr , 0, . . . , 0) , y u = (0, . . . , 0, yr+1 , . . . , yω ) r links und rechtsseitig abgeschnittenen Teilveky, z ∈ Fω 2 wird dann mit die Elemente, die aus einer Verknüpfung der bei toren mit dem Nullelement entstehen. Für (y l |z u ) = (y1 , . . . , yr , zr+1 , . . . , zω ) das Element bezeichnet, welches aus der Verkettung Mit einer vorher festgelegten Fω2 ω×ω Matrix A, von yl mit zu entsteht. deren Spalten und Zeilenvektoren Elemente des seien und die Einträge damit Bits, und gewählten (n − 1) Startwerten x0 , . . . , xn−1 ∈ Fω2 ist der MersenneTwister der folgende rekursive Algorithmus: xk+n = xk+m ⊕ω xlk |xuk+1 ω A , k ∈ N0 . ⊕ω und ω bezeichnen die Addition und Multiplikation in Durch die Multiplikation mit der Matrix A Fω2 . werden die Bits durcheinandergewirbelt , was dem Algorithmus den zweiten Teil seines Namens einbringt. Der erste Namensteil kommt daher, dass die Werte so gewählt werden, dass die Periode des Algorithmus eine sehr groÿe Mersenne'sche Primzahl ist. In der derzeitig häugsten Implementierung werden die Werte (ω, n, m, r) = (32, 624, 397, 31) 2 gewählt, was als Periode 2nω−r − 1 = 219937 − 1 ergibt. In Softwarepaketen wie R, SAS, aber auch Matlab, Mathematica und Maple stehen heute Pseudozufallsgeneratoren zur Verfügung. C und C++ Implementierungen kann man beispielsweise in der GNU Scientic Library nden. http://www.gnu.org/software/gsl Der gerade eingeführte MersenneTwister gehört zu den derzeit gängigsten Methoden, neben der sehr groÿen Periode ist er auch schneller als andere Algorithmen, die vergleichbar gute Pseudozufallszahlen liefern. Für eine genaue Analyse sei auf Matsumoto and Nishimura (1998) verwiesen. 1.2 Pseudo und QuasiZufallszahlen Neben den Pseudozufallszahlen werden des Öfteren auch so genannte QuasiZufallszahlen zur stochastischen Simulation (Quasi-Monte-Carlo Methoden) herangezogen. Diese unterscheiden sich jedoch in ihrer Generierung und Struktur grundlegend von Pseudozufallszahlen. Das Ziel bei der x1 , . . . , xN ist die Minimierung der Diskrepanz |{xi : i = 1, . . . , N , xi ∈ [0, u)}| DN (x1 , . . . , xN ) = sup − u , N ∈ N . N Generierung einer Folge von QuasiZufallszahlen u∈[0,1] Moderne Algorithmen, die als QuasiZufallszahlenGeneratoren eingesetzt werden (z. Bsp. Halton und SobolFolgen) erreichen eine Diskrepanz DN ≤ C(log N/N ) mit einer Konstanten C , während nach dem Zentralen Grenzwertsatz für echte Zufallszahlen (und damit auch für gute Pseudozufallszahlen) eine Asymptotik DN ' N −1/2 gilt. Dadurch kann mit der Quasi-Monte-Carlo-Integration, also einer Verwendung von QuasiZufallszahlen zur Näherung eines Integrals durch den Erwartungswert, bei festem N ein kleinerer Fehler erreicht werden als mit der Verwendung von Pseudozufallszahlen nach dem Gesetz der groÿen Zahlen. Quasi-Monte-Carlo Methoden bilden eine Schnittmenge der numerischen Analysis, Zahlentheorie und Finanzmathematik. In der Stochastik sind dagegen hauptsächlich Pseudozufallszahlen wichtig, da man in der Regel immitierten Zufall simulieren will. Wir wollen nun die Generierung von Pseudo und Quasizufallszahlen in R veranschaulichen und verbinden dies mit dem Kennenlernen einiger grundlegender RBefehle und Funktionen. Als erstes benötigen wir zur Erzeugung von Sequenzen von QuasiZufallszahlen ein Paket, das nicht automatisch geladen wird. Ist ein Paket bereits installiert wird dieses durch library/require geladen. > library ( f O p t i o n s ) Lade n ö t i g e s Paket : timeDate Lade n ö t i g e s Paket : t i m e S e r i e s Lade n ö t i g e s Paket : f B a s i c s Lade n ö t i g e s Paket : MASS Rmetrics Package f O p t i o n s ( 2 1 1 0 . 7 8 ) l o a d e d . Wenn das Paket noch nicht installiert wurde, kann der Download und die Installation durch den Befehl install . packages(package=fOptions) aufgerufen werden. Eine groÿe Auswahl an Paketen steht auf diese Weise über einen CRAN Mirror bereit. Will man andere Pakete laden, können diese auch als zip-Dateien über Menü-Pakete-Installiere Paket(e) aus lokalen zip-Dateien installiert. Haben wir das nötige Paket geladen, stehen uns nun Funktionen zur Erzeugung von QuasiZufallszahlen bereit. > u1<−runif . s o b o l ( n=1000 , d i me n s i on =1) > u2<−runif . pseudo ( n=1000 , d i me n s i on =1) Neben Sobol können durch .halton auch HaltonSequenzen erzeugt werden. Wir haben durch Zuweisungen nun zwei Vektoren deniert. > s t r ( u1 ) num [ 1 : 1 0 0 0 , 1 ] 0 . 5 0 . 7 5 0 . 2 5 0 . 3 7 5 0 . 8 7 5 . . . > s t r ( u2 ) num [ 1 : 1 0 0 0 , 1 ] 0 . 7 1 9 0 . 9 5 1 0 . 9 5 5 0 . 3 6 2 0 . 7 3 2 . . . 3 Mit der plot Funktion lassen sich diese grasch darstellen. Zum Vergleich von Pseudo und Quasi Zufallszahlen wollen wir beide nebeneinander plotten. par ( mfrow=c ( 1 , 2 ) ) plot ( u1 , main=" Sobol −Quasi − Z u f a l l s z a h l e n " , type="p" , cex =.5 , x l a b="" , y l a b="" ) plot ( u2 , main=" P s e u d o z u f a l l s z a h l e n " , type="p" , cex =.5 , x l a b="" , y l a b="" ) dev . off ( ) null d e v i c e > > > > 1 Durch den ersten Befehl bewirken wir die Darstellung von beiden Graken in einer Zeile. Der Befehl dev.o() setzt alle geänderten Grakparameter wieder zurück. Durch unsere hinzugefügten Optionen wird die Überschrift, sowie (keine) Betitelung der Achsen und die Gröÿe der dargestellten Punkte gesteuert. Die Darstellungen der jeweils 1000 erzeugten uniform auf [0, 1] verteilten Quasi und Pseudozu- fallszahlen zeigen deutliche Unterschiede auf. Während die Pseudozufallszahlen chaotisch (also zufällig) erscheinen, weisen die QuasiZufallszahlen ein klares Muster auf. Wir erzeugen analog zweidimensionale uniforme QuasiSobolZufallszahlen: > v2<−runif . s o b o l ( n=1000 , d i me n s i on =2) > plot ( v2 , col=" g r e e n " , cex =.5) > s t r ( v2 ) num [ 1 : 1 0 0 0 , 1 : 2 ] 0 . 5 0 . 7 5 0 . 2 5 0 . 3 7 5 0 . 8 7 5 . . . Die erzeugte Darstellung zeigt wieder das gut erkennbare Muster. 4 Wir haben jetzt eine 2 × 1000 Matrix erzeugt. Einzelne Einträge und Spaltenvektoren ruft man wie folgt auf: > v2 [ 1 , 1 ] [ 1 ] 0.5 > s t r ( v2 [ , 1 ] ) num [ 1 : 1 0 0 0 ] 0 . 5 0 . 7 5 0 . 2 5 0 . 3 7 5 0 . 8 7 5 . . . > s t r ( v2 [ , 1 ] − u2 ) num [ 1 : 1 0 0 0 , 1 ] 0 0 0 0 0 0 0 0 0 0 . . . Es zeigt sich, dass die generierten Werte dieselben wie oben für u2 sind, also ganz und gar nicht zufällig. > v1<−runif . pseudo ( n=1000 , d i me n s i on =2) > points ( v1 , col=" b l u e " , cex =.5) Dieser Befehl fügt dem bereits vorhandenen plot die Darstellung von zweidimensionalen Pseudozufallszahlen hinzu. 5 Abschlieÿend sei noch die Konstruktion einer HaltonFolge als einfaches Beispiel zur Erzeugung von QuasiZufallszahlen angefügt. Man wähle eine Primzahl p als Basis und einen Startwert m= k X m 6= 0 und stelle m zur Basis p dar: aj pj . j=0 Man verfährt analog mit (m + 1), . . .. Die Haltonzahlen sind nun durch h= k X aj p−j−1 j=0 gegeben. Die folgende Tabelle enthält die ersten drei Haltonzahlen zum Startwert m binäre Darstellung 3 11.0 3/4 4 100.0 1/8 5 101.0 5/8 . . . . . . 6 h . . . m = 3 für p = 2. 1.3 Transformation uniformer Zufallszahlen Wie oben erwähnt ist die Erzeugung uniform verteilter Pseudozufallszahlen das (zahlentheoretische) Grundproblem zur stochastischen Simulation. Um aus uniform verteilten Zufallszahlen Sequenzen mit anderen Verteilungen zu erhalten, gibt es eine Vielzahl von Transformationsmethoden. Wir werden hier nur wenige Beispiele näher betrachten. Auch diskret verteilte Zufallszahlen lassen sich problemlos aus der (stetigen) uniformen Verteilung auf dem Einheitsintervall gewinnen. Eine BernoulliVerteilung beispielsweise erhält man sehr einfach, indem man die Abbildung ( 1 T (U ) = 0 anwendet. Da sich binomialverteilte für für U ≤ 1/2 U > 1/2 Zufallsvariablen als Summe unabhängiger Bernoulli verteilter darstellen lassen, ist diese bekannte diskrete Verteilung damit auch einfach zu handhaben. 1.3.1 Erzeugung normalverteilter Zufallszahlen Die Normalverteilung ist die wohl am häugsten verwendete Verteilung und ihr kommt in der Stochastik eine zentrale Bedeutung zu (Zentraler Grenzwertsatz). Eine reellwertige Zufallsvariable heiÿt N(µ, σ 2 )verteilt, wenn sie die stetige Dichte fµ,σ2 (x) = √ 1 exp (−(x − µ)2 /2) 2πσ bezüglich des Lebesguemaÿes besitzt. Ist X normalverteilt mit Parametern µ und σ2 gilt X = µ + σZ , wobei Z standardnormalverteilt ist. Dadurch beschränkt sich das Problem auf die Erzeugung standardnormalverteilter Pseudozufallszahlen aus uniform verteilten. Eine Transformationsmethode hierzu bietet die BoxMullerMethode: Es seien verteilt. 2πV ist uniform auf dem Intervall (X, Y ) = [0, 2π] U, V unabhängig U[0, 1](uniform auf [0,1]) U . Daher sind verteilt und unabhängig zu p −2 log U (cos 2πV , sin 2πV ) zwei unabhängig standardnormalverteilte Zufallsvariablen. Wir werden nun in R eine zweidimensionale Normalverteilungsdichte grasch darstellen und dabei einige weitere Grundlagen zur Erstellung von plots in R kennenlernen. So geben wir ein diskretes Gitter vor (grid), auf dem die Funktionswerte der stetigen Dichte berechnet werden. Zur Berechnung der Werte der zweidimensionalen Gauÿdichte auf diesem Gitter schreiben wir eine seq und zur Perspektivplot persp. Den Vektor mit den Gitterpunkten erzeugen wir mit Funktionen benutzt man am besten einen > > > > > > > > + + + + + + mu1<−0 mu2<−0 s 1 1<−10 s 2 2<−10 rho<− 0 . 5 grid<−seq ( − 10 ,10 , length =41) f<−function ( x1 , x2 ) { term1 <− 1 / ( 2 ∗ p i ∗ sqrt ( s 1 1 ∗ s 2 2 ∗ (1 − rho ^ 2 ) ) ) term2 <− −1/ ( 2 ∗ (1 − rho ^ 2 ) ) term3 <− ( x1−mu1)^2 / s 1 1 term4 <− ( x2−mu2)^2 / s 2 2 term5 <− −2∗ rho ∗ ( ( x1−mu1) ∗ ( x2−mu2 ) ) / ( sqrt ( s 1 1 ) ∗ sqrt ( s 2 2 ) ) term1 ∗exp ( term2 ∗ ( term3+term4 −term5 ) ) } 7 function. Darstellung zweidimensionaler > persp ( grid , grid , outer ( grid , grid , f ) , x l a b="" , y l a b=" " , z l a b="" , + main=" Z w e i d i m e n s i o n a l e N o r m a l v e r t e i l u n g " , + col=heat . colors ( 1 0 ) , + t h e t a =30 , p h i =20 , + r =50 , + d =0.1 , + expand =0.5 , + box=FALSE) > mtext ( expression ( l i s t (mu[1]==0 ,mu[2]==0 , sigma [11]==10 , + sigma [22]==10 , rho==1/ 2 ) ) , s i d e =3) 1.3.2 Die Inversionsmethode Die Inversionsmethode (auch Quantiltransformation oder F −1 Trick) bietet eine einfache Methode aus uniform verteilten Zufallszahlen bestimmte andere Verteilungen zu erhalten. Denition 3. Es sei F F eine streng monotone Verteilungsfunktion. Die Funktion −1 ( inf {x|F (x) ≥ u} , u ∈ (0, 1] (u) = sup {x ∈ R|F (x) = 0} , u = 0 heiÿt Quantilfunktion der zugehörigen Verteilung. 8 Lemma 1. Ist U ∼ U[0, 1] ⇒ X = F −1 (U ) ∼ F für jede streng monotone Verteilungsfunktion F . F −1 (U ) verteilt ist nach der zu F gehörenden Die letzte Aussage bedeutet, dass die Zufallsvariable Verteilung. Beweis. FX (x) = P (X ≤ x) = P F −1 (U ) ≤ x = P (U ≤ F (x)) = FU (F (x)) = F (x) Mit der Inversionsmethode lassen sich somit Verteilungen mit stetiger Dichte durch Anwendung der Quantilfunktion auf eine uniform verteilte Sequenz samplen. Beispielsweise ist 1 − log U ∼ Exp(λ) λ exponentialverteilt mit Parameter λ > 0. Für diskrete Verteilungen ohne streng monotone Verteilungsfunktion kann zwar nicht einfach die Inverse gebildet werden, aber eine leichte Modikation der Inversionsmethode lässt sich auch zur Erzeugung diskret verteilter Pseudozufallszahlen anwenden. Es seinen pi , i ∈ I die diskreten Gewichte der Verteilung (Zähldichte mi , i ∈ I, m1 < m2 < . . . < mI . Die rechtsstetige Treppenfunktion X P (x) = pi in Atomen) zu den Werten i|mi ≤x ist die zugehörige Verteilungsfunktion. Wenn nun u eine auf dem Einheitsintervall uniform verteilte Pseudozufallszahl ist, kann durch x = min {t, u ≤ P (t)} eine Pseudozufallszahl der diskreten Verteilung erzeugt werden. Für die Normalverteilung ist die Inversionsmethode nicht anwendbar, da sich die Inverse nicht explizit bestimmen lässt. 9 Diese Veranschaulichung der Inversionsmethode für diskrete Verteilungen wurde mit folgendem RCode erzeugt: > > > > > > plot ( 0 : 3 , pbinom ( 0 : 3 , 3 , . 5 ) , x l a b="" , y l a b=" " , ylim=c ( 0 , 1 ) ) segments ( 0 , pbinom ( 0 , 3 , . 5 ) , 1 , pbinom ( 0 , 3 , . 5 ) ) segments ( 1 , pbinom ( 1 , 3 , . 5 ) , 2 , pbinom ( 1 , 3 , . 5 ) ) segments ( 2 , pbinom ( 2 , 3 , . 5 ) , 3 , pbinom ( 2 , 3 , . 5 ) ) arrows ( 0 , u , ceiling ( u∗ 3 ) , u ) segments ( ceiling ( u∗ 3 ) , u , ceiling ( u∗ 3 ) , − . 0 5 , l t y =3) 1.3.3 Erzeugung Poissonverteilter Zufallszahlen Um von einer PoissonVerteilung zu samplen, gibt es die Möglichkeit von der uniformen Verteilung aus über eine Transformation mit der Inversionsmethode zu einer Exponentialverteilung zu gelangen und durch Summation n unabhängiger exponentialverteilter Zufallsvariablen zu einer Γ(n, λ)Verteilung: n X 1 i. i. d. i. i. d. Ui ∼ U[0, 1] ⇒ − log Ui ∼ Exp(λ) ⇒ Xi ∼ Γ(n, λ) . λ 1 Nun ist für λ = 1 die Anzahl der Summanden n, für die die Summe zum ersten mal den Wert t > 0 t. Daraus kann man eine Methode zur Generierung überschreitet, Poissonverteilt mit Parameter von Poissonverteilten (Pseudo)Zufallszahlen ableiten: P = min {n| n X − log Ui > t} ∼ P oiss(t) . i=1 Wir werden nun die Zähldichte(Gewichte) einer P oiss(3.5)Verteilung plotten als Beispiel der graschen Darstellung von Gewichten diskreter Verteilungen. Wie für stetige Verteilungen die Dichte, wird durch dpois die Zähldichte benannt. Man stellt sie am besten in einem plot mit der Option type="h" dar. 10 > plot ( 0 : 1 5 , dpois ( 0 : 1 5 , lambda = 3 . 5 ) , type="h" , lwd =3, + main=" Gewichte e i n e r P o i s s o n v e r t e i l u n g " , + x l a b=expression ( k ) , y l a b=expression ( "p" [ k ] ∗ "" ) ) 1.4 Qualitätskontrolle von Pseudozufallszahlengeneratoren Für die Überprüfung, wie gut ein Zufallszahlengenerator ist in dem Sinne, dass er Sequenzen von Pseudozufallszahlen erzeugt, die möglichst gut echte Zufallszahlen imitieren, gibt es eine ganze Reihe von Testverfahren. Neben dieser Eigenschaft spielt natürlich auch die Geschwindigkeit des Generators bei der Erzeugung groÿer Samples eine entscheidende Rolle. Wir wollen uns hier auf eine kurze Übersicht der Analyse der erhaltenen Pseudozufallszahlen (empirische Tests) beschränken und keine systematischen Überprüfungen der Algorithmen betrachten. Bei den empirischen Test gibt es prinzipiell zwei Klassen: 1. Tests auf Gleichverteilung der Pseudozufallszahlen. 2. Tests auf Unabhängigkeit der Pseudozufallszahlen. Die bekanntesten nichtparametrischen Verteilungstests, die zur Überprüfung der Gleichverteilungshypothese von einem erzeugten PseudozufallszahlenSample angewandt werden können, sind der χ2 Test und der KolmogorovSmirnovTest. Ersterer kann jedoch nicht direkt zur Überprüfung reeller Zufallszahlen auf eine kontinuierliche Verteilung mit stetiger Dichte verwendet werden. Man kann hier jedoch einen Umweg gehen, indem man beispielsweise auf Gleichverteilung der erzeugten Zufallszahlen in äquidistanten Intervallen testet. Anders als die parametrischen Tests (siehe Exkurs unten) kommen hier vorrangig nichtparametrische Testverfahren zum Einsatz. Diese verzichten auf die Annahme, dass die Verteilung der Stichprobe zu einer bestimmten Familie von Wahrscheinlichkeitsmaÿen gehört (z. Bsp. Normalverteilungsannahme beim tTest). Der Vorteil des nichtparametrischen Ansatzes besteht daher auch darin mit wenig Kenntnis bzw. Annahmen über die den Beobachtungen zugrundeliegende Verteilung auszukommen. Unter einem Anpassungstest versteht man einen Test auf die Hypothese, ob eine bestimmte Ver- X1 , . . . , Xn ∼ F sei nach der durch H0 : F = F0 wird gegen H1 : F 6= F0 teilung vorliegt (auch Goodness of tTest). Eine Stichprobe F gegebenen unbekannten Verteilung verteilt. Die Hypothese 11 getestet. Sind nun die Beobachtungen in man diese mit den unter F0 m nj , j = 1, . . . , m, vergleicht nj 0 , j = 1, . . . , m. Die Teststatistik Klassen aufgeteilt mit Häugkeiten erwarteten Häugkeiten m 2 X (nj − nj 0 ) χ̂ = nj 0 j=1 2 konvergiert schwach gegen eine χ2m−1 Verteilung. Der Ablehnungsbereich der Hypothese ist dann Kα = (χ21−α, m−1 , ∞) . χ2 Anpassungstestes müssen n und alle nj 0 hinreichend groÿ sein. Als einfaches Beispiel wollen wir auf der Basis von 60 Würfen testen, ob ein Würfel fair ist. Der Vektor Zur Anwendung eines H gibt die empirischen Häugkeiten der geworfenen Augenzahlen (AZ) an. Die Funktion chisq . test führt ohne weitere Optionen einen Test auf Gleichverteilung durch und gibt den pWert, die Freiheitsgrade und den Wert der Teststatistik aus. > AZ<−c ( 1 , 2 , 3 , 4 , 5 , 6 ) > H<−c ( 7 , 1 2 , 9 , 1 5 , 7 , 1 0 ) > c h i s q . t e s t (H) Chi−s q u a r e d t e s t data : H X−s q u a r e d = 4 . 8 , df for given p r o b a b i l i t i e s = 5 , p−v a l u e = 0 . 4 4 0 8 Ein einfacher Verteilungstest für kontinuierlich verteilte Zufallszahlen liefert der Kolmogorov SmirnovTest. Es seien U1 , . . . , UN i. i. d. U[0, 1]verteilt. N 1 X FN (u) = 1{Ui ≤u} N i=1 Das Supremum der Abweichung zwischen empirischer und wahrer Verteilungsfunktion ∆N hat eine von F N 1 X u = sup |FN (u) − F (u)| = sup 1{Ui ≤u} − N u∈[0,1] u∈[0,1] N i=1 nicht abhängige Verteilung (verteilungsfrei) und eignet sich daher als Teststatistik (nicht nur für die uniforme Verteilung). Die zweite Klasse von Tests soll nun Pseudozufallszahlen, also eine rekursive deterministische Zahlenfolge, auf (stochastische) Unabhängigkeit testen. Das folgende Zitat von Johann von Neumann Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin. verdeutlicht nochmal, dass wir hier Unabhängigkeit als ein strukturelles Verhalten wie eine Folge von echten Zufallszahlen ansehen. Die für diese Unabhängigkeitstests eingesetzten Testmethoden sind fast alle so konzipiert, dass sie nur für ganzzahlige Zahlenfolgen (zumeist Bits) direkt angewandt werden können, was wiederum mit der oben erwähnten Intervalleinteilungsmethode transferiert werden kann. Die Tests untersuchen Strukturen in der Sequenz der Pseudozufallszahlen um vorhandene Autokorrelationen zu entdecken. Am bekanntesten sind die Run und SerialTests. Bei den RunTests wird analysiert, wie viele Teilsequenzen monoton steigender oder fallender Zahlen einer bestimmten Länge in der gesamten Sequenz vorkommen. Bei den SerialTests dementsprechend wie viele 12 bestimmte Teilsequenzen. Da man kombinatorisch die Verteilung solcher Runs oder Serien unter der Hypothese bestimmen kann, eignen sie sich als Teststatistiken. Ähnliche Ideen liegen auch dem PokerTest und Permutationstests zugrunde. Weitere Testmethoden entstehen durch eine Kombination mit KolmogorovSmirnovTests, wie der Lückentest und der MaximumTest. Für den Lückentest (gap test) sind zwei reelle Zahlen α<β gegeben und man betrachtet die Längen der maximalen Teilfolgen Beobachtung erstmals wieder in [α, β] (uj , . . . , uj+r ) bis eine liegt. Man spricht dann von einer Lücke der Länge r. Die Lückenlängen sind geometrisch verteilt mit Parameter β − α, daher lässt sich leicht der KSTest anwenden. Ähnlich funktioniert auch der MaximumTest, der die Verteilung des Maximums von Sequenzen bestimmter Länge mit dem KSTest kombiniert. 1.5 Monte-Carlo Methoden 1.5.1 Monte-Carlo-Integration In der einfachsten Form ist die Monte-Carlo-Integration die näherungsweise Berechnung eines Integrals der Form Z b b Z g(x)dx = a h(x)f (x)dx a Z = h(x)dPf (x) = E (h(X)) durch den Mittelwert einer Sequenz von unabhängigen Pseudozufallszahlen mit Verteilung Pf : n 1X h(xi ) . n i=1 S= Speziell mit i.i.d. Xi ∼ U[a, b] ergibt sich der Schätzer n 1X g(xi )(b − a) . S= n i=1 Der Schätzer ist erwartungstreu n (b − a) X E (S) = E [g(Xi )] n i=1 Z b = g(x)dx a und nach dem Gesetz der groÿen Zahlen konsistent. Für die Varianz gilt Var(S) = n (b − a)2 X Var(g(Xi )) n2 i=1 (b − a) = n Z b Z g(x) − a !2 b g(t)dt dx . a Wir führen die Methode einer Monte-Carlo-Integration und Quasi-Monte-Carlo-Integration in R am Beispiel einer elementar analytisch integrierbaren Funktion durch. Natürlich nden die Methoden in der Praxis Anwendung für analytisch nicht zu berechnende Integrale. Zunächst denieren wir die Funktion und integrieren analytisch. 13 > f<−function ( x ) { 3 x^2} > print ( i n t e g r a t e ( f , 0 , 1 ) ) Als nächstes denieren wir eine Funktion mit den Parametern Integrand, obere und untere Intervallgrenze und Länge der verwendeten Sequenz n zur Monte-Carlo-Integration mit uniformen Pseudozufallszahlen, sowie dieselbe Funktion mit QuasiZufallszahlen: > + + + > + + + mcint<−function ( f , l , u , n ) { ran<−runif ( n , l , u ) f r a n<− f ( ran ) return ( mean ( abs ( u− l ) ∗ f r a n ) ) } m c q u a s i i n t<−function ( f , l , u , n ) { ran<−abs ( u− l ) ∗ runif . s o b o l ( n , d i me n s i on =1) f r a n<− f ( ran ) return ( mean ( abs ( u− l ) ∗ f r a n ) ) } Wir berechnen nun einige Werte der Monte-Carlo- und Quasi-Monte-Carlo-Integration der obigen Funktion. Es zeigt sich, dass die Quasi-Monte-Carlo-Integration bei festem n näher am Ergebnis 1 liegt. > mcint ( f , 0 , 1 , 1 0 0 ) [ 1 ] 1.145873 > mcquasiint ( f ,0 ,1 ,100) [ 1 ] 0.9876508 > mcint ( f , 0 , 1 , 1 0 0 0 ) [ 1 ] 0.9888699 > mcquasiint ( f ,0 ,1 ,1000) [ 1 ] 0.999303 > mcint ( f , 0 , 1 , 1 0 0 0 0 ) [ 1 ] 1.004942 > mcquasiint ( f ,0 ,1 ,10000) [ 1 ] 0.9997876 Wir können die Monte-Carlo Methode auch mehrfach hintereinander ausführen und daraus Mittelwert, Standardabweichung etc. abschätzen. Bei Quasi-Zufallszahlen hat dies jedoch keinen Eekt. > i t e r a t e<−c ( r e p l i c a t e ( 1 0 0 , mcint ( f , 0 , 1 , 1 0 0 0 0 ) ) ) > mean ( i t e r a t e ) [ 1 ] 1.001105 > sd ( i t e r a t e ) [ 1 ] 0.008747136 1.5.2 Monte-Carlo-Bänder Monte-Carlo Verfahren können auch dazu genutzt werden, Monte-Carlo-Bänder für eine auf Pseudozufallszahlen basierende Funktion zu bestimmen. Das bedeutet die Generierung der Zufallszahlen und Berechnung der Statistiken (Funktionswerte) wird in mehreren Iterationen wiederholt und man interessiert sich für die Fluktuation. Diese Monte-Carlo-Bänder kann man als eine Art von Kondenzbändern ansehen (allerdings im Allgemeinen keine uniformen Kondenzbänder). In einigen statistischen Modellen lassen sich auch nur Monte-Carlo-Kondenzbänder bestimmen und keine theoretischen. > > > > > > > > > + > > N<−500 g<−1 : 1 0 0 / 100 U<−matrix ( runif (N∗ 1 0 0 ) , nrow=100) U<−apply (U, 2 , sort ) q<−apply (U, 1 , quantile ) m<−q [ 3 , ] u<−q [ 2 , ] o<−q [ 4 , ] plot ( g ,m, main=" V e r t e i l u n g s f u n k t i o n mit MC−Bändern " , type=" s " , x l a b=" " , y l a b="F" ) lines ( 1 : 1 0 0 / 1 0 0 , u , type=" l " , col=" r e d " ) lines ( 1 : 1 0 0 / 1 0 0 , o , type=" l " , col=" r e d " ) Wir haben zunächst 500 mal iteriert 100 uniform verteilte Pseudozufallszahlen generiert. Eine wichtige Funktionen in R ist die Funktion apply bzw. 14 sapply für Vektoren und lapply für Listen. Damit wird eine Funktion, z.Bsp. hier die Ordnungsstatistik zu bilden und in der Transponierten die Rückgabe von Minimum und Maximum mit range, auf alle Komponenten angewendet. R kann solche Vektoroperationen sehr viel schneller als entsprechende Schleifenanweisungen durchführen. Der Plot zeigt Mediane sowie obere und untere Quartile der empirische Verteilung der geordneten Sequenzen. Literatur Gentle, J. E. (2003). Random Number Generation and Monte Carlo Methods. Berlin: Springer. Lehmer, D. H. (1951). Mathematical methods in large-scale digital computing units. Proceeding of the second symposium on large-scale digital computing machinery , 141146. Matsumoto, M. and T. Nishimura (1998). A 623-dimensional equidistributed uniform pseudorandom number generator. ACM Transaction on Model and Computer Simulation 8 (1), 330. Niederreiter, H. (1992). Random Number Generation and Quasi-Monte Carlo Methods. SIAM. Exkurs: Basics Testtheorie Eine (statistische) Hypothese ist eine Behauptung über Eigenschaften von einer oder mehreren Zufallsvariablen und ein statistischer (Hypothesen)Test eine Entscheidungsregel, ob eine Hypothese verworfen oder nicht verworfen werden kann. Da man eine Hypothese empirisch widerlegt 15 aber nicht veriziert, wird man in den Anwendungen häug zu Behauptungen, die man vermutet und stützen will, eine gegensätzliche Hypothese wählen, um diese durch einen statistischen Test zu widerlegen. X ein Zufallsvektor auf dem Wahrscheinlichkeitsraum (Ω, F, P) und T : Ω → H0 gegen eine Alternative H1 verstehen wir eine Funktion ϕ : R → [0, 1], wobei ϕ(T (X)) = 1 bedeutet, dass die Nullhypothese H0 verworfen wird, und ϕ(T (X)) = 0, dass die Nullhypothese nicht verworfen wird. Wir bezeichnen K = {x ∈ T (Ω)|ϕ(T (X)) = 1} als Ablehnungsbereich. Denition 4. R Sei eine messbare Abbildung. Unter einem Test der Nullhypothese Als Fehler 1. Art bezeichnet man das ungerechtfertigte Ablehnen der Nullhypothese. Das Nicht Ablehnen der Nullhypothese, obwohl diese nicht zutrit, bezeichnet man als Fehler 2. Art. Als Trennschärfe eines Tests wird die Wahrscheinlichkeit des gerechtfertigten Ablehnens der Nullhypothese deniert. Bei der Konstruktion eines Tests beschränkt man den Fehler 1. Art durch ein vorgegebenes Niveau, wobei die Wahrscheinlichkeit für den Fehler 2. Art bei kleinerem Niveau wächst. Zunächst beschäftigen wir uns mit parametrischen Tests. Dabei wird angenommen, dass die ZuTest ϕ(x) H0 wahr Nullhypothese H0 nicht wahr Fehler 1. Art Trennschärfe (power) 0 richtige Entscheidung nicht zu verwerfen Fehler 2.Art fallsvariablen Form Nullhypothese 1 X Verteilungen aus der Familie H0 : θ ∈ Θ0 ⊂ Θ Pθ = {Pθ |θ ∈ Θ} haben. Eine Nullhypothese der H1 : θ ∈ Θ\Θ0 getestet. Hierbei wird gegen eine Alternative der Form gibt es die in nachfolgender Tabelle aufgeführten Unterscheidungen. Gibt man sich das Niveau des Θ0 einfache Nullhypothese zusammengesetzte Nullhypothese Θ0 Θ\Θ0 bzw. K ist einseitig beschränkt Θ\Θ0 bzw. K ist beidseitig unbeschränkt einseitiger Test zweiseitiger Test Tests α ∈ [0, 1] hat Kardinalität 1 hat mehr als 1 Element (z. Bsp. Intervall) vor und wählt den Ablehnungsbereich Kα so, dass α = sup Pθ (T ∈ Kα ) θ∈Θ0 ϕ NiveauαTest. Oftmals gibt man sich ein maximales α vor und konstruiert einen (unrandomisierten) Test, bei dem man den Fehler 1. Art durch α beschränkt: supθ∈Θ0 Pθ (T ∈ Kα ) ≤ α. Das exakte Niveau des Testes kann dann auch kleiner als α sein. Als Gütefunktion wird die Funktion β(θ) = Pθ (T ∈ Kα ) bezeichnet. gilt, nennen wir den zugehörigen Test Niveau Denition 5. Ein Test ϕ zum Niveau α heiÿt gleichmäÿig bester Test zum Niveau α, falls für θ1 ∈ Θ\Θ0 die Güte jedes anderen NiveauαTestes ϕ̃ auf der Alternative kleiner oder gleich Güte von ϕ ist: βϕ̃ (θ1 ) ≤ βϕ (θ1 ). jedes der Lemma 2 (Neyman-Pearson). θ1 Für den Test einfacher Hypothesen ist durch den NeymanPearsonTest 1 , ϕ(x) = γ , 0, falls falls falls wobei q(x) = q(x) < cα q(x) = cα q(x) > cα L(θ0 |x) L(θ1 |x) 16 , H0 : θ = θ0 gegen H1 : θ = den LikelihhoodQuotienten bezeichnet, ein gleichmäÿig bester Test zum Niveau α gegeben. Die Randomisierung wird so gewählt, dass die Gütefunktion auf der Hypothese exakt das Niveau ist: β(θ0 ) = α. Es sei X verteilt nach Pθ und T (X) eine suziente Statistik. Wenn der LikelihoodQuotient nun monoton ist, kann man an Stelle des kritischen Bereiches (Ablehnungsbereich) für kritischen Bereich bzw. kritische Werte direkt für T q(X) auch den angeben. pWert: Der pWert zu einem Test gibt das kleinste Niveau an, zu dem bei Vorliegen der Stichprobe x die Nullhypothese noch abgelehnt werden kann. Manchmal bezeichnet man dies auch als exaktes oder wahres Niveau eines Tests. In R (und anderen StatistikProgrammen) gibt man kein Niveau eines Tests vor, sondern erhält diesen pWert als Ausgabe. Man kann jedoch ein Kondenzintervall zu einem bestimmten Niveau mit angeben lassen. LikelihoodQuotientenTest: Beim allgemeinen Testansatz H0 : θ ∈ Θ0 gegen H1 : θ ∈ Θ1 = Θ\Θ0 werden beim LQTest kritische Werte für Λ(x) = supθ∈Θ0 L(θ|x) supθ∈Θ L(θ|x) bestimmt. Beispiel: Binomialtest Als einfaches erstes Beispiel für die Durchführung eines parametrischen Tests betrachten wir den Binomialtest. Dieser prüft Hypothesen bezüglich der unbekannten Erfolgswahrscheinlichkeit p in einem Binomialexperiment. Der Binomialtest kann unter R mit der Funktion binom.test aufgerufen werden oder mit Hilfe der Quantil qbinom und der Verteilungsfunktion pbinom manuell implementiert werden. H0 : p0 = 0, 5. Dabei handelt es sich um einen zweiseitigen Testansatz. Wir wollen wissen, ob die Hypothese einer fairen Als einfache Anwendung testen wir die Hypothese, dass eine Münze fair ist Münze verworfen werden kann, falls bei 20 Würfen 15 mal Kopf beobachtet wird. > binom . t e s t ( 1 5 , 2 0 , p =0.5 , a l t e r n a t i v e="two . s i d e d " ) Exact binomial test data : 15 and 20 number o f s u c c e s s e s = 1 5 , number o f t r i a l s = 2 0 , p−v a l u e = 0 . 0 4 1 3 9 a l t e r n a t i v e h y p o t h e s i s : t r u e p r o b a b i l i t y o f s u c c e s s i s not equal t o 0 . 5 95 p e r c e n t c o n f i d e n c e i n t e r v a l : 0.5089541 0.9134285 sample e s t i m a t e s : probability of success 0.75 Die Durchführung des Tests ergibt einen pWert von 0,04139. Zum Niveau α = 0, 05 kann H0 damit verworfen werden. Den kritischen Wert des Binomialtests erhält man mit dem Ansatz x n X X n i n i p0 (1 − p0 )n−i + p0 (1 − p0 )n−i < α . i i i=0 i=n−x x = 5, n = 20 und p0 Die folgende Funktion gibt für einen Vektor In unserem Beispiel ist = (1/2). x aus Nullen und Einsen (MisserfolgErfolg) den entsprechenden pWert aus. > b i n o m t e s t<−function ( x , p0 ) { + n<−length ( x ) ; e<−sum ( x ) + p<−pbinom ( n−e , n , p0 , lower . t a i l =TRUE)+pbinom ( e − 1,n , p0 , lower . t a i l =FALSE) + print ( p ) } 17 lower.tail=TRUE gibt den Wert der Verteilungsfunktion zurück, die Option lower.tail=FALSE dagegen die Wahrscheinlichkeit, dass die binomialverteilte Zufallsvariable gröÿere Die Option Werte annimmt. 18