Uso de regresion logistica

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.

Uso de modelo logistico con distribución poisson

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.