Usa un modelo de regresión logística para predecir la probabilidad de caer en impago (default) al controlar por ingresos (income) y el saldo (balance) en el conjunto de datos Default. En particular, calcula las estimaciones para los errores estándar de los coeficientes de regresión logística de ingresos y saldo de dos maneras diferentes: 1. Usando el bootstrap. 2. Usando la fórmula estándar para calcular los errores estándar en función glm().
No olvide establecer una semilla aleatoria antes de comenzar su análisis. Utilice una semilla de 1.
El modelo a estimar es:
\[ default = income + balance \]
Carga la base de datos:
set.seed(1)
library(ISLR)
Default <- Default
Muestra los primeros registros de la base de datos para ver que información contiene:
head(Default)
modelo <- glm(default ~ income + balance, data = Default, family = binomial)
summary(modelo)
##
## Call:
## glm(formula = default ~ income + balance, family = binomial,
## data = Default)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.154e+01 4.348e-01 -26.545 < 2e-16 ***
## income 2.081e-05 4.985e-06 4.174 2.99e-05 ***
## balance 5.647e-03 2.274e-04 24.836 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 2920.6 on 9999 degrees of freedom
## Residual deviance: 1579.0 on 9997 degrees of freedom
## AIC: 1585
##
## Number of Fisher Scoring iterations: 8
coef(modelo)
## (Intercept) income balance
## -1.154047e+01 2.080898e-05 5.647103e-03
Indices <- 1:10000
miFuncionBootLogistica <- function(Default, Indices) {
fit <- glm(default ~ income + balance, data = Default[Indices, ], family = binomial)
mis_coeficientes <- coef(fit)
return(mis_coeficientes)
}
miFuncionBootLogistica(Default, 1:10000)
## (Intercept) income balance
## -1.154047e+01 2.080898e-05 5.647103e-03
set.seed(1)
miFuncionBootLogistica(Default, sample(10000, 10000, replace = TRUE))
## (Intercept) income balance
## -1.209470e+01 2.815290e-05 5.837117e-03
miFuncionBootLogistica(Default, sample(10000, 10000, replace = TRUE))
## (Intercept) income balance
## -1.157101e+01 2.185983e-05 5.710998e-03
miFuncionBootLogistica(Default, sample(10000, 10000, replace = TRUE))
## (Intercept) income balance
## -1.152585e+01 2.185948e-05 5.620777e-03
library(boot)
modelo_boot <- boot(Default, miFuncionBootLogistica, 100)
modelo_boot
##
## ORDINARY NONPARAMETRIC BOOTSTRAP
##
##
## Call:
## boot(data = Default, statistic = miFuncionBootLogistica, R = 100)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* -1.154047e+01 7.190460e-03 4.350976e-01
## t2* 2.080898e-05 -4.630112e-07 4.060335e-06
## t3* 5.647103e-03 -2.220392e-06 2.317325e-04
*Los errores estándar de glm() dependen de supuestos clásicos como homocedasticidad y normalidad, por lo que son adecuados solo si estos se cumplen. En cambio, Bootstrap no depende de estos supuestos, ya que utiliza remuestreo para estimar la variabilidad, lo que lo hace más robusto ante violaciones como heterocedasticidad o no normalidad, especialmente en muestras pequeñas.
Al comparar ambos métodos en la actividad, se puede notar que los errores estándar obtenidos por Bootstrap tienden a ser ligeramente mayores que los de glm(). Esto puede interpretarse como una mayor precaución por parte del método Bootstrap al estimar la incertidumbre, reflejando potencialmente una mayor variabilidad real de los estimadores que no es capturada por los supuestos ideales de glm().
Con esto, la conclusion seria, si bien glm() es útil bajo condiciones ideales, el Bootstrap ofrece una alternativa más flexible y confiable cuando los supuestos clásicos no están garantizados. Es recomendable comparar ambos métodos para evaluar la robustez de los resultados. ```