Simulation de variables aléatoires Anne Philippe Méthodes de Monte Carlo par chaînes de Markov Laboratoire de Mathématiques Jean Leray Université de Nantes December 9, 203 Les logiciels Jags / Openbugs / winbugs http://www.math.sciences.univ-nantes.fr/ philippe/ Anne.Philippe@univ-nantes.fr Chaînes de Markov - Idée : Il est souvent plus facile de simuler une chaîne de Markov de loi invariante f que des variables indépendantes de loi f Definition Une chaîne de Markov est une suite de variables (X t ) telle que pour tout n la loi conditionnelle de X n+ sachant (X n,...,x 0 ) et la loi conditionnelle de X n+ sachant X n coïncident. Exemple Soit (u t ) une suite de variables aléatoires iid I on pose X o 0 et X t = X t + u t (X t ) est une chaîne de Markov. I Plus généralement : on peut prendre X t = g(x t est une application mesurable, u t )oùg
Construction Une chaîne de Markov est donc définie par I la loi de X 0 I la loi de X t sachant X t (transition de la chaîne) I l espace d état E est fini : la transition est une matrice P P(i, j) =P(X = j X O = i) I l espace d état E est continu : la transition est une famille de densités {K(x, ), x 2 E} où K(X n, ) est la densité de la loi conditionnelle de X n+ sachant X n Z P(X n+ 2 A X n )= K(X n, y) dy I dans le cas général la transition est P(x, A) =P(X 2 A X O = x) I P n (x, A) probabilité que x n 2 A sachant que x 0 =0 A Notions de convergence Étant donné une loi de probabilité de densité f On cherche des transitions telles que. la loi invariante est unique et de densité f, si x n f alors x n+ f 2. la loi de x n est proche de la loi invariante f lorsque n assez grand et x 0 P 0 6= f Z P n (x, ) dp 0 (x) f TV! 0 3. Théorème ergodique T TX t= h(x (t) )! T! Z h(x)f (x) dx Algorithme de Métropolis Hasting Exemples de lois instrumentales Objectif : : On veut simuler suivant la loi de densité f Ingrédient : : q la densité d une probabilité conditionnelle telle que pour tout x supp q( x) supp f L algorithme : partant de x (t), la transition de la chaîne est ( x (t+) q( x (t) ) avec probabilité, = x (t) sinon, où =min (, ) f ( )q(x (t) ) f (x (t) )q( x (t) ). Lois indépendantes : 2. Lois symétriques : q( x) =g( ) q( x (t) )=h( x (t) ) Le taux d acceptation ne dépend pas de la loi q, =min( f ( ) f ( (t) ), ).
les marches aléatoires Illustration Un exemple de lois symétriques : partant de x (t), la transition s écrit = x (t) + " (t) où " (t) est une suite de variables aléatoires iid et indépendantes de (X 0,...,X t ) la loi de " est symétrique par rapport à zéro, par exemple I les lois gaussiennes N (0, 2 ), I les lois uniformes sur [ a, a, ] I etc... On simule un échantillon suivant une loi de densité dans le plan. f (x, y) / exp{ 0(x 2 y) 2 (y /4) 4 } L algorithme sites visités par la chaîne Nombre d itérations = 000. On utilise un algorithme d Hasting Métropolis dont la loi instrumentale est une marche aléatoire gaussienne Partant de x t, la valeur proposée est distribuée suivant 2 0 N x t, 0 2 c est à dire = x t + " t " t N 0 0, 0
Trajectoires des deux coordonnées Nombre d itérations = 000. Algorithme de Gibbs On veut simuler x f en dimension p >!!! Outil central : une décomposition de x 2 R p en m blocs telle que les lois conditionnelles x =(x,...,x m ) f j (x j x`, ` 6= j), j =,...,m sont simulables. Exemple La loi à simuler admet pour densité L algorithme : la transition de la chaîne est. x (t+) f (x x (t) 2,...,x(t) m )... i. x (t+) i f i (x x (t+),...,x (t+) i, x (t) i+,...,x(t) m )... m. x (t+) m f m (x x (t+),...,x (t+) m ) f (x, y) / e x y xy I R + R +(x, y) On calcule les deux lois conditionnelles I la loi de X sachant Y est la loi exponentielle de paramètre Y + I la loi de Y sachant X est la loi exponentielle de paramètre X + L algorithme : Initialisation y (0) E() Itération. x () E( + y (0) ) et y () E( + x () ). Intération i. x (i) E( + y (i ) ) et y (i) E( + x (i) )
Contrôle de la convergence des algorithmes Il est plus simple de simuler une chaîne de Markov de loi stationnaire f que des variables aléatoires suivant f MAIS Il faut contrôler I la convergence vers la loi stationnaire de la chaîne de Markov I la qualité de l approximation de R h(x)f (x) dx par la moyenne empirique T P T t= h(x(t) ) Deux critères d arrêt : I T le temps de chau e : on élimine les premières valeurs x (),...,x (T ) I T 2 le temps de simulation T 2 TX +T 2 t=t + Z h(x (t) ) h(x)f (x) dx Méthodes graphiques I Tracé de la série brute, I Comparaison de di érentes estimations pour une même quantité [Moyenne,...] I comparaison des estimations d une même quantité e ectuées sur des chaînes indépendantes Méthode basée sur plusieurs chaînes critère de Gelman & Rubin On simule M chaînes de Markov indépendantes (x () t )...(x (M) t ) On calcule 8 m =,...,M x (m) = TX x (m) t, x = MX x (m), T M t= Estimateurs des variances inter et intra W T = M Critère Pour T assez grand B T = M MX m= MX (x (m) x) 2 m= T TX t= (x (m) t x m ) 2 m= W T T T W T + B T
Utilisation de Jags avec la libraire rjags de R Méthodes de Monte Carlo par chaînes de Markov Les logiciels Jags / Openbugs / winbugs JAGS est un logiciel qui permet d approximer la loi a posteriori d un modèle bayésien via des algorithmes MCMC. En entrée : :. le modèle Vraisemblance + loi a priori 2. les données 3. l initialisation des chaînes de Markov [optionnel sous Jags] En sortie :. une ou plusieurs réalisations d une chaine de Markov de loi invariante la loi a posteriori Exemple Ecriture du modèle Observations : X i Poisson( ) Choix de la loi a priori. Exponential(a) pour a fixé. i =,...,n La loi a posteriori est la loi Gamma ( P X i +, n + a) 2. Modèle hierarchique : Exponential(a) et a Exponential() utilisation de l algorithme de Gibbs pour approcher la loi a posteriori I conditionnellement à (a, x,...x n ), suit une loi Gamma de paramètre ( P X i +, n + a) I conditionnellement à (, x,...x n ), suit une loi Gamma de paramètre a (2, + ) model { for( i in : N ) { x[i] ~ dpois(tau) } } tau ~ dgamma(,a) a~ dgamma(,) Ce code doit être stocké dans un fichier ici modelpoisson.r
Compilation du modèle via R Simulation des chaines library(rjags) #nombre de données N <- 0 #x contient les données #ici simulées suivant la loi de poisson de paramètre 2 x <- rpois(n, 2) jags <- jags.model( modelpoisson.r, data = list( x = x, N = N), n.chains =, n.adapt = 000) I On va simuler une chaine [ n.chains= ]. I n.adapts est le nombre d itérations pour calibrer les paramètres de l algorithme d Hasting Metropolis # période de "chauffe" > update(jags, 000) ************************************************** 00% # samp contient la chaine de markov (0000 itérations) # pour les paramètres tau et a >samp = coda.samples(jags,c( tau, a ),0000) ************************************************** 00% Exploitation des résultats Statistiques élémentaires > plot(samp).0.5 2.0 2.5 3.0 0.0 0.5.0.5 2.0 2.5 3.0 Trace of a 000 400 800 Iterations Trace of tau 000 400 800 Iterations 0.0 0.2 0.4 0.6 0.8.0 Density of a 0.0.0 2.0 3.0 N = 000 Bandwidth = 0.86 Density of tau 0.0 0.2 0.4 0.6 0.8.0.0 2.0 3.0 N = 000 Bandwidth = 0.09602 > summary(samp) Iterations = 00:2000 Thinning interval = Number of chains = Sample size per chain = 000. Empirical mean and standard deviation for each variable, plus standard error of the mean: Mean SD Naive SE Time-series SE a 0.6838 0.490 0.055 0.0753 tau.9863 0.3606 0.04 0.0225 2. Quantiles for each variable: 2.5% 25% 50% 75% 97.5% a 0.085 0.322 0.5659 0.979.955 tau.367.7277.9559 2.255 2.730
Approximation des régions HPD Critère de Gelman et Rubin > HPDinterval(samp) [[]] lower upper a 0.0457356.652573 tau.37755688 2.739469 attr(,"probability") [] 0.95 I Il faut simuler plusieurs chaines indépendantes I On execute la fonction jags.model avec le paramètre n.chain > > gelman.diag(samp) Potential scale reduction factors: Point est. Upper C.I. a tau Multivariate psrf une autre representation des trajectoires évolution des quantiles en fonction du nb d itérations xyplot(samp) cumuplot(samp) tau a tau.0.5 2.0 2.5 3.0 0.0 0.5.0.5 2.0 2.5 3.0 a 0 200 400 600 800 000.index 0.0 0.5.0.5 2.0 000 600 Iterations.5 2.0 2.5 3.0 000 600 Iterations
Estimation des marginales de la loi a posteriori limite de JAGS : loi a priori impropre densityplot(samp) Densité 0.0 0.2 0.4 0.6 0.8.0 0.0 0.2 0.4 0.6 0.8.0 tau.0.5 2.0 2.5 3.0 3.5 a 0 2 3 On ne peut pas définir des modèles avec des lois a priori impropres Une alternative est de remplacer les lois impropres par des lois de probabilité ayant une grande variance... Par exemple I pour la mesure de Lebesgue : on peut prendre une loi gaussienne centrée avec une très grande variance ( dnorm(0,0 6 ) le second paramètre est la précision) I pour la loi ( 2 )=/ 2 : on peut prendre une loi inverse gamma avec des paramètres proches de zéro. dgamma(0.00,0.00) and =/ p Reliability of 0 power plant pumps Choice of the prior The number of failures X i is assumed to follow a Poisson distribution nb of failures 5 5 0 20 40 60 80 00 20 time A conjugate gamma prior distribution is adopted for the failure rates: i Gamma(, ), i =,...,0 X i Poisson( i t i ) i =,...,0 ratio x/t 0.0.0 2.0 2 4 6 8 0 George et al (993) assume the following prior specification for the hyper parameter a where I i is the failure rate for the pump i I t i is the length of operation time of the pump Pump t i x i 94.5 5 2 5.7 3 62.9 5 4 26 4 5 5.24 3 6 3.4 9 7.05 8.05 9 2. 4 0 0.5 22 Exponential(.0) Gamma(0., ) We can implement a Gibbs sampler
Définition du modèle model { for (i in : N) { theta[i] ~ dgamma(alpha, beta) lambda[i] <- theta[i] * t[i] x[i] ~ dpois(lambda[i]) } alpha ~ dexp() beta ~ dgamma(0.,.0) } Ce code doit être stocké dans un fichier ici model.bugs Compilation du modèle N <- 0 t = c(94.3, 5.7, 62.9, 26, 5.24, 3.4,.05,.05, 2., 0.5) x = c(5,, 5, 4, 3,9,,,4,22) > jags <- jags.model( model.bugs, + data = list( x = x, t =t, N = N), + n.chains =, + n.adapt = 000, + ) Compiling model graph Resolving undeclared variables Allocating nodes Graph Size: 45 Initializing model ++++++++++++++++++++++++++++++++++++++++++++++++++ 00% > update(jags, 000) ************************************************** 00% > z = coda.samples(jags,c( theta, alpha, beta ),000) ************************************************** 00% Exploitation des résultats pour les sorties Statistiques sur la loi a posteriori > summary(z) > plot(z) Iterations = 300:4000 Thinning interval = Number of chains = Sample size per chain = 000. Empirical mean and standard deviation for each variable, plus standard error of the mean: Mean SD Naive SE Time-series SE alpha 0.69843 0.26009 0.0082248 0.095038 beta 0.92433 0.54403 0.072037 0.0373580 theta[] 0.0606 0.02409 0.000766 0.0006697 theta[2] 0.09889 0.07864 0.0024870 0.0030839 theta[3] 0.0940 0.03783 0.00962 0.0096 theta[4] 0.585 0.0308 0.0009744 0.0008655 theta[5] 0.6082 0.3897 0.000866 0.000259 theta[6] 0.6247 0.4025 0.0044350 0.0048897 theta[7] 0.89937 0.72849 0.0230369 0.0227078 theta[8] 0.89025 0.7262 0.022897 0.024796 theta[9].59729 0.76526 0.024997 0.030006 theta[0].99623 0.4496 0.0322 0.027887
Statistiques sur la loi a posteriori suite 2. Quantiles for each variable: 2.5% 25% 50% 75% 97.5% alpha 0.288329 0.5846 0.65789 0.84936.2993 beta 0.20624 0.53636 0.8742.20752 2.96 theta[] 0.08469 0.04237 0.0579 0.07463 0.7 theta[2] 0.0077 0.04034 0.07858 0.3663 0.3047 theta[3] 0.030760 0.0646 0.0868 0.584 0.767 theta[4] 0.064556 0.09444 0.2 0.3334 0.85 theta[5] 0.57434 0.36772 0.5587 0.79335.3592 theta[6] 0.364537 0.5456 0.60387 0.70302 0.9099 theta[7] 0.086953 0.36652 0.7069.2397 2.7364 theta[8] 0.074552 0.38537 0.73600.822 2.725 theta[9] 0.467774.03672.44874 2.02527 3.505 theta[0].238676.70397.99607 2.27330 2.8236 Approximation des régions HPD > HPDinterval(z) [[]] lower upper alpha 0.2385955.234348 beta 0.270480.95996 theta[] 0.048045 0.04888 theta[2] 0.00897323 0.2547897 theta[3] 0.024882522 0.643409 theta[4] 0.05534737 0.720302 theta[5] 0.05966924.2443890 theta[6] 0.353274820 0.8837728 theta[7] 0.00306533 2.35308 theta[8] 0.00275707 2.284622 theta[9] 0.369339389 3.483068 theta[0].677262 2.7426627 attr(,"probability") [] 0.95 Critère de Gelman et Rubin Il faut simuler plusieurs chaines indépendantes (ici 4) > jags <- jags.model( model.bugs, + data = list( x = x, t =t, N = N), + n.chains = 4, + n.adapt = 000, + ) Compiling model graph Resolving undeclared variables Allocating nodes Graph Size: 45 Initializing model ++++++++++++++++++++++++++++++++++++++++++++++++++ 00% > update(jags, 000) ************************************************** 00% > z = coda.samples(jags,c( theta, alpha, beta ),000) ************************************************** 00% Critère de Gelman et Rubin suite > gelman.diag(z) Potential scale reduction factors: Point est. Upper C.I. alpha.00.0 beta.0.02 theta[].00.00 theta[2].00.00 theta[3].00.00 theta[4].00.00 theta[5].00.00 theta[6].00.00 theta[7].00.00 theta[8].00.00 theta[9].00.0 theta[0].00.00 Multivariate psrf