22.4 Selección de variables explicativas
El objetivo sería conseguir un buen ajuste con el menor número de variables explicativas posible.
Para actualizar un modelo (p.e. eliminando o añadiendo variables) se puede emplear la función update
:
<- glm(nsatisfa ~ . , family = binomial, data = datos)
modelo.completo summary(modelo.completo)
##
## Call:
## glm(formula = nsatisfa ~ ., family = binomial, data = datos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.01370 -0.31260 -0.02826 0.35423 1.74741
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -32.6317 7.7121 -4.231 2.32e-05 ***
## velocida 3.9980 2.3362 1.711 0.087019 .
## precio 3.6042 2.3184 1.555 0.120044
## flexprec 1.5769 0.4433 3.557 0.000375 ***
## imgfabri 2.1669 0.6857 3.160 0.001576 **
## servconj -4.2655 4.3526 -0.980 0.327096
## imgfvent -1.1496 0.8937 -1.286 0.198318
## calidadp 0.1506 0.2495 0.604 0.546147
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 136.424 on 98 degrees of freedom
## Residual deviance: 60.807 on 91 degrees of freedom
## AIC: 76.807
##
## Number of Fisher Scoring iterations: 7
<- update(modelo.completo, . ~ . - calidadp)
modelo.reducido summary(modelo.reducido)
##
## Call:
## glm(formula = nsatisfa ~ velocida + precio + flexprec + imgfabri +
## servconj + imgfvent, family = binomial, data = datos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.0920 -0.3518 -0.0280 0.3876 1.7885
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -31.6022 7.3962 -4.273 1.93e-05 ***
## velocida 4.1831 2.2077 1.895 0.058121 .
## precio 3.8872 2.1685 1.793 0.073044 .
## flexprec 1.5452 0.4361 3.543 0.000396 ***
## imgfabri 2.1984 0.6746 3.259 0.001119 **
## servconj -4.6985 4.0597 -1.157 0.247125
## imgfvent -1.1387 0.8784 -1.296 0.194849
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 136.424 on 98 degrees of freedom
## Residual deviance: 61.171 on 92 degrees of freedom
## AIC: 75.171
##
## Number of Fisher Scoring iterations: 7
Para obtener el modelo “óptimo” lo ideal sería evaluar todos los modelos posibles.
En este caso no se puede emplear la función regsubsets
del paquete leaps
(sólo para modelos lineales),
pero por ejemplo el paquete
bestglm
proporciona una herramienta equivalente (bestglm()
).
22.4.1 Selección por pasos
La función stepwise
del paquete RcmdrMisc
(interfaz de stepAIC
del paquete MASS
)
permite seleccionar el modelo por pasos según criterio AIC o BIC:
library(MASS)
library(RcmdrMisc)
<- stepwise(modelo.completo, direction='backward/forward', criterion='BIC') modelo
##
## Direction: backward/forward
## Criterion: BIC
##
## Start: AIC=97.57
## nsatisfa ~ velocida + precio + flexprec + imgfabri + servconj +
## imgfvent + calidadp
##
## Df Deviance AIC
## - calidadp 1 61.171 93.337
## - servconj 1 61.565 93.730
## - imgfvent 1 62.668 94.834
## - precio 1 62.712 94.878
## - velocida 1 63.105 95.271
## <none> 60.807 97.568
## - imgfabri 1 76.251 108.416
## - flexprec 1 82.443 114.609
##
## Step: AIC=93.34
## nsatisfa ~ velocida + precio + flexprec + imgfabri + servconj +
## imgfvent
##
## Df Deviance AIC
## - servconj 1 62.205 89.776
## - imgfvent 1 63.055 90.625
## - precio 1 63.698 91.269
## - velocida 1 63.983 91.554
## <none> 61.171 93.337
## + calidadp 1 60.807 97.568
## - imgfabri 1 77.823 105.394
## - flexprec 1 82.461 110.032
##
## Step: AIC=89.78
## nsatisfa ~ velocida + precio + flexprec + imgfabri + imgfvent
##
## Df Deviance AIC
## - imgfvent 1 64.646 87.622
## <none> 62.205 89.776
## + servconj 1 61.171 93.337
## + calidadp 1 61.565 93.730
## - imgfabri 1 78.425 101.401
## - precio 1 79.699 102.675
## - flexprec 1 82.978 105.954
## - velocida 1 88.731 111.706
##
## Step: AIC=87.62
## nsatisfa ~ velocida + precio + flexprec + imgfabri
##
## Df Deviance AIC
## <none> 64.646 87.622
## + imgfvent 1 62.205 89.776
## + servconj 1 63.055 90.625
## + calidadp 1 63.890 91.460
## - precio 1 80.474 98.854
## - flexprec 1 83.663 102.044
## - imgfabri 1 85.208 103.588
## - velocida 1 89.641 108.021
summary(modelo)
##
## Call:
## glm(formula = nsatisfa ~ velocida + precio + flexprec + imgfabri,
## family = binomial, data = datos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.99422 -0.36209 -0.03932 0.44249 1.80432
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -28.0825 6.4767 -4.336 1.45e-05 ***
## velocida 1.6268 0.4268 3.812 0.000138 ***
## precio 1.3749 0.4231 3.250 0.001155 **
## flexprec 1.3364 0.3785 3.530 0.000415 ***
## imgfabri 1.5168 0.4252 3.567 0.000361 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 136.424 on 98 degrees of freedom
## Residual deviance: 64.646 on 94 degrees of freedom
## AIC: 74.646
##
## Number of Fisher Scoring iterations: 6