Notebook clase #11: Método de Bootstrap

Problema

Una regresión logística que modela las log-odds de ser liberado tras una detención por porte de pequeñas cantidades de marihuana indica que ni la raza, ni el género ni la edad tienen efectos significativos. Sin embargo, para asegurarnos, calculamos la diferencia en las probabilidades predichas de ser liberado entre un hombre blanco de 20 años y una mujer negra de 50 años, dos perfiles que, intuitivamente, podrían mostrar diferencias importantes en sus probabilidades predichas de liberación.

# Cargar las librerías necesarias
library(tidyverse)
library(carData)
library(modelr)

# Cargar el conjunto de datos
data_arrest <- carData::Arrests

# Ajustamos un modelo de regresión logística 
model <- glm(released ~ factor(colour)*factor(sex) + age, family = "binomial", data = data_arrest)
summary(model)

Call:
glm(formula = released ~ factor(colour) * factor(sex) + age, 
    family = "binomial", data = data_arrest)

Coefficients:
                                     Estimate Std. Error z value Pr(>|z|)    
(Intercept)                          1.771263   0.324456   5.459 4.78e-08 ***
factor(colour)White                  0.338268   0.342260   0.988   0.3230    
factor(sex)Male                     -0.477203   0.313439  -1.522   0.1279    
age                                 -0.010561   0.004293  -2.460   0.0139 *  
factor(colour)White:factor(sex)Male  0.412023   0.351676   1.172   0.2414    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 4776.3  on 5225  degrees of freedom
Residual deviance: 4680.8  on 5221  degrees of freedom
AIC: 4690.8

Number of Fisher Scoring iterations: 4

Dado que la distribución muestral de esta diferencia es compleja, utilizaremos el método de Bootstrap para hacer inferencia estadística y estimar un intervalo de confianza para la diferencia en las probabilidades predichas.

Código

# Inicializar el vector para almacenar resultados de Bootstrap
results <- NULL

# Iterar 1000 veces para realizar el Bootstrap
for (i in 1:1000) {
  
  # Cargar el conjunto de datos
  data_arrest <- carData::Arrests
  
  # Realizar una muestra aleatoria con reemplazo del mismo tamaño que el conjunto original
  data_bs <- sample_n(data_arrest, size= nrow(data_arrest), replace = T)
  
  # Ajustar un modelo de regresión logística con las variables deseadas
  model <- glm(released ~ factor(colour)*factor(sex) + age, family = "binomial", data = data_bs)
  
  # Crear nuevos puntos de datos para la predicción
  newx_mnv <- data_grid(colour="Black", sex="Female", age=50, data=data_arrest)
  pred_mnv <- predict(model, newdata = newx_mnv, type = "response" )
  
  newx_hbj <- data_grid(colour="White", sex="Male", age=20, data=data_arrest)
  pred_hbj <- predict(model, newdata = newx_hbj, type = "response" )
  
  # Calcular la diferencia entre las probabilidades predichas
  diff_p <- pred_hbj - pred_mnv
  
  # Imprimir la iteración actual para seguimiento
  cat("iter=",i,"\n")
  
  # Almacenar el resultado
  results[i] <- diff_p
}
iter= 1 
iter= 2 
iter= 3 
iter= 4 
iter= 5 
iter= 6 
iter= 7 
iter= 8 
iter= 9 
iter= 10 
iter= 11 
iter= 12 
iter= 13 
iter= 14 
iter= 15 
iter= 16 
iter= 17 
iter= 18 
iter= 19 
iter= 20 
iter= 21 
iter= 22 
iter= 23 
iter= 24 
iter= 25 
iter= 26 
iter= 27 
iter= 28 
iter= 29 
iter= 30 
iter= 31 
iter= 32 
iter= 33 
iter= 34 
iter= 35 
iter= 36 
iter= 37 
iter= 38 
iter= 39 
iter= 40 
iter= 41 
iter= 42 
iter= 43 
iter= 44 
iter= 45 
iter= 46 
iter= 47 
iter= 48 
iter= 49 
iter= 50 
iter= 51 
iter= 52 
iter= 53 
iter= 54 
iter= 55 
iter= 56 
iter= 57 
iter= 58 
iter= 59 
iter= 60 
iter= 61 
iter= 62 
iter= 63 
iter= 64 
iter= 65 
iter= 66 
iter= 67 
iter= 68 
iter= 69 
iter= 70 
iter= 71 
iter= 72 
iter= 73 
iter= 74 
iter= 75 
iter= 76 
iter= 77 
iter= 78 
iter= 79 
iter= 80 
iter= 81 
iter= 82 
iter= 83 
iter= 84 
iter= 85 
iter= 86 
iter= 87 
iter= 88 
iter= 89 
iter= 90 
iter= 91 
iter= 92 
iter= 93 
iter= 94 
iter= 95 
iter= 96 
iter= 97 
iter= 98 
iter= 99 
iter= 100 
iter= 101 
iter= 102 
iter= 103 
iter= 104 
iter= 105 
iter= 106 
iter= 107 
iter= 108 
iter= 109 
iter= 110 
iter= 111 
iter= 112 
iter= 113 
iter= 114 
iter= 115 
iter= 116 
iter= 117 
iter= 118 
iter= 119 
iter= 120 
iter= 121 
iter= 122 
iter= 123 
iter= 124 
iter= 125 
iter= 126 
iter= 127 
iter= 128 
iter= 129 
iter= 130 
iter= 131 
iter= 132 
iter= 133 
iter= 134 
iter= 135 
iter= 136 
iter= 137 
iter= 138 
iter= 139 
iter= 140 
iter= 141 
iter= 142 
iter= 143 
iter= 144 
iter= 145 
iter= 146 
iter= 147 
iter= 148 
iter= 149 
iter= 150 
iter= 151 
iter= 152 
iter= 153 
iter= 154 
iter= 155 
iter= 156 
iter= 157 
iter= 158 
iter= 159 
iter= 160 
iter= 161 
iter= 162 
iter= 163 
iter= 164 
iter= 165 
iter= 166 
iter= 167 
iter= 168 
iter= 169 
iter= 170 
iter= 171 
iter= 172 
iter= 173 
iter= 174 
iter= 175 
iter= 176 
iter= 177 
iter= 178 
iter= 179 
iter= 180 
iter= 181 
iter= 182 
iter= 183 
iter= 184 
iter= 185 
iter= 186 
iter= 187 
iter= 188 
iter= 189 
iter= 190 
iter= 191 
iter= 192 
iter= 193 
iter= 194 
iter= 195 
iter= 196 
iter= 197 
iter= 198 
iter= 199 
iter= 200 
iter= 201 
iter= 202 
iter= 203 
iter= 204 
iter= 205 
iter= 206 
iter= 207 
iter= 208 
iter= 209 
iter= 210 
iter= 211 
iter= 212 
iter= 213 
iter= 214 
iter= 215 
iter= 216 
iter= 217 
iter= 218 
iter= 219 
iter= 220 
iter= 221 
iter= 222 
iter= 223 
iter= 224 
iter= 225 
iter= 226 
iter= 227 
iter= 228 
iter= 229 
iter= 230 
iter= 231 
iter= 232 
iter= 233 
iter= 234 
iter= 235 
iter= 236 
iter= 237 
iter= 238 
iter= 239 
iter= 240 
iter= 241 
iter= 242 
iter= 243 
iter= 244 
iter= 245 
iter= 246 
iter= 247 
iter= 248 
iter= 249 
iter= 250 
iter= 251 
iter= 252 
iter= 253 
iter= 254 
iter= 255 
iter= 256 
iter= 257 
iter= 258 
iter= 259 
iter= 260 
iter= 261 
iter= 262 
iter= 263 
iter= 264 
iter= 265 
iter= 266 
iter= 267 
iter= 268 
iter= 269 
iter= 270 
iter= 271 
iter= 272 
iter= 273 
iter= 274 
iter= 275 
iter= 276 
iter= 277 
iter= 278 
iter= 279 
iter= 280 
iter= 281 
iter= 282 
iter= 283 
iter= 284 
iter= 285 
iter= 286 
iter= 287 
iter= 288 
iter= 289 
iter= 290 
iter= 291 
iter= 292 
iter= 293 
iter= 294 
iter= 295 
iter= 296 
iter= 297 
iter= 298 
iter= 299 
iter= 300 
iter= 301 
iter= 302 
iter= 303 
iter= 304 
iter= 305 
iter= 306 
iter= 307 
iter= 308 
iter= 309 
iter= 310 
iter= 311 
iter= 312 
iter= 313 
iter= 314 
iter= 315 
iter= 316 
iter= 317 
iter= 318 
iter= 319 
iter= 320 
iter= 321 
iter= 322 
iter= 323 
iter= 324 
iter= 325 
iter= 326 
iter= 327 
iter= 328 
iter= 329 
iter= 330 
iter= 331 
iter= 332 
iter= 333 
iter= 334 
iter= 335 
iter= 336 
iter= 337 
iter= 338 
iter= 339 
iter= 340 
iter= 341 
iter= 342 
iter= 343 
iter= 344 
iter= 345 
iter= 346 
iter= 347 
iter= 348 
iter= 349 
iter= 350 
iter= 351 
iter= 352 
iter= 353 
iter= 354 
iter= 355 
iter= 356 
iter= 357 
iter= 358 
iter= 359 
iter= 360 
iter= 361 
iter= 362 
iter= 363 
iter= 364 
iter= 365 
iter= 366 
iter= 367 
iter= 368 
iter= 369 
iter= 370 
iter= 371 
iter= 372 
iter= 373 
iter= 374 
iter= 375 
iter= 376 
iter= 377 
iter= 378 
iter= 379 
iter= 380 
iter= 381 
iter= 382 
iter= 383 
iter= 384 
iter= 385 
iter= 386 
iter= 387 
iter= 388 
iter= 389 
iter= 390 
iter= 391 
iter= 392 
iter= 393 
iter= 394 
iter= 395 
iter= 396 
iter= 397 
iter= 398 
iter= 399 
iter= 400 
iter= 401 
iter= 402 
iter= 403 
iter= 404 
iter= 405 
iter= 406 
iter= 407 
iter= 408 
iter= 409 
iter= 410 
iter= 411 
iter= 412 
iter= 413 
iter= 414 
iter= 415 
iter= 416 
iter= 417 
iter= 418 
iter= 419 
iter= 420 
iter= 421 
iter= 422 
iter= 423 
iter= 424 
iter= 425 
iter= 426 
iter= 427 
iter= 428 
iter= 429 
iter= 430 
iter= 431 
iter= 432 
iter= 433 
iter= 434 
iter= 435 
iter= 436 
iter= 437 
iter= 438 
iter= 439 
iter= 440 
iter= 441 
iter= 442 
iter= 443 
iter= 444 
iter= 445 
iter= 446 
iter= 447 
iter= 448 
iter= 449 
iter= 450 
iter= 451 
iter= 452 
iter= 453 
iter= 454 
iter= 455 
iter= 456 
iter= 457 
iter= 458 
iter= 459 
iter= 460 
iter= 461 
iter= 462 
iter= 463 
iter= 464 
iter= 465 
iter= 466 
iter= 467 
iter= 468 
iter= 469 
iter= 470 
iter= 471 
iter= 472 
iter= 473 
iter= 474 
iter= 475 
iter= 476 
iter= 477 
iter= 478 
iter= 479 
iter= 480 
iter= 481 
iter= 482 
iter= 483 
iter= 484 
iter= 485 
iter= 486 
iter= 487 
iter= 488 
iter= 489 
iter= 490 
iter= 491 
iter= 492 
iter= 493 
iter= 494 
iter= 495 
iter= 496 
iter= 497 
iter= 498 
iter= 499 
iter= 500 
iter= 501 
iter= 502 
iter= 503 
iter= 504 
iter= 505 
iter= 506 
iter= 507 
iter= 508 
iter= 509 
iter= 510 
iter= 511 
iter= 512 
iter= 513 
iter= 514 
iter= 515 
iter= 516 
iter= 517 
iter= 518 
iter= 519 
iter= 520 
iter= 521 
iter= 522 
iter= 523 
iter= 524 
iter= 525 
iter= 526 
iter= 527 
iter= 528 
iter= 529 
iter= 530 
iter= 531 
iter= 532 
iter= 533 
iter= 534 
iter= 535 
iter= 536 
iter= 537 
iter= 538 
iter= 539 
iter= 540 
iter= 541 
iter= 542 
iter= 543 
iter= 544 
iter= 545 
iter= 546 
iter= 547 
iter= 548 
iter= 549 
iter= 550 
iter= 551 
iter= 552 
iter= 553 
iter= 554 
iter= 555 
iter= 556 
iter= 557 
iter= 558 
iter= 559 
iter= 560 
iter= 561 
iter= 562 
iter= 563 
iter= 564 
iter= 565 
iter= 566 
iter= 567 
iter= 568 
iter= 569 
iter= 570 
iter= 571 
iter= 572 
iter= 573 
iter= 574 
iter= 575 
iter= 576 
iter= 577 
iter= 578 
iter= 579 
iter= 580 
iter= 581 
iter= 582 
iter= 583 
iter= 584 
iter= 585 
iter= 586 
iter= 587 
iter= 588 
iter= 589 
iter= 590 
iter= 591 
iter= 592 
iter= 593 
iter= 594 
iter= 595 
iter= 596 
iter= 597 
iter= 598 
iter= 599 
iter= 600 
iter= 601 
iter= 602 
iter= 603 
iter= 604 
iter= 605 
iter= 606 
iter= 607 
iter= 608 
iter= 609 
iter= 610 
iter= 611 
iter= 612 
iter= 613 
iter= 614 
iter= 615 
iter= 616 
iter= 617 
iter= 618 
iter= 619 
iter= 620 
iter= 621 
iter= 622 
iter= 623 
iter= 624 
iter= 625 
iter= 626 
iter= 627 
iter= 628 
iter= 629 
iter= 630 
iter= 631 
iter= 632 
iter= 633 
iter= 634 
iter= 635 
iter= 636 
iter= 637 
iter= 638 
iter= 639 
iter= 640 
iter= 641 
iter= 642 
iter= 643 
iter= 644 
iter= 645 
iter= 646 
iter= 647 
iter= 648 
iter= 649 
iter= 650 
iter= 651 
iter= 652 
iter= 653 
iter= 654 
iter= 655 
iter= 656 
iter= 657 
iter= 658 
iter= 659 
iter= 660 
iter= 661 
iter= 662 
iter= 663 
iter= 664 
iter= 665 
iter= 666 
iter= 667 
iter= 668 
iter= 669 
iter= 670 
iter= 671 
iter= 672 
iter= 673 
iter= 674 
iter= 675 
iter= 676 
iter= 677 
iter= 678 
iter= 679 
iter= 680 
iter= 681 
iter= 682 
iter= 683 
iter= 684 
iter= 685 
iter= 686 
iter= 687 
iter= 688 
iter= 689 
iter= 690 
iter= 691 
iter= 692 
iter= 693 
iter= 694 
iter= 695 
iter= 696 
iter= 697 
iter= 698 
iter= 699 
iter= 700 
iter= 701 
iter= 702 
iter= 703 
iter= 704 
iter= 705 
iter= 706 
iter= 707 
iter= 708 
iter= 709 
iter= 710 
iter= 711 
iter= 712 
iter= 713 
iter= 714 
iter= 715 
iter= 716 
iter= 717 
iter= 718 
iter= 719 
iter= 720 
iter= 721 
iter= 722 
iter= 723 
iter= 724 
iter= 725 
iter= 726 
iter= 727 
iter= 728 
iter= 729 
iter= 730 
iter= 731 
iter= 732 
iter= 733 
iter= 734 
iter= 735 
iter= 736 
iter= 737 
iter= 738 
iter= 739 
iter= 740 
iter= 741 
iter= 742 
iter= 743 
iter= 744 
iter= 745 
iter= 746 
iter= 747 
iter= 748 
iter= 749 
iter= 750 
iter= 751 
iter= 752 
iter= 753 
iter= 754 
iter= 755 
iter= 756 
iter= 757 
iter= 758 
iter= 759 
iter= 760 
iter= 761 
iter= 762 
iter= 763 
iter= 764 
iter= 765 
iter= 766 
iter= 767 
iter= 768 
iter= 769 
iter= 770 
iter= 771 
iter= 772 
iter= 773 
iter= 774 
iter= 775 
iter= 776 
iter= 777 
iter= 778 
iter= 779 
iter= 780 
iter= 781 
iter= 782 
iter= 783 
iter= 784 
iter= 785 
iter= 786 
iter= 787 
iter= 788 
iter= 789 
iter= 790 
iter= 791 
iter= 792 
iter= 793 
iter= 794 
iter= 795 
iter= 796 
iter= 797 
iter= 798 
iter= 799 
iter= 800 
iter= 801 
iter= 802 
iter= 803 
iter= 804 
iter= 805 
iter= 806 
iter= 807 
iter= 808 
iter= 809 
iter= 810 
iter= 811 
iter= 812 
iter= 813 
iter= 814 
iter= 815 
iter= 816 
iter= 817 
iter= 818 
iter= 819 
iter= 820 
iter= 821 
iter= 822 
iter= 823 
iter= 824 
iter= 825 
iter= 826 
iter= 827 
iter= 828 
iter= 829 
iter= 830 
iter= 831 
iter= 832 
iter= 833 
iter= 834 
iter= 835 
iter= 836 
iter= 837 
iter= 838 
iter= 839 
iter= 840 
iter= 841 
iter= 842 
iter= 843 
iter= 844 
iter= 845 
iter= 846 
iter= 847 
iter= 848 
iter= 849 
iter= 850 
iter= 851 
iter= 852 
iter= 853 
iter= 854 
iter= 855 
iter= 856 
iter= 857 
iter= 858 
iter= 859 
iter= 860 
iter= 861 
iter= 862 
iter= 863 
iter= 864 
iter= 865 
iter= 866 
iter= 867 
iter= 868 
iter= 869 
iter= 870 
iter= 871 
iter= 872 
iter= 873 
iter= 874 
iter= 875 
iter= 876 
iter= 877 
iter= 878 
iter= 879 
iter= 880 
iter= 881 
iter= 882 
iter= 883 
iter= 884 
iter= 885 
iter= 886 
iter= 887 
iter= 888 
iter= 889 
iter= 890 
iter= 891 
iter= 892 
iter= 893 
iter= 894 
iter= 895 
iter= 896 
iter= 897 
iter= 898 
iter= 899 
iter= 900 
iter= 901 
iter= 902 
iter= 903 
iter= 904 
iter= 905 
iter= 906 
iter= 907 
iter= 908 
iter= 909 
iter= 910 
iter= 911 
iter= 912 
iter= 913 
iter= 914 
iter= 915 
iter= 916 
iter= 917 
iter= 918 
iter= 919 
iter= 920 
iter= 921 
iter= 922 
iter= 923 
iter= 924 
iter= 925 
iter= 926 
iter= 927 
iter= 928 
iter= 929 
iter= 930 
iter= 931 
iter= 932 
iter= 933 
iter= 934 
iter= 935 
iter= 936 
iter= 937 
iter= 938 
iter= 939 
iter= 940 
iter= 941 
iter= 942 
iter= 943 
iter= 944 
iter= 945 
iter= 946 
iter= 947 
iter= 948 
iter= 949 
iter= 950 
iter= 951 
iter= 952 
iter= 953 
iter= 954 
iter= 955 
iter= 956 
iter= 957 
iter= 958 
iter= 959 
iter= 960 
iter= 961 
iter= 962 
iter= 963 
iter= 964 
iter= 965 
iter= 966 
iter= 967 
iter= 968 
iter= 969 
iter= 970 
iter= 971 
iter= 972 
iter= 973 
iter= 974 
iter= 975 
iter= 976 
iter= 977 
iter= 978 
iter= 979 
iter= 980 
iter= 981 
iter= 982 
iter= 983 
iter= 984 
iter= 985 
iter= 986 
iter= 987 
iter= 988 
iter= 989 
iter= 990 
iter= 991 
iter= 992 
iter= 993 
iter= 994 
iter= 995 
iter= 996 
iter= 997 
iter= 998 
iter= 999 
iter= 1000 
# Visualizar la distribución de las diferencias en probabilidad
hist(results, main="Distribución de la diferencia en probabilidades predichas", xlab="Diferencia en probabilidades")

# Calcular el intervalo de confianza al 95% para la diferencia en probabilidades
quantile(results, p=c(0.025, 0.975))
       2.5%       97.5% 
-0.02481977  0.20492533 

El resultados indica que, al 95% de confianza, no existe una diferencia significativa entre la probabilidad de ser liberada entre una mujer negra de 50 años y un hombre blanco de 20 años.