Explora los datos

library(readr)
data_rlm <- read_csv("Documents/data_rlm.csv")
## Rows: 78 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): municipio
## dbl (6): ing_pc, bach_pct, desem_pct, banda_pct, pobreza_pct, tam_hogar
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
str(data_rlm)
## 'data.frame':    78 obs. of  6 variables:
##  $ ing_pc     : num  10225 12755 7709 9413 17074 ...
##  $ bach_pct   : num  15.6 21 21.3 20 28.4 ...
##  $ desem_pct  : num  9.89 9.25 17.13 9.98 13.04 ...
##  $ banda_pct  : num  25.7 34.5 28.4 29.7 35.8 ...
##  $ pobreza_pct: num  28.9 24.1 30.3 31.5 10.1 ...
##  $ tam_hogar  : num  3.63 3.02 3.03 3.01 2.63 2.68 3.29 3.08 2.8 3.11 ...

Cargamos los datos utilizando la librería readr, y con la función str() podemos visualizar que la base de datos cuenta con 78 observaciones y 6 variables; ingreso per cápita, porciento de estudios de bachillerato o más, tasa de desempleo, acceso a banda ancha, porciento de pobreza y tamaño de hogar.

Realiza un análisis de correlación

library(corrplot)
R <- cor(data_rlm, use = "pairwise.complete.obs")

corrplot(R,
  method = "color",        # colores en lugar de números
  type = "lower",          # solo triángulo inferior
  addCoef.col = "black",   # añadir valores en negro
  tl.col = "black",        # etiquetas de variables en negro
  tl.srt = 45,             # rotar etiquetas
  diag = FALSE) 

Utilizando la libreria corrplot junto con la función cor(), el modelo nos tira una correlacion de el ingreso per cápita con todas las otras variables.

Podemos ver que la correlación entre el ingreso per cápita y el porcentaje de bachillerato muestra índice de relación de 0.89,siendo la más alta. Seguido de este mismo, está el índice de 0.78, los municipios con acceso a internet de banda ancha es similar de fuerte. En comparación podemos ver el índice negativo de -0.85 siendo los municipios con mayor porcentaje de pobreza.

Ajusta un modelo por subconjuntos, comparando el 𝐵𝐼𝐶 y 𝑅2-ajustado.

# Creamos el modelo saturado
saturado <- ing_pc ~ bach_pct + desem_pct + banda_pct + pobreza_pct + tam_hogar 
reg  <- lm(saturado, data=data_rlm) # todos los predictores
summary(reg)
## 
## Call:
## lm(formula = saturado, data = data_rlm)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4585.2 -1168.6  -125.4  1208.2  5224.9 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  3757.23    3338.95   1.125 0.264211    
## bach_pct      264.14      68.73   3.843 0.000259 ***
## desem_pct      20.05      74.85   0.268 0.789533    
## banda_pct     125.32      45.30   2.766 0.007198 ** 
## pobreza_pct  -210.64      47.68  -4.417 3.45e-05 ***
## tam_hogar     816.67     622.90   1.311 0.193997    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1982 on 72 degrees of freedom
## Multiple R-squared:  0.8457, Adjusted R-squared:  0.835 
## F-statistic: 78.93 on 5 and 72 DF,  p-value: < 2.2e-16
library(leaps)
saturado <- ing_pc ~ bach_pct + desem_pct + banda_pct + pobreza_pct + tam_hogar  

reg_sub  <- regsubsets(saturado, data=data_rlm) # todos los predictores
reg_summary <- (reg_sub)
reg  <- regsubsets(saturado, data=data_rlm, nvmax=5) # todos los predictores
reg_summary <- summary(reg)

# Número óptimo de predictores según cada criterio
best_bic <- which.min(reg_summary$bic)
best_r2  <- which.max(reg_summary$adjr2)

# Visualización comparativa
par(mfrow = c(1, 2))

plot(reg_summary$bic, type="b", col="red", pch=19, 
     xlab="Número de predictores", ylab="BIC", 
     main="Criterio BIC")
points(best_bic, reg_summary$bic[best_bic], pch=19, cex=1.5, col="blue")

plot(reg_summary$adjr2, type="b", col="darkgreen", pch=19, 
     xlab="Número de predictores", ylab="R^2-ajustado", 
     main="Criterio R^2-ajustado")
points(best_r2, reg_summary$adjr2[best_r2], pch=19, cex=1.5, col="blue")

Ajusta modelos paso a paso (forward, backward, both) usando 𝐵𝐼𝐶.

Forward

library(stats)
form_log <- ing_pc ~ bach_pct + desem_pct + banda_pct + pobreza_pct + tam_hogar

# Modelos de nulo y saturado
m0_log <- lm(ing_pc ~ 1, data = data_rlm)   # sin predictores
mF_log <- lm(form_log, data = data_rlm)        # todos los predictores

# Hacia adelante 
m1_step_log <- step(m0_log,
  scope     = list(lower = ~1, upper = formula(mF_log)),
  direction = "forward",
  k         = log(nrow(data_rlm)),
  trace     = TRUE)
## Start:  AIC=1328.25
## ing_pc ~ 1
## 
##               Df  Sum of Sq        RSS    AIC
## + bach_pct     1 1438089133  395800604 1213.0
## + pobreza_pct  1 1331610382  502279355 1231.6
## + banda_pct    1 1121735582  712154155 1258.8
## <none>                      1833889736 1328.2
## + desem_pct    1    8354792 1825534944 1332.2
## + tam_hogar    1    5821235 1828068502 1332.4
## 
## Step:  AIC=1213.01
## ing_pc ~ bach_pct
## 
##               Df Sum of Sq       RSS    AIC
## + pobreza_pct  1  77610119 318190485 1200.3
## + banda_pct    1  29535087 366265517 1211.3
## <none>                     395800604 1213.0
## + tam_hogar    1   4923053 390877551 1216.4
## + desem_pct    1   2817657 392982947 1216.8
## 
## Step:  AIC=1200.34
## ing_pc ~ bach_pct + pobreza_pct
## 
##             Df Sum of Sq       RSS    AIC
## + banda_pct  1  28478762 289711723 1197.4
## <none>                   318190485 1200.3
## + tam_hogar  1   4915101 313275383 1203.5
## + desem_pct  1    672748 317517737 1204.5
## 
## Step:  AIC=1197.39
## ing_pc ~ bach_pct + pobreza_pct + banda_pct
## 
##             Df Sum of Sq       RSS    AIC
## <none>                   289711723 1197.4
## + tam_hogar  1   6489907 283221816 1200.0
## + desem_pct  1     17073 289694650 1201.7

Backward

# Hacia atras 
m2_step_log <- step(mF_log,
  direction = "backward",
  k         = log(nrow(data_rlm)),
  trace     = TRUE)
## Start:  AIC=1204.26
## ing_pc ~ bach_pct + desem_pct + banda_pct + pobreza_pct + tam_hogar
## 
##               Df Sum of Sq       RSS    AIC
## - desem_pct    1    282063 283221816 1200.0
## - tam_hogar    1   6754897 289694650 1201.7
## <none>                     282939753 1204.3
## - banda_pct    1  30072895 313012647 1207.8
## - bach_pct     1  58048450 340988202 1214.5
## - pobreza_pct  1  76685336 359625088 1218.6
## 
## Step:  AIC=1199.98
## ing_pc ~ bach_pct + banda_pct + pobreza_pct + tam_hogar
## 
##               Df Sum of Sq       RSS    AIC
## - tam_hogar    1   6489907 289711723 1197.4
## <none>                     283221816 1200.0
## - banda_pct    1  30053567 313275383 1203.5
## - bach_pct     1  61021640 344243456 1210.8
## - pobreza_pct  1  76514196 359736013 1214.3
## 
## Step:  AIC=1197.39
## ing_pc ~ bach_pct + banda_pct + pobreza_pct
## 
##               Df Sum of Sq       RSS    AIC
## <none>                     289711723 1197.4
## - banda_pct    1  28478762 318190485 1200.3
## - bach_pct     1  62624091 352335814 1208.3
## - pobreza_pct  1  76553794 366265517 1211.3

Hybrid

# híbrido 
m3_step_log <- step(m0_log,
  scope     = list(lower = ~1, upper = formula(mF_log)),
  direction = "both",
  k         = log(nrow(data_rlm)),
  trace     = TRUE)
## Start:  AIC=1328.25
## ing_pc ~ 1
## 
##               Df  Sum of Sq        RSS    AIC
## + bach_pct     1 1438089133  395800604 1213.0
## + pobreza_pct  1 1331610382  502279355 1231.6
## + banda_pct    1 1121735582  712154155 1258.8
## <none>                      1833889736 1328.2
## + desem_pct    1    8354792 1825534944 1332.2
## + tam_hogar    1    5821235 1828068502 1332.4
## 
## Step:  AIC=1213.01
## ing_pc ~ bach_pct
## 
##               Df  Sum of Sq        RSS    AIC
## + pobreza_pct  1   77610119  318190485 1200.3
## + banda_pct    1   29535087  366265517 1211.3
## <none>                       395800604 1213.0
## + tam_hogar    1    4923053  390877551 1216.4
## + desem_pct    1    2817657  392982947 1216.8
## - bach_pct     1 1438089133 1833889736 1328.2
## 
## Step:  AIC=1200.34
## ing_pc ~ bach_pct + pobreza_pct
## 
##               Df Sum of Sq       RSS    AIC
## + banda_pct    1  28478762 289711723 1197.4
## <none>                     318190485 1200.3
## + tam_hogar    1   4915101 313275383 1203.5
## + desem_pct    1    672748 317517737 1204.5
## - pobreza_pct  1  77610119 395800604 1213.0
## - bach_pct     1 184088870 502279355 1231.6
## 
## Step:  AIC=1197.39
## ing_pc ~ bach_pct + pobreza_pct + banda_pct
## 
##               Df Sum of Sq       RSS    AIC
## <none>                     289711723 1197.4
## + tam_hogar    1   6489907 283221816 1200.0
## - banda_pct    1  28478762 318190485 1200.3
## + desem_pct    1     17073 289694650 1201.7
## - bach_pct     1  62624091 352335814 1208.3
## - pobreza_pct  1  76553794 366265517 1211.3

Comparar los modelos obtenidos y justificar cuál sería el mejor

Al ejecutar modelos por subconjuntos y los modelos paso a paso, podemos ver que los modelos de paso a paso llegan al mismo resultado y modelo final. Esto demuestra que los modelos paso a paso reflejan una consistencia en los resultados, ya que su selección final de variables fueron las mismas en los tres modelos.

Interpreta los coeficientes del modelo final

summary(m1_step_log) 
## 
## Call:
## lm(formula = ing_pc ~ bach_pct + pobreza_pct + banda_pct, data = data_rlm)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4644.3  -995.6   -35.5  1360.0  5031.6 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6481.30    2522.94   2.569 0.012215 *  
## bach_pct      270.45      67.62   3.999 0.000149 ***
## pobreza_pct  -209.43      47.36  -4.422  3.3e-05 ***
## banda_pct     119.54      44.32   2.697 0.008657 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1979 on 74 degrees of freedom
## Multiple R-squared:  0.842,  Adjusted R-squared:  0.8356 
## F-statistic: 131.5 on 3 and 74 DF,  p-value: < 2.2e-16
summary(m2_step_log) 
## 
## Call:
## lm(formula = ing_pc ~ bach_pct + banda_pct + pobreza_pct, data = data_rlm)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4644.3  -995.6   -35.5  1360.0  5031.6 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6481.30    2522.94   2.569 0.012215 *  
## bach_pct      270.45      67.62   3.999 0.000149 ***
## banda_pct     119.54      44.32   2.697 0.008657 ** 
## pobreza_pct  -209.43      47.36  -4.422  3.3e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1979 on 74 degrees of freedom
## Multiple R-squared:  0.842,  Adjusted R-squared:  0.8356 
## F-statistic: 131.5 on 3 and 74 DF,  p-value: < 2.2e-16
summary(m3_step_log) 
## 
## Call:
## lm(formula = ing_pc ~ bach_pct + pobreza_pct + banda_pct, data = data_rlm)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4644.3  -995.6   -35.5  1360.0  5031.6 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6481.30    2522.94   2.569 0.012215 *  
## bach_pct      270.45      67.62   3.999 0.000149 ***
## pobreza_pct  -209.43      47.36  -4.422  3.3e-05 ***
## banda_pct     119.54      44.32   2.697 0.008657 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1979 on 74 degrees of freedom
## Multiple R-squared:  0.842,  Adjusted R-squared:  0.8356 
## F-statistic: 131.5 on 3 and 74 DF,  p-value: < 2.2e-16

El modelo final muestra que por cada unidad porcentual que aumenta en el porcentaje de nivel de estudio (bach_pct) en un municipio, el ingreso per cápita (ing_pc) aumenta. Sin embargo, por cada unidad porcentual que aumenta el porciento de la pobreza (pobreza_pct) el ingreso per cápita (ing_pc) disminuye. Esto refleja que los municipios con mayor porcentaje de nivel de estudio tienen mejor ingresos, mientras los municipios con más índices de porcentaje de pobreza el ingreso disminuye.

Concluye de forma general sobre el trabajo realizado

En este trabajo utilizamos diferentes de modelos de regresión lineal múltiple para analizar los municipios de Puerto Rico y correlacionarlas con las variables de la base de datos. Se pudo comprobar que la mayor relación del ingreso per cápita depende de los niveles de estudios y el porcentaje de pobreza en los municipios.