3.1 Simulation

R kan bruges til at at illustrere sætninger som I kender fra sandsynlighedsteori. Den kan nemlig generere udfald af stokastiske variable med en given fordeling – vi siger, vi simulerer udfald.

Indbyggede R funktioner der simulerer starter altid med bogstaven “r” som “random”, fulgt ved en forkortelse der står for fordelingen. Det første argument af disse funktioner er antallet n på udfald som skal simuleres, de andre argumenter specificerer fordelingen nærmere. Resultatet er en vektor af (næsten) uafhængige udfald. For eksempel får vi ved runif(n = 3, min = 5, max = 10) en vektor med tre tal som er vilkårligt trukket i intervallet \([5, 10]\). Her står unif for den uniforme fordeling.

runif(n = 3, min = 5, max = 10)
## [1] 9.574030 9.685377 6.430698

Når vi kører den samme programlinje igen, får vi nogle nye tal:

runif(n = 3, min = 5, max = 10)
## [1] 9.152238 8.208728 7.595480

Faktiskt må man godt udelade navne på argumenterne i R funktioner, hvis man overholder rækkefølgen (her: n,min,max):

runif(3, 5, 10)
## [1] 8.682942 5.673333 8.284961

Alle tal som vi får på denne måde burde ligge mellem 5 og 10. De forholder sig næsten som uafhængige udfald af en uniform fordelt stokastisk variabel, men i virkeligheden står der en algoritme bag simulationen, som faktisk er deterministisk. Alligevel fås forskellige tal hver eneste gang vi kører runif funktionen. Det kan undgås ved at sætte den mystiske algoritme i en tilstand som vi selv bestemmer. Det kan vi ved at kalde R-funktionen set.seed. Denne funktion tager et tal som argument. Lige efter kalden til set.seed starter algoritmen i samme tilstand og runif producerer så den samme output. I kan selv vælge argumentet til set.seed, og vil så få andre resultater

set.seed(321)
runif(3, 5, 10)
## [1] 9.779469 9.686428 6.191102
runif(3, 5, 10) # nu får vi andre tal
## [1] 6.275368 6.952560 6.705899
set.seed(321)
runif(3, 5, 10) # samme tal som før
## [1] 9.779469 9.686428 6.191102