Quel modèle de régression bootstrap dois-je choisir?

10

J'ai un modèle de régression logistique binaire avec une DV (maladie: oui / non) et 5 prédicteurs (démographie [âge, sexe, tabagisme (oui / non)], un index médical (ordinale) et un traitement aléatoire [oui / non ]). J'ai également modélisé tous les termes d'interaction bilatérale. Les principales variables sont centrées et il n'y a aucun signe de multicolinéarité (tous les VIF <2,5).

J'ai quelques questions:

  1. Le bootstrapping est-il avantageux par rapport à mon modèle unique? si c'est le cas,

  2. quel modèle bootstrap dois-je choisir? Je voulais juste voir si les algorithmes d'amorçage suivent des méthodes aléatoires pour créer de nouveaux échantillons, ou s'ils ont des algorithmes rigides. Par conséquent, j'ai rééchantillonné 1000 fois à chaque tentative (j'ai donc plusieurs modèles bootstrapés, chacun avec 1000 essais). Cependant, à chaque fois, les coefficients du modèle bootstrap diffèrent (bien que le nombre d'essais soit constamment de 1000). Je me demande donc lequel choisir pour mon rapport? Certains changements sont minuscules et n'affectent pas la signification de mes coefficients, mais certains rendent certains de mes coefficients non significatifs (seulement ceux avec des valeurs de P proches de 0,05 dans le modèle original qui changent à 0,06 par exemple).

  3. Dois-je choisir un nombre plus élevé comme 10 000? Comment puis-je déterminer cette limite?

  4. Encore une fois, devrais-je bootstrap en premier lieu? Si ses résultats varient à chaque fois, puis-je me fier à ses résultats?

  5. Avez-vous d'autres idées en tête qui pourraient m'aider avec mon cas?

Merci beaucoup.

Vic
la source

Réponses:

21

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.

  1. 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.bootR, 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.
  2. 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.
  3. 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.
  4. 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.

COOLSerdash
la source
MERCI pour la réponse parfaite! :) Permettez-moi de répondre de cette façon: 1. J'étais un peu familier avec sa notion (qu'il essaie de calculer la moyenne de 1000 coefficients différents dans 1000 modèles différents (rééchantillonnés)). Merci d'avoir clarifié cette chose "biais" et que de telles variations se produisent et nous devrions augmenter le nombre de tentatives. :) 2.Par "modèle bootstrapé", je ne voulais pas dire un seul modèle rééchantillonné. Cependant, je voulais dire la moyenne de ces 1000 itérations. En fait, j'ai démarré mon modèle 10 fois, chacun pour 1000 itérations. J'ai donc 10 modèles bootstrap à portée de main.
Vic
Chacun d'eux montre un résultat "différent". Mais j'essaierais trois ou quatre modèles bootstrapés avec 10 000 rééchantillonnages pour voir si le nombre d'itérations est à 10 000, les différents modèles bootstrapés (chacun avec 10000) sont similaires ou devrais-je augmenter encore 100000?
Vic
@Vic Merci pour votre commentaire. Je ne ferais pas 10 bootstraps chacun avec 1000 itérations, mais un seul avec, disons 10'000 ou même plus d'itérations (50'000?). Cela devrait vous donner des estimations stables et des intervalles de confiance.
COOLSerdash
3. Bien sûr, ce n'est pas un problème. Je voulais juste savoir sur quelle base choisir ce numéro? Je pense que la base peut être que si j'exécute deux bootstrappings de 1000 essais chacun et que je vois qu'ils diffèrent, cela signifie que j'ai besoin de plus d'essais de rééchantillonnage (par exemple 5000 ou 10000) à la place.
Vic
4. "Que voulez-vous dire par" les résultats varient à chaque fois "? Lorsque votre nombre de réplications est suffisamment élevé, le bootstrap devrait produire des intervalles de confiance et des estimations ponctuelles très similaires à chaque fois."
Vic