Se selecciona como la variable respuesta a DEFAULT, ya que es una variable binomial y por lo tanto encaja de buena manera con el modelo logistico a realizar.
modelo<-glm(DEFAULT~DIAS_MORA+ANTIUEDAD+EDAD+CUOTA_TOTAL+INGRESOS+CARTERA_TOTAL+COMPROMISO,family = binomial,data = creditos)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(modelo)$coef
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.972918e+00 1.208402e+00 -2.4602065 1.388571e-02
## DIAS_MORA 8.312772e-02 1.621451e-02 5.1267499 2.947867e-07
## ANTIUEDAD -3.252089e-02 2.667464e-02 -1.2191690 2.227801e-01
## EDAD 5.979060e-03 2.231608e-02 0.2679261 7.887562e-01
## CUOTA_TOTAL 8.177246e-07 6.322671e-07 1.2933215 1.958999e-01
## INGRESOS -1.393632e-07 1.598237e-07 -0.8719809 3.832188e-01
## CARTERA_TOTAL -2.990590e-09 8.096297e-09 -0.3693776 7.118463e-01
## COMPROMISO -7.325758e-03 3.215211e-02 -0.2278469 8.197653e-01
Observando el modelo generado, se puede decir que la unica variable que muestra significancia para el modelo es DIAS_MORA, por ende se procede a realizar un nuevo modelo logistico solamente con dciha variable.
modelo2<-glm(DEFAULT~DIAS_MORA,family = binomial,data = creditos)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(modelo2)$coef
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.35794155 0.20042263 -16.75430 5.267429e-63
## DIAS_MORA 0.09021677 0.01532219 5.88798 3.909447e-09
Con el modelo generado, nuevamente se observar la significancia de la variable explicativa DIAS_MORA para la variable respuesta DEFAULT.
Ahora se procede a realizar la observación de algunas observaciones de la variable exlicativa con respecto a la variable DEFAULT, donde se espera saber cuando la persona se encuentra en MORA y cuando NO.
ndatos <- data.frame(DIAS_MORA = c(6, 59))
probabilidades <- modelo2 %>% predict(ndatos, type = "response")
probabilidades
## 1 2
## 0.05643153 0.87705665
Con respecto a las observaciones extraidas de la base de datos(6 y 59), se obtienes que la observacion 6 presenta una probabilidad del 5% de estar en “NO MORA”, mientras que la observacion 59 presenta una probabilidad del 87% de “NO MORA”.
predicted.classes <- ifelse(probabilidades < 0.5, "MORA", "NO MORA")
predicted.classes
## 1 2
## "MORA" "NO MORA"
Finalmente se observa el resultado de las probabilidades, con lo cual se confirma el resultado de las mismas.
Se plantea un modelo con la variable DIAS_MORA; ya que es una variable de conteo discreta y por ende podria ser valida para emplear el modelo.
modelonew2<-glm(DIAS_MORA~.,
family =poisson(link = "log"),data = creditos)
summary(modelonew2)
##
## Call:
## glm(formula = DIAS_MORA ~ ., family = poisson(link = "log"),
## data = creditos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -11.498 -1.066 -0.766 -0.552 33.097
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.582e+00 2.103e-01 -17.038 < 2e-16 ***
## DEFAULT 3.845e+00 6.558e-02 58.634 < 2e-16 ***
## ANTIUEDAD -9.880e-03 3.407e-03 -2.900 0.00374 **
## EDAD 5.727e-02 3.536e-03 16.199 < 2e-16 ***
## CUOTA_TOTAL 2.492e-07 9.097e-08 2.739 0.00616 **
## INGRESOS -2.726e-07 2.768e-08 -9.848 < 2e-16 ***
## CARTERA_TOTAL -3.204e-10 8.974e-10 -0.357 0.72106
## COMPROMISO 3.100e-02 2.657e-03 11.667 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 22396 on 779 degrees of freedom
## Residual deviance: 5531 on 772 degrees of freedom
## AIC: 5685.4
##
## Number of Fisher Scoring iterations: 8
Observando los datos obtenidos del modelo, tenemos que las variables son significativas para el modelo menos la variable CARTERA_TOTAL; tambien se observa que el modelo obtiene AIC de 5685.4 lo cual se puede decir que si es un poco alto.
Ahora se procede a realizar una prueba de ajuste de bondad para la variable respuesta y asi observar si valida para generar el modelo.
X2 = sum(residuals(modelonew2,type='pearson')^2)
X2/modelonew2$df.residual
## [1] 62.8067
Observando el valor obtenido por la prueba de bondad de ajuste, se dice que el modelo no se ajusta a una distribución poisson.
Se hace realiza el mismo modelo de regresion de distribución poisson con la variable INGRESOS:
modelo3<-glm(INGRESOS~.,
family = poisson(link = "log"),data = creditos)
summary(modelo3)
##
## Call:
## glm(formula = INGRESOS ~ ., family = poisson(link = "log"), data = creditos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -4650.5 -390.5 -9.0 321.2 4644.0
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 1.525e+01 9.609e-05 158686 <2e-16 ***
## DEFAULT -1.449e-02 8.093e-05 -179 <2e-16 ***
## DIAS_MORA 9.976e-04 6.093e-07 1637 <2e-16 ***
## ANTIUEDAD 9.014e-03 2.060e-06 4377 <2e-16 ***
## EDAD 2.899e-03 1.985e-06 1461 <2e-16 ***
## CUOTA_TOTAL 4.382e-07 3.287e-11 13332 <2e-16 ***
## CARTERA_TOTAL 2.135e-09 6.531e-13 3269 <2e-16 ***
## COMPROMISO -3.481e-02 2.106e-06 -16524 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 941064377 on 779 degrees of freedom
## Residual deviance: 364679253 on 772 degrees of freedom
## AIC: 364692695
##
## Number of Fisher Scoring iterations: 5
Con el resultado del nuevo modelo, se observa que absolutamente todas la variables que se tienen, son significativas para el modelo; sin embargo el criterio de información Akaike es demasiado alto(364692695), por lo cual se puede decir que no es optimo y presenta una complejidad alta(el modelo no se ajusta bien a los datos).
Nuevamente se realiza la prueba de bondad de ajuste para la variable respuesta:
X3 = sum(residuals(modelo3,type='pearson')^2)
X3/modelo3$df.residual
## [1] 487418.1
Como era de esperarse se obtuvo como resultado que el modelo no se adapta a la distribución poisson.