Este ejercicio de práctica de Regresión Lineal forma parte de la materia Estadística 2 de la Maestría en Generación y Análisis de Información Estadística de UNTREF.
Primero cargamos los paquetes necesarios.
pacman::p_load(tidyverse, haven, janitor, tidyr,
olsrr, corrplot, ggpubr, rstatix,
psych, RColorBrewer)
Por medio de este ejercicio se propone evaluar la capacidad de análisis de asociación y de predicción entre variables cuantitativas. Para este fin se utilizará el conjunto de datos que se describe a continuación: Archivo CORDOBA.SAV
El archivo CORDOBA.SAV contiene información de algunas características de vivienda, hogar y población de departamentos de la provincia de Córdoba. Este archivo consta de las siguientes variables:
DEPART: Departamento provincial
NBI1: Porcentaje de hogares con Necesidades Básicas Insatisfechas sobre el total de hogares de cada departamento.
NBI2: Porcentaje de población en hogares con Necesidades Básicas Insatisfechas sobre el total de población de cada departamento.
CALMAT1: porcentaje de viviendas que presentan materiales resistentes y sólidos en todos los paramentos (pisos, paredes o techos) e incorpora todos los elementos de aislación y terminación.
CALMAT2: porcentaje de viviendas que presentan materiales resistentes y sólidos en todos los paramentos pero le faltan elementos de aislación o terminación al menos en uno de sus componentes (pisos, paredes, techos).
CALMAT3: porcentaje de viviendas que presentan materiales resistentes y sólidos en todos los paramentos pero le faltan elementos de aislación o terminación en todos sus componentes, o bien presenta techos de chapa de metal o fibrocemento.
CALMAT4: porcentaje de viviendas que presentan materiales no resistentes ni sólidos o de desecho al menos en uno de los paramentos.
ALFAB : Porcentaje de alfabetos
COB : Porcentaje de personas que tienen Obra social y/o plan de salud privado o mutual
Nota: Las Necesidades Básicas Insatisfechas fueron definidas según la metodología utilizada en “La pobreza en la Argentina” (Serie Estudios INDEC. N° 1, Buenos Aires, 1984). Los hogares con Necesidades Básicas Insatisfechas (NBI) son los hogares que presentan al menos uno de los siguientes indicadores de privación:
Hacinamiento: hogares que tuvieran más de tres personas por cuarto.
Vivienda: hogares en una vivienda de tipo inconveniente (pieza de inquilinato, vivienda precaria u otro tipo, lo que excluye casa, departamento y rancho).
Condiciones sanitarias: hogares que no tuvieran ningún tipo de retrete.
Asistencia escolar: hogares que tuvieran algún niño en edad escolar (6 a 12 años) que no asistiera a la escuela.
Capacidad de subsistencia: hogares que tuvieran cuatro o más personas por miembro ocupado y, además, cuyo jefe no haya completado tercer grado de escolaridad primaria.
Se requiere realizar los siguientes análisis estadísticos sobre este conjunto de variables:
cordoba <- read_sav("4_cordoba.sav")
head(cordoba)
## # A tibble: 6 × 9
## depart nbi1 nbi2 calmat1 calmat2 calmat3 calmat4 alfab cob
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Calamuchita 13.7 15.1 47.5 40.2 9.15 3.21 97.1 49.9
## 2 Capital 9.6 12.2 57.3 35.8 6 0.85 98.7 55.3
## 3 Colón 13.1 16.4 41.2 45.6 11.2 2.02 98.0 49.3
## 4 Cruz del Eje 24.6 29.2 32.8 45.4 10.6 11.1 94.8 37.2
## 5 General Roca 13.8 15.3 59.7 28.7 9.61 1.96 96.6 53.3
## 6 General San Martín 9.4 10 53.1 40.1 5.97 0.82 98.0 60.3
a. Mediante los gráficos de Boxplot e Histograma, evaluar simetría,
presencia de observaciones atípicas, dispersión de cada
variable.
boxplot(cordoba[-1])
psych::multi.hist(cordoba[-1], bcol = "grey", dcol = "steelblue",
global = F, nrow = 2)
b. Calcular indicadores de tendencia central y de dispersión,
indicando cuál/cuáles son los más adecuados a las
características de las variables.
summary(cordoba[-1])
## nbi1 nbi2 calmat1 calmat2
## Min. : 9.00 Min. : 8.80 Min. :10.70 Min. :27.38
## 1st Qu.:10.53 1st Qu.:10.72 1st Qu.:32.58 1st Qu.:40.10
## Median :13.70 Median :15.70 Median :46.23 Median :41.95
## Mean :17.01 Mean :18.77 Mean :40.80 Mean :43.00
## 3rd Qu.:21.48 3rd Qu.:25.23 3rd Qu.:52.43 3rd Qu.:46.50
## Max. :39.90 Max. :40.80 Max. :64.98 Max. :62.75
## calmat3 calmat4 alfab cob
## Min. : 5.030 Min. : 0.5600 Min. :91.66 Min. :29.93
## 1st Qu.: 6.400 1st Qu.: 0.9675 1st Qu.:95.66 1st Qu.:37.26
## Median : 9.380 Median : 2.0950 Median :97.08 Median :49.62
## Mean : 9.364 Mean : 6.8381 Mean :96.47 Mean :47.77
## 3rd Qu.:11.645 3rd Qu.:10.7250 3rd Qu.:97.51 3rd Qu.:57.55
## Max. :16.100 Max. :34.8900 Max. :98.67 Max. :62.53
cordoba %>% get_summary_stats(type = "mean_sd")
## Warning: attributes are not identical across measure variables;
## they will be dropped
## # A tibble: 8 × 4
## variable n mean sd
## <chr> <dbl> <dbl> <dbl>
## 1 alfab 26 96.5 1.67
## 2 calmat1 26 40.8 15.3
## 3 calmat2 26 43.0 7.43
## 4 calmat3 26 9.36 3.11
## 5 calmat4 26 6.84 8.90
## 6 cob 26 47.8 10.8
## 7 nbi1 26 17.0 8.72
## 8 nbi2 26 18.8 9.64
las restantes variables.
pairs(cordoba[2:9], pch = 19, lower.panel = NULL)
Para una visión más clara sobre la dispersión de las variables:
pivot_cordoba <- cordoba[2:9] %>%
pivot_longer(-c(nbi1, nbi2), names_to = "var", values_to = "value")
ggplot(pivot_cordoba, aes(x = value, y = nbi1)) +
geom_point() +
stat_smooth(method = "lm")+
facet_wrap(~ var, scales = "free")
## `geom_smooth()` using formula 'y ~ x'
las variables disponibles.
M <-cor(cordoba[2:9])
M
## nbi1 nbi2 calmat1 calmat2 calmat3 calmat4
## nbi1 1.0000000 0.9885581 -0.8924089 0.3893973 0.6928712 0.9644483
## nbi2 0.9885581 1.0000000 -0.8862140 0.3798820 0.7446440 0.9436909
## calmat1 -0.8924089 -0.8862140 1.0000000 -0.7458662 -0.8127386 -0.8096014
## calmat2 0.3893973 0.3798820 -0.7458662 1.0000000 0.5955555 0.2370857
## calmat3 0.6928712 0.7446440 -0.8127386 0.5955555 1.0000000 0.5483462
## calmat4 0.9644483 0.9436909 -0.8096014 0.2370857 0.5483462 1.0000000
## alfab -0.8165181 -0.8076804 0.9034763 -0.6971058 -0.8078057 -0.6863838
## cob -0.8794067 -0.9190894 0.8370384 -0.3913652 -0.8007534 -0.8301653
## alfab cob
## nbi1 -0.8165181 -0.8794067
## nbi2 -0.8076804 -0.9190894
## calmat1 0.9034763 0.8370384
## calmat2 -0.6971058 -0.3913652
## calmat3 -0.8078057 -0.8007534
## calmat4 -0.6863838 -0.8301653
## alfab 1.0000000 0.7524168
## cob 0.7524168 1.0000000
corrplot::corrplot(M, type="upper", order="original",
addCoef.col = "black", method = "color",
col=brewer.pal(n=8, name="RdYlBu"))
el NBI y como independiente cada una de las restantes variables
Creamos un modelo con todas las variables
model_cordoba <- lm(nbi1 ~ calmat1 + calmat2 + calmat3 + calmat4 + alfab + cob,
cordoba)
summary(model_cordoba)
##
## Call:
## lm(formula = nbi1 ~ calmat1 + calmat2 + calmat3 + calmat4 + alfab +
## cob, data = cordoba)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2743 -0.5281 0.0653 0.4753 2.1315
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5588.52605 5375.98653 1.040 0.312
## calmat1 -54.73675 53.73513 -1.019 0.321
## calmat2 -54.75060 53.75323 -1.019 0.321
## calmat3 -54.51372 53.77170 -1.014 0.323
## calmat4 -54.00628 53.73910 -1.005 0.328
## alfab -1.06366 0.41079 -2.589 0.018 *
## cob -0.03639 0.07081 -0.514 0.613
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.392 on 19 degrees of freedom
## Multiple R-squared: 0.9806, Adjusted R-squared: 0.9745
## F-statistic: 160.4 on 6 and 19 DF, p-value: 3.1e-15
Chequeamos multicolinealidad
ols_vif_tol(model_cordoba)
## Variables Tolerance VIF
## 1 calmat1 1.150529e-07 8.691654e+06
## 2 calmat2 4.860191e-07 2.057532e+06
## 3 calmat3 2.776672e-06 3.601433e+05
## 4 calmat4 3.387577e-07 2.951962e+06
## 5 alfab 1.642795e-01 6.087186e+00
## 6 cob 1.319205e-01 7.580323e+00
Usamos el método stepwise para la selección con un P-value de entrada de 0.01 y de salida de 0.05
ols_step_both_p(model_cordoba, pent = 0.01, prem= 0.05)
##
## Stepwise Selection Summary
## -------------------------------------------------------------------------------------
## Added/ Adj.
## Step Variable Removed R-Square R-Square C(p) AIC RMSE
## -------------------------------------------------------------------------------------
## 1 calmat4 addition 0.930 0.927 46.5370 122.1731 2.3518
## 2 alfab addition 0.975 0.973 4.2240 97.1323 1.4282
## -------------------------------------------------------------------------------------
Quedando el modelo de la siguiente manera:
model_cordoba <- lm(nbi1 ~ calmat4 + alfab, cordoba)
summary(model_cordoba)
##
## Call:
## lm(formula = nbi1 ~ calmat4 + alfab, data = cordoba)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.5284 -0.9714 0.1083 0.6394 2.7129
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 158.91872 22.87651 6.947 4.42e-07 ***
## calmat4 0.74848 0.04414 16.957 1.71e-14 ***
## alfab -1.52406 0.23496 -6.486 1.28e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.428 on 23 degrees of freedom
## Multiple R-squared: 0.9753, Adjusted R-squared: 0.9732
## F-statistic: 454.4 on 2 and 23 DF, p-value: < 2.2e-16