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