Monte Carlo metode Bojan Basrak, PMF MO Zagreb Financijski praktikum 29. veljače 2016. 1
Monte Carlo metode 2
Primjene modeliranje složenih sustava upravljanje portfeljima u financijama i osiguranju procjena rizika odred ivanje cijena izvedenicama testiranje hipoteza 3
Monte Carlo integracija von Neumann i Ulam 1940 te Neka je V R d (otvoren) povezan skup za koji Leb(V ) = C > 0, (npr. interval, pravokutnik ili sl.), a f : V R t.d. V f(x) dx < ako želimo odrediti I = f(x)dx =? V možemo računati I = E(C f(x)), X Unif(V ) 4
Algoritam > sample X 1,..., X n Unif(V ) n.j.d. > return Î n = 1 n C f(x i ) n i=1 5
Jaki zakon velikih brojeva povlači Î n gs I a ako vrijedi σ 2 = C 2 var f(x) <, c.g.t. povlači i d n( Î n I) N(0, σ 2 ), to omogućuje da odredimo i interval pouzdanosti za I, uočimo manji σ 2 daje uži interval i precizniju procjenu. 6
n <- 10000 f <- function(x) sqrt(1-x^2) plot(runif(n), runif(n), col='blue', pch=20) curve(f, 0,1, n=100, col='white', add=true,lwd=3) runif(n) 0.0 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 7 runif(n)
ps <- matrix(runif(2*n), ncol=2) g <- function(x,y) y <= f(x) z <- g(ps[,1], ps[,2]) plot(ps[!z,1], ps[!z,2], col='blue', pch=20) points(ps[z,1], ps[z,2], col='green', pch=20) curve(f, 0,1, n=100, col='white', add=true) ps[!z, 2] 0.2 0.4 0.6 0.8 1.0 8 0.2 0.4 0.6 0.8 1.0 ps[!z, 1]
Procjena je sad length(z[z]) / n ## [1] 0.786 9
g <- function(k) { n <- 10^k f <- function(x,y) sqrt(x^2 + y^2) <= 1 z <- f(runif(n),runif(n)) length(z[z]) / n } niz<-1:7 a <- sapply(niz, g) 4*a ## [1] 3.600000 3.120000 3.112000 3.124400 3.143080 3.141680 3.141364 10
plot(niz, 2/sqrt(10^niz), type='l') lines(niz, abs(pi/4 - a), col='blue') 2/sqrt(10^niz) 0.0 0.1 0.2 0.3 0.4 0.5 0.6 1 2 3 4 5 6 7 11 niz
trials <- 4 * sapply(rep(6,100), g) hist(trials) Histogram of trials Frequency 0 5 10 15 20 3.138 3.140 3.142 3.144 3.146 12 trials
Primjer I za sume možemo napraviti slično, ako je S konačan i velik skup f(k) = S 1 f(k) = S Ef(K) S k S k S gdje je K Unif(S). Slično možemo napraviti i na beskonačnom S uz neku drugu razdiobu za K jasno. 13
I sva druga konačna očekivanja oblika Ef(X), gdje je f realna funkcija, a X sl. varijabla, vektor, proces,... možemo aproksimirati koristeći njd X 1,... X n i procjenu Î n = 1 n f(x i ) n i=1 95%tni interval pouzdanosti za I je uz var f(x) < tada npr. var f(x) var f(x) Î n 1.96, n În + 1.96 n Primjer Za α > 0 I = 0 x α 1 e x dx = Γ(α). 14
i) Za X Exp(1), f(x) = x α 1, I = Ef(X) ii) Za Y Gama(2, 1), f Y (x) = xe x, g(x) = x α 2, I = Eg(Y ) Za X i Exp(1), Y i Gama(2, 1) njd I možemo procijeniti sa Î n = 1 n f(x i ) ili Ĵ n = 1 n g(y i ) n n i=1 No var f(x) = Γ(2α 1) Γ(α) 2 var g(y ) = Γ(2α 2) Γ(α) 2 Prva je 10 puta veća za α = 3!?! i=1 15
Napomene MC metoda je inferiorna numer. integraciji (Newton Cotes,...) za d = 1, no u većim dimenzijama situacija se brzo mijenja zahtjeva da znamo simulirati X oslanja se na algoritme za pseudosl. brojeve (kongruencijski alg...) nisu sve MC metode jednako dobre 16
Ako je funkcija distribucije F : (a, b) (0, 1) Generalizirani inverz funkcije distribucije Funkcija kvantila bijekcija za neke a < b, za α (0, 1) dobro je definiran α kvantil razdiobe F kao q α = F 1 (α). Za ovakvu F i U Unif(0, 1) vrijedi X = F 1 (U) F 17
Primjer (eksponencijalna razdioba) F (x) = 1 e λx, x 0, jasno F : (0, ) (0, 1) je bijekcija i F 1 log(1 u) (u) = λ Prema tome i X = log(1 U) λ d = log U λ Exp(λ) 18
I ako F 1 ne postoji možemo uvijek definirati tzv. generalizirani inverz u u (0, 1) F (u) = inf{x : F (x) u}, kako je F neprekidna zdesna inf možemo pisati kao min, i ovu vrijednost zovemo u kvantilom razdiobe F. Jasno ako je F bijekcija kao gore F = F 1. F je s lijeva 19neprekidna!
Uočimo u F (x) F (u) x po definiciji, a slijedi pretpostavljajući suprotno i koristeći neprekidnost zdesna funkcije F. Lema U Unif(0, 1) = F (U) F. 20
Primjer (diskretne razdiobe) b.s.o.m.p. a 1 a 2 a 3 ( ) a1 a X 2 a 3.... (1) p 1 p 2 p 3... F (x) = a i x p i F (U) = inf{x : F (x) U} = inf{a i : F (a i ) U} Algoritam > sample U Unif(0, 1) > J = min{a i : F (a i ) U } > return a J 21
Zadatak Za X Geom(p), P(X = k) = q k p, q = 1 p, k N 0 (i) razmislite kako X simulirati preko Bernoullijevih slučajnih varijabli. (ii) pokažite X = d log(u)/ log(q) (iii) nad ite Y Exp(λ) t.d. X = d Y 22
Napomena Za mnoge razdiobe fju. dist. je teško invertirati, npr. za N(0, 1). Za Φ 1 postoje aproksimacije npr. racionalnim funkcijama. Simulirati N(0, 1) varijable možemo i preko c.g.t. istina vrlo neefikasno. 23
Miješane razdiobe p 1, p 2,... 0, i p i = 1, (F i ) niz funkcija distribucije tad je i F (x) = i p i F i (x) funkcija distribucije. Algoritam > sample J (p i ) i 1 > sample X F J > return X 24
Ako je p( ) gustoća na S R d a g( y) y S familija gustoća na R. Promotrimo gustoću f(x) = g(x y)p(y)dy S Ako znamo simulirati iz p i iz svake od g( y) lako možemo u dva koraka simulirati i iz f kao i u disk. slučaju. Primjer Y χ 2 (ν), X Y = y N(0, ν/y) tada vrijedi X Studentova t(ν) 25
Metoda ovojnice acceptance/rejection algorithm Koristimo je u slučaju kada F ima gustoću f, a F ne znamo (efikasno) izračunati. Pretpostavimo za a < b, M > 0 b a f(s)ds = 1, f(s) M, za sve s [a, b] 26
Neka su (X, Y ) Unif([a, b] [0, M]). [a, b], y f(x)} i a < t < b P((X, Y ) C, X t) = P(Y f(x), X t) = posebno L{X (X, Y ) C} f. Dakle za C = {(x, y) : x 1 t f(s)ds M(b a) a 27
Algoritam repeat > sample X Unif(a, b) > sample Y Unif(0, M) until Y f(x) > return X 28
x <- seq(0,1,0.002) plot(x, dbeta(x,6,3),type="l") dbeta(x, 6, 3) 0.0 0.5 1.0 1.5 2.0 2.5 0.0 0.2 0.4 0.6 0.8 1.0 29 x
n<-100000 ps <- cbind(runif(n), 3* runif(n)) f <- function(x) dbeta(x, 6, 3) g <- function(x,y) y <= f(x) z <- g(ps[,1], ps[,2]) 30
hist(ps[z,1],prob = TRUE, main = 'Histogram prihvacenih x', xlab = 'x') lines(x, dbeta(x,6,3)) Histogram prihvacenih x Density 0.0 0.5 1.0 1.5 2.0 2.5 0.2 0.4 0.6 0.8 1.0 31 x
Općenito, ako su f, g gustoće na nekom skupu V R d t.d. f(x) Mg(x) za neki M > 0 i lako znamo simulirati iz g Tada za nezavisne X g i U Unif(0, 1) { L X M U f(x) } f. g(x) 32
Uzorkovanje po važnosti importance sampling Neka su f, g gustoće na nekom skupu V R d t.d. ako znamo simulirati iz g za koji vrijedi g(x) = 0 f(x) = 0. Tada za X f, X g E(ψ(X)) = ψ(x)f(x)dx = V V ψ(x) f(x) ( ) ψf g(x) g(x)dx = E g (X ) Ovu metodu prije svega koristimo za smanjivanje varijance naime posebno je zanimljiv slučaj kada ( ) ψf var(ψ(x)) > var g (X ). 33
Primjer Neka je X f N(0, 1), ψ(x) = I (u, ) (x). E(ψ(X)) = P(X > u) Za u = 3 npr. X > u se iznimno rijetko dogad a, no za X g N(µ, 1) vrijedi jednakost ( ) ψf E g (X ) = P(X > c) 0.001349898 Napomena Postoje i mnoge druge metode smanjivanja varijance MC procjenitelja. 34
n<-10000000 #we fix n and X in advance X<-rnorm(n) #and use the same random numbers for all estimates u<-3 proc <-function(mu=0,c=0,n=1000000) { IS<-mean((mu+X>c)*exp(mu*(mu-2*(mu+X))/2)) standev<-sd((mu+x>c)*exp(mu*(mu-2*(mu+x))/2))/sqrt(n) c(mu,standev,is,is-qnorm(0.975)*standev,is+qnorm(0.975)*standev) } c(1-pnorm(u), proc(0,u,n)[3], proc(1,u,n)[3], proc(2,u,n)[3], proc(3,u,n)[3], proc(4,u,n)[3]) ## [1] 0.001349898 0.001353400 0.001352368 0.001349357 0.001351104 0. 35
0.001346 0.001350 0.001354 0.001358 0 1 2 3 4 5 6 mu 36