Dpto. de Nutrición.
El caso del Departamento de Nutrición: un análisis de la varianza de dos factores.
El Departamento de nutrición de la Ciudad desea analizar los efectos del tipo de harina y del porcentaje de endulzamiento sobre los atributos físicos de un determinado tipo de torta, a la venta actualmente.
Para ello, se diseñó un experimento utilizando dos tipos de harina (multipropósito y harina para tortas), y distintos porcentajes de endulzamiento, en cuatro niveles diferentes. Los siguientes datos corresponden a la información de la densidad específica de muestras de tortas preparadas con las distintas combinaciones posibles.
Se prepararon 3 tortas con cada una de las combinaciones posibles. Se muestran las primeras seis filas de la tabla.
| Tipo_torta | Concentracion_azucar | Tipo_harina | Densidad |
|---|---|---|---|
| Torta_A | 0 | Harina_tortas | 0.91 |
| Torta_A | 0 | Multiproposito | 0.90 |
| Torta_A | 100 | Harina_tortas | 0.86 |
| Torta_A | 100 | Multiproposito | 0.79 |
| Torta_A | 50 | Harina_tortas | 0.88 |
| Torta_A | 50 | Multiproposito | 0.86 |
Análisis exploratorio
A fin de indagar el efecto de las variables en cuestión, se procede en primera instancia a realizar un análisis descriptivo de los datos. En la siguiente tabla es posible observar las medias y los desvíos estándar de los grupos.
kable(Nutricion_DF %>%
group_by(Tipo_harina, Concentracion_azucar) %>%
get_summary_stats(Densidad, type = "mean_sd") %>%
arrange (Concentracion_azucar)) %>%
kable_styling(bootstrap_options = "basic",
full_width = T,
position = "left")
| Concentracion_azucar | Tipo_harina | variable | n | mean | sd |
|---|---|---|---|---|---|
| 0 | Harina_tortas | Densidad | 3 | 0.870 | 0.061 |
| 0 | Multiproposito | Densidad | 3 | 0.890 | 0.017 |
| 100 | Harina_tortas | Densidad | 3 | 0.853 | 0.006 |
| 100 | Multiproposito | Densidad | 3 | 0.803 | 0.015 |
| 50 | Harina_tortas | Densidad | 3 | 0.843 | 0.032 |
| 50 | Multiproposito | Densidad | 3 | 0.887 | 0.025 |
| 75 | Harina_tortas | Densidad | 3 | 0.837 | 0.032 |
| 75 | Multiproposito | Densidad | 3 | 0.893 | 0.032 |
A partir del análisis exploratorio, se observa que el rango de dispersión de las medias en el grupo de tortas realizadas con harina multipropósito (0.09), es mayor que aquel existente entre las que fueron realizadas con harina para tortas (0.033).Es decir, las tortas realizadas con harina específicamente destinada para ello poseen una densidad que no varía sustancialmente, a pesar del grado de endulzamiento que se utilice (notándose en la igualdad del SD para una concentración del 50% y el 75%).
En lo que respecto a la concentración de azucar, se observan mayores diferencias entre las medias a medida que se incrementa el grado de endulzamiento (particularmente, al utilizar un 75% y 100% de azúcar). Sin embargo, la dispersión al interior de estos últimos dos grupos es menor, respecto a la observada en los grupos del 50% y 0% de endulzamiento. Puntualmente, se destaca la mayor dispersión de la serie al utilizar 0% de azúcar y harina para tortas.
A continuación, se presentan los gráficos de diagrama de caja para observar el comportamiento de cada factor y de la interacción entre ambos.
ggplot(data = Nutricion_DF, aes(x = Tipo_harina, y = Densidad)) +
geom_jitter(aes(color = Tipo_harina), size = 1, alpha = 0.7) +
geom_boxplot(aes(color = Tipo_harina), alpha = 0.7) +
xlab('Harina') +
ylab('Densidad') +
ggtitle('Densidad de pasteles, según tipo de harina.') +
labs(caption = "Fuente: Elaboración propia en base a
datos provistos por la cátedra.")+
coord_flip()+
theme_calc()+ scale_colour_calc()+
theme(legend.position = "none")
Nuevamente, se observa que los casos en que se utilizo harina para tortas poseen menor dispersión que aquellos en los que se empleó harina multipropósito. Aun así, es preciso advertir que no existen amplias diferencias entre ambos grupos.
ggplot(data = Nutricion_DF, aes(x = Concentracion_azucar, y = Densidad)) +
geom_jitter(aes(color = Concentracion_azucar), size = 1, alpha = 0.7) +
geom_boxplot(aes(color = Concentracion_azucar), alpha = 0.7) +
xlab('Azúcar') +
ylab('Densidad') +
ggtitle('Densidad de pasteles, según grado de endulzamiento.') +
labs(caption = "Fuente: Elaboración propia en base a
datos provistos por la cátedra.")+
coord_flip()+
theme_calc()+ scale_colour_calc()+
theme(legend.position = "none")
En cuanto a la concentración de azucar, se puede notar que los grupos con 50% y 75% poseen una dispersión similar, a excepción de los outliers advertidos en el último grupo. Por su parte, los grupos extremos evidencian mayores diferencias entre sí, notandose que a menor nivel de azúcar le corresponde -en la mayoría de los casos- una mayor densidad.
p1 <- ggplot(data = Nutricion_DF, aes(x = Concentracion_azucar, y = Densidad, color = Tipo_harina)) +
geom_boxplot(alpha = 0.7) +
xlab('Azúcar') +
ylab('Densidad') +
ggtitle('Densidad de pasteles, según grado de endulzamiento.') +
labs(caption = "Fuente: Elaboración propia en base a
datos provistos por la cátedra.")+
coord_flip()+
theme(legend.position = "right")
p1 + theme_calc()+
scale_colour_calc()
Por último, al observar los diagramas en la interacción, es posible notar que la dispersión es mayor en los casos en que se utilizó harina multipropósito; apreciandose, en este grupo en particular, que a menor grado de endulzamiento, le corresponde mayor densidad. En este sentido, se presta especial atención a los pasteles realizados con 100% de azucar y harina general, puesto que presenta la menor densidad de la serie.
Respecto a los casos en que se utilizó harina para tortas, se observa que la dispersión es mayor ante el menor grado de endulzamiento; disminuyendo ante un uso del 100% de azúcar.
Del análisis expuesto, se desprende la evidente existencia de posibles diferencias significativas entre las medias. Por consiguiente, para comparar el comportamiento de las variables en cuestión, se verifica el cumplimiento de los supuestos que posibilitan el empleo del Analisis de la varianza.
Verificación de supuestos
Particularmente, para la realización del test de ANOVA se requiere el cumplimiento de tres supuestos:
Normalidad: las muestras deben contar una distribución aproximadamente normal.
Igualdad de varianzas: este supuesto se sustenta en la idea de que, si las muestras poseen igualdad en sigma y distibución normal, alcanza con una comparación de sus medias para determinar si poseen similar comportamiento.
Independencia: las muestras deben ser independientes, aspecto presente en el análisis en desarrollo.
Se chequean los supuestos requeridos para implementar el test de ANOVA.
Normalidad
Se emplea el Test de Shapiro, cuyas hipótesis son:
H0 = los datos poseen distribución normal;
H1 = los datos no poseen distribución normal.
shapiro <- Nutricion_DF %>%
group_by(Concentracion_azucar, Tipo_harina) %>%
shapiro_test(Densidad)
kable(shapiro, format = "markdown")
| Concentracion_azucar | Tipo_harina | variable | statistic | p |
|---|---|---|---|---|
| 0 | Harina_tortas | Densidad | 0.8175676 | 0.1571668 |
| 0 | Multiproposito | Densidad | 0.7500000 | 0.0000000 |
| 100 | Harina_tortas | Densidad | 0.7500000 | 0.0000000 |
| 100 | Multiproposito | Densidad | 0.9642857 | 0.6368868 |
| 50 | Harina_tortas | Densidad | 0.8709677 | 0.2982759 |
| 50 | Multiproposito | Densidad | 0.9868421 | 0.7804408 |
| 75 | Harina_tortas | Densidad | 0.8709677 | 0.2982759 |
| 75 | Multiproposito | Densidad | 0.8709677 | 0.2982759 |
Considerando un nivel de significancia de 0.05 y los p-value resultantes, no se rechaza la hipótesis de normalidad en la mayoría de los casos, a excepción de dos: los pasteles realizados con harina para tortas y con 100% de azúcar, y aquellos que se hicieron con harina multipropósito y con 0% de endulzamiento.
A fin de verificar la distribución con otros métodos, se realiza un gráfico Q-Q que permite comparar la distribución de los cuantiles muestrales en función de los cuantiles teóricos de la distribución normal.
Cuantiles <- ggqqplot(Nutricion_DF,"Densidad", color = "Tipo_harina",
palette = c("darkblue", "red1"),
facet.by = c("Tipo_harina","Concentracion_azucar")) +
ggtitle("Gráfico de cuantiles: Tortas según concentración de
azúcar y tipo de harina.") +
ylab("Cuantiles muestrales") +
xlab("Cuantiles teóricos") +
labs(caption = "Fuente: Elaboración propia en base a
datos provistos por la cátedra.")
Cuantiles
A partir de esta gráfica, es posible concluir que -en todas las muestras- los casos se ajustan a la distribución teórica normal.
Homocedasticidad
Se realiza el Test de Levene para evaluar la igualdad de varianzas, cuyas hipótesis son:
H0 = existe igualdad de varianzas;
H1 = no existe igualdad de varianzas.
levene <- Nutricion_DF %>%
levene_test(Densidad ~ (Concentracion_azucar*Tipo_harina)) %>%
as.data.frame()
kable(levene, format = "markdown")
| df1 | df2 | statistic | p |
|---|---|---|---|
| 7 | 16 | 0.4129721 | 0.8803457 |
Dado que el p-value > 0.05, no se rechaza la H0 de igualdad de varianzas.
Habiendose verificado los supuestos, es posible entonces realizar el test de ANOVA para verificar las tres hipótesis en consideración.
Test de ANOVA
Se procede a realizar el análisis de las varianzas de dos factores, en dos sentidos: primero, verificando la diferencia entre las medias sin contemplar la interacción de las variables; luego, contemplando la interacción entre las mismas.
Sin interacción
Sin_interaccion <- aov(Densidad ~ Concentracion_azucar+Tipo_harina, data=Nutricion_DF)
summary(Sin_interaccion)
## Df Sum Sq Mean Sq F value Pr(>F)
## Concentracion_azucar 3 0.008713 0.002904 2.110 0.133
## Tipo_harina 1 0.001837 0.001837 1.335 0.262
## Residuals 19 0.026146 0.001376
Al observar los p-value, es posible notar que no existen diferencias significativas entre la densidad media de ambos grupos puesto que ninguno es inferior a 0.05: 0.133 y 0.262.
Aun así, resulta necesario indagar en las diferencias contemplando la interacción de las variables.
Con interacción
Con_interaccion <- aov(Densidad ~ Concentracion_azucar*Tipo_harina, data=Nutricion_DF)
summary(Con_interaccion)
## Df Sum Sq Mean Sq F value Pr(>F)
## Concentracion_azucar 3 0.008713 0.002904 2.904 0.0670 .
## Tipo_harina 1 0.001837 0.001837 1.837 0.1941
## Concentracion_azucar:Tipo_harina 3 0.010146 0.003382 3.382 0.0442 *
## Residuals 16 0.016000 0.001000
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Finalmente, es posible notar que existe diferencia significativa en la media de las tortas relacionada con la interacción entre las variables Concentración de azúcar y Tipo de harina. Puntualmente, en la interacción se obtuvo un p-value de 0.044.
Teniendo esto en cuenta, resulta pertinente indagar en la interacción entre los factores a partir de un gráfico de interacción de medias.
ggplot(data = Nutricion_DF, aes(x = Concentracion_azucar, y = Densidad,
colour = Tipo_harina,
group = Tipo_harina)) +
stat_summary(fun = mean, geom = "point") +
stat_summary(fun = mean, geom = "line") +
labs(title = 'Gráfico de interacción de medias.',
y = 'Densidad',
x = 'Concentración de azúcar',
caption = "Fuente: Elaboración propia en base a datos
provistos por la cátedra.",
colour = "Tipo de harina") +
theme_calc()+
scale_colour_calc()
Conclusión
Mediante el gráfico de interacción de medias, es posible concluir que la densidad promedio de las tortas varía en función de las cantidades que se emplean en azúcar y tipo de harina. Se advierte que las diferencias son menores al existir ausencia de azúcar, sin embargo esta diferencia se amplía a medida que se utiliza mayor concentración de azúcar y se vuelve muy significativa cuando se emplea el 100% de concentración.
Detroit.
Tasa de homicidios en Detroit: un análisis de regresión lineal.
En un estudio que investiga el papel de las armas de fuego en el aumento de la tasa de homicidios de Detroit, se recogieron datos para los años 1961-1973.
La variable de respuesta (la tasa de homicidios) y las variables potencialmente predictoras del comportamiento de ésta, se describen a continuación:
detroit <- read.csv("detroit.csv")
kable(head(detroit)) %>%
kable_styling(bootstrap_options = "basic",
full_width = T,
position = "left")
| YEAR | FTP | UNEMP | M | LIC | GR | CLEAR | W | NMAN | G | HE | WE | H |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1961 | 260.35 | 11.0 | 455.5 | 178.15 | 215.98 | 93.4 | 558724 | 538.1 | 133.9 | 2.98 | 117.18 | 8.600000 |
| 1962 | 269.80 | 7.0 | 480.2 | 156.41 | 180.48 | 88.5 | 538584 | 547.6 | 137.6 | 3.09 | 134.02 | 8.900000 |
| 1963 | 272.04 | 5.2 | 506.1 | 198.02 | 209.57 | 94.4 | 519171 | 562.8 | 143.6 | 3.23 | 141.68 | 8.520001 |
| 1964 | 272.96 | 4.3 | 535.8 | 222.10 | 231.67 | 92.0 | 500457 | 591.0 | 150.3 | 3.33 | 147.98 | 8.890000 |
| 1965 | 272.51 | 3.5 | 576.0 | 301.92 | 297.65 | 91.0 | 482418 | 626.1 | 164.3 | 3.46 | 159.85 | 13.070000 |
| 1966 | 261.34 | 3.2 | 601.7 | 391.22 | 367.62 | 87.4 | 465029 | 659.8 | 179.5 | 3.60 | 157.19 | 14.570000 |
Se requiere construir una ecuación de regresión que relacione la Tasa de Homicidios (variable H), con el resto de las variables disponibles, y determinar si estas variables son útiles para predecir la Tasa de Homicidios.
Análisis exploratorio
Se realiza en primera instancia un análisis exploratorio de los datos.
kable(summary(detroit)) %>%
kable_styling(bootstrap_options = "basic",
full_width = T,
position = "left")
| YEAR | FTP | UNEMP | M | LIC | GR | CLEAR | W | NMAN | G | HE | WE | H | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Min. :1961 | Min. :260.4 | Min. : 3.200 | Min. :455.5 | Min. : 156.4 | Min. : 180.5 | Min. :58.90 | Min. :359647 | Min. :538.1 | Min. :133.9 | Min. :2.910 | Min. :117.2 | Min. : 8.52 | |
| 1st Qu.:1964 | 1st Qu.:269.8 | 1st Qu.: 3.900 | 1st Qu.:535.8 | 1st Qu.: 222.1 | 1st Qu.: 231.7 | 1st Qu.:73.90 | 1st Qu.:401518 | 1st Qu.:591.0 | 1st Qu.:150.3 | 1st Qu.:3.230 | 1st Qu.:141.7 | 1st Qu.: 8.90 | |
| Median :1967 | Median :273.0 | Median : 5.200 | Median :569.3 | Median : 583.2 | Median : 616.5 | Median :87.40 | Median :448267 | Median :686.2 | Median :187.5 | Median :3.600 | Median :157.2 | Median :21.36 | |
| Mean :1967 | Mean :304.5 | Mean : 5.792 | Mean :556.4 | Mean : 537.5 | Mean : 545.7 | Mean :81.45 | Mean :453354 | Mean :673.9 | Mean :185.8 | Mean :3.948 | Mean :170.0 | Mean :25.13 | |
| 3rd Qu.:1970 | 3rd Qu.:341.4 | 3rd Qu.: 7.100 | 3rd Qu.:596.9 | 3rd Qu.: 794.9 | 3rd Qu.: 750.4 | 3rd Qu.:91.00 | 3rd Qu.:500457 | 3rd Qu.:755.3 | 3rd Qu.:223.8 | 3rd Qu.:4.470 | 3rd Qu.:178.7 | 3rd Qu.:37.39 | |
| Max. :1973 | Max. :390.2 | Max. :11.000 | Max. :613.5 | Max. :1131.2 | Max. :1029.8 | Max. :94.40 | Max. :558724 | Max. :819.8 | Max. :230.9 | Max. :5.760 | Max. :258.0 | Max. :52.33 |
Del análisis exploratorio, se desprende que la tasa de homicidios posee un rango de 43.81 puntos, con una distribución levemente sesgada hacia la derecha.
Se observa, a su vez, que registra una dispersión estándar de 16.385 y una media de 21.36.
kable(detroit %>%
get_summary_stats(H, type = "mean_sd")) %>%
kable_styling(bootstrap_options = "basic",
full_width = T,
position = "left")
| variable | n | mean | sd |
|---|---|---|---|
| H | 13 | 25.127 | 16.385 |
Asociación de variables
Nivel de asociación lineal de las variables predictoras con la variable H
A efectos de indagar la asociación lineal entre las posibles variables predictoras y la tasa de homocidios, se indaga en el resumen de un modelo que contemple todas las variables.
model <- lm(H ~ FTP + UNEMP + M + LIC + GR + CLEAR + W + NMAN + G + HE + WE,
data = detroit)
summary(model)
##
## Call:
## lm(formula = H ~ FTP + UNEMP + M + LIC + GR + CLEAR + W + NMAN +
## G + HE + WE, data = detroit)
##
## Residuals:
## 1 2 3 4 5 6 7 8
## -0.004254 -0.037388 0.252667 -0.174622 -0.169070 0.170520 -0.043951 0.036741
## 9 10 11 12 13
## -0.041456 -0.003869 -0.044030 0.003702 0.055010
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.227e+02 6.681e+01 -1.837 0.3173
## FTP 4.011e-02 1.608e-02 2.495 0.2427
## UNEMP 3.980e-01 3.643e-01 1.093 0.4719
## M -6.186e-02 2.472e-02 -2.502 0.2420
## LIC 1.916e-02 1.856e-03 10.326 0.0615 .
## GR -2.063e-03 1.494e-03 -1.381 0.3989
## CLEAR -6.854e-02 8.864e-02 -0.773 0.5810
## W 1.191e-04 7.825e-05 1.522 0.3700
## NMAN 8.545e-02 4.327e-02 1.975 0.2984
## G 1.495e-01 7.022e-02 2.129 0.2796
## HE -5.890e+00 2.571e+00 -2.291 0.2620
## WE 2.829e-01 6.329e-02 4.470 0.1401
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4042 on 1 degrees of freedom
## Multiple R-squared: 0.9999, Adjusted R-squared: 0.9994
## F-statistic: 1792 on 11 and 1 DF, p-value: 0.01842
De este modelo se desprende que ninguna de las variables sería predictora de la tasa de homicidios puesto que en todos los casos el p-value > 0.05. Se procede, entonces, a calcular la correlación de cada predictor con la dependiente.
ols_correlations(model)
## Correlations
## -------------------------------------------
## Variable Zero Order Partial Part
## -------------------------------------------
## FTP 0.964 0.928 0.018
## UNEMP 0.210 0.738 0.008
## M 0.546 -0.929 -0.018
## LIC 0.726 0.995 0.074
## GR 0.816 -0.810 -0.010
## CLEAR -0.968 -0.612 -0.006
## W -0.947 0.836 0.011
## NMAN 0.956 0.892 0.014
## G 0.958 0.905 0.015
## HE 0.913 -0.917 -0.016
## WE 0.888 0.976 0.032
## -------------------------------------------
En líneas generales, se observa alta correlación en la mayoría de las variables; a excepción de porcentaje de desempleados (UNEMP- 21%) y cantidad de trabajadores en la industria manufacturera (M- 54.6%). Sin embargo, al considerar la relación parcial (aquella en la que controla el efecto del resto de las variables), se aprecia alta relación en la totalidad de las variables.
Regresión lineal múltiple
A los fines de realizar una regresión lineal múltiple, se seleccionan los mejores predictores entre las variables independientes disponibles. Para ello, se emplean métodos de selección automática.
En primera instancia, se prueba el mejor modelo conforme la cantidad de predictores.
Todos_modelos <- ols_step_best_subset(model)
Todos_modelos
## Best Subsets Regression
## ------------------------------------------------------
## Model Index Predictors
## ------------------------------------------------------
## 1 CLEAR
## 2 LIC CLEAR
## 3 UNEMP LIC WE
## 4 UNEMP LIC CLEAR WE
## 5 UNEMP LIC CLEAR W WE
## 6 FTP UNEMP LIC CLEAR W WE
## 7 FTP UNEMP M LIC CLEAR NMAN WE
## 8 FTP M LIC W NMAN G HE WE
## 9 FTP M LIC GR W NMAN G HE WE
## 10 FTP UNEMP M LIC GR W NMAN G HE WE
## 11 FTP UNEMP M LIC GR CLEAR W NMAN G HE WE
## ------------------------------------------------------
##
## Subsets Regression Summary
## -----------------------------------------------------------------------------------------------------------------------------------
## Adj. Pred
## Model R-Square R-Square R-Square C(p) AIC SBIC SBC MSEP FPE HSP APC
## -----------------------------------------------------------------------------------------------------------------------------------
## 1 0.9379 0.9323 0.9225 1215.0959 78.4277 35.6200 80.1226 236.9508 20.9815 1.8184 0.0847
## 2 0.9895 0.9874 0.9831 200.0290 57.3254 13.0531 59.5852 44.5278 4.1636 0.3759 0.0168
## 3 0.9979 0.9972 0.9932 36.4845 38.4274 -4.9009 41.2522 10.0378 0.9850 0.0941 0.0040
## 4 0.9988 0.9982 0.9956 20.2396 32.8944 -8.7924 36.2841 6.4265 0.6573 0.0678 0.0027
## 5 0.9992 0.9987 0.9956 14.1857 29.3629 -9.2981 33.3175 4.8992 0.5181 0.0591 0.0021
## 6 0.9996 0.9992 0.9977 8.9609 22.9673 -5.8647 27.4869 3.0820 0.3336 0.0434 0.0013
## 7 0.9997 0.9992 0.9878 9.4880 22.3077 -0.5404 27.3923 3.1398 0.3425 0.0530 0.0014
## 8 0.9997 0.9992 0.9894 10.4824 22.1184 6.1473 27.7679 3.5375 0.3790 0.0747 0.0015
## 9 0.9999 0.9995 0.9718 9.4892 13.8536 25.7526 20.0681 2.4092 0.2399 0.0678 0.0010
## 10 0.9999 0.9995 0.6715 10.5979 10.0914 28.3491 16.8708 3.0931 0.2410 0.1306 0.0010
## 11 0.9999 0.9994 -0.6458 12.0000 5.9983 -30.8941 13.3426 Inf 0.3142 Inf 0.0013
## -----------------------------------------------------------------------------------------------------------------------------------
## AIC: Akaike Information Criteria
## SBIC: Sawa's Bayesian Information Criteria
## SBC: Schwarz Bayesian Criteria
## MSEP: Estimated error of prediction, assuming multivariate normality
## FPE: Final Prediction Error
## HSP: Hocking's Sp
## APC: Amemiya Prediction Criteria
Teniendo en cuenta los valores del coeficiente de determinación (R² y R² ajustado) y siendo que la variación teórica de este indicador va de 0 (cero) a 1 (uno), se observa que todos los modelos podrían ser buenos predictores. Asimismo, resulta evidente que el mayor predictor de la tasa de homocidios es el porcentaje de homicidios resueltos con arresto del responsable (CLEAR).
Sin embargo, se juzga necesario emplear el método de stepwise. Este método incluye las variables potencialmente predictoras en el modelo, y paso a paso procede a ir eliminando las que que no son estadísticamente significativas e incluyendo las que sí lo son.
resultado <- ols_step_both_p(model)
resultado
##
## Stepwise Selection Summary
## --------------------------------------------------------------------------------------
## Added/ Adj.
## Step Variable Removed R-Square R-Square C(p) AIC RMSE
## --------------------------------------------------------------------------------------
## 1 CLEAR addition 0.938 0.932 1215.0960 78.4277 4.2643
## 2 LIC addition 0.989 0.987 200.0290 57.3254 1.8393
## 3 HE addition 0.993 0.991 124.7580 53.2520 1.5349
## 4 FTP addition 0.996 0.994 78.5760 49.2182 1.2908
## 5 UNEMP addition 0.997 0.996 49.2760 44.9261 1.0833
## 6 WE addition 0.999 0.999 15.5890 30.8418 0.6303
## 7 HE removal 0.999 0.999 15.1810 30.1883 0.6146
## 8 W addition 1.000 0.999 8.9610 22.9673 0.4656
## --------------------------------------------------------------------------------------
A partir de la aplicación de este último método, se aprecia que el R² (coeficiente de determinación) no varía sustancialmente a partir de la incorporación de la tercera varibale (HE). Cabe señalar que el coeficiente de determinación (R²) representa la fracción de la variación total que se explica por la recta de regresión de los mínimos cuadrados (Spiegel, 1992).
Particularmente en los modelos de regresión lineal múltiple, el R² se incrementa ante la mayor inclusión de variables (debido a que estas aumentan la explicación de la variabilidad observada en la variable de interés). Para subsanar este aspecto, el R² ajustado introduce una penalización por cada variable que se agrega al modelo (la cual depende de la cantidad de predictores, y del tamaño de la muestra).
Al mismo tiempo, se observa que tanto en el método de stepwise, como en el de la selección del mejor predictor, se priorizan las variables CLEAR y LIC como las mejores predictoras. Teniendo esto en cuenta, como así también la ley de parsimonia, se toman en consideración ambas variables para la definición del modelo.
Análisis de la bondad del ajuste
A continuación se evalúa la bondad del ajuste del modelo escogido.
options(scipen = 999)
model_seleccionado <- lm(H ~ LIC + CLEAR , data = detroit)
summary(model_seleccionado)
##
## Call:
## lm(formula = H ~ LIC + CLEAR, data = detroit)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3802 -0.6176 0.6449 1.3765 1.8907
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 103.655542 4.820176 21.505 0.00000000105 ***
## LIC 0.014136 0.002017 7.009 0.00003675274 ***
## CLEAR -1.057474 0.050413 -20.976 0.00000000135 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.839 on 10 degrees of freedom
## Multiple R-squared: 0.9895, Adjusted R-squared: 0.9874
## F-statistic: 471.2 on 2 and 10 DF, p-value: 0.0000000001276
A partir de chequear el coeficiente de determinación, es posible notar que el 98.7% de la variabilidad de la tasa de homicidios se explica por el modelo propuesto.
Asimismo, se realiza un análisis de la varianza asociado a la regresión.
anova(model_seleccionado)
## Analysis of Variance Table
##
## Response: H
## Df Sum Sq Mean Sq F value Pr(>F)
## LIC 1 1699.48 1699.48 502.37 0.0000000007027 ***
## CLEAR 1 1488.48 1488.48 439.99 0.0000000013463 ***
## Residuals 10 33.83 3.38
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
A través del estadístico F y su p-value, se rechaza la hipótesis nula de regresión no significativa. Por ende, se entiende que el modelo se ajusta significativamente a la explicación del fenómeno.
Verificación de supuestos
Sin embargo, antes de avanzar en la prueba inferencial de los estimadores de los parámetros, es necesario verificar el cumplimiento de los supuestos. En este sentido, se recuerda que los supuestos implicados en la regresión líneal múltiple son:
- Relación lineal entre la variable de interés y sus predictoras
- Distribución normal de los residuos, con varianza constante (homocedasticidad)
- Independencia de las muestras, cuyos valores deben surgir de un muestreo probabilístico y ser representativos de la población bajo estudio. En caso de existir observaciones atípicas, estas deben recibir especial atención.
Residuos
Así, se procede a realizar un análisis de los supuestos mediante los residuos:
fit <- lm(H ~ CLEAR + LIC, detroit)
plot(fit)
- En el primer gráfico (Residuals vs Fitted), es posible observar el ajuste del modelo y ver que la relación entre las variables predictoras y la de interés es lineal (buen ajuste a la línea de puntos).
- El segundo gráfico verifica la normalidad (Normal Q-Q), la cual se puede apreciar en la cercanía de los datos a la recta.
- En cuanto al tercer gráfico (Scale-Location), verifica si los resideuos se distribuyen por igual a lo largo del rango de predictores. Al distribuirse aleatoriamente, se puede decir que son homocedasticos.
- Finalmente, el último gráfico (Residual vs Leverage) permite detectar si hay valores atipicos influyentes. La Distancia de Cook mide el efecto que tiene una observación sobre el conjunto de coeficientes en el modelo.
Al mismo tiempo, a los fines de facilitar el análisis de los residuos, se presenta el gráfico de estos respecto a los valores predichos.
ols_plot_resid_stud_fit(model_seleccionado)
En el gráfico de residuos se verifica el cumplimiento del supuesto de constancia de la varianza. Es decir, se comprueba que la mayoría de los casos caen en el 95% del área de la curva. Aun así, se observa la presencia de un valor atípico.
Colinealidad
También se analiza la colinealidad de las variables predictoras presentes en la ecuación.
ols_vif_tol(model_seleccionado)
## Variables Tolerance VIF
## 1 LIC 0.6921615 1.44475
## 2 CLEAR 0.6921615 1.44475
A partir de los resultados se puede observar que no habría efectos de multicolinealidad, ya que ninguno de los predictores tiene un VIF mayor a 10, ni una tolerancia menor a 0.10.
Observaciones atípicas y/o influyentes.
Por último, se analiza la presencia de observaciones atípicas y/o influyentes.
ols_plot_resid_lev(model_seleccionado, print_plot = TRUE)
Se encuentra una observación atípica relacionada con el caso número 2. Asimismo, se observa un punto de influencia ligado al registro número 8.
Se reafirma este hallazgo mediante un gráfico de la distancia de Cook que, como se mencionó previamente, permite indagar en los casos que presentan características de outlier o leverage e influyen en la estimación de los parámetros.
ols_plot_cooksd_bar(model_seleccionado, print_plot = TRUE)
Teniendo en cuenta que en ambos análisis se detectó el valor atípico vinculado al caso número 2, se procede a verificar la distancia de cook y la distribución de los residuos luego de excluir dicha observación.
detroit_mod <- detroit %>% filter(YEAR != 1962)
model_seleccionado_2 <- lm(H ~ LIC + CLEAR +HE , data = detroit)
model_mod <- lm(H ~ LIC + CLEAR , data = detroit_mod)
ols_plot_cooksd_bar(model_mod, print_plot = TRUE)
ols_plot_resid_stud_fit(model_mod)
Excluyendo el caso en cuestión, se advierte que, aunque ningún valor adquiere características de outlier en el indicador de Cook, sí aparece un nuevo outlier al analizar los residuos estudentizados.
summary(model_mod)
##
## Call:
## lm(formula = H ~ LIC + CLEAR, data = detroit_mod)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.7013 -0.6165 0.5313 0.8390 1.5608
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 105.116272 3.905333 26.916 0.000000000653 ***
## LIC 0.012698 0.001711 7.421 0.000040144765 ***
## CLEAR -1.061932 0.040445 -26.256 0.000000000814 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.474 on 9 degrees of freedom
## Multiple R-squared: 0.9933, Adjusted R-squared: 0.9919
## F-statistic: 671.1 on 2 and 9 DF, p-value: 0.0000000001607
Además, al analizar el R² ajustado no se detectan importantes modificaciones.
Conclusión.
Teniendo en cuenta que no se detectaron importantes modificaciones en el R² ajustado al exlcuir el valor atípico y siendo que se verificó el cumplimiento de los distintos supuestos en el modelo propuesto, se decide no excluir el caso y conservar el modelo previamente seleccionado:
Fórmula = H ~ LIC + CLEAR
Es decir, se priorizan las variables de porcentaje de homicidios resueltos con arresto del responsable y cantidad de licencias de portación de armas cada 100 mil habitantes para predecir la tasa de homicidios.
Bajo peso al nacer.
Un análisis de los factores de riesgo de bajo peso al nacer.
El bajo peso al nacer, definido como por un peso al nacer inferior a 2500 gr., ha sido una preocupación de los médicos durante años debido a que, tanto las tasas de mortalidad, como la de nacimientos defectuosos son muy altas para los niños con bajo peso al nacer. El comportamiento de la mujer durante el embarazo (incluyendo la dieta, los hábitos tabáquicos y los cuidados prenatales) pueden alterar las chances de un parto de un niño con bajo peso.
Los datos que se presentan en este ejercicio corresponden a 189 nacimientos, de los cuales 59 han resultado en niños con bajo peso. Se busca, entonces, determinar cuáles de las variables presentes en la base de datos son factores de riesgo de bajo peso al nacer.
datos_nacimiento <- read_sav("Estadística_II/Regresión/Copia de LOWBWT.sav")
kable(head(datos_nacimiento)) %>%
kable_styling(bootstrap_options = "basic",
full_width = T,
position = "left")
| ID | LOW | AGE | LWT | RACE | SMOKE | PTL | HT | UI | FTV | BWT |
|---|---|---|---|---|---|---|---|---|---|---|
| 4 | 1 | 28 | 120 | 3 | 1 | 1 | 0 | 1 | 0 | 709 |
| 10 | 1 | 29 | 130 | 1 | 0 | 0 | 0 | 1 | 2 | 1021 |
| 11 | 1 | 34 | 187 | 2 | 1 | 0 | 1 | 0 | 0 | 1135 |
| 13 | 1 | 25 | 105 | 3 | 0 | 1 | 1 | 0 | 0 | 1330 |
| 15 | 1 | 25 | 85 | 3 | 0 | 0 | 0 | 1 | 0 | 1474 |
| 16 | 1 | 27 | 150 | 3 | 0 | 0 | 0 | 0 | 0 | 1588 |
Se requiere construir una ecuación de regresión logística que relacione la variable dicotómica (la que indica si se trata de un nacimiento con bajo peso al nacer), con el resto de las correspondientes variables, y determinar si estas variables son útiles para predecir la variable dependiente.
Riesgo relativo y Odds Ratio
Para ello, primeramente se calcula el riesgo relativo (RR) y los odds ratio (OR) de la variable de interés con todas las variables dicotómicas.
Cabe señalar que el OR y RR corresponden a medidas de asociación, para variables nominales dicotómicas. En cuanto al primero, corresponde a la razón entre la probabilidad de que un evento ocurra y la probabilidad de que no ocurra. El segundo, es la probabilidad o densidad de probabilidadde que un evento ocurra. El término riesgo implica que la presencia de una característica o factor aumenta la probabilidad de eventos (favorables o desfavorables) (Aedo et al., 2010).
En la regresión logística, estas medidas son utilizadas para comparar la influencia de las variables explicativas (o independientes) sobre la variable dependiente.
Se analiza, en primera instancia, la variable dicotómica Fumar durante el embarazo.
fumar <-glm(LOW~SMOKE,data=datos_nacimiento,family="binomial")
summary(fumar)
##
## Call:
## glm(formula = LOW ~ SMOKE, family = "binomial", data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.0197 -0.7623 -0.7623 1.3438 1.6599
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.0871 0.2147 -5.062 0.000000414 ***
## SMOKE 0.7041 0.3196 2.203 0.0276 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 229.80 on 187 degrees of freedom
## AIC: 233.8
##
## Number of Fisher Scoring iterations: 4
or_glm(data = datos_nacimiento, model = fumar, incr = list(SMOKE=1))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 SMOKE 2.022 1.082 3.801 1
pf <- table(datos_nacimiento$LOW, datos_nacimiento$SMOKE)
pf <- prop.table(pf)
RR <- pf[1,1]/pf[2,1]
RR
## [1] 2.965517
A partir del valor 2.022 del OR, se puede inferir que fumar durante el embarazo duplica el riesgo de bajo peso al nacer. Además,del cálculo del RR surge que este riesgo prácticamente se triplica en aquellas mujeres que fuman, respecto a las que no.
Se procede a evaluar la variable Irritabilidad uterina.
ui <-glm(LOW~UI, data= datos_nacimiento,family="binomial")
summary(ui)
##
## Call:
## glm(formula = LOW ~ UI, family = "binomial", data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.1774 -0.8097 -0.8097 1.1774 1.5967
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.9469 0.1756 -5.392 0.0000000697 ***
## UI 0.9469 0.4168 2.272 0.0231 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 229.60 on 187 degrees of freedom
## AIC: 233.6
##
## Number of Fisher Scoring iterations: 4
or_glm(data = datos_nacimiento, model = ui, incr = list(UI=1))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 UI 2.578 1.133 5.881 1
pf <- table(datos_nacimiento$LOW, datos_nacimiento$UI)
pf <- prop.table(pf)
RR <- pf[1,1]/pf[2,1]
RR
## [1] 2.577778
Observando el OR y el RR, se puede indicar que la irritabilidad uterina impacta en la posibilidad de obtener bajo peso al nacer.
Finalmente, se evalúa la variable hipertensión arterial.
ht <-glm(LOW~HT,data=datos_nacimiento,family="binomial")
summary(ht)
##
## Call:
## glm(formula = LOW ~ HT, family = "binomial", data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.3232 -0.8341 -0.8341 1.5652 1.5652
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8771 0.1650 -5.315 0.000000107 ***
## HT 1.2135 0.6083 1.995 0.0461 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 230.65 on 187 degrees of freedom
## AIC: 234.65
##
## Number of Fisher Scoring iterations: 4
or_glm(data = datos_nacimiento, model = ht, incr = list(HT=1))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 HT 3.365 1.028 11.829 1
pf <- table(datos_nacimiento$LOW, datos_nacimiento$HT)
pf <- prop.table(pf)
RR <- pf[1,1]/pf[2,1]
RR
## [1] 2.403846
Se identifica un OR de 3.365 y un RR de 2.40. Por lo tanto, es posible señalar que el riesgo de tener un bebé con bajo peso al nacer se triplica en aquellas gestantes con hipertensión arterial.
Así, se advierte que entre las tres variables dicotomicas, la que mayor incidencia tiene en el riesgo de tener bajo peso al nacer es la de hipertension arterial.
No obstante, resulta necesario indagar la incidencia del resto de las variables. Para ello, se realiza previamente su estandarización y luego se calcula su OR.
datos_nacimiento <- datos_nacimiento %>%
mutate_at (c ('AGE', 'LWT'), ~ ( scale (.)%>% as.vector ))
La primera de las variables analizadas es la de la edad.
edad <- glm(LOW~AGE,data=datos_nacimiento,family="binomial")
summary(edad)
##
## Call:
## glm(formula = LOW ~ AGE, family = "binomial", data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.0402 -0.9018 -0.7754 1.4119 1.7800
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8041 0.1591 -5.055 0.00000043 ***
## AGE -0.2710 0.1670 -1.623 0.105
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 231.91 on 187 degrees of freedom
## AIC: 235.91
##
## Number of Fisher Scoring iterations: 4
or_glm(data = datos_nacimiento, model = edad, incr = list(AGE=5))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 AGE 0.258 0.047 1.269 5
En este caso, se observa que la edad no posee una incidencia estadísticamente significativa en tanto factor de riesgo del bajo peso al nacer (p-value 0.105 > 0.05). Además, el intérvalo de confianza del OR comprende al 1, lo que reafirma esta hipótesis.
Se procede a evaluar el peso de la madre al momento de la última menstruación.
peso <- glm(LOW~LWT,data=datos_nacimiento,family="binomial")
summary(peso)
##
## Call:
## glm(formula = LOW ~ LWT, family = "binomial", data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.0951 -0.9022 -0.8018 1.3609 1.9821
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.8267 0.1625 -5.087 0.000000364 ***
## LWT -0.4299 0.1887 -2.279 0.0227 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 228.69 on 187 degrees of freedom
## AIC: 232.69
##
## Number of Fisher Scoring iterations: 4
or_glm(data = datos_nacimiento, model = peso, incr = list(LWT=1))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 LWT 0.651 0.438 0.922 1
A partir del OR (0.651), se aprecia que existe una incidencia del peso de la madre en el peso del bebé, aunque negativa. Esto es, cuando aumenta el peso de la madre, disminuye el riesgo de que nazca un niñe con peso inferior a 2500 gr.
Seguidamente, se analiza la cantidad de consultas obstétricas durante el primer trimestre.
ftv <- glm(LOW~FTV,data= datos_nacimiento,family="binomial")
summary(ftv)
##
## Call:
## glm(formula = LOW ~ FTV, family = "binomial", data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.9029 -0.9029 -0.8537 1.4794 1.7229
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.6868 0.1948 -3.525 0.000423 ***
## FTV -0.1351 0.1567 -0.862 0.388527
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 233.90 on 187 degrees of freedom
## AIC: 237.9
##
## Number of Fisher Scoring iterations: 4
or_glm(data = datos_nacimiento, model = ftv, incr = list(FTV=1))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 FTV 0.874 0.632 1.174 1
Se observa que la incidencia de esta variable no es estadísticamente significativa (p-value > 0.05).
Se evalúa, entonces, la relación entre el bajo peso al nacer y la raza de la madre.
race<- glm(LOW~factor(RACE),data=datos_nacimiento,family="binomial")
summary(race)
##
## Call:
## glm(formula = LOW ~ factor(RACE), family = "binomial", data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.0489 -0.9665 -0.7401 1.4042 1.6905
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.1550 0.2391 -4.830 0.00000136 ***
## factor(RACE)2 0.8448 0.4634 1.823 0.0683 .
## factor(RACE)3 0.6362 0.3478 1.829 0.0674 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 229.66 on 186 degrees of freedom
## AIC: 235.66
##
## Number of Fisher Scoring iterations: 4
or_glm(data = datos_nacimiento, model = race, incr = list(RACE=1))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 factor(RACE)2 2.328 0.926 5.775 Indicator variable
## 2 factor(RACE)3 1.889 0.957 3.758 Indicator variable
Según los resultados obtenidos en los p-value, es posible indicar que la incidencia de esta variable -en sus dos categorías- no es estadísticamente significativa. Esto se reafirma al observar que, en ambos casos, el IC del OR comprende al 1.
Finalmente, se analiza la variable de los antecedentes de embarazos prematuros.
ptl <- glm(LOW~PTL,data=datos_nacimiento,family="binomial")
summary(ptl)
##
## Call:
## glm(formula = LOW ~ PTL, family = "binomial", data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.8186 -0.8038 -0.8038 1.2471 1.6045
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.9642 0.1750 -5.511 0.0000000357 ***
## PTL 0.8018 0.3172 2.528 0.0115 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 227.89 on 187 degrees of freedom
## AIC: 231.89
##
## Number of Fisher Scoring iterations: 4
or_glm(data = datos_nacimiento, model = ptl, incr = list(PTL=1))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 PTL 2.23 1.218 4.284 1
Se encuentra que esta variable incide, en términos estadísticamente significativos, en el riesgo de que nazca un niñe con bajo peso. Según el OR, esta posibilidad se duplica en los casos de madres con tales antecedentes.
A partir del análisis realizado, se encuentra que las variables con incidencia estadísticamente significativa son:
- Fumar durante el embarazo
- Irritabilidad uterina
- Hipertensión arterial
- Peso de la madre al momento de la última menstruación
- Antecedentes de embarazos prematuros.
Regresión logística
Habiendo indagado el grado de asociación entre las variiables, se procede a realizar una regresión logística múltiple, seleccionando los mejores predictores entre las variables independientes disponibles. Para ello, se emplea un método de selección automática.
Puntualmente, se utiliza el método de selección stepAIC que, a su vez, está definido mediante el método de máxima verosimilitud.
regresion <- glm(LOW ~ 1,family = binomial, data = datos_nacimiento)
seleccion <- stepAIC(regresion,
scope = list(upper = ~AGE+LWT+factor(RACE)+SMOKE+PTL+HT+UI+FTV,
lower = ~1),
direction = c("both"),trace = T)
## Start: AIC=236.67
## LOW ~ 1
##
## Df Deviance AIC
## + PTL 1 227.89 231.89
## + LWT 1 228.69 232.69
## + UI 1 229.60 233.60
## + SMOKE 1 229.81 233.81
## + HT 1 230.65 234.65
## + factor(RACE) 2 229.66 235.66
## + AGE 1 231.91 235.91
## <none> 234.67 236.67
## + FTV 1 233.90 237.90
##
## Step: AIC=231.89
## LOW ~ PTL
##
## Df Deviance AIC
## + LWT 1 223.41 229.41
## + HT 1 223.58 229.58
## + AGE 1 224.27 230.27
## + factor(RACE) 2 222.53 230.53
## + SMOKE 1 224.78 230.78
## + UI 1 224.89 230.89
## <none> 227.89 231.89
## + FTV 1 227.30 233.30
## - PTL 1 234.67 236.67
##
## Step: AIC=229.41
## LOW ~ PTL + LWT
##
## Df Deviance AIC
## + HT 1 215.96 223.96
## + factor(RACE) 2 217.68 227.68
## + SMOKE 1 220.54 228.54
## + AGE 1 221.05 229.05
## + UI 1 221.23 229.23
## <none> 223.41 229.41
## + FTV 1 223.12 231.12
## - LWT 1 227.89 231.89
## - PTL 1 228.69 232.69
##
## Step: AIC=223.96
## LOW ~ PTL + LWT + HT
##
## Df Deviance AIC
## + factor(RACE) 2 210.85 222.85
## + UI 1 213.01 223.01
## + SMOKE 1 213.15 223.15
## <none> 215.96 223.96
## + AGE 1 214.01 224.01
## + FTV 1 215.84 225.84
## - PTL 1 221.14 227.14
## - HT 1 223.41 229.41
## - LWT 1 223.58 229.58
##
## Step: AIC=222.85
## LOW ~ PTL + LWT + HT + factor(RACE)
##
## Df Deviance AIC
## + SMOKE 1 204.90 218.90
## + UI 1 207.73 221.73
## <none> 210.85 222.85
## + AGE 1 209.81 223.81
## - factor(RACE) 2 215.96 223.96
## + FTV 1 210.82 224.82
## - PTL 1 216.29 226.29
## - HT 1 217.68 227.68
## - LWT 1 218.69 228.69
##
## Step: AIC=218.9
## LOW ~ PTL + LWT + HT + factor(RACE) + SMOKE
##
## Df Deviance AIC
## + UI 1 201.99 217.99
## <none> 204.90 218.90
## + AGE 1 204.11 220.11
## - PTL 1 208.25 220.25
## + FTV 1 204.88 220.88
## - SMOKE 1 210.85 222.85
## - factor(RACE) 2 213.15 223.15
## - HT 1 211.55 223.55
## - LWT 1 211.62 223.62
##
## Step: AIC=217.99
## LOW ~ PTL + LWT + HT + factor(RACE) + SMOKE + UI
##
## Df Deviance AIC
## <none> 201.99 217.99
## - PTL 1 204.22 218.22
## - UI 1 204.90 218.90
## + AGE 1 201.43 219.43
## + FTV 1 201.93 219.93
## - SMOKE 1 207.73 221.73
## - LWT 1 208.11 222.11
## - factor(RACE) 2 210.31 222.31
## - HT 1 209.46 223.46
Considerando que posee el menor AIC, se procede a escoger el último modelo:
LOW ~ PTL + LWT + HT + factor(RACE) + SMOKE + UI)
Se procede, entonces, a evaluar el modelo empleado conforme su pertinencia estadística.
final <- glm(LOW ~ PTL+LWT+HT+factor(RACE)+SMOKE+UI,
family = binomial, data = datos_nacimiento)
summary(final)
##
## Call:
## glm(formula = LOW ~ PTL + LWT + HT + factor(RACE) + SMOKE + UI,
## family = binomial, data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.9049 -0.8124 -0.5241 0.9483 2.1812
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.1513 0.3984 -5.400 0.0000000666 ***
## PTL 0.5032 0.3412 1.475 0.14029
## LWT -0.4864 0.2096 -2.320 0.02033 *
## HT 1.8550 0.6951 2.669 0.00762 **
## factor(RACE)2 1.3257 0.5222 2.539 0.01113 *
## factor(RACE)3 0.8971 0.4339 2.068 0.03868 *
## SMOKE 0.9387 0.3987 2.354 0.01855 *
## UI 0.7857 0.4564 1.721 0.08519 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 201.99 on 181 degrees of freedom
## AIC: 217.99
##
## Number of Fisher Scoring iterations: 4
De los p-value obtenidos, resulta que dos variables no son estadísticamente significativas: antecedentes de embarazos prematuros (PTL) y irritabilidad uterina (UI). Por ende, se propone un nuevo modelo que excluye a ambas variables.
final2 <- glm(LOW ~ LWT+factor(RACE)+SMOKE+HT,
family = binomial, data = datos_nacimiento)
summary(final2)
##
## Call:
## glm(formula = LOW ~ LWT + factor(RACE) + SMOKE + HT, family = binomial,
## data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.7751 -0.8747 -0.5712 0.9634 2.1131
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.9725 0.3810 -5.177 0.000000226 ***
## LWT -0.5476 0.2079 -2.634 0.00844 **
## factor(RACE)2 1.2877 0.5216 2.468 0.01357 *
## factor(RACE)3 0.9436 0.4234 2.229 0.02583 *
## SMOKE 1.0716 0.3875 2.765 0.00569 **
## HT 1.7492 0.6908 2.532 0.01134 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 208.25 on 183 degrees of freedom
## AIC: 220.25
##
## Number of Fisher Scoring iterations: 4
Se obtiene, entonces, un modelo donde todas las variables poseen asociación significativa con el bajo peso al nacer. Además, al analizar el AIC, se observa una variación relativamente pequeña respecto a la obtenida en el modelo original (217.99).
Principales factores de riesgo.
Habiendo efectuado el análisis precedente, se concluye que el modelo contempla a los los principales factores de riesgo del bajo peso. Seguidamente se listan en el marco del modelo, y se describe la magnitud de su efecto.
or_glm(data = final2, model = final2, incr = list(SMOKE=1,LWT=1, HT=1,RACE=1,))
## predictor oddsratio ci_low (2.5) ci_high (97.5) increment
## 1 LWT 0.578 0.374 0.850 Indicator variable
## 2 factor(RACE)2 3.624 1.307 10.284 Indicator variable
## 3 factor(RACE)3 2.569 1.136 6.030 Indicator variable
## 4 SMOKE 2.920 1.387 6.394 Indicator variable
## 5 HT 5.750 1.540 24.408 Indicator variable
Según el modelo, los principales factores de riesgo son: el peso de la madre al momento de la última menstruación (LWT), la hipertensión arterial (HT), la raza de la madre (RACE) y haber fumado durante el embarazo (SMOKE).
En cuanto a la magnitud de su efecto, del análisis del OR se desprende que:
- La raza negra de la madre triplica la posibilidad de tener un bajo peso al nacer en relación a la raza blanca, mientras que la raza distinta a la blanca lo duplica
- La hipertención arterial aumenta, en un 57%, las chances de que el niñe pese menos de 2500 gr
- Fumar durante el embarazo prácticamente triplica el riesgo bajo estudio
- Y, por último, el peso de la madre al momento de la última menstruación disminuye la posibilidad de bajo peso al nacer, a medida que aumenta.
Supuestos
Antes de analizar la bondad de ajuste del modelo, es preciso contemplar cuáles son los supuestos necesarios para definir la prueba inferencial de los estimadores de los parámetros. Estos son:
- Linealidad: debe existir una relación lineal entre cada variable predictora continua y el logaritmo de la variable respuesta.
- Independencia: los distintos casos de los datos no deben poseer relación alguna.
- Multicolinealidad: al igual que en la regresión lineal, las variables predictoras no deben estar altamente correlacionadas.
- Variable dicotómica: la variable de interés debe ser dicotómica.
- Tamaño muestral : el tamaño de la muestra debe ser unas diez veces el número de variables independientes.
Bondad del ajuste
A continuación se analiza la bondad del ajuste del modelo obtenido, como así también, los indicadores y/o test que se consideran para su estudio.
summary(final2)
##
## Call:
## glm(formula = LOW ~ LWT + factor(RACE) + SMOKE + HT, family = binomial,
## data = datos_nacimiento)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.7751 -0.8747 -0.5712 0.9634 2.1131
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.9725 0.3810 -5.177 0.000000226 ***
## LWT -0.5476 0.2079 -2.634 0.00844 **
## factor(RACE)2 1.2877 0.5216 2.468 0.01357 *
## factor(RACE)3 0.9436 0.4234 2.229 0.02583 *
## SMOKE 1.0716 0.3875 2.765 0.00569 **
## HT 1.7492 0.6908 2.532 0.01134 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 234.67 on 188 degrees of freedom
## Residual deviance: 208.25 on 183 degrees of freedom
## AIC: 220.25
##
## Number of Fisher Scoring iterations: 4
Se observa que el modelo posee un AIC relativamente bajo en relación a los obtenidos en los distintos modelos previamente calculados, siendo válida la misma observación para el caso de la deviance. Teniendo en cuenta la disminución de la deviance residual, respecto de la nula, es posible notar que el modelo ajusta mejor la respuesta cuando se incluyen las variables predictoras. Además, los p-value demuestran significancia estadística en todos los casos.
Finalmente, se indaga en el porcentaje de casos bien predichos por el modelo. Para ello, se calcula la probabilidad de selección de casos, el punto de corte óptimo para obtener el error de clasificación, la sensitividad, la especificidad y la matriz de confusión.
predic_modelo <- plogis(predict(final2, datos_nacimiento))
optCutOff_modelo <- optimalCutoff(datos_nacimiento$LOW, predic_modelo)
optCutOff_modelo
## [1] 0.503103
El punto óptimo de corte se define en 0.50. Teniendo en cuenta este valor, se calcula el error de clasificación y la matriz de confusión:
misClassError(datos_nacimiento$LOW, predic_modelo, threshold = optCutOff_modelo)
## [1] 0.2646
confusionMatrix(datos_nacimiento$LOW, predic_modelo, threshold = optCutOff_modelo)
## 0 1
## 0 123 43
## 1 7 16
Se observa que el error es relativamente bajo. Al mismo tiempo, se aprecia que el modelo predijo sólo 16 de los casos positivos, y 123 de los negativos.
Finalmente, se procede a analizar la sensitividad, la especificidad y la curva ROC que integra ambas medidas en un gráfico.
sensitivity(datos_nacimiento$LOW, predic_modelo, threshold = optCutOff_modelo)
## [1] 0.2711864
specificity(datos_nacimiento$LOW, predic_modelo, threshold = optCutOff_modelo)
## [1] 0.9461538
plotROC(datos_nacimiento$LOW, predic_modelo)
Se observa la existencia de una baja sensitividad: el modelo predijo el 27% de los casos positivos. Sin embargo, existe un alta especificidad: el modelo predijo el 95% de los casos negativos.
Teniendo en cuenta estos indicadores, como así también el área bajo la curva en el análisis ROC, es posible indicar que si bien el modelo es eficiente en encontrar casos negativos, posee un desempeño regular en la predicción de casos positivos, es decir, en nacimientos de bajo peso.
Conclusión
Del análisis efectuado se desprende que, aunque el modelo posee un buen desempeño en la predicción de casos negativos (es decir, sin bajo peso al nacer), no cuenta con resultados totalmente satisfactorios en lo que respecta a la detección de casos positivos (nacimientos de niñes con peso inferior a 2500 gr).
Bibliografía.
- Aedo, M. et al. (2010). Riesgo relativo y Odds ratio ¿Qué son y cómo se interpretan? Chile: Universidad de Chile.
- Spiegel, M. (1992). Probabilidad y estadística. Chile: Mc GreW Gill.
- Triola, M. (2012). Estadística. México: Pearson Educación.