Le bootstrap est une méthode de rééchantillonnage pour estimer la distribution d'échantillonnage de vos coefficients de régression et donc calculer les erreurs standard / intervalles de confiance de vos coefficients de régression. Ce message a une belle explication. Pour une discussion sur le nombre de réplications dont vous avez besoin, consultez cet article.
- Le bootstrap non paramétrique rééchantillonne de manière répétée et aléatoire vos observations avec remplacement (c'est-à-dire que certaines observations sont dessinées une seule fois, d'autres plusieurs fois et certaines jamais), puis calcule la régression logistique et stocke les coefficients. Ceci est répéténfois. Vous vous retrouverez donc avec 10 000 coefficients de régression différents. Ces 10'000 coefficients peuvent ensuite être utilisés pour calculer leurs intervalles de confiance. Comme un générateur de nombres pseudo-aléatoires est utilisé, vous pouvez simplement définir la valeur de départ à un nombre arbitraire pour vous assurer d'avoir exactement les mêmes résultats à chaque fois (voir l'exemple ci-dessous). Pour avoir des estimations vraiment stables, je suggérerais plus de 1000 répétitions, peut-être 10'000. Vous pouvez exécuter le bootstrap plusieurs fois et voir si les estimations changent beaucoup si vous effectuez 1000 ou 10'000 réplications. En clair: vous devez effectuer des réplications jusqu'à ce que vous atteigniez la convergence. Si vos estimations bootstrap varient entre vos estimations et le modèle unique observé, cela pourrait indiquer que le modèle observé ne reflète pas correctement la structure de votre échantillon.
boot
R
, par exemple, affiche le "biais" qui est la différence entre les coefficients de régression de votre modèle unique et la moyenne des échantillons de bootstrap.
- Lors de l'exécution du bootstrap, vous n'êtes pas intéressé par un seul échantillon de bootstrap, mais par la distribution des statistiques (par exemple les coefficients de régression) sur, disons, 10'000 échantillons de bootstrap.
- Je dirais que 10'000 est mieux que 1000. Avec les ordinateurs modernes, cela ne devrait pas poser de problème. Dans l'exemple ci-dessous, il a fallu environ 45 secondes à mon PC pour tirer 10 000 échantillons. Cela varie bien sûr avec la taille de votre échantillon. Plus la taille de l'échantillon est grande, plus le nombre d'itérations doit être élevé pour garantir que chaque observation est prise en compte.
- Que voulez-vous dire par "les résultats varient à chaque fois"? Rappelons qu'à chaque étape du bootstrap, les observations sont nouvellement dessinées avec remplacement. Par conséquent, vous risquez de vous retrouver avec des coefficients de régression légèrement différents car vos observations diffèrent. Mais comme je l'ai dit: vous n'êtes pas vraiment intéressé par le résultat d'un seul échantillon de bootstrap. Lorsque votre nombre de réplications est suffisamment élevé, le bootstrap doit générer des intervalles de confiance et des estimations ponctuelles très similaires à chaque fois.
Voici un exemple dans R
:
library(boot)
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
head(mydata)
mydata$rank <- factor(mydata$rank)
my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")
summary(my.mod)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.989979 1.139951 -3.500 0.000465 ***
gre 0.002264 0.001094 2.070 0.038465 *
gpa 0.804038 0.331819 2.423 0.015388 *
rank2 -0.675443 0.316490 -2.134 0.032829 *
rank3 -1.340204 0.345306 -3.881 0.000104 ***
rank4 -1.551464 0.417832 -3.713 0.000205 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# Set up the non-parametric bootstrap
logit.bootstrap <- function(data, indices) {
d <- data[indices, ]
fit <- glm(admit ~ gre + gpa + rank, data = d, family = "binomial")
return(coef(fit))
}
set.seed(12345) # seed for the RNG to ensure that you get exactly the same results as here
logit.boot <- boot(data=mydata, statistic=logit.bootstrap, R=10000) # 10'000 samples
logit.boot
Bootstrap Statistics :
original bias std. error
t1* -3.989979073 -7.217244e-02 1.165573039
t2* 0.002264426 4.054579e-05 0.001146039
t3* 0.804037549 1.440693e-02 0.354361032
t4* -0.675442928 -8.845389e-03 0.329099277
t5* -1.340203916 -1.977054e-02 0.359502576
t6* -1.551463677 -4.720579e-02 0.444998099
# Calculate confidence intervals (Bias corrected ="bca") for each coefficient
boot.ci(logit.boot, type="bca", index=1) # intercept
95% (-6.292, -1.738 )
boot.ci(logit.boot, type="bca", index=2) # gre
95% ( 0.0000, 0.0045 )
boot.ci(logit.boot, type="bca", index=3) # gpa
95% ( 0.1017, 1.4932 )
boot.ci(logit.boot, type="bca", index=4) # rank2
95% (-1.3170, -0.0369 )
boot.ci(logit.boot, type="bca", index=5) # rank3
95% (-2.040, -0.629 )
boot.ci(logit.boot, type="bca", index=6) # rank4
95% (-2.425, -0.698 )
Le bootstrap-ouput affiche les coefficients de régression d'origine ("original") et leur biais, qui est la différence entre les coefficients d'origine et ceux amorcés. Il donne également les erreurs standard. Notez qu'ils sont un peu plus grands que les erreurs standard d'origine.
A partir des intervalles de confiance, les biais corrigés ("bca") sont généralement préférés. Il donne les intervalles de confiance sur l'échelle d'origine. Pour les intervalles de confiance pour les rapports de cotes, il suffit d'exposer les limites de confiance.