Estimer l’intervalle de confiance d’une moyenne par bootstrap en une seule ligne de commande
Il y a deux semaines, lorsque j’ai publié l’article sur comment faire des analyses statistiques descriptives de variables numériques avec le logiciel R j’ai parlé de l’intervalle de confiance “bootstrap percentile” de la moyenne. Et j’ai montré comment l’estimer avec le package `boot`. En réalité, je n’étais pas complètement satisfaite parce que je trouve quel’utilisation de ce package n’est pas totalement évidente lorsqu’on débute à la fois avec le logiciel R et avec les biostatistiques.
Du coup, j’ai cherché une méthode plus simple, et j’ai trouvé ! Dans le billet de cette semaine, je vais donc vous parler de la fonction `slipper_ci` du package `slipper`.
Ce package est développé par Jeff Leek de l’université Johns Hopkins, il est téléchargeable, via son GitHub. Jeff Leek est le co-fondateur avec Brian Caffo et Roger Peng de la spécialisation datascience sur la plateforme Coursera.
En dehors des biostatistiques, les bootstraps sont les petites lanières présentes de chaque coté des bottes, sur lesquelles on tire pour faire entrer le pied. Les slippers sont des chaussures sans lacets (ou chaussons), faciles à enfiler ! Le nom du package est donc un clin d’oeil !
Le problème de l’intervalle de confiance
Dans mon précédent article, je disais que lorsqu’il existe un défaut manifeste de normalité, notamment d’asymétrie (skewness), l’estimation de l’intervalle de confiance de la moyenne par la formule classique, qui fait appel à la loi de Student.
$$ IC_{\bar{x}}^{95\%} = [\bar{x} – t_{97.5\%}^{n-1} \;\ast sem \; ;\;\bar{x} + t_{97.5\%}^{n-1} \;\ast sem ] $$ ou à la loi Normale (lorsque N>30 en théorie),$$ IC_{\bar{x}}^{95\%} = [\bar{x} – 1.96\;\ast sem \; ;\;\bar{x} + 1.96\;\ast sem ] $$ peut conduire à un intervalle biaisé. J’ajoute aujourd’hui que cela est d’autant plus vrai que la taille de l’échantillon est faible.Qu’est ce que ça veut dire un intervalle de confiance biaisé ?
Tout d’abord, un petit rappel sur la définition de l’intervalle de confiance. Lorsque l’on décrit des données numériques, on estime généralement la moyenne arithmétique et on l’accompagne très fréquemment de son intervalle de confiance à 95%. Il s’agit d’une plage de valeurs ayant une probabilité (théorique) de 0.95 de contenir la vraie moyenne (celle de la population).
Un intervalle de confiance biaisé est une étendue de valeurs qui a:- une probabilité inférieure à celle attendue, de contenir la vraie moyenne.
- et/ ou une erreur de couverture à gauche et à droite qui n’est pas symétrique. En théorie la probabilité que la borne supérieure (de l’intervalle de confiance à 95% de la moyenne) ne soit pas assez élevée pour couvrir la vraie moyenne est de 2.5%. De même la probabilité théorique que la borne inférieure n’aille pas assez loin à gauche est de 2.5%. Lorsque l’intervalle de confiance est biaisé on peut avoir une probabilité de 9% à droite et de 1% à gauche, ou inversement.
L’intervalle de confiance “bootstrap percentile”
Le principe du `bootstrap` est de générer un grand nombre d’échantillons (par exemple 1000), de la même taille que l’échantillon observé, en utilisant les valeurs qui le constituent. Si l’échantillon observé contient N valeurs, alors chaque échantillon bootstrap est généré en tirant avec remise N valeurs parmi les N valeurs observées. Cela signifie que dans un échantillon bootstrap donné, certaines valeurs apparaîtront plusieurs fois et que d’autre valeurs ne seront pas présentes du tout. Ensuite, chaque échantillon bootstrap est considéré séparément et la moyenne de chaque échantillon bootstrap est calculée.
L’approche “bootstrap percentile” consiste alors à ordonner ces 1000 moyennes, de la plus petite à la plus grande, et à estimer leurs percentiles 2.5 et 97.5. Le percentile 2.5 correspond au seuil en dessous duquel seules 2.5% des moyennes ordonnées sont présentes. De la même façon, le percentile 97.5 correspond au seuil au dessus duquel seules 2.5% des moyennes estimées ordonnées sont présentes. Ces valeurs constituent alors les bornes inférieure et supérieure de l’intervalle de confiance à 95%, selon l’approche dit ” bootsrap percentile”.
J’avais ensuite montré comment estimer cet intervalle de confiance “bootstrap percentile” en utilisant le package `boot`. Mais comme je l’ai dit en introduction, je n’étais pas complètement satisfaite parce que je trouve son utilisation un peu compliquée lorsqu’on débute.
J’ai donc cherché plus simple et j’ai trouvé la fonction `slipper_ci` du package `slipper`
Estimer l’intervalle de confiance d’une moyenne avec slipper_ci
Installation du package
library(devtools) devtools::install_github('jtleek/slipper') library(slipper)
La fonction “slipper_ci””
La fonctionslipper_ci
a 5 arguments :- `df` : un tableau de données
- `expr` : une fonction qui renvoit le paramètre qui va être bootstrapé
- `B` : le nombre d’échantillons boostrap à générer (1000 c’est bien!)
- `lower` : le percentile inférieur pour l’interval de confiance
- `upper` : le percentile inférieur pour l’interval de confiance
Sepal.Length
du jeu de données iris
.set.seed(4567)# pour que les résultats soient reproductibles slipper_ci(iris,mean(Sepal.Length),B=1000, lower=0.025, upper=0.975) ci_low ci_high 1 5.719317 5.968En version
tidyverse
:set.seed(4567) iris %>% slipper_ci(mean(Sepal.Length),B=100, lower=0.025, upper=0.975) ci_low ci_high 1 5.726867 5.990983Pour estimer l’intervalle de confiance à 95% de la variable “Sepal.Length” mais uniquement pour l’espèce Setosa :
iris %>% filter(Species=="setosa") %>% slipper_ci(mean(Sepal.Length),B=100, lower=0.025, upper=0.975) ci_low ci_high 1 4.89695 5.1062
Pour aller plus loin
Si vous souhaitez plus d’information sur le bootstrap, je vous recommande le livre “An introduction to the bootstrap” de Bradley Efrob et Robert Tibshirani.En conclusion
Certains pourraient dire qu’en cas d’asymétrie marquée, l’intervalle de confiance “bootstrap percentile” peut aussi être biaisé, et qu’en fait il faut utiliser l’intervalle “bias corrected and accelerated” ou `BCa` qui est renvoyé par la fonction `boot`, mais pas par `slipper_ci`.
Sur le principe c’est vrai, mais en pratique, si on utilise l’intervalle de confiance dans un contexte d’analyses descriptives, et que les analyses inférentielles ne vont pas uniquement reposer sur l’étude du chevauchement des intervalles, alors le l’approche “bootstrap percentile” par la fonction `slipper_ci` me semble un bon compromis car :
- la fonction est simple d’utilisation,
- cela ne nécessite qu’une seule ligne de commande pour obtenir l’intervalle de confiance
- la fonction est tidyverse compatible, elle peut donc être intégréedans une série de commandes avec le chaînon `%>%`
Et vous, que pensez vous de cette fonction ? Allez vous l’utilisez ?
Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏👉 Cliquez ici pour soutenir le blog Statistiques et Logiciel RCredit photo : Alexas_Fotos
Bonjour Claire,
merci pour ce tutoriel très claire et très intéressant à la fois. Je me posais la question à savoir comment serait la syntaxe avec un group_by et plusieurs paramètres en même temps. Merci d’avance, j’ai essayé plusieurs combinaisons sans succès.
Cordailement
Sidy