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