Μέθοδοι Monte Carlo Οι μέθοδοι Monte Carlo (MC) είναι κλάση υπολογιστικών αλγορίθμων που βασίζονται στην επαναλαμβανόμενη τυχαία δειγματοληψία και συχνά χρησιμοποιούνται στην προσομοίωση φυσικών και μαθηματικών συστημάτων και προβλημάτων Προσομοίωση είναι η διαδικασία δόμησης ενός Μαθηματικού είτε λογικού μοντέλου ενός συστήματος ή προβλήματος λήψης αποφάσεων και ο πειραματισμός με αυτό το μοντέλο με σκοπό την δημιουργία εκτιμήσεων των παραμέτρων και των επιδόσεων του συστήματος Οι αλγόριθμοι MC εξαρτώνται από την χρήση τυχαίων αριθμών (στην ουσία ψευδοτυχαίων αριθμών) που παράγονται από κώδικα που εκτελείται σε υπολογιστή Οι αλγόριθμοι MC ονομάζονται και στοχαστικοί αλγόριθμοι (stochastic algorithms) και συνήθως χρησιμοποιούνται σε περιπτώσεις που το μοντέλο μας για κάποιο σύστημα, είναι τόσο πολύπλοκο, που η παραγωγή αναλυτικών λύσεων, είτε ακόμα και η χρήση αιτιοκρατικών αλγορίθμων, δεν είναι δυνατή είτε έχει πολύ μεγάλο κόστος σε πόρους Στην ουσία με την χρήση στοχαστικών αλγορίθμων θέλουμε να αναπαραστήσουμε ένα στοχαστικό φαινόμενο στον υπολογιστή όσο πολύπλοκο και αν είναι χρησιμοποιώντας τον μικρότερο δυνατό αριθμό απλουστεύσεων, δημιουργώντας έτσι ρεαλιστικά μοντέλα Εάν λοιπόν καταφέρουμε να δημιουργήσουμε ένα υπολογιστικό μοντέλο που είναι πολύ κοντά στο αντίστοιχο φυσικό σύστημα (να προσομοιώσουμε δηλαδή το φυσικό σύστημα), δεν χρειάζεται να περιμένουμε το φαινόμενο να πραγματοποιηθεί με φυσικό τρόπο γιατί ίσως χρειάζεται μεγάλο χρονικό διάστημα για την επανάληψη του είτε λόγω κόστους δεν μπορούμε να έχουμε μεγάλο αριθμό από πραγματικές εργαστηριακές πραγματοποιήσεις Για παράδειγμα όπου χρησιμοποιούνται στοχαστικοί αλγόριθμοι: Πολυδιάστατη ολοκλήρωση Στατιστική εκτίμηση κατά Bayes με τη χρήση μη συζυγών a-priori κατανομών Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α
Παράδειγμα d Έστω ότι σε κάθε ανεξάρτητη πραγματοποίηση X j : Ω, j του υπολογιστικού μοντέλου X, με χώρο πιθανότητας ( Ω,,P) όπου iid ~ X j f X, ενώ X j d = X για κάθε j, ενδιαφερόμαστε για την πιθανότητα πραγματοποίησης κάποιου ενδεχομένου B = { X A, δηλαδή θέλουμε να εκτιμήσουμε την παράμετρο ϑ : = P( B) = P{ X A Θεωρούμε τις δίτιμες τυχαίες μεταβλητές Yj : = ( X j A) = τότε X A j X j A και Y : ( X A ) X A = = X A ( X j A) = ( x A) f X ( x) dx = f X ( x) dx = P{ X j A = P{ X A [ T ] = P{ X A n Εμφανώς ισχύει ότι { Yj = = { ( X j A) = = { X j A { Yj = = { ( X j A) = = { X j A = { X j A = { X j A Yj iid Bin(, ϑ) και j { j { j { j { j Y = PY = + PY = = PY = = P X A= ϑ Έτσι από τον ισχυρό νόμο των μεγάλων αριθμών έχουμε ότι T Y X A n n n wp n = j = j ϑ,, n j= n j= και από το κεντρικό οριακό θεώρημα ότι A ~ Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α
( T ) ( ϑ) ( ϑ) Tn Tn lim d n Tn (,) lim d = = (, ) n n ϑ n Παρατηρώντας λοιπόν έναν μεγάλο αριθμό από πραγματοποιήσεις ( X,, X ), μπορούμε να εξάγουμε προσεγγιστικά συμπεράσματα για το πραγματικό σύστημα, δηλαδή για θα έχουμε την προσέγγιση d T ϑ, ϑ( ϑ) Η παραγωγή ψευδοτυχαίων αριθμών iid Έστω ότι ui ~ (,), τότε μια πραγματοποίηση της ακολουθίας { u,, un στο διάστημα (, ) για n <, λέμε ότι είναι μια πεπερασμένη ακολουθία τυχαίων αριθμών Στην πραγματικότητα όμως στον υπολογιστή μόνο να προσομοιώσουμε μπορούμε μια τέτοια ακολουθία, έτσι: Με έναν υπολογιστή μπορούμε να παράγουμε ακολουθίες ψευδοτυχαίων αριθμών που όμως έχουν κοινά χαρακτηριστικά με τις ακολουθίες των πραγματικά τυχαίων αριθμών Ψευδοτυχαίες ακολουθίες { u j συνήθως παράγονται με την χρήση μη στοχαστικών (αιτιοκρατικών), γραμμικών αναδρομικών σχέσεων (Linear Congruence Random umber Generator) της μορφής T : {,,, M {,,, M, έτσι ώστε y y xi ( axi + b) ( mod Mόπου ), i mod y: ( M) = M M M, = Tx i για δοθέν x {,,, M, το x είναι η αρχική συνθήκη της γραμμικής αναδρομικής σχέσης (seed) Ορίζουμε xi < u i <, ui : =, i M Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 3
Λέμε ότι η τριάδα ( abm,, ) παράγει ένα γεννήτορα τυχαίων αριθμών όταν τα abm,, είναι τέτοια ώστε: Να υπάρχει x, με περίοδο Per ( x ) της τάξης μεγέθους του M, όπου k { και ( ) ( ( )) k Per x : = min k: T x = x T x : = T T x = T T T x kέ ϕορ ς Η ψευδοτυχαίες ακολουθίες περνάνε αρκετούς από τους γνωστούς ελέγχους τυχαιότητας (tests for randomness) Για παράδειγμα τα test information-entropy, autocorrelation, Kolmogorov-Smirnov, κλπ Παρατήρηση Η R χρησιμοποιεί τον αλγόριθμο Mersenne-Twister για προσομοίωση δειγματοληψίας από την (,) Η μέθοδος Mersenne-Twister βασίζεται σε matrix linear congruence (MLCRG) και Mersenne πρώτους αριθμούς M n Οι Mersenne είναι πρώτοι αριθμοί της μορφής M =, όπου φυσικά και το n είναι πρώτος (αλλιώς το M θα ήταν σύνθετος) Έως τον Σεπτέμβριο του 5 γνωρίζαμε μόνο τους πρώτους 49 Mersenne primes Ο μεγαλύτερος 74,7,8 γνωστός πρώτος αριθμός είναι ο M 49 = που έχει,338,68ψηφία Σημειώστε επίσης ότι δεν υπάρχει ακόμα απόδειξη για την απειρία των Mersenne primes Παράδειγμα Εάν θέλουμε να θέσουμε καινούργια αρχική τιμή στη γεννήτρια τυχαίων αριθμών της R, χρησιμοποιούμε την εντολή setseed( ) > setseed(); x <- runif(); x [] 655866 3739 5785336 98779 6893 89838968 [7] 9446757 6679779 6944 67867 > y <- runif(); y [] 934753 45 6567377 5555 6767 38649 [7] 33933 3838796 8696985 34349 Εάν στην συνέχεια θέσουμε και πάλι το ίδιο seed, η προσομοιωμένη ακολουθία του δείγματος από την ομοιόμορφη κατανομή στο (,) επαναλαμβάνεται: Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 4
> setseed(); z <- runif(); z [] 655866 3739 5785336 98779 6893 89838968 [7] 9446757 6679779 6944 67867 R script για τη δημιουργία ψευδοτυχαίας ακολουθίας αριθμών στο (,), για δοθείσα τριάδα ( abm,, ) και αρχική συνθήκη x myrandgen <- function(x=4, SS=4, a=5, b=7, M=){ x <- x; v <- ULL for(i in :SS){ x <- (a*x+b) %% M v <- append(v, x/m) return(v) Παρατηρήσεις Η εντολή v < ULL έχει την εναλλακτική μορφή v < c Η εντολή v < append ( v, x / M) εναλλακτικά είναι v < c( v, x / M) 3 Το ( a * x + b ) %% M είναι το υπόλοιπο της διαίρεσης του a*x+ b με το Μ Ας δούμε μια περίπτωση που η περίοδος είναι μικρή, για τις τιμές των παραμέτρων LCG ( 5,7, ) και x = 4 Πιο συγκεκριμένα παίρνουμε Per ( 4) = 8 v<- myrandgen(); v [] 85 46 335 7 585 96 835 [9] 85 46 335 7 585 96 835 [7] 85 46 335 7 585 96 835 [5] 85 46 335 7 585 96 835 [33] 85 46 335 7 585 96 835 hist(v, breaks=, main="a=5, b=7, m=", col="black") Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 5
6 3 Η τριάδα ( 3,, ) + χρησιμοποιήθηκε από την IBM στις αρχές τις δεκαετίας του 7 Το 963 όμως ανακαλύφθηκε ότι xi εάν kn : = un+ 6un+ + 9un, για ui : =, xi {,, M, τότε M k Κ = { 5, 4,,9 n Αυτό σημαίνει ότι συνεχόμενες τριάδες τυχαίων αριθμών ( un, un+, un+ ) βρίσκονται αποκλειστικά, στην τομή 5 παράλληλων επιπέδων στο εσωτερικό του μοναδιαίου κύβου, δηλαδή n n n 3 { 3 u, u +, u + xyz,, : z 6 y+ 9 x= r, r Κ,, Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 6
Έτσι η συσχέτιση μεταξύ των ( un, un+, un+ ) είναι πολύ μεγάλη και η τιμή 6 3 abm,, = + 3,, δεν μπορεί να χρησιμοποιηθεί για την παραγωγή ψευδοτυχαίων αριθμών Παράδειγμα Καλές επιλογές είναι οι και 7 5,, 3 8 5 3 ( 7,, ) v <- myrandgen(x=3, SS=, a=7^5-, b=, M=^3-) hist(v, breaks=, freq=false, main="a=7^5-, b=, m=^3-", col="black") # To variance της X~ ( ab, ) είναι ( X) = ( b a) / 4 πράγματι το δείγμα μεγέθους έχει variance: > var(v) [] 8357 εδώ / = 8333, Με χρήση του random number generator της R έχουμε: Park, SK and KWMiller, Random umber Generators: Good ones are hard to _nd, Comm ACM, vol 3, n, Oct 988, pg 9- Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 7
setseed(); v <- runif(, min=, max=) hist(v, breaks=,main=" Mersenne Twister ", col="gray97") var(v) [] 84773 v <- runif(, min=, max=) v3 <- runif(, min=, max=) myframe <- dataframe(v,v,v3) cov(myframe) v v v3 v 847736 676 43459 v 676 833479-9963 v3 43459-9963 8646939 cor(myframe) v v v3 v 7466 33843 v 7466-398447 v3 3384-398447 Άσκηση Να δειχθεί ότι εάν 6 3 (,, ) ( 3,, ) abm = + τότε un+ 6un+ + 9un = kn για kn Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 8
6 3 ( 3) ( mod ) 6 3 T ( xn) ( 3) xn ( mod ) 3 6 3 ( 6 9) xn ( mod ) 6 3 ( 6 9) xn ( mod ) 6 3 ( 6 ( 3) 9) xn ( mod ) 3 ( 6xn+ 9xn) ( mod ) x = T x + x n+ n+ n+ = + + + + + ή ότι x 6x + 9x = κ u 6u + 9u = κ 3 n+ n+ n n+ n+ n Άσκηση Δείξτε με προσομοίωση, ότι n { 5, 4,,9 k # The randu generator # From the sequence ( u n ) create the sequence ( k n ) randudecode <- function(v){ K <- c() for(i in :(length(v)-)){ k <- v[i+]-6*v[i+]+9*v[i] K <- c(k, k) return(k) getdistr <- function(sample){ D <- c(); P <- c(); L <- sample #Find distinct occurrences while(length(l)!=){ D <- c(d, L[]) L <- L[L!= L[]] #Find relative frequencies for(i in :length(d)){ x <- D[i]; counter <- for(j in :length(sample)){ if(x == sample[j]) counter <- counter + P <- c(p, counter/length(sample)) v <- c(d, P) return(v) Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 9
> u<- myrandgen(x=3, SS=, a=^6+3, b=, M=^3); u [] 955693e-5 54939e-4 4796e-3 988788e-3 3779e- [6] 334849e- 467967e- 6858e- 4649e- 47e- [] 46739e- 6493e- 55645e- 5535e- 4849e- [6] 9668739e- 945635e- 979453e- 39567e- 7835e- [] 8785e- 48685e- 566444e- 4995e- 9759979e- [6] 9798e- 7797698e- 33993e- 9854e- 8839e- [3] 4799e- 9565e- 47968e- 963e- 54566e- [36] 8873e- 45785e- 6534e- 8968783e- 5449e- [4] 959468e- 844e- 55935e- 4784e- 97577e- [46] 7993796e- 5389e- 34398e- 368e- 86839e- [5] 9483e- 8445747e- 58555e- 89768e- 65e- [56] 6446e- 84637e- 37943e- 3349e- 6489e- [6] 58969e- 4434e- 9576336e- 3494939e- 47866e- [66] 749e- 43687e- 7546e- 98755e- 3988847e- [7] 555836e- 443539e- 984e- 6744e- 454e- [76] 6884e- 87894e- 89e- 65e- 3695e- [8] 959865e- 78363e- 4953e- 684e- 9958e- [86] 8373498e- 69574e- 8786e- 646854e- 9787768e- [9] 543e- 499487e- 53483e- 7975e- 45884e- [96] 37585e- 847784e- 5436e- 7786e- 338639e- > mysample <- randudecode(u); mysample [] - 3 4-3 3-4 3 7-3 -3 4 [6] 4 6-4 6-7 - 4-6 - 8-3 - 4 4 5 - - 3 [5] 4 5 8-6 - 6-5 7 7-3 7 4-3 6 [76] -3 7-4 7-4 8-4 5 9-4 3-7 - > v<-getdistr(mysample); v [] - 3 4 - [7] 7-3 6 8 5 [3] -5-4 9 48 449 44898 [9] 86365 36536 983673 86365 86365 48633 [5] 6449 364 364 48 48 48 > D<-v[:(length(v)/)]; P <- v[(length(v)/+):length(v)]; D; P [] - 3 4-7 -3 6 8 5-5 -4 9 [] 48 449 44898 86365 36536 983673 86365 86365 48633 6449 [] 364 364 48 48 48 > plot(d, P, type="h", lwd=, col="red", ylim=c(,3)) > points(d, P, pch=6, cex=, col="black") Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α
Ολοκλήρωση κατά Monte-Carlo Η μονοδιάστατη περίπτωση Έστω ότι θέλουμε να υπολογίσουμε το ολοκλήρωμα J = g ( x) dx x= Συμβολίζουμε την χαρακτηριστική συνάρτηση του διαστήματος ( ab, ) με ( a< x< b) που είναι όταν x ( ab, ) και όταν x ( ab, ), για παράδειγμα η ομοιόμορφη πυκνότητα στο ( ab, ) είναι a < x< b ( x ab, ) = ( a< x< b) = b a b a αλλού Τότε το ολοκλήρωμα, μπορεί να αναπαρασταθεί με τον εξής τρόπο: { J = g x < x < dx = g x x, dx = g U, U ~, iid Από τον ισχυρό νόμο των μεγάλων αριθμών έχουμε ότι εάν ui ~ (,) και gu <, τότε { Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α
lim n i= n n gu ( i ) = gu = J, με πιθανότητα Μια εκτίμηση T = T( u ) όπου = ( ) u u,, u του J θα είναι T = gu u T = gu U iid, ~ (, ),, ~ (,),, i= i i ( T ) = g( u ) όταν i Χρησιμοποιώντας το Κεντρικό Οριακό Θεώρημα (κατά Lindeberg-Levy) έχουμε: T ( T) ( T ) d (,) d (, d T T ( T) ) T J, { gu όπου gu = gu gu gu J { { { ( i ) i= b Για να υπολογίσουμε ολοκληρώματα της μορφής g ( x ) dx θα a iid χρησιμοποιήσουμε vi ~ ( ab, ) b g ( x) dx = a b a g x a < x < b dx b a = ( b a) g( x) ( x a, b) d = x( b a) g( V) V a όπου V~ ( ab, ) U= ~ (, ) b a x a x = a+ b a y y = b a g x dx = b a g a + b a y dy Εναλλακτικά θέτοντας b y (,) x= a = = b a g a+ b a y y d y = b a g a+ b a U, U ~, Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α
Για ολοκληρώματα της μορφής θέτουμε x = y y = x + g x dx = ( ) ( ) (,) x= = y= + = U gu ( ), U~ (,) g x dx y g y dy y g y y dy 3 Για ολοκληρώματα της μορφής g ( x ) dx με a > θέτουμε: a a x = y y = x a a a a g ( x) dx = g dy g ( y,) dy x= a y= + = ( y) y ( y) y a a = g, U ~ (,) ( U ) U 4 Για ολοκληρώματα της μορφής J = g ( x) dx με a > έχουμε: a = + g x dx g x dx g x dx a Για το πρώτο ολοκλήρωμα θέτουμε x x = ay y = a a a = ( ) = ( ) (,) g x dx a g ay dy a g ay y dy x= a y= Τελικά = ag au, U ~, ( ) ( ), ~ (,) J = ag au + U g U = ag au + U g U U ` Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 3
Παράδειγμα b Δίνεται ότι (, ) = exp( ) J a b ax dx x> Δείξτε ότι για a > και b > ισχύει J( ab, ) = Γ / b ba b Να βρεθεί ο εργοδικός μέσος για τον υπολογισμό του J( ab, ) 3 Προσεγγίστε κατά Monte-Carlo, τα ολοκληρώματα J ( 5, ), J ( 5,4) και J (, 7) b v Θέτοντας v = ax, για a > έχουμε ότι x = από όπου και a / b / b v dx = v dv J / ( a, b b ) = v e dv / b / b ba ba = Γ ba b v> Στο ολοκλήρωμα J( ab, ) ( ;, ) x> /b b = g xab dx, όπου g ( x; a, b) = exp( ax ), θέτουμε x = από όπου και y J( ab, ) = g ; ab, ( y,) dy g ; ab,, U~ (,) y = y U U Παρατήρηση f x = x, = exp x / exp x / dx = π = = π exp ( u ) du π J (, ) π Η πολυδιάστατη περίπτωση Για πολλαπλά ολοκληρώματα της μορφής I = g x dx dx = g x dx dx k k x (,) k, όπου x = ( x x ) θα έχουμε:,, k Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 4
k { gu { i= i k {, i= i k (, ) k ( ) I = g x < x < dx k dx = = = g x x dx dx g x x dx dx k, όπου = ( ) lim n i= n U U,, ~, k U k n i = = k k Τότε με πιθανότητα έχουμε ότι g U g U g u duduk k u (,) Ένας αμερόληπτος εκτιμητής για το ολοκλήρωμα I θα είναι: i T = T ( u,, u ) = g( u ) i= i ( T ) = { g( u ) = g( u) = I i= ( T ) = { g( u) i iid k, όπου u ~ (,) για i Χρησιμοποιώντας το Κεντρικό Οριακό Θεώρημα έχουμε: T ( T) ( T ) d (,) d T ( ( T), ( T) ) = ( g( u) ), ( g( u) ) T d g ( u) du duk, { g ( u), k u (,) όπου ( g( u) ) = g( u) g u = g x dxdxk g x dxdxk k k x (,) x (,) Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 5
# R-script για τον υπολογισμό του εκτιμητή T = T( u u ) για το I = g ( x) dx MCIntegral <- function(, g){ s <- for(i in :) s <- s + g(runif()) return(s/) # Για το ολοκλήρωμα του g( x) = log ( x) μέσα στο,,, MCIntegral(, log) [] -577 # 5 x Exp x 5 dx = 5e dx = 5x exp 5 / x dx = Myfun <- function(x){ return(5*x^(-)*exp(-5*(x^(-)-))) MCIntegral(, Myfun) [] 9865 # The distribution of the estimator T = T( u u ),, # TSS = the number of sampled values from the estimator MCIntegral <- function(τss=, =5, g){ v <- c() for(j in : ΤSS){ s <- for(i in :){ s <- s + g(runif()) x <- s/; v <- c(v, x); cat("j=",j, "Τ=",x, "\n") return(v) setseed() v <- MCIntegral(g=log) myfun <- function(x) return(dnorm(x, mean=-,sd=/5^5)) mybreaks <- seq(from = -, to = -98, by = ) hist(v, breaks=mybreaks, freq=false, xlim = c(-, -98), ylim=c(,), main="the distribution of the estimator", col="gray96", ylab="", xlab="") curve(myfun(x), xlim = c(-, -98), ylim=c(,), col="red", Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 6
lwd=, add=true) d T log ( x) dx, { log ( U ) log ( x) dx = x ( log ( x) ) = T, log = log log = ( x) dx x ( x) x ( x) Σημείωση: Το script MCIntegral3 είναι μια vectorized έκδοση του MCIntegral MCIntegral3 <- function(τss=, =5, g){ v <- c() for(j in : ΤSS){ x <- sum(g(runif()))/ v <- c(v, x); cat("j=",j, "I=",x, "\n") return(v) Υπολογισμός του εκτιμητή T για το J = exp ( x + y) dxdy 4899 y= x= setseed() <- ; s <- for(i in :){ x <- runif() s <- s + exp((x[]+x[])^) Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 7
s <- s/ > s [] 478835 # compute the ergodic average vector v <- ; s=; v <- ULL for(i in :) { x <- runif(); s <- s + exp((x[]+x[])^) if(i>) v <- c(v, s/i) s <- s/ > s [] 48864 # plot the ergodic average of the MC integration plot(v, type='l', pch="") # add the line y = 49 abline(49,, ylim = c(, )) Παράδειγμα Να μετατραπεί η μη αρνητική συνάρτηση hxy πυκνότητα (, ) y (, ) ( ) { xy < x < y < = σε αλλού 3 y h x y dxdy = xy < x < y < dxdy = xydx dy = dy = y= x= y= 8 Για το R script έχουμε Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 8
y= x= ( < < < ) xy x y dxdy = xy x < y dxdy, (,) = xy x < y x y dxdy y= x= = g XY,, όπου g ( X, Y ) = XY ( X < Y ) και XY, ανεξάρτητες (,) τυχαίες μεταβλητές, ισοδύναμα ( XY, ) ~ (,) με fxy, xy, = xy,, = x, y, iid Από τον ισχυρό νόμο των μεγάλων αριθμών έχουμε ότι εάν u ji ~ (,) τότε με πιθανότητα ένα lim gu ( j, uj) = g( XY, ), j= ή ότι για θα έχουμε ότι ( j, j, ) ( < < < ) <- s <- for(i in :){ x <- runif();y <- runif() if(x<y) s <- s + x*y s <- s/ j= g u u xy x y dxdy > s [] 68686 Άσκηση Να υπολογιστεί το εμβαδόν του μοναδιαίου δίσκου με ολοκλήρωση κατά Monte Carlo Εάν {, : D= xy x + y τότε γνωρίζουμε ότι: Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 9
D x dxdy = dy 4 dx = x dx = x dx x= y= x π d π/ / = 4 cos ϑ ϑ = + cos ϑ dϑ π / π / = ϑ + sin ( ϑ) = ( ϑ + sin ( ϑ) cos ( ϑ) ) = π Για την ολοκλήρωση κατά Monte Carlo θα έχουμε: = ( + ) D dxdy x y dxdy, ή εναλλακτικά dxdy = 4 x dx D Επειδή D [,] D dxdy = 4 ( x + y ) ( < x < ) ( < y < ) dxdy = 4 x + y x, y, dxdy = 4 x + y x, y, dxdy ( x y ) = 4 + όπου ( xy, ) ~ (,), με Έτσι ο εργοδικός μέσος όρος γίνεται: j= fxy, xy, = xy,, = x, y, ( iid j, j,,, = + ), ji (,) gu u g XY g XY X Y u ~ Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α
Το αντίστοιχο R script θα είναι: <-; s<- for(i in :){ x<- -+*runif(); y<- -+*runif() if(x^+y^<) s<-s+ s <- s/ > 4*s [] 334 Παρατήρηση Το συγκεκριμένο ολοκλήρωμα δίνει εκτίμηση του π = 3459, δηλαδή 4 ( ) iid ˆ π = u, (,) j j + uj < u = ji ~ Άσκηση Να υπολογιστεί το ολοκλήρωμα Carlo x exp ( ) y κατά Monte J = x + y dydx x= = Γράφουμε το J σαν ολοκλήρωμα πάνω στο (, ) x= y= ( xy, ) (, ) exp J = y < x x + y dydx = (, ) h x y dydx Θέτουμε : (, ) (,) με ( xy, ) = ( uv, ) =, ( xy, ) = ( uv, ) =, x y + + u v Τότε ( ) ( ) ( xy, ) = = ( uv, ) uv ( xy, ) ( uv, ) J = h x u, v, y u, v dudv, ( uv, ) (, ) Jac Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α
Επίσης < y < x < u< v< από όπου και J = ( < u < v < ) exp dvdu + uv u v (,) = ( < u < v < ) exp + ( v, ) ( u,) dvdu uv u v = < + uv u v ( u v) exp, ( uv, ) ~ (,) MCDouble <- function(=, myseed=){ setseed(myseed); s <- for(i in :){ v <- runif() if(v[] > v[]) s <- s + exp(-/v[]-/v[]+)/(v[]^*v[]^) return(s/) > r <- MCDouble(=);r [] 47864 > r <- MCDouble(=);r [] 48987 > r <- MCDouble(=);r [] 4978697 Αναλυτικά έχουμε: I = e dydx = e e dydx = e e dx = x= y= x= y= x= x x x y x y x x ( ) Χρησιμοποιώντας τη Maple 7 για το διπλό ολοκλήρωμα έχουμε: Η βελόνα του Buffon Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α
Χωρίζουμε το επίπεδο με παράλληλες ευθείες που έχουν απόσταση t και πετάμε με τυχαίο τρόπο βελόνες μήκους l < t Η θέση κάθε βελόνας καθορίζεται από την απόσταση του κέντρου της βελόνας από την κοντινότερη σε αυτήν ευθεία και από την γωνία που σχηματίζει η βελόνα με την ευθεία σύμφωνα με το σχήμα: Έστω ότι πετάμε n βελόνες και m από αυτές τέμνουν κάποια από τις n l ευθείες τότε μια εκτίμηση για το θα π είναι ˆn π = tm Πράγματι, η βελόνα τέμνει την ευθεία όταν l x sinϑ Εμφανώς PX ( dx) = ( x, t /) dx και PΘ ( dϑ) = ( ϑ, π /) dϑ ενώ οι τμ X και Θ είναι ανεξάρτητες Το από κοινού μέτρο πιθανότητας θα είναι: PX, Θ dx, dϑ = PX dx PΘ dϑ = x, t / ϑ, π / dxdϑ, και θέλουμε να βρούμε την πιθανότητα του ενδεχομένου l l A= X sin Θ = ω Ω: X ( ω) sin ( Θ( ω) ) l P A P X PX, Θ dx d = sin Θ = (, ϑ) l x sinϑ l = x sin ϑ ( x, t / ) ( ϑ, π / ) dxdϑ l = X sin Θ όπου X ~ (, t/ ) και Θ ~ (, π / ) και Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 3
P ( A) P ( dx, dϑ) dx dϑ π έτσι l π/ sinϑ = X, Θ = ϑ= x= l t x sinϑ l = tπ l = tπ l t π / ϑ= sin ( ϑ) dϑ l sin,, /,, / iid iid ( ϑ ) ~ ϑ ~ ( π ) = x i i x i i t = i ˆ < π # R-script for the Buffon needle estpi <- function(ss, l=, t=){ m <- for (i in :SS){ x <- runif() theta <- runif(, min=, max=pi/) if (x < l/ * sin(theta)) m <- m + return(*l*ss/(t*m)) > estpi() [] 335575 > estpi() [] 38674 > estpi() [] 3387 > estpi() [] 3479 > estpi() [] 3436 Buffon s needle animation Πρώτα θα πρέπει να κάνουμε download το R package animation και στην συνέχεια να δώσουμε τον αριθμό των επαναλήψεων nmax για την ολοκλήρωση Monte Carlo Το option interval= δίνει μέγιστη ταχύτητα στο animation > anioptions(nmax =, interval = ) animation option 'nmax' changed: --> Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 4
Στην συνέχεια καλούμε την συνάρτηση buffonneedle() όπου l = 8 είναι το μήκος της βελόνας και d = η απόσταση των παράλληλων ευθειών buffonneedle(l = 8, d =, redraw = TRUE, mat = matrix(c(, 3,, 3), ), heights = c(3, ), col = c("lightgray", "red", "gray", "red", "blue", "black", "red"), expand = 4, type = "l") το αποτέλεσμα είναι: Για να βρούμε περισσότερες πληροφορίες για την συνάρτηση buffonneedle() χρησιμοποιούμε το query >?anioptions starting httpd help server done Παράδειγμα Να γραφτεί R-script που να υπολογίζει τους εργοδικούς μέσους κατά U Monte-Carlo της ποσότητα Cov ( X, Y ) εάν γνωρίζουμε ότι ( XY, U) = ( Ue, ), όπου U ~ (,) Συγκρίνετε με την ακριβή τιμή Έχουμε ότι: { ( ) (,) XY = XY U = XY U = u u du u ( XY ) = ue du = u ( XY U = u u ) = ue = Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 5
Επίσης { ( ) (,) X = X U = X U = u u d u ( X ) = u du = ( X U = u) = u u= { ( ) (,) Y = Y U = Y U = u u d u u ( Y ) = e du = e u ( Y U = u u ) = e = οπότε αναλυτικά παίρνουμε την προσέγγιση Cov ( X Y ) ( e), = 3 / 4859 covtest <- function(ss=4){ s <- rep(, times=3); v <- ULL for(i in :SS){ u <- runif() s[] <- s[] + u*exp(u) s[] <- s[] + u s[3] <- s[3] + exp(u) v <- c(v, (s[]/i-s[]*s[3]/i^)) return(v) setseed() n <- 4; v <- covtest(ss=n) #plot the running average of the MC integration plot(v, type='l', pch="", ylim=c(-5, 5), xlab="n", ylab="rav") # Add the line y = (3-exp())/ abline((3-exp())/, ) Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 6
Παράδειγμα n Δίνεται η στοχαστική διαδικασία X : = { Xt : t με Xt : = min { n: U i i > t =, iid έτσι ώστε Ui ~ (, ), i t Δείξτε αναλυτικά ότι ( Xt ) = e Γράψτε R-script για την εκτίμηση της μέσης τιμής ( X t ) Γράψτε R-script που να προσομοιώνει τις ω τροχιές ω X t ( ω) της διαδικασίας X = ( t) = { [ t ] = [ t = ] (, ) = [ t = ] m t X X U X U u u d y X U u d u Εάν u t τότε ( Xt U = u) = ( U = u) =, ενώ εάν u< t τότε ( = ) = + και έτσι Xt U u Xt u ( ) + Xt u u< t Xt U = u = u t + { + Xt u ( u< t) = u t Θα έχουμε { t u m t = u t du + + X u < t du t t t t u t = du + du + X du = + m t u du, t και έτσι = + ( ) m t m t u d u Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 7
Παραγωγίζοντας και τα δύο μέλη της προηγούμενης σχέσης παίρνουμε: t = ( ) + ( ) m t m m t u d u Θέτοντας στο ολοκλήρωμα v = t u παίρνουμε = ( ) + t = ( ) + ( ) = m t m m v d v m m t m m t, όπου χρησιμοποιήσαμε ότι t bt = ( ) + at bt f t, u d u b t f b t, u a t f ( a t, u) f ( t, u) d u at t με (, ),, f tu = m t u a t = bt = t Ολοκληρώνοντας την προηγούμενη εξίσωση έχουμε t t dm( v) m( v) v= v= m t = m t = dv t log m t log m = t m t = m e, { { i= όμως X n ( ω) = inf n : U i ( ω) > =, ω Ω P X = = Από όπου και ( ) ( ) m = X = = m t = e t Εάν πάρουμε λοιπόν πραγματοποιήσεις της i =,, θα έχουμε X, δηλαδή ω X ( ω ) για t i t i t i t X ( ω ) ( X ) με πιθανότητα i= ΕΧt <- function(t=, =){ est <- for(i in :){ s <- ; counter <- while(s<t){ Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 8
s <-s + runif() counter <- counter + est <- est + counter return(est/) > ΕΧt() [] 69 > ΕΧt(=) [] 775 > ΕΧt(=) [] 75 Όπου e 78 Εδώ δεν γνωρίζουμε εξ αρχής την μέση τιμή εφόσον t > > ΕΧt(t=) [] 465 > ΕΧt(t=, =) [] 46596 # Plot realization orbit <- function(dx=, M=){ orbit <- c(); X <- c(); x<- for(j in :M){ x <- x+dx; X <- c(x, x) s <- ; counter <- while(s < x){ s <- s+runif() counter <- counter + orbit <- c(orbit, counter) plot(x, orbit, type='l', pch="") orbit(dx=, M=5) Σπύρος Ι Χατζησπύρος Σημειώσεις στην Υπολογιστική Στατιστική μέρος Α 9