Corrigé de la séance 07
Transcription
Corrigé de la séance 07
UNIVERSITÉ PARIS OUEST NANTERRE LA DÉFENSE U.F.R. SEGMI Année universitaire 2015 – 2016 L2 MIASHS Cours de B. Desgraupes Corrigé - Simulation Stochastique Séance 07: Méthode de la transformée inverse I Corrigé ex. 1: Simulation de la loi exponentielle 1-1 ) Calculer la fonction de répartition de la loi exponentielle de paramète λ et trouver son inverse. La densité de la loi exponentielle est f (x) = λe−λx . On calcule donc la fonction de répartition comme ceci : Z x x F (x) = λe−λt dt = −e−λt 0 = 1 − e−λx 0 On l’inverse en partant de u = 1 − e−λx qui conduit à 1 x = F −1 (u) = − log(1 − u) λ On a donc la forme explicite de la fonction inverse F −1 . 1-2 ) Appliquer la méthode de simulation pour générer un échantillon de taille 2000 pour λ = 0.5. > > > > > n <- 2000 lambda <- 0.5 set.seed(1) u <- runif(n) x <- -log(1-u)/lambda On représente l’histogramme de cet échantillon de la manière suivante : 0.0 0.1 0.2 0.3 0.4 Histogramme d'échantillon exponentiel 0 5 10 15 20 x 1-3 ) Vérifier par un test de Kolmogorov-Smirnov que l’échantillon est correct. > ks.test(x,pexp,lambda) One-sample Kolmogorov-Smirnov test data: x D = 0.022621, p-value = 0.2577 alternative hypothesis: two-sided La p-valeur est supérieure à 0.05, donc on accepte, au seuil 5%, l’hypothèse que l’échantillon est conforme. Corrigé ex. 2: Simulation d’une loi quadratique 2-1 ) Trouver la constante C telle que la fonction y = Cx2 soit une densité de probabilité sur l’intervalle [0, 1]. Représenter graphiquement cette densité. La fonction y = Cx2 est positive et il suffit de vérifier que la probabilité totale est égale à 1 : Z 0 1 3 1 C x = =1 Cx dx = C 3 0 3 2 Cela impose C = 3. Représentation graphique : 2 1.5 0.0 0.5 1.0 3 * a^2 2.0 2.5 3.0 > a <- seq(0,1,len=200) > plot(a,3*a^2,’h’) > lines(a,3*a^2,col="red") 0.0 0.2 0.4 0.6 0.8 1.0 a 2-2 ) Calculer sa fonction de répartition F et l’inverse F −1 . On calcule Z x x u = F (x) = 3 t2 dt = t3 0 = x3 0 D’où l’inverse x = F −1 (u) = u1/3 2-3 ) Simuler un échantillon de taille 1000 et représenter l’histogramme correspondant avec la courbe de densité. La simulation par fonction de répartition inverse se fait de la manière suivante : > > > > > n <- 1000 set.seed(1) u <- runif(n) x <- u^(1/3) print(x[1:20]) [1] 0.6427265 0.7192765 0.8305157 0.9684155 0.5864383 0.9649132 0.9812075 [8] 0.8710094 0.8568598 0.3953338 0.5905698 0.5609982 0.8823829 0.7269137 [15] 0.9165027 0.7924812 0.8952917 0.9972947 0.7243380 0.9195103 On affiche ici seulement les 20 premières valeurs. 3 Voici comment représenter graphiquement l’histogramme et la fonction de densité en surimpression : > hist(x,breaks=seq(0,1,0.05),proba=TRUE,ylab="",main="Histogramme + d’échantillon quadratique") > lines(a,3*a^2,col="red") 0.0 0.5 1.0 1.5 2.0 2.5 3.0 Histogramme d'échantillon quadratique 0.0 0.2 0.4 0.6 0.8 1.0 x Corrigé ex. 3: Simulation d’une loi Beta(α,1) C’est une généralisation de l’exercice précédent dans lequel il s’agissait de la loi Beta(3,1). 3-1 ) Une loi Beta(α,1) a pour densité de probabilité sur l’intervalle [0, 1] la fonction f (x) = α × xα−1 . Représenter-la graphiquement pour α = 3.5. > > > > > > a <- seq(0,1,len=200) alpha <- 3.5 plot(a,alpha*a^(alpha-1),’l’) abline(h=0,v=0,col="gray") text(0.4,3,expression(f(x)==alpha*x^{alpha-1})) text(0.4,2.5,expression(alpha==3.5)) 4 3.5 3.0 2.5 1.0 1.5 2.0 α = 3.5 0.0 0.5 alpha * a^(alpha − 1) f(x) = αxα−1 0.0 0.2 0.4 0.6 0.8 1.0 a 3-2 ) Calculer sa fonction de répartition F et l’inverse F −1 . Représenter-la graphiquement. On calcule Z x x u = F (x) = α tα−1 dt = [tα ]0 = xα 0 D’où l’inverse x = F −1 (u) = u1/α 3-3 ) Simuler un échantillon de taille 1000 et représenter l’histogramme correspondant avec la courbe de densité (toujours pour α = 3.5). > > > > > n <- 1000 set.seed(1) u <- runif(n) x <- u^(1/alpha) print(x[1:20]) [1] 0.6846223 0.7539444 0.8528439 0.9728658 0.6328976 0.9698492 0.9838703 [8] 0.8883641 0.8759798 0.4513782 0.6367174 0.6092901 0.8982978 0.7608009 [15] 0.9279898 0.8192551 0.9095504 0.9976807 0.7584896 0.9305995 On affiche ici seulement les 20 premières valeurs. Voici l’histogramme et la fonction de densité en surimpression : > hist(x,breaks=seq(0,1,0.05),proba=TRUE,ylab="",main="Histogramme + d’échantillon Beta") > lines(a,alpha*a^(alpha-1),col="red") 5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 Histogramme d'échantillon Beta 0.0 0.2 0.4 0.6 0.8 1.0 x Corrigé ex. 4: Simulation d’une loi de Pareto La densité de la loi de Pareto de paramètre k sur l’intervalle [1, ∞[ est : ( k x−k−1 si x ≥ 1 f (x) = 0 sinon 4-1 ) Calculer la fonction de répartition F (x) de cette loi. Si X est une variable aléatoire suivant la loi de Pareto, on a : Z x h ix F (x) = P (X ≤ x) = k t−k−1 dt = − t−k = 1 − x−k 1 1 4-2 ) Calculer l’inverse F −1 de la fonction de répartition. On part de u = 1 − x−k et on cherche à écrire x en fonction de u. Le calcul est élémentaire et donne : F −1 (u) = x = (1 − u)−1/k 4-3 ) En déduire une méthode de simulation de la loi de Pareto. La loi de Pareto peut être simulée au moyen de la méthode de la fonction de répartition inverse : on fabrique un échantillon U uniformément distribué sur l’intervalle [0, 1] et on lui applique la fonction F −1 , ce qui revient ici simplement à l’élever à la puissance −1/k (car 1 − U est aussi uniformément distribué sur [0, 1]). 6 4-4 ) Construire, dans le cas où k = 2, un échantillon de 1000 valeurs et donner une représentation graphique de l’histogramme et de la fonction de densité. > > > > set.seed(1) n <- 1000 X <- 1/sqrt(runif(n)) print(round(X[1:20],3)) [1] 1.941 1.639 1.321 1.049 2.227 1.055 1.029 1.230 1.261 4.023 2.203 2.380 [13] 1.206 1.614 1.140 1.417 1.180 1.004 1.622 1.134 On affiche ici les 20 premières valeurs. La figure suivante représente l’histogramme de l’échantillon fabriqué (limité seulement aux valeurs inférieures à 5 pour des raisons de lisibilité) avec la courbe de densité d’équation f (x) = 2x−3 en surimpression. On l’obtient avec les instructions que voici : > hist(X[X<5],prob=TRUE,main="Loi de Pareto",xlab="") > Y <- sort(X[X<5]) > lines(Y,2/Y^3, col="red") 0.6 0.0 0.2 0.4 Density 0.8 1.0 Loi de Pareto 1 2 3 4 5 Corrigé ex. 5: Simulation d’une loi logistique La densité de la loi logistique standard sur R est : f (x) = e−x (1 + e−x )2 5-1 ) Calculer l’espérance et la variance théoriques de cette loi. 7 On vérifie facilement que f est une fonction paire. Par conséquent, E[X] = 0. La variance se calcule comme ceci : Z +∞ Z 0 e−x e−x dx = 2 x2 dx x2 Var[X] = −x 2 (1 + e ) (1 + e−x )2 −∞ −∞ Par intégration par partie, on obtient : 0 Z 0 −x2 x Var[X] = 2 +4 dx 1 + e−x −∞ 1 + e−x −∞ Le crochet est nul et il ne reste plus qu’à calculer la dernière intégrale. On procède par un développement en série : Z 0 Z +∞ x x dx = − dx −x 1 + ex −∞ 1 + e 0 Z +∞ xe−x =− dx 1 + e−x 0 Z +∞ +∞ X =− xe−x (−1)k e−kx dx 0 = +∞ X k=0 (−1)k Z +∞ xe−kx dx 0 k=1 Z Une intégration par partie conduit facilement à +∞ xe−kx dx = 0 En utilisant le fait que +∞ X (−1)k k=1 k2 1 . k2 π2 = , on en déduit finalement que 12 Var[X] = 4 π2 π2 = 12 3 5-2 ) Calculer la fonction de répartition F (x) et la fonction inverse F −1 . La fonction de répartition F est Z x e−t dt F (x) = −t 2 −∞ (1 + e ) On pose u = e−t , d’où du = −e−t dt et par conséquent : e−x Z e−x −du 1 1 F (x) = = = 2 (1 + u) 1 + u 1 + e−x +∞ +∞ On cherche maintenant la fonction inverse F −1 . On part de y = F (x) : 1 1 + e−x y + ye−x = 1 1−y e−x = y y x = log 1−y y= ⇐⇒ ⇐⇒ ⇐⇒ 8 5-3 ) Simuler 10 000 échantillons de taille 1 000, calculer leur variance et en déduire une valeur approchée de π. Refaire les calculs avec 100 000 échantillons. Que peut-on en conclure ? On a trouvé : y F −1 (y) = log 1−y On peut donc simuler un échantillon L de la loi logistique à partir d’un U échantillon U de la loi uniforme en calculant log . Pour un échantillon 1−U de taille 1000, le code est le suivant : > set.seed(1) > U <- runif(1000) > L <- log(U/(1-U)) Pour simuler 10 000 échantillons et calculer leur variance : > > > > > + + + + N <- 10000 n <- 1000 v <- numeric(N) set.seed(1) for (i in 1:N) { u <- runif(n) s <- log(u/(1-u)) v[i] <- var(s) } Toutes les variances sont stockées dans le vecteur v. On en calcule la moyenne m = 3.29086 et on prend cette valeur comme valeur approchée de la vraie √ π2 . On en déduit donc une valeur approchée de π ≈ 3m = 3.14206. variance 3 La valeur obtenue est très imprécise. Les méthodes de ce type, qui s’appuient sur la loi des grands nombres, requièrent d’utiliser un très grand nombre d’échantillons et sont en général inefficaces. On n’y a recours que s’il n’existe pas d’autre possibilité. 9