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 la 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:
library(ISLR)
## Warning: package 'ISLR' was built under R version 4.3.3
Default <- Default
Muestra los primeros registros de la base de datos para ver que información contiene:
head(Default)
glm_fit = glm(default~balance+income,
data = Default,
family = binomial)
summary(glm_fit)
##
## Call:
## glm(formula = default ~ balance + income, family = binomial,
## data = Default)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.154e+01 4.348e-01 -26.545 < 2e-16 ***
## balance 5.647e-03 2.274e-04 24.836 < 2e-16 ***
## income 2.081e-05 4.985e-06 4.174 2.99e-05 ***
## ---
## 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(glm_fit)
## (Intercept) balance income
## -1.154047e+01 5.647103e-03 2.080898e-05
Indices <- 1:10000
miFuncionBootLogistica <- function(Default, Indices){
glm_fitt <- glm(default~balance+income,
data = Default,
subset = Indices,
family = binomial)
mis_coeficientes <- coef(glm_fitt)
return(mis_coeficientes)
}
miFuncionBootLogistica(Default, 1:10000)
## (Intercept) balance income
## -1.154047e+01 5.647103e-03 2.080898e-05
library(boot)
## Warning: package 'boot' was built under R version 4.3.3
set.seed(1)
miFuncionBootLogistica(Default, sample(10000, 10000, replace = TRUE))
## (Intercept) balance income
## -1.209470e+01 5.837117e-03 2.815290e-05
miFuncionBootLogistica(Default, sample(10000, 10000, replace = TRUE))
## (Intercept) balance income
## -1.157101e+01 5.710998e-03 2.185983e-05
miFuncionBootLogistica(Default, sample(10000, 10000, replace = TRUE))
## (Intercept) balance income
## -1.152585e+01 5.620777e-03 2.185948e-05
glm_boot <- boot(Default, miFuncionBootLogistica, 100)
glm_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* 5.647103e-03 -2.220392e-06 2.317325e-04
## t3* 2.080898e-05 -4.630112e-07 4.060335e-06
(2.274e-04/4.350976e-01)
## [1] 0.0005226414
(4.985e-06/2.317325e-04)
## [1] 0.02151187
(4.985e-06/4.060335e-06)
## [1] 1.227731
*(Al utilizar la función glm hacemos que los valores tengan la capacidad de una regresión, puesto que la variable dependiente es una categoría en una regresión normal, esto no podría de ser de ayuda. En que el primer modelo original nos indica que entre mayor unidades se dé en balance, aumenta un 0.005 y teniendo también una aumento en ingreso (que en sí aumenta poco), se puede observar que estas dos variables mueven default tiene una correlación. Algo importante a destacar es que los valores del interceptor y balance son significativos.
A partir del bootstrap se busca el mejor modelo para los datos, es por ello que permite estimar con un parámetro de 100 réplicas de la función, y utilizando el BIAS, que en este salió bajo, minimizando la perdida de información. A su vez, el error estándar de los coeficientes obtenidos índico una significancia puesto salieron bajos)*