Bootstrap

Données air-conditioning

Dans ce TP on considère des données concernant un système de climatisation. Les observations sont les durées (en heure) entre deux pannes de la climatisation (source: Bootstrap methods and their application, Davison & Hinkley, 1997). On s'intèresse à l'estimation du taux de défaillance. Celui est estimé par $T=1/\bar X_n$ où $X_i$ désignent les observations. Voici les données :

In [ ]:
aircond <- c(487,18,85,91,5,130,230,43,98,7,100,3)

Question 1

Tracer l'histogramme des données aircond. Supposons que les données suivent une loi exponentielle $\mathcal E(\theta)$. Estimer le paramètre $\theta$ à partir des données et superposer la densité estimée à l'histogramme. Le choix de la loi exponentielle vous semble adéquat?

Générer des échantillons bootstrap

Notons $x_1,\dots,x_n$ des réalisations i.i.d. d'une loi $F$.

Rappelons que l'on obtient un échantillon bootstrap non paramétrique en tirant avec remise des valeurs dans l'échantillon $(x_1,\dots,x_n)$.

Si on a un modèle paramétrique des données en sorte que $X_i\sim F_\theta$ avec un paramètre $\theta$ inconnu et si on dispose d'un estimateur $T$ de $\theta$, on créé un échantillon bootstrap paramétrique en simulant de la loi estimée $F_t$ où $t=T(x_1,\dots,x_n)$ est la valeur de l'estimateur sur les données observées.

Question 2

  • Créer trois échantillons bootstrap non paramétrique des données aircond (utiliser la fonction sample). Comparez les fonctions de répartition empiriques associées par un graphique (utiliser la fonction ecdf). Ajouter la fonction de répartition empirique des données aircond. Commentez.
  • Créer trois échantillons bootstrap paramétrique des données aircond. Plus précisément, supposons que les données sont i.i.d. de loi exponentielle. Comparez les fonctions de répartition empiriques associées par un graphique. Ajouter la fonction de répartition empirique des données aircond ainsi que la fonction de répartition de la loi exponentielle ajustée. Commentez.

Répliques bootstrap de l'estimateur

Selon le type d'échantillon bootstrap utilisé (paramétrique ou non), on obtient des répliques bootstrap paramétrique ou non paramétrique $T^*$ de l'estimateur $T$. Autrement dit, $T^*$ est la valeur de l'estimateur $T$ sur un échantillon bootstrap.

Question 3

  • Ecrire une fonction boot.np qui prend en argument le vecteur de données obs et le nombre R de répliques bootstrap de l'estimateur $T=1/\bar X_n$ souhaité. La fonction génère R échantillons bootstrap non paramétrique sur lesquels l'estimateur $T$ est évalué et elle renvoie ces répliques bootstrap.
  • Ecrire une fonction boot.exp équivalente à la focntion boot.np, mais qui repose sur des échantillons bootstrap paramétriques dans le modèle des lois exponentielles.
  • Afin de comparer la loi de l'estimateur $T$ à la loi de la réplique bootstrap (paramétrique ou non) $T^*$, écrire une fonction estim.T qui génère $R$ réalisations de l'estimateur $T$ à partir de $R$ échantillons simulées de taille $n$ de loi exponentielle $\mathcal E(\theta)$ (les valeurs de $\theta$, $n$ et $R$ sont à passer à la fonction en argument).
In [ ]:
boot.np <- function(obs,R){
    
  return(replic.boot)
}
In [ ]:
boot.exp <- function(obs,R){

    return(replic.boot)
}
In [ ]:
estim.exp <- function(theta,n,R){
    
    return(estim)
}

Question 4

  • Pour les données aircond générer 1000 répliques bootstrap de l'estimateur T par les deux approches : paramétrique et non paramétrique. Stocker les vecteurs dans deux variables distinctes.
  • Tracer l'histogramme des répliques bootstrap dans les deux cas. Tracer des QQ-plots pour comparer la distribution des deux vecteurs à la loi normale (fonction qqnorm). Que dire de la loi des répliques bootstrap ?
  • Tracer les fonctions de répartition empiriques des deux vecteurs dans un même graphique. Faire un QQ-plot pour comparer les distributions des deux vecteurs entre eux (fonction qqplot). Interprétez !
  • Générer un très grand échantillon de la loi de $T$ avec $n=12$ et $\theta=t=$ valeur observée de $T$ sur les données aircond. Ensuite tracer des QQ-plots pour comparer les répliques bootstrap (paramétrique et non paramétrique) aux valeurs simulées de $T$. Interpréter.

Bootstrap : un contre-exemple

Soit $X_1,\dots,X_n$ un échantillon de variables i.i.d. de loi uniforme $U(\theta, \theta+ 1)$ pour $\theta\in\mathbb R$.

On considère l'estimateur $T_n = X_{(1)} = \min\{X_i,\dots, X_n\}$ de $\theta$. On s'intéresse à la distribution de la statistique $$L_n = n(T_n − \theta).$$

On peut prouver rigoureusement le résultat asymptotique suivant : $$L_n\stackrel{\mathcal L}{\longrightarrow}\mathcal E(1),\qquad\text{lorsque }n\to\infty.$$

Question 5

Vérifier à l'aide des simulations à partir de quelle taille d'échantillon $n$ l'approximation limite donnée ci-dessus est bonne. Pour cela :

  • écrire une fonction simul_min qui simule un grand nombre d'échantillon $X_1,\dots,X_n$ sur lesquels la statistique $L_n$ est évaluée. Ensuite, on trace l'histogramme et un QQ-plot pour vérifier la loi de $L_n$.
  • appeler votre fonction en variant la taille d'échantillon (p. ex. $n = 5, 10, 20, 50, 200 ,1000, 10000$). Commentez.
In [ ]:
simul_min <- function(theta,n,R){
    
    
}

Maintenant nous voulons faire du bootstrap non paramétrique afin d'approcher la loi de la statistique $L_n$.

Question 6

Ecrire une fonction boot_min similaire à la fontion simul_min qui prend en argument un échantillon et le nombre $R$ d'échantillons bootstrap à générer. Cette fonction trace l'histogramme et le QQ-plot des répliques bootstrap $L_n^*$. Qu'observez-vous en appelant cette fonction ? Obtient-on les mêmes résultats que par des simuations de la question précédente ? Interprétez.

In [ ]:
boot_min <- function(obs,R){
    
}

Question 7

Pour mieux comprendre ce qui se passe en effectuant du bootstrap non paramétrique, vérifier le nombre d’éléments différents dans le vecteur de répliques bootstrap $L^*_{n,r}, r=1,\dots,R$? Regardez pour des grandes valeurs de $n$ et de $R$. Expliquez.

Est-ce que le bootstrap paramétrique fait mieux ?

Question 8

Mettre en oeuvre le bootstrap paramétrique où l'échantillon bootstrap est tiré selon la loi uniforme $U[t,t+1]$ où $t=T(x_1,\dots,x_n)$ est la valeur observée de l'esimtateur $T$ sur les données. Tracer l'histogramme et le QQ-plot correspondant. Interpréter.

Intervalles de confiance bootstrap

Dans cette partie nous considérons des réalisations $x_1,\dots,x_n$ i.i.d. de loi exponentielle $\mathcal E(\theta)$ avec $\theta>0$, et l'estimateur $T=1/\bar X_n$. Notons $t=T(x_1,\dots,x_n)$ la valeur observée de l'estimateur sur les données.

Nous allons mettre en oeuvre les différents intervalles de confiance par le bootstrap (ICB) vus en cours.

Rappelons que le niveau de confiance nominatif d'un ICB est de $1-\alpha$ pour $\alpha$ fixé. Nous allons effectuer des simulations de Monte Carlo afin d'estimer le niveau de confiance effectif d'un ICB $\mathcal I^*$, c'est-à-dire déterminer la quantité $$\mathbb P_\theta(\theta\in\mathcal I^*)$$ et comparer cette valeur à la valeur nominative de $1-\alpha$ afin de juger la qualité de l'intervalle.

Par approximation normale

L'ICB de niveau $1-\alpha$ qui repose sur une approximation par la loi normale est donné par $$\mathcal I^*_{\text{norm}} = \left[t-\beta_B^*-\sqrt{v^*_B}z_{1-\alpha/2},t-\beta_B^*-\sqrt{v^*_B}z_{\alpha/2} \right],$$ où $z_{\alpha/2}$ et $z_{1-\alpha/2}$ désignent les quantiles de la loi normale standard $\mathcal N(0,1)$ et $\beta_B^*$ et $v^*_B$ sont les estimateurs bootstrap du biais et de la variance de l'estimateur $T$ définis par $$\beta_B^*=\bar T^*-t,\qquad v^*_B = \frac1B\sum_{b=1}^B(T^{*(b)}-\bar T^*)^2,\qquad \text{ où } \quad\bar T^*=\frac1B\sum_{b=1}^BT^{*(b)},$$ et $T^{*(b)},b=1,\dots,B$ sont $B$ répliques bootstrap (paramétrique ou non paramétrique) de $T$.

Question 9

  • Ecrire une fonction biais.var.boot pour calculer les estimteurs bootstrap du biais et de la variance $\beta_B^*$ et $v^*_B$. Cette fonction prend en argument un vecteur d'observations obs, le nombre $B$ de répliques bootstrap $T^{*(b)}$ à générer et une variable param de type booléan. Elle renvoie les estimateurs bootstrap $\beta_B^*$ et $v^*_B$. Selon la valeur de param on utilisera des échantillons bootstrap paramétrique ou non paramétrique.
  • Faites quelques essais sur des données simulées pour choisir une bonne valeur du nombre $B$ d'échantillons bootstrap à utiliser dans la fonction biais.var.boot.
  • Ecrire une fonction icb.norm qui renvoie les limites de l'ICB $\mathcal I^*_{\text{norm}}$. Elle prend en argument les données, le niveau $\alpha$, le nombre de répliques bootstrap $B$ de l'esitmateur $v^*_B$ et un booléan param pour le type de bootstrap à utiliser.
  • Ecrire une fonction niveau.icbnorm pour faire des simulations de Monte Carlo pour estimer le niveau de confiance effectif $\mathbb P_\theta(\theta\in\mathcal I^*_{\text{norm}})$. Plus présisément, cette fonction
    • génère un grand nombre de jeux de données $x_1,\dots,x_n$ de loi exponentielle $\mathcal E(\theta)$,
    • calcule l'ICB $\mathcal I^*_{\text{norm}}$ sur chacun de ces jeux de données,
    • et estime la proportion d'ICB qui contiennent la vraie valeur du paramètre $\theta$.
  • Faites des simulations Monte Carlo avec différents paramètres. Que dire de la qualité de l'intervalle $\mathcal I^*_{\text{norm}}$ ? Comparer les performances de l'approche bootstrap paramétrique et non paramétrique.
In [ ]:
biais.var.boot <- function(obs,B,param=FALSE){
    
    return(list(biais = b, var = v))
}
In [ ]:
icb.norm <- function(obs,alpha=.05,B=300,param=FALSE){
    
    return(icb)
}
In [ ]:
niveau.icbnorm <- function(theta,n,M,alpha=0.05,param=FALSE){
    
    return(prop)
}

ICB de base

L'intervalle de confiance par bootstrap de base est définit par $$\mathcal I^*_{\text{basic}} = \left[2t-T^*_{(\gamma_1)}, 2t-T^*_{(\gamma_2)} \right],$$ où $T^*_{(s)}$ désigne la $s$-ième statistique d'ordre associée aux répliques bootstrap $T^*_1,\dots,T^*_R$ et $$\gamma_1=\left\lceil\left(1-\frac\alpha 2\right)R\right\rceil\qquad\text{ et }\qquad\gamma_2=\left\lceil \frac\alpha2R\right\rceil.\qquad\qquad\qquad(*)$$

Question 10

  • Ecrire une fonction icb.basic pour calculer les limites de l'ICB $\mathcal I^*_{\text{basic}}$ pour un échantillon donné.
  • Estimer le niveau de confiance effectif de cet intervalle en utilisant des simulations de Monte Carlo comme à la quesiton précédente.

ICB studentisé

L'ICB studentisé est définit par $$\mathcal I^*_{\text{stud}} = \left[t-\sqrt{v_R^*}Z^*_{(\gamma_1)}, t-\sqrt{v_R^*}Z^*_{(\gamma_2)} \right],$$ avec $\gamma_1$ et $\gamma_2$ donnés en $(\ast)$ et $$Z^*_r = \frac{T^*_r-t}{\sqrt{v^*_{r,B}}},$$ où $v^*_{r,B}$ désigne l'estimateur bootstrap de la variance de $T$ associée au $r$-ième échantillon bootstrap $x^*_{r,1},\dots,x^*_{r,n}$ (double bootstrap).

Question 11

  • Ecrire une fonction icb.stud pour calculer les limites de l'ICB $\mathcal I^*_{\text{stud}}$ pour un échantillon donné.
  • Estimer le niveau de confiance effectif de cet intervalle en utilisant des simulations de Monte Carlo.

Méthode des percentiles de base

L'ICB par la méthode des percentiles de base est définit par $$\mathcal I^*_{\text{perc}} = \left[T^*_{(\gamma_2)}, T^*_{(\gamma_1)} \right].$$

Question 12

  • Ecrire une fonction icb.perc pour calculer les limites de l'ICB $\mathcal I^*_{\text{perc}}$ pour un échantillon donné.
  • Estimer le niveau de confiance effectif de cet intervalle en utilisant des simulations de Monte Carlo.

Question 13

Au vu de vos résultats de simulation comparer la performance des différents types d'intervalles de confiance et expliquer leur différences. Quelle approche, paramétrique ou non paramétrique, donne des meilleurs performances (dans le cadre étudié ici) ?

Question 14

Calculer les différents intervalles de confiance pour les données aircond et comparer-les.