Vous êtes sur la page 1sur 24

Université Paris Dauphine 2018–2019

Département MIDO
Master 1 – Méthodes de Monte Carlo

Méthodes de Monte Carlo


– Projet –

stoehr@ceremade.dauphine.fr

Consignes.
À rendre avant le 08 janvier 2019

• Rapport contenant réponses/commentaires, codes utilisés et sorties (Notebook, Rmarkdown


ou LATEX+ knitr). À défaut, un rapport au format .pdf et un script contenant l’ensemble des
codes utilisés. Dans ce cas, il est interdit de copier-coller du code dans le corps du texte. Une
rédaction soignée et concise est attendue.
• seul le language R est autorisé.
• Les codes doivent :
• être bien commentés. Il est possible qu’une explication orale vous soit demandée.
• être optimisés (vectorisés) un minimum pour utiliser les spécificités du language.
• s’exécuter sans erreurs et permettre de reproduire l’intégralité des résultats présentés
dans le rapport.
• Les graphiques doivent être soigneusement annotés et présentés (titre, couleur, légendes, ...).
• Chaque jour de retard sera pénalisé d’un point.

Exercice 1 (Simulation de variables aléatoires).

Méthode du rejet. On souhaite simuler suivant une densité f de R2 proportionnelle à

cos2 (x) + 2 sin2 (y) cos4 (x) {x − 2}2


µ ¶
˜
f (x, y) = exp − 1{x∈[0,4]} 1{ y[0,2]} . (1)
1 + 4(y − 1)2 2

1. Justifiez que pour obtenir une réalisation suivant la loi de densité f , on peut appliquer l’algorithme
du rejet à f˜.

2. Proposer une constante M et une densité g telles que pour tout (x, y) ∈ R2 , f˜(x, y) ≤ M g (x, y).

3. En déduire une méthode de simulation suivant f .

Algorithme de Metropolis–Hastings. L’algorithme de Metropolis–Hastings est un exemple particu-


lier de méthode de Monte Carlo par chaîne de Markov, permetant de générer des chaînes de Markov,
¡ (t ) ¢
x t ≥1 irréductibles, apériodiques et de loi stationnaire de densité f connue à une constante de nor-
malisation près. Il est fondé sur le choix d’une loi instrumentale de densité g , partout positive, et sur le

1
Projet Méthodes de Monte Carlo

noyau de transition suivant



ξ ∼ g avec probabilité α x(t ) , ξ f (ξ) g x(t )
¡ ¢ ¡ ¢
x(t +1) =
¡ (t ) ¢
avec α x , ξ = 1 ∧ ¡ (t ) ¢ .
x(t ) avec probabilité 1 − α x(t ) , ξ f x g (ξ)
¡ ¢

4. À l’aide de l’algorithme de Metropolis–Hastings et en utilisant la fonction g obtenue à la question 2,


produire une chaîne de Markov (xt )t ∈N = x 1(t ) , x 2(t ) de loi stationnaire f .
¡ ¢

5. Comparer la distribution ainsi obtenue avec celle obtenue par la méthode du rejet.

Solution Exercice 1.
Méthode du rejet.
1. Il existe une constante c telle que f = c f˜. Supposons qu’il existe une densité g de R2 et une
constante M > 0 telles que pour tout (x 1 , x 2 ) ∈ R2 , f˜(x 1 , x 2 ) ≤ M g (x 1 , x 2 ). Alors

∀(x 1 , x 2 ) ∈ R2 , f (x 1 , x 2 ) ≤ c M g (x 1 , x 2 ).

Sous cette hypothèse, on sait simuler suivant f par rejet avec la constante c M et la densité g :
le critère d’arrêt dans l’algorithme du rejet s’écrit

f (Y1,n , Y2,n ) f˜(Y1,n , Y2,n )


½ ¾ ½ ¾
T = inf n : Un ≤ = inf n : Un ≤ ,
c M g (Y1,n , Y2,n ) M g (Y1,n , Y2,n )

avec (Y1,n , Y2,n ) ∼ g et Un ∼ U ([0 , 1]) (mutuellement indépendantes). Il suffit donc de domi-
ner f˜ par une densité pour obtenir une réalisation (Y1,T , Y2,T ) suivant f .

2. Option n°1. pour tout (x, y)



4 2 M = 24,
1
f˜(x, y) ≤ 3 × 1{x∈[0,4]} × 1{ y∈[0,2]} ⇒
4 2 g ≡ U ([0 , 4]) ⊗ U ([0 , 2]).
1

# --- Constante ---


M1 <- 24
# --- Générateur ---
rgen1 <- function(n) {
return(cbind(runif(n, 0, 4), runif(n, 0, 2)))
}
# --- Ratio f/Mg ---
ratio1 <- function(z) {
x <- z[, 1]
y <- z[, 2]
ans <- cos(x)^2 + 2 * sin(y)^2 * cos(x)^4
ans <- ans * exp(-0.5 * (x - 2)^2)/(1 + 4 * (y - 1)^2)
return(ans/3)
}

2
Projet Méthodes de Monte Carlo

Option n°2. Pour tout (x, y)



4 π 2 M = 6π,
2
f˜(x, y) ≤ 3 × 1{x∈[0,4]} × ⇒
4 2 π(1 + 4{y − 1}2 ) g ≡ U ([0 , 4]) ⊗ C (1, 0.5).
2

# --- Constante ---


M2 <- 6 * pi
# --- Générateur ---
rgen2 <- function(n) {
return(cbind(runif(n, 0, 4), rcauchy(n, 1, 0.5)))
}
# --- Ratio f/Mg ---
ratio2 <- function(z) {
x <- z[, 1]
y <- z[, 2]
ans <- cos(x)^2 + 2 * sin(y)^2 * cos(x)^4
ans <- ans * exp(-0.5 * (x - 2)^2) * (0 <= y) * (y <= 2)
return(ans/3)
}

Option n°3. Pour tout (x, y)

p M = 6p2π,

{x − 2}2
µ ¶
˜ 2π 2 3
f (x, y) ≤ 3 × p exp − × 1{ y∈[0,2]} ⇒
2π 2 2 g ≡ N (2 , 1) ⊗ U ([0 , 2]).
3

# --- Constante ---


M3 <- 6 * sqrt(2 * pi)
# --- Générateur ---
rgen3 <- function(n) {
return(cbind(rnorm(n, 2), runif(n, 0, 2)))
}
# --- Ratio f/Mg ---
ratio3 <- function(z) {
x <- z[, 1]
y <- z[, 2]
ans <- cos(x)^2 + 2 * sin(y)^2 * cos(x)^4
ans <- ans * (0 <= x) * (x <= 4)/(1 + 4 * (y - 1)^2)
return(ans/3)
}

Option n°4. Pour tout (x, y)


p ( p
{x − 2}2 π M 4 = 3π π/2,
µ ¶
˜ 2π 2
f (x, y) ≤ 3 × p exp − × ⇒
2π 2 2 π(1 + 4{y − 1}2 ) g 4 ≡ N (2 , 1) ⊗ C (1, 0.5).

3
Projet Méthodes de Monte Carlo

# --- Constante ---


M4 <- 3 * pi * sqrt(0.5 * pi)
# --- Générateur ---
rgen4 <- function(n) {
return(cbind(rnorm(n, 2), rcauchy(n, 1, 0.5)))
}
# --- Ratio f/Mg ---
ratio4 <- function(z) {
x <- z[, 1]
y <- z[, 2]
ans <- cos(x)^2 + 2 * sin(y)^2 * cos(x)^4
ans <- ans * (0 <= x) * (x <= 4) * (0 <= y) * (y <= 2)
return(ans/3)
}
Dans l’algorithme du rejet, le temps d’attente T avant qu’une variable soit acceptée est
distribué suivant une loi géométrique d’espérance c M . Parmi les options précédentes, celle
conduisant à l’algorithme le plus performant est donc celle dont la constante M i , i = 1, . . . , 4,
est la plus petite, autrement dit l’option n°4.

En utilisant le résultat précédent, il est également possible d’obtenir une estimation de la


constante c. En notant N le nombre total de variables simulées suivant la densité g jusqu’au
dernier succès, n le nombre de réalisations suivant f souhaité et Tk , k = 1, . . . , n, le temps
d’attente avant acceptation de la k-ième itération de l’algorithme du rejet :

1 Xn N
cbn = Tk = .
nM k=1 nM

Le théorème central limite appliqué à la suite de variables aléatoires i.i.d. de carré intégrable
(Tn )n≥1 donne
p L
M N (cbn − c) −→ N (0 , cM (c M − 1)).
n→+∞

Par ailleurs, la loi faible des grands nombres pour la suite de variables aléatoires i.i.d. inté-
grables (Tn )n≥1 donne

P
cbn −→ c
n→+∞

La continuité de x 7→ (xM {M − 1})−1 sur ]0 , +∞[ et le lemme de Sltusky conduisent à l’inter-


valle de confiance au niveau 1 − α pour c :
" s s #
N 1 N (N − n) N 1 N (N − n)
− q 1−α/2 , + q 1−α/2 ,
nM nM n nM nM n

où q 1−α/2 désigne le quantile d’ordre 1 − α/2 de la loi normale N (0 , 1).

4
Projet Méthodes de Monte Carlo

3. Code basique.
rejet.basic <- function(n, rgen, ratio, M) {
ans <- matrix(NA, n, 2)
N <- 0
for (i in 1:n) {
x <- rgen(1)
N <- N + 1
while (runif(1) > ratio(x)) {
x <- rgen(1)
N <- N + 1
}
ans[i, ] <- x
}
return(list(z = ans, c = N/(n * M), var.c = (N^2/n - 1)/(n * M)^2,
p = n/N, var.p = n * (1 - n/N)/N^2))
}

Code vectorisé.
rejet <- function(n, rgen, ratio, M) {
ans <- c()
m <- n
N <- 0
p <- 1
while (m > 0) {
n.simu <- m%/%((p == 0) + p) + 1
x <- rgen(n.simu)
a.r <- (runif(n.simu) <= ratio(x))
l <- which(a.r)
ans <- rbind(ans, x[l, ])
N <- N + n.simu
m <- n - nrow(ans)
p <- nrow(ans)/N
}
N_ <- N - (n.simu - max(l))
n_ = nrow(ans)
return(list(z = ans[1:n, ], c = N_/(n_ * M), var.c = (N_^2/n_ -
1)/(n_ * M)^2, p = p, var.p = p * (1 - p)/N))
}
# --- Simulation ---
set.seed(13)
n <- 10000
f1 <- rejet(n, rgen1, ratio1, M1)
f2 <- rejet(n, rgen2, ratio2, M2)

5
Projet Méthodes de Monte Carlo

f3 <- rejet(n, rgen3, ratio3, M3)


f4 <- rejet(n, rgen4, ratio4, M4)
# --- Comparaison des performances ---
library(microbenchmark)
test <- microbenchmark(rejet.basic(n, rgen1, ratio1, M1), rejet(n, rgen1,
ratio1, M1), rejet.basic(n, rgen2, ratio2, M2), rejet(n, rgen2,
ratio2, M2), rejet.basic(n, rgen3, ratio3, M3), rejet(n, rgen3,
ratio3, M3), rejet.basic(n, rgen4, ratio4, M4), rejet(n, rgen4,
ratio4, M4), unit = "s")
Le tableau ci-dessous récapitule l’estimation de la constante cbn et de la probabilité d’accepta-
tion moyenne pbn pour les différentes méthodes (n = 10000, niveau de confiance 1 − α = 0.95).
Il contient également le temps moyen τn nécessaire pour obtenir les n réalisations suivant f
avec la version vectorisée ainsi que le gain moyen ρ en temps de calcul par rapport à la version
basique (calculés sur 100 exécutions des fonctions).

Loi instrumentale M cbn pbn τn (en sec.) ρ


U ([0 , 4]) ⊗ U ([0 , 2]) 24 0.4396 (±0.0086) 0.095 (±0.0018) 0.032 45.807
U ([0 , 4]) ⊗ C (1, 0.5) 6π 0.4311 (±0.0083) 0.123 (±0.0022) 0.027 43.011
p
N (2 , 1) ⊗ U ([0 , 2]) 6 2π 0.4398 (±0.0086) 0.151 (±0.0027) 0.022 42.448
p
N (2 , 1) ⊗ C (1, 0.5) 3π π/2 0.4337 (±0.0085) 0.195 (±0.0034) 0.02 36.64

Bonus : validation graphique (2D/3D).


f4 <- rejet(1e+06, rgen4, ratio4, M4)
# --- Densité théorique ---
f.tilde <- function(x, y) {
ans <- cos(x)^2 + 2 * sin(y)^2 * cos(x)^4
ans <- ans * exp(-0.5 * (x - 2)^2)/(1 + 4 * (y - 1)^2)
return(ans * (0 <= x) * (x <= 4) * (0 <= y) * (y <= 2))
}
# ------ Version 3D -------
f.3D <- function(c.hat, xlim, ylim, sub = 0.02) {
x <- seq(xlim[1], xlim[2], sub)
y <- seq(ylim[1], ylim[2], sub)
return(list(x = x, y = y, z = c.hat * outer(x, y, f.tilde)))
}
f.t <- f.3D(f4$c, c(0, 4), c(0, 2))
# ------ Représentation graphique -------
library(plot3D)
persp3D(f.t$x, f.t$y, f.t$z, phi = 20, theta = 35, ticktype = "detailed",
bty = "b2", cex.axis = 0.4, xlab = "x1", ylab = "x2", zlab = "",
facets = F, colkey = F)
image2D(f.t$z, f.t$x, f.t$y)

6
Projet Méthodes de Monte Carlo

# --- Densité empirique ---


emp.dist <- function(data, n.cut) {
x_c <- cut(data[, 1], n.cut[1])
y_c <- cut(data[, 2], n.cut[2])
z_d <- table(x_c, y_c)
x <- seq(min(data[, 1]), max(data[, 1]), length.out = n.cut[1])
y <- seq(min(data[, 2]), max(data[, 2]), length.out = n.cut[2])
return(list(x = x, y = y, z = z_d * prod(n.cut)/(nrow(data) * 8)))
}
f.e <- emp.dist(f4$z, c(40, 40))
# ------ Représentation graphique -------
hist3D(f.e$x, f.e$y, f.e$z, phi = 20, theta = 35, ticktype = "detailed",
bty = "b2", cex.axis = 0.4, xlab = "x1", ylab = "x2", zlab = "",
colkey = F)
image2D(f.e$z, f.e$x, f.e$y)
Distribution théorique de X = (X 1 , X 2 )
2.0

0.6
0.6

0.5
1.5

0.4

0.4
1.0
y

0.2
0.3

2.0

1.5
0.2
0.5

1 1.0
x2

2 0.1
x1 0.5

3
0.0

0.0
4

0 1 2 3 4

Distribution empirique de X = (X 1 , X 2 )
2.0

0.6
0.6

0.5
1.5

0.4

0.4
1.0
y

0.2
0.3

2.0

0.0
1.5
0.2
0.5

1 1.0
x2

2 0.1
x1 0.5

3
0.0

0.0
0.0
4

0 1 2 3 4

7
Projet Méthodes de Monte Carlo

Algorithme de Metropolis–Hastings. α x(t ) , ξ est calculée en échelle log pour éviter les pro-
¡ ¢

blèmes de dépassement d’entier : log.ratio désigne ln(g/f ). On utilise aussi que le rapport
g (x(t ) )/ f (x(t ) ) a déjà été calculé à l’itération t − 1 (utile lorsque le rapport est coûteux à calculer).

4. Metropolis <- function(n, rgen, log.ratio, start) {


x <- matrix(start, n + 1, length(start))
r <- log.ratio(start)
for (i in 1:n) {
x.new <- rgen(1)
r.new <- log.ratio(x.new)
if (log(runif(1)) <= r - r.new) {
x[i + 1, ] <- x.new
r <- r.new
} else {
x[i + 1, ] <- x[i, ]
}
}
return(x)
}
# --- Application ---
log.ratio4 <- function(x) {
return(-log(ratio4(x)))
}
mh <- Metropolis(1e+06, rgen4, log.ratio4, rgen1(1))

5. mh.e <- emp.dist(mh, c(40, 40))


# --- Représentation graphique ---
hist3D(mh.e$x, mh.e$y, mh.e$z, phi = 20, theta = 35, ticktype = "detailed",
bty = "b2", cex.axis = 0.4, xlab = "x1", ylab = "x2", zlab = "",
colkey = F)
image2D(mh.e$z, mh.e$x, mh.e$y)
2.0

0.6
0.6
1.5

0.5

0.4

0.4
1.0
y

0.2

0.3

2.0

0.0
1.5 0.2
0.5

1 1.0
x2

2 0.1
x1 0.5

3
0.0

0.0
0.0
4

0 1 2 3 4

8
Projet Méthodes de Monte Carlo

Comme dans le cas indépendant, on retrouve bien des variables distribuées suivant la densité
f.

Exercice 2 (Méthodes de Monte Carlo). On considère le graphe G dont chaque arête est munie
d’un poids X 1 , . . . , X 5 . On note x = (X 1 , . . . , X 5 ) le vecteur des poids et on suppose que les poids sont
indépendants et distribués suivant des lois ν1 , . . . , νn précisées ultérieurement.

X4
∼ν
1 ∼ν
X1 4

X 3 ∼ ν3
A B
X2
∼ν
∼ν 5
2 X5

Un chemin simple entre A et B est défini par une suite d’arêtes consécutives de G reliant A à B , toutes les
arêtes de la suite étant distinctes. La longueur d’un chemin simple entre A et B correspond à la somme
des poids des arêtes constituant ce chemin. On note d (X) la longueur du chemin simple le plus court
entre A et B . Dans ce projet, on souhaite estimer par des méthodes de Monte Carlo

δ = P [X 1 + X 2 + X 3 ≥ t ] et p = P [d (X) ≥ t ] t ∈ R.

Les estimateurs doivent être donnés explicitement dans le rapport et les intervalles de confiance se-
ront donnés au niveau 95%

Partie I – Estimation de δ

1. On suppose que X 1 + X 2 + X 3 est distribuée suivant une loi de Weibull de paramètre d’échelle λ = 1
et de paramètre de forme k = 2. Pour les applications numériques, on prendra t = 2.

(a) Proposer une estimation δbn de δ par la méthode de Monte Carlo classique.

(b) Proposer une estimation δbn (q 1 , . . . , q K ) de δ par la méthode de stratification avec allocation pro-
portionnelle.

(c) Comparer les performances de ces deux méthodes.

2. On suppose maintenant que X 1 , X 2 et X 3 sont indépendantes avec X 1 et X 2 distribuées suivant la loi


exponentielle de paramètre λ = 1 et X 3 distribuée suivant la loi de fonction de répartition

t t 1
µ ¶
F (t ) = 1{t ∈[0,1[} + + 1{t ∈[1,2]} + 1{t >2} .
4 4 2

Pour les applications numériques, on prendra t = 1.

(a) Proposer une estimation δbn de δ par la méthode de Monte Carlo classique.

(b) Montrer que δ = E [1 − F (t − X 1 − X 2 )] = E [1 −G(t − X 3 )] où G est la fonction de répartition de la


loi gamma Γ(2, 1).

9
Projet Méthodes de Monte Carlo

(c) En déduire de nouvelles méthodes d’estimation de δ. Commenter leurs performances.

Partie II – Estimation de p

On considère n réalisations X1 , . . . , Xn du vecteur des poids X supposés indépendants et distribués sui-


vant des lois exponentielles de paramètres respectifs λ1 , . . . , λ5 . On notera f (x ; λ1 , . . . , λ5 ) la densité du
vecteur X. Pour les applications numériques, on prend (λ1 , . . . , λ5 ) = (6, 7, 3, 2, 1) et t = 2.

1. Proposer une estimation pbn de p par la méthode de Monte Carlo classique.

Echantillonage préférentiel.

2. (a) Monter qu’en choisissant pour loi d’importance

1{d (x)≥t } f (x ; λ1 , . . . , λ5 )
g (x) =
p

on obtient un estimateur d’échantillonnage préférentiel de p de variance nulle.

(b) Proposer une méthode de simulation suivant la densité g .

(c) Quelle limitation voyez-vous quant au choix de cette loi d’importance ?

3. Soient Y1 , . . . , Yn des variables aléatoires i.i.d. de densité g .

(a) La quantité suivante converge-t-elle vers p,


Pn
k=1
1{d (Yk )≥t } w(Yk ) f (Yk ; λ1 , . . . , λ5 )
Pn , avec w(Yk ) = ?
k=1
w(Yk ) g (Yk )

(b) Peut-on en déduire une méthode d’estimation de p ? Commenter.

Dans la suite, on choisit comme loi d’importance, la densité du vecteur (Y1 , . . . , Y5 ) := Y tel que les va-
riables Y1 , . . . , Y5 soient indépendantes et distribuées suivant les lois exponentielles de paramètres res-
pectifs α1 , . . . , α5 . On la notera h(y ; α1 , . . . , α5 ).

4. Donner l’estimateur d’échantillonnage préférentiel pbn (α1 , . . . , α5 ) de p basé sur la loi d’importance
h.

On souhaite choisir les paramètres α1 , . . . , α5 de la loi d’importance de sorte que

g (Z)
· ½ ¾¸
(α? ?
1 , . . . , α5 ) = arg min Eg ln ,
α1 ,...,α5 h(Z ; α1 , . . . , α5 )

où Eg est l’espérance par rapport à la densité g .

5. Soient α01 , . . . , α05 les valeurs choisies initialement par l’utilisateur. Montrer que
" #
f (Y ; λ1 , . . . , λ5 )
(α? ?
1 , . . . , α5 ) = arg max Eα01 ,...,α05 1{d (Y)≥t } ln h(Y ; α1 , . . . , α5 ) ,
α1 ,...,α5 h(Y ; α01 , . . . , α05 )

où Eα0 ,...,α0 est l’espérance par rapport à la densité h(·; α01 , . . . , α05 ).
1 5

10
Projet Méthodes de Monte Carlo

6. Étant donné Yk = (Yk,1 , . . . , Yk,5 ), k = 1, . . . , n, variables aléatoires indépendantes identiquement dis-


tribuées de densité h(· ; α01 , . . . , α05 ), en déduire que l’on peut estimer (α? ?
1 , . . . , α5 ) par

n 5 λ
i
exp − λi − α0i Yk,i
X Y ¡ © ª ¢
1{d (Yk )≥t }
i =1 αi
0
k=1
b?j =
α , j = 1, . . . , 5.
n 5 λ
i
exp − λi − α0i Yk,i
X Y ¡ © ª ¢
1{d (Yk )≥t } Yk, j
i =1 αi
0
k=1

7. Calculer pbn (α̂? ?


1 , . . . , α̂5 ) et l’intervalle de confiance au niveau 95% correspondant.

Réduction de variance. Soient U1,1 , . . . ,U1,5 , . . . ,Un,1 , . . . ,Un,5 des variables aléatoires indépendantes et
identiquement distribuées suivant la loi uniforme sur [0 , 1]. On pose, pour tout i = 1, . . . , n,
µ
1 1 1 1 1
ρ(Ui ,1 , . . . ,Ui ,5 ) = min − ? lnUi ,1 − ? lnUi ,4 ; − ? lnUi ,1 − ? lnUi ,3 − ? lnUi ,5 ;
α1 α4 α1 α3 α5

1 1 1 1 1
− ? lnUi ,2 − ? lnUi ,5 ; − ? lnUi ,2 − ? lnUi ,3 − ? lnUi ,4 .
α2 α5 α2 α3 α4

8. (a) Montrer que l’estimateur suivant converge presque-sûrement vers p :

n Y 5 λ
1X k λk /α?
k
−1
U
? i ,k 1{ρ(Ui ,1 ,...,Ui ,5 )≥t }
n i =1 k=1 αk

(b) En déduire à l’aide de la méthode des variables antithétiques un estimateur pbn(1) de p.

(c) Comparez les performances de l’estimateur pbn(1) avec celles des estimateurs pbn et pbn (α̂? ?
1 , . . . , α̂5 ).

Solution Exercice 2. Dans cet exercice, on utilisera les fonctions


MC.estim <- function(y, level = 0.95) {
delta <- mean(y)
s2 <- var(y)/length(y)
e.delta <- pnorm(0.5 * (1 + level)) * sqrt(s2)
return(data.frame(value = delta, var = s2, IC.inf = delta - e.delta,
IC.sup = delta + e.delta, level = level))
}
# ---------------
MC.estim.evol <- function(y, level = 0.95) {
n <- length(y)
delta <- cumsum(y)/(1:n)
s2 <- (cumsum(y^2) - (1:n) * (delta)^2)/(0:(n - 1))
s2 <- c(0, s2[-1])/(1:n)
b.IC <- qnorm(0.5 * (level + 1)) * sqrt(s2)
return(data.frame(value = delta, var = s2, IC.inf = delta - b.IC,
IC.sup = delta + b.IC, level = level))
}

11
Projet Méthodes de Monte Carlo

Pour un estimateur de la forme

1 Xn
i.i.d.
δbn = Vk , V1 , . . . ,Vn ∼ ν,
n k=1

la fonction MC.estim qui renvoit la valeur de l’estimateur, sa variance et l’intervalle de confiance


associé au niveau α, et la fonction MC.estim.evol qui renvoit l’évolution de ces quantités en
fonction de n.

Partie I – Estimation de δ

1. (a) Lorsque X 1 + X 2 + X 3 suit la loi de Weibull de paramètre d’échelle λ = 1 et de paramètre


de forme k = 2, on a
2
δ = E 1{X 1 +X 2 +X 3 ≥t } = e −t .
£ ¤

# --- Application numérique ---


a <- 2
(delta <- 1 - pweibull(a, 2))
[1] 0.01831564
L’estimateur de Monte Carlo classique associé est

1 Xn
i.i.d.
δbn = 1{Wk ≥t } , W1 , . . . ,Wn ∼ Weibull(2, 1).
n k=1

Il a pour variance

£ ¤ 1 ¤ 1 2
³ 2
´
Var δbn = Var 1{W1 ≥t } = e −t 1 − e −t .
£
n n

Sur cet exemple simple, on pourrait tester d’autres formulations possibles :



p £ U ∼ U ([0 , t ]),
δ = 1 − t E 2U exp(−U 2 ) = 2 π E Z 1{Z ≥t } ,
£ ¤ ¤
 Z ∼ N (0 , 1/2).

Pour la loi uniforme U ([0 , t ]), l’estimateur associé n’est pas nécessairement plus perfor-
mant en terme de variance. La variance de l’estimateur est donnée par

4t 2 π
µr ½ ¾ ¶
£ ¤ 1 1 −t 2 2 −2t 2
σ21,n 2
Var U exp(−U ) = Var δn + t Φ(2t ) −
£ ¤
= b +e −t e −1
n n 2 2
£ ¤ 1
= Var δbn + ²1 (t ).
n

Pour la loi normale N (0 , 1/2), la variance de l’estimateur associé est

4π £ ¤ 1³ n p o © p 2
´
σ22,n = Var Z 1{Z ≥t } = Var δbn + 2π 1 − Φ(t 2) + 2t π − 1 e −t
£ ¤ ª
n n
£ ¤ 1
= Var δn + ²2 (t ).
b
n

12
Projet Méthodes de Monte Carlo

Ainsi l’estimateur associé à loi uniforme n’est plus performant que pour des valeurs de
t ≤ 1.46 et pour t ≥ 1.46, la variance croît avec t (c.f. graphique). Pour la loi normale, pour
tout t ≥ 0, ²2 (t ) ≥ 0 et donc cet estimateur ne permet jamais de réduire la variance. Dans
la suite, on se contente donc d’étudier l’estimateur δbn .
2.0

ε1
1.0

ε2
0.0

0 1 2 3 4 5

On peut choisir n pour atteindre une précision ² au niveau de confiance α = 0.95 en uti-
lisant soit l’inégalité de Bienaymé-Tchebichev ou l’hypothèse du régime asymptotique,
en ayant conscience que les bornes obtenues sont mauvaises.

Variance connue Variance inconnue


δ(1 − δ) {1 − α}²2 1 4{1 − α}²2
±¡ ¢ ±¡ ¢
Bienaymé-Tchebichev
2
± 2 2
± ¡ 2¢
Régime asymptotique q 1+α/2 δ(1 − δ) ² q 1+α/2 4²

# --- Application numérique ---


eps <- 0.001
alpha <- 0.95
# ------ Bienaymé-Tchebichev (variance connue) ------
n.bt.o <- floor(delta * (1 - delta)/((1 - alpha) * eps^2))
# ------ Bienaymé-Tchebichev (variance inconnue) ------
n.bt <- floor(1/(4 * (1 - alpha) * eps^2))
# ------ Régime asymptotique (variance connue) ------
n.as.o <- floor(qnorm((1 + alpha)/2) * delta * (1 - delta)/eps^2)
# ------ Régime asymptotique (variance inconnue) ------
n.as <- floor((qnorm((1 + alpha)/2)/(2 * eps))^2)
# ------ Estimation ------
set.seed(68)
W <- rweibull(n.bt, 2)
delta.hat <- MC.estim.evol(W >= a)

n.bt.o n.bt n.as.o n.as

Valeur 3.59603e+05 4.999999e+06 3.5240e+04 9.60364e+05


Précision 4.37200e-04 1.177000e-04 1.3792e-03 2.69100e-04

13
Projet Méthodes de Monte Carlo

Mis à part le cas du régime asymptotique avec variance connue qui conduit à une
sous-estimation du nombres de tirages nécessaires, la précision obtenue au niveau de
confiance 0.95 est au-delà de la précision souhaitée. On peut observer à quel point la
borne sur n se dégrade lorsque la variance δ(1 − δ) ≈ 0.018, est remplacée par la borne
supérieur de 0.25.

On peut regarde pour quelle valeur de n on a obtenu un intervalle de confiance précision


souhaitée au niveau de confiance 0.95.
which.n <- function(estim, eps) {
return(max(which((estim$IC.sup - estim$IC.inf) > 2 * eps)) + 1)
}
# --- Application ---
which.n(delta.hat, eps)
[1] 68934
Pour la suite, on choisit n = 70000. Par la méthode de Monte Carlo classique, on a alors
l’estimation suivante.
n <- 70000
delta.hat[n, ]
value var IC.inf IC.sup level
70000 0.01821429 2.554683e-07 0.01722364 0.01920493 0.95

(b) Option n°1. La fonction de répartition de la loi de Weibull(2, 1) est inversible. Son in-
verse généralisée coïncide donc avec son inverse au sens de la bijection et est facile à
calculer. Pour U de loi uniforme sur [0 , 1], la méthode de la fonction inverse assure
p h i
F −1 (U ) = − lnU ∼ Weibull(2, 1) et δ = E 1{F −1 (U )≥t }

En prenant
K
G
• D k , avec D k = [k−1/N , k/N [ comme partition de [0 , 1],
k=1
• U comme variable de stratification,
on obtient, pour tout k ∈ {1, . . . , K },

1 U +k −1
P [U ∈ D k ] = et ∼ U | U ∈ Dk .
K K

L’estimateur stratifié avec allocation proportionnelle de δ s’écrit

1 XK Xn/K
i.i.d.
δbn (n 1 , . . . , n K ) = 1n ³ Ui +k−1 ´ o U1 , . . . ,Un ∼ U ([0 , 1]). (2)
n k=1 i =1 F −1 K ≥t

Pour simplifier, on prendra un nombre de strates K qui divise n.

Option n°1 bis. On peut formuler l’option n°1 de la façon équivalente suivante. En pre-
nant W = X 1 + X 2 + X 3 comme variable de stratification, il faut construire une partition
de [0 , +∞[. La fonction de répartion F étant bijective, cela est équivalent à construire une

14
Projet Méthodes de Monte Carlo

partition de [0 , 1] et à regarder son image par F −1 . On choisit donc pour partition

K · µ
k −1

k
µ ¶·
avec D k = F −1 , F −1
G
Dk , .
k=1 N N

On a ainsi

U +k −1
µ ¶
1
P [W ∈ D k ] = et F −1 ∼ W | W ∈ Dk .
K K

On retrouve alors l’estimateur stratifié avec allocation proportionnelle (2).


MC.strat <- function(n, K, t = 2, level = 0.95) {
m <- n/K
u <- (runif(n) + rep(0:(K - 1), each = m))/K
y <- (sqrt(-log(u)) >= t)
d <- mean(y)
s2 <- split(y, as.factor(rep(1:K, each = m)))
s2 <- sum(sapply(s2, var))/(K * n)
b.IC <- qnorm(0.5 * (level + 1)) * sqrt(s2)
return(data.frame(K = K, value = d, var = s2, IC.inf = d - b.IC,
IC.sup = d + b.IC, level = level))
}
(c) On regarde le gain ρ(K ) en terme de réduction de variance en fonction du nombre de
strates K à taille d’échantillon fixé n = 70000, i.e.,

Var δbn
£ ¤
ρ(K ) = ¤.
Var δbn (n 1 , . . . , n K )
£

La théorie nous assure que l’estimateur stratifié avec allocation proportionnelle est au
moins aussi efficace que l’estimateur de Monte Carlo classique, i.e. ρ(K ) ≥ 1.
set.seed(31)
# --- Valeurs de K testées ---
K <- which(n%%(1:1000) == 0)
# ------ Application ------
result <- as.matrix(sapply(K, MC.strat, n = n))
var.strat <- as.numeric(result[3, ])
rho <- delta.hat$var[n]/(var.strat)
# ------ Résumé ------
summary(var.strat)
Min. 1st Qu. Median Mean 3rd Qu. Max.
9.687e-10 6.857e-09 2.441e-08 8.610e-08 1.809e-07 2.666e-07
summary(rho)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.9583 1.4147 10.4845 26.6891 37.4484 263.7114
Le tableau ci-dessous présente les résultats obtenus pour des valeurs particulières de K .

15
Projet Méthodes de Monte Carlo

K value var IC.inf IC.sup rho

2 0.01941429 2.67e-07 0.01840232 0.02042625 0.9582976


14 0.01797143 1.92e-07 0.01711222 0.01883064 1.3293270
40 0.01845714 6.90e-08 0.01794213 0.01897216 3.6999420
112 0.01831429 6.00e-09 0.01815988 0.01846869 41.1635684
280 0.01827143 5.00e-09 0.01812938 0.01841348 48.6342444

700 0.01825714 4.00e-09 0.01814057 0.01837371 72.2189232


875 0.01835714 1.00e-09 0.01829614 0.01841815 263.7114102

On peut également se demander à partir de combien de tirages, l’estimateur stratifié at-


teint la même précision ² que l’estimateur de Monte Carlo classique.
MC.strat.evol <- function(n, K, t = 2, level = 0.95) {
m <- n/K
u <- (runif(n) + rep(0:(K - 1), each = m))/K
y <- (sqrt(-log(u)) >= t)
y.div <- split(y, as.factor(rep(1:K, each = m)))
mean.s <- sapply(y.div, cumsum)/(1:m)
d <- rowSums(mean.s)/K
s2 <- sapply(y.div, function(x) MC.estim.evol(x)$var * (1:m))
s2.t <- rowSums(s2)/(K * K * (1:m))
b.IC <- qnorm(0.5 * (level + 1)) * sqrt(s2.t)
return(data.frame(K = K, value = d, var = s2.t, IC.inf = d - b.IC,
IC.sup = d + b.IC))
}
# --- Application numérique ---
K <- 280
d.K <- MC.strat.evol(n, K)
n.eps <- which.n(d.K, eps) * K
Le tableau ci-dessous présente le nombre de tirages n.eps nécessaires pour obtenir la
précision ² (on note eps la précision atteinte) pour différents nombres de strates.

K rho n.eps eps

2 0.9582976 66198 0.0010000


14 1.3293270 52752 0.0010000
40 3.6999420 18160 0.0009983
112 41.1635684 2016 0.0009722
280 48.6342444 3920 0.0005000

2. (a) En notant F −1 l’inverse généralisé de la fonction de répartition de X 3 , on a


h i
δ = E 1{Y +F −1 (U )≥t } , avec Y ∼ Γ(2, 1), et U ∼ U ([0 , 1]).

16
Projet Méthodes de Monte Carlo

L’estimateur de Monte Carlo correspondant est



Y , . . . , Y i.i.d.
n ∼ Γ(2, 1),
1 Xn
1
δbn = 1 Y +F −1 (Uk )≥t } , avec
n k=1 { k U , . . . ,U i.i.d.
1 n ∼ U ([0 , 1]),

avec, pour tout u ∈ [0 , 1],



4u,

 si u ∈ [0 , 1/4],

F −1 (u) = inf{x ∈ R+ | F (x) ≥ u} = 1, si u ∈ [1/4 , 3/4],


4u − 2 si u ∈ [3/4 , 1].

# --- Fonction de répartition ---


cdf <- function(x) {
return(x/4 * (x <= 2) * (x > 0) + 0.5 * (x >= 1) + 0.5 * (x > 2))
}
# --- Inverse généralisé ---
inv.F <- function(u) {
return(4 * u * (u <= 0.25) + (u > 0.25) + (4 * u - 3) * (u > 0.75))
}
# --- Estimation ---
set.seed(68)
a <- 1
n <- 1e+05
delta.hat <- MC.estim.evol((rgamma(n, 2) + inv.F(runif(n))) >= a)
# ------ Choix de n ------
(n <- which.n(delta.hat, eps))
[1] 97371
# ------ Résultat ------
delta.hat[n, ]
value var IC.inf IC.sup level
97371 0.9739758 2.603155e-07 0.9729758 0.9749758 0.95
(b) X 1 , X 2 et X 3 étant indépendantes, on a

E 1{X 1 +X 2 +X 3 ≥t } ¯ X 3 = g (X 3 ),
£ ¯ ¤

où pour tout x ∈ R,

g (x) = E 1{x+X 1 +X 3 ≥t } = P [X 1 + X 3 ≥ t − x] = 1 −G(t − x).


£ ¤

Il en résulte δ = E g (X ) = E [1 −G(t − X 3 )]. De façon similaire, en conditionnant par X 1 +


£ ¤

X 2 , on obtient δ = E [1 − F (t − X 1 − X 2 )].

Alternative. En utilisant que les variables Y = X 1 + X 2 et X 3 sont indépendantes, on a


Z Z
p= 1{x3 +y≥t } dP(X 3 ,Y ) (x 3 , y) = 1{x3 +y≥t } dP X 3 (x 3 )dPY (y).
R2 R2

17
Projet Méthodes de Monte Carlo

Le théorème de Fubini permet alors de conclure


Z µZ ¶ Z
p= 1{ y≥t −x3 } dPY (y) dP X 3 (x 3 ) = 1 −G(t − x 3 )dP X (x 3 ) = E [1 −G(t − X 3 )].
R R R

(c) On en déduit

1 Xn
i.i.d.
δb(2) G t − F −1 (Uk ) , avec U1 , . . . ,Un ∼ U ([0 , 1]),
¡ ¢
n = 1−
n k=1

dont la variance est (les variables étant i.i.d.)

n Var δb(2)
n = Var[1 −G(t − X 3 )] = Var E 1{X 3 +Y ≥t } X 3
£ ¤ £ £ ¯ ¤¤
¯
h £ ¯ ¤2 i ¯ ¤¤2
= E E 1{X 3 +Y ≥t } ¯ X 3 − E E 1{X 3 +Y ≥t } ¯ X 3 .
£ £

En appliquant l’inégalité de Jensen conditionnelle, on obtient


¯ ¤2 h ¯ i
E 1{X 3 +Y ≥t } ¯ X 3 ≤ E 12{X 3 +Y ≥t } ¯ X 3 .
£ ¯

On en déduit (croissance de l’espérance) :


h h ¯ ii ¯ ¤¤2
n Var δb(2) E E 2
{X 3 +Y ≥t } ¯ X 3 − E E 1{X 3 +Y ≥t } X 3
£ ¤ £ £
≤ 1
¯ ¯
n
h i ¤2
≤ E 12{X 3 +Y ≥t } − E 1{X 3 +Y ≥t } = Var 1{X 3 +Y ≥t } = n Var δbn .
£ £ ¤ £ ¤

Ce nouvelle estimateur est donc au moins aussi performant, voire plus performant, que
l’estimateur de Monte Carlo classique.
set.seed(45)
delta.hat.2 <- MC.estim(1 - pgamma(a - inv.F(runif(n)), 2))
delta.hat.2
value var IC.inf IC.sup level
1 0.9739746 3.810959e-08 0.9738116 0.9741377 0.95
# --- Gain en variance ---
delta.hat$var[n]/delta.hat.2$var
[1] 6.830707
On obtient que la variance de l’estimateur δb(2)
n est 6.831 fois plus petite que celle de l’esti-
mateur classique. Autrement dit, on obtiendrait la même précision que pour la méthode
classique pour 6.831 fois moins de tirages.

Alternativement, on peut choisir

1 Xn
i.i.d.
δb(3) avec Y1 , . . . , Yn ∼ Γ(2, 1).
¡ ¢
n = 1− F t − Yk ,
n k=1
h i
On obtient de façon analogue par l’inégalité de Jensen conditionnelle que Var δb(3)
n ≤
Var δn .
£ ¤
b

18
Projet Méthodes de Monte Carlo

delta.hat.3 <- MC.estim(1 - cdf(a - rgamma(n, 2)))


delta.hat.3
value var IC.inf IC.sup level
1 0.9742223 2.948907e-08 0.9740788 0.9743657 0.95
# --- Gain en variance ---
delta.hat$var[n]/delta.hat.3$var
[1] 8.827523
On en déduit que parmi les estimateurs avec conditionnement, l’estimateur δb(3)
n est plus
efficace en terme de variance que l’estimateur δb(2)
n .

Partie II – Estimation de p

1. L’estimateur de Monte Carlo classique s’écrit



n
n i.i.d., telles que
1 X X , . . . , X
1
pbn = 1{d (Xk )≥t } , avec
n k=1 X = (X , X , X , X , X ) ∼ E (λ ) ⊗ . . . ⊗ E (λ ).
k k,1 k,2 k,3 k,4 k,5 1 5

et par définition, d : (x 1 , . . . , x 5 ) 7→ min{x 1 + x 4 , x 1 + x 3 + x 5 , x 2 + x 5 , x 2 + x 3 + x 4 }.


# --- Générateur suivant f ---
rexp.multi <- function(n, rate = c(6, 7, 3, 2, 1)) {
return(cbind(rexp(n, rate[1]), rexp(n, rate[2]), rexp(n, rate[3]),
rexp(n, rate[4]), rexp(n, rate[5])))
}
# --- Distance d ---
library(rpgm)
d <- function(x) {
return(rowMins(cbind(x[, 1] + x[, 4], x[, 1] + x[, 3] + x[, 5],
x[, 2] + x[, 5], x[, 2] + x[, 3] + x[, 4])))
}
# --- Estimation ---
set.seed(67)
a <- 2
n <- 2e+06
p.hat <- MC.estim.evol(d(rexp.multi(n)) >= a)
# ------ Choix de n ------
eps <- 1e-04
which.n(p.hat, eps)
[1] 1468975
Pour la suite, on choisit n = 1500000.
n <- 1500000
p.hat[n, ]
value var IC.inf IC.sup level
1500000 0.003929333 2.609264e-09 0.003829216 0.00402945 0.95

19
Projet Méthodes de Monte Carlo

Echantillonage préférentiel.
2. (a) La densité g permet bien de définir un estimateur d’échantillonnage préférentiel car le
support de x 7→ 1{d (x)≥t } f (x ; λ1 , . . . , λ5 ) est inclus dans le support de g . La variance de cet
estimateur d’échantillonnage préférentiel est

1{d (X)≥t } f (X ; λ1 , . . . , λ5 )
· ¸
Varg = Varg p = 0.
£ ¤
g (X)

Il s’agit de l’estimateur d’échantillonnage préférentiel de variance minimale.


(b) On connaît g à une constante de normalisation près. Si l’on note g̃ la version non nor-
malisée de g , on a, pour tout x ∈ R5 , g (x) ≤ f (x). On peut donc appliquer l’algorithme du
rejet comme lors de l’exercice 1.
x <- rejet(1e+05, rexp.multi, function(x) d(x) >= a, 1)
(c) Bien que l’on puisse simuler suivant g , on ne peut calculer l’estimateur d’échantillon-
nage préférentiel pour la loi d’importance g car cela supposerait que l’on connaisse p...
En revanche, en simulant suivant la g par la méthode du rejet, on peut obtenir une esti-
mation de p (c.f., Exercice 1). Cela équivaut à calculer l’estimateur de Monte Carlo clas-
sique pour un nombre aléatoire de réalisations suivant f .
# --- Estimation ---
x$p
[1] 0.003880194
x$var.p
[1] 1.499718e-10
3. (a) Les variables aléatoires Y1 , . . . , Yn étant i.i.d. de densité g et intégrables, la loi forte des
grands nombres donne

1 Xn
p.s.
1{d (Yk )≥t } w(Yk ) −→ Eg 1{d (Y1 )≥t } w(Y1 ) = p,
£ ¤
n k=1 n→+∞

1 Xn Z
p.s.
w(Yk ) −→ Eg [w(Y1 )] = f (x ; λ1 , . . . , λ5 )dx = p.
n k=1 n→+∞ supp(g )

On en déduit que la quantité proposée ne converge pas vers p :


Pn
k=1
1{d (Yk )≥t } w(Yk )
Pn −→ 1.
k=1
w(Yk ) n→+∞

(b) Il n’est pas possible d’en déduire un estimateur de p. Pour que cet estimateur, dit estima-
teur d’échantillonnage préférentiel autonormalisée, converge vers p, il est nécessaire que
supp( f ) ⊂ supp(g ), pour que Eg [w(Y1 )] = 1. Dans l’exemple considéré, on a uniquement
que le support de x 7→ 1{d (x)≥t } f (x ; λ1 , . . . , λ5 ) est inclus dans le support de g .
4. Pour la loi d’importance h, on a supp( f ) ⊂ supp(h) donc l’estimateur d’échantillonnage pré-
férentiel associé est bien défini et s’écrit

1 Xn f (Yk ; λ1 , . . . , λ5 ) 1 X
n 5 λ
j
pbn (α1 , . . . , α5 ) = exp {α j − λ j }Yk, j ,
Y ¡ ¢
1{d (Yk )≥t } = 1{d (Yk )≥t }
n k=1 h(Yk ; α1 , . . . , α5 ) n k=1 j =1 α j

20
Projet Méthodes de Monte Carlo

avec Yk = (Yk,1 , . . . , Yk,5 ), k = 1, . . . , n, variables aléatoires indépendantes identiquement distri-


buées de densité h(· ; α1 , . . . , α5 )
5. En utilisant la définition de g , on a

1{d (z)≥t } f (z ; λ1 , . . . , λ5 ) 1{d (z)≥t } f (z ; λ1 , . . . , λ5 )


Z ½ ¾
(α? ?
1 , . . . , α5 ) = arg min ln dz
α1 ,...,α5 R+ ph(z ; α1 , . . . , α5 ) p
Z
= arg min − ln {h(z ; α1 , . . . , α5 )} 1{d (z)≥t } f (z ; λ1 , . . . , λ5 )dz
α1 ,...,α5 R+
Z
= arg max ln {h(z ; α1 , . . . , α5 )} 1{d (z)≥t } f (z ; λ1 , . . . , λ5 )dz.
α1 ,...,α5 R+

Comme f (· ; λ1 , . . . , λ5 ) et h(· ; α01 , . . . , α05 ) ont même support, on peut écrire

1{d (z)≥t } f (z ; λ1 , . . . , λ5 )h(z ; α01 , . . . , α05 )


Z
(α? ?
1 , . . . , α5 ) = arg max ln {h(z ; α1 , . . . , α5 )} dz
α1 ,...,α5 R+ h(z ; α01 , . . . , α05 )
" #
f (Y ; λ1 , . . . , λ5 )
= arg max Eα0 ,...,α0 1{d (Y)≥t } ln h(Y ; α1 , . . . , α5 )
α1 ,...,α5 1 5
h(Y ; α01 , . . . , α05 )

6. On déduit de la question précédente

1 Xn f (Yk ; λ1 , . . . , λ5 )
(α̂? ?
1 , . . . , α̂5 ) = arg max 1{d (Yk )≥t } ln h(Yk ; α1 , . . . , α5 )
α1 ,...,α5 n k=1 h(Yk ; α01 , . . . , α05 )

Les points critiques sont solutions de

1 Xn f (Yk ; λ1 , . . . , λ5 )
1{d (Yk )≥t } ∇α1 ,...,α5 ln h(Yk ; α1 , . . . , α5 ) = 0.
n k=1 h(Yk ; α01 , . . . , α05 )

Or pour tout j ∈ {1, . . . , 5} et tout k ∈ {1, . . . , n}, on a

∂ 1
ln h(Yk ; α1 , . . . , α5 ) = − Yk, j .
∂α j αj

On en déduit que les points critiques sont solutions de, pour j = 1, . . . , 5,

1 Xn f (Yk ; λ1 , . . . , λ5 ) α j X
n f (Yk ; λ1 , . . . , λ5 )
1{d (Yk )≥t } = 1{d (Yk )≥t } Yk, j .
n k=1 h(Yk ; α1 , . . . , α5 )
0 0 n k=1 h(Yk ; α01 , . . . , α05 )

Il existe donc un unique point critique donné par, j = 1, . . . , 5,

n 5 λ
n f (Yk ; λ1 , . . . , λ5 ) i
exp α0i − λi Yk,i
X X Y ¡© ª ¢
1{d (Yk )≥t } 1{d (Yk )≥t }
h(Yk ; α01 , . . . , α05 ) k=1 i =1 i α0
α̂?j =
k=1
=
n
X f (Yk ; λ1 , . . . , λ5 ) n 5 λ
i
exp α0i − λi Yk,i
X Y
1{d (Yk )≥t }
¡© ª ¢
Yk, j 1{d (Yk )≥t } Yk, j
k=1 h(Yk ; α01 , . . . , α05 ) k=1 i =1 αi
0

n ³X 5 © ´
α0i − λi Yk,i
X ª
1{d (Yk )≥t } exp
k=1 i =1
=
n 5 ©
³X ´
α0i − λi Yk,i
X ª
1{d (Yk )≥t } Yk, j exp
k=1 i =1

21
Projet Méthodes de Monte Carlo

Par ailleurs, pour tout i , j ∈ {1, . . . , 5} et tout k ∈ {1, . . . , n}, on a

∂2 1 ∂2
ln h(Yk ; α1 , . . . , α5 ) = − 2 < 0 et ln h(Yk ; α1 , . . . , α5 ) = 0.
∂α j
2
αj ∂α j αi

L’opposé de la hessienne est donc définie positive. Ainsi la fonction à optimiser est strictement
concave et le point critique est un maximum.
7. # --- Optimisation des paramètres ---
alpha.star <- function(n, t, lambda = c(6, 7, 3, 2, 1), alpha) {
y <- rexp.multi(n, alpha)
z <- exp(y %*% (alpha - lambda)) * (d(y) >= t)
return(as.numeric(sum(z)/(t(z) %*% y)))
}
On peut observer que la procédure est très sensible au choix initial α01 , . . . , α0n .
N <- 1000
a.0 <- c(5, 6, 2, 1, 0.5)
alpha.star(N, 2, alpha = a.0)
[1] 5.2850636 6.4836824 2.2736502 0.4338430 0.3319539
a.0 <- rep(2, 5)
alpha.star(N, 2, alpha = a.0)
[1] 1.9839619 2.0281518 5.5810387 0.6676843 0.3354527
On va donc itérer le processus pour plus de robustesse.
# --- Calcul de alpha.star ---
set.seed(44)
L <- 100
a.0 <- c(5, 6, 2, 1, 2)
a.star <- alpha.star(N, 2, alpha = a.0)
for (i in 2:L) {
a.star <- alpha.star(N, 2, alpha = a.star)
}
# --- Estimateur d'échantillonage préférentiel correspondant ---
lambda <- c(6, 7, 3, 2, 1)
y <- rexp.multi(n, a.star)
z <- prod(lambda/a.star) * exp(y %*% (a.star - lambda)) * (d(y) >= 2)
p.hat.is <- MC.estim(z)
p.hat.is
value var IC.inf IC.sup level
1 0.003878579 1.843803e-10 0.003867238 0.00388992 0.95
# --- Gain en variance ---
p.hat$var[n]/p.hat.is$var
[1] 13.85496
On obtient ainsi un estimateur d’échantillonnage préférentiel plus efficace en terme de va-
riance.

22
Projet Méthodes de Monte Carlo

Réduction de variance.
8. (a) La méthode de la fonction inverse pour la loi exponentielle de paramètre α? donne que
pour U ∼ U ([0 , 1]),

1
− lnU ∼ E (α? ).
α?

En utilisant cette égalité en loi, on a, pour tout k = 1, . . . , n,

loi
ρ(Uk,1 , . . . ,Uk,5 ) = min Yk,1 + Yk,4 , Yk,1 + Yk,3 + Yk,5 , Yk,2 + Yk,5 , Yk,2 + Yk,3 + Yk,4
© ª

loi
= d (Yk ),

où Yk = (Yk,1 , . . . , Yk,5 ) ∼ h(· ; α? ?


1 , . . . , α5 ). On peut alors écrire l’estimateur p bn (α? ?
1 , . . . , α5 )
sous la forme
5 λ
à !
n
1 X lnUk, j
? ? j ?
pbn (α1 , . . . , α5 ) = exp −{α j − λ j }
Y
1{ρ(Uk,1 ,...,Uk,5 )≥t }
n k=1 α? j =1 j
α? j

1 n
X λj
5
Y −1+λ j /α?j
= 1{ρ(Uk,1 ,...,Uk,5 )≥t } ? Uk, j
n k=1 j =1 α j

L’estimateur proposé est donc équivalent à l’estimateur d’échantillonage préférentiel


pbn (α? ?
1 , . . . , α5 ) qui converge presque-sûrement vers p d’après la loi forte des grands
nombres (variables intégrables et supp( f ) ⊂ supp(h)).
(b) Loi uniforme U ([0 , 1]) est invariante par la transformation A : x 7→ 1 − x. On en déduit
l’estimateur antithétique suivant

1 Xn 5 λ −1+λ j /α?j
j
pbn(1) =
Y
1{ρ(Uk,1 ,...,Uk,5 )≥t } ? Uk, j
2n k=1 j =1 α j
5 λ
Y j −1+λ j /α?j
+ 1{ρ(1−Uk,1 ,...,1−Uk,5 )≥t } ? (1 −Uk, j ) .
j =1 α j

(c) On note

5 λ −1+λ j /α?j
j
Ψ : (x 1 , . . . , x 5 ) 7→ 1{ρ(x1 ,...,x5 )≥t }
Y
? xj
j =1 α j

psi <- function(u, lambda = c(6, 7, 3, 2, 1), alpha) {


y <- -t(log(u) * (1/alpha))
return(prod(lambda/alpha) * exp(y %*% (alpha - lambda)) * (d(y) >=
2))
}
Une condition suffisante pour que l’estimateur pbn(1) réduise la variance est

Cov[Ψ(U1 , . . . ,U5 ), Ψ(1 −U1 , . . . , 1 −U5 )] ≤ 0.

23
Projet Méthodes de Monte Carlo

On peut le vérifier empiriquement


u <- matrix(runif(5 * n), 5, n)
y.1 <- psi(u, alpha = a.star)
y.2 <- psi(1 - u, alpha = a.star)
cov(y.1, y.2)
[,1]
[1,] -1.467654e-05
On peut également le justifier mathématiquement. Pour tout j = 1, . . . , 5, λ j /α?j > 1.
lambda/a.star - 1
[1] 0.30875256 0.27248570 0.07807079 3.51623680 1.83870623
On en déduit que la fonction Ψ est croissante en chacune de ses coordonnées et que la
fonction Ψ ◦ A est décroissante en chacune de ses coordonnées. De plus Ψ(U1 , . . . ,U5 ) et
Ψ ◦ A(U1 , . . . ,U5 ) ont même loi et sont de carré intégrables. On en déduit donc d’après le
résultat du TD n°3 que Cov[Ψ(U1 , . . . ,U5 ), Ψ(1 −U1 , . . . , 1 −U5 )] ≤ 0. L’estimateur pbn(1) est
donc plus efficace en terme de variance que l’estimateur d’échantillonage préférentiel
pbn (α? ?
1 , . . . , α5 ) et par conséquence que l’estimateur de Monte Carlo classique.

p.hat.1 <- MC.estim(0.5 * (y.1 + y.2))


p.hat.1
value var IC.inf IC.sup level
1 0.0038872 8.839529e-11 0.003879347 0.003895053 0.95
# --- Gain en variance (méthode classique) ---
p.hat$var[n]/p.hat.1$var
[1] 28.89952
# --- Gain en variance (échantillonage préférentiel) ---
p.hat.is$var/p.hat.1$var
[1] 2.085861

24

Vous aimerez peut-être aussi