Expansión de la CASEN sobre el CENSO de PERSONAS (Nivel parcial regional urbano para el 2017)

Y regresión lineal de ingresos medios por zona sobre frecuencias de respuesta a la pregunta: Escolaridad, cuya correlación (0.8717) resultó la más alta con los ingresos expandidos.

VE-CC-AJ

DataIntelligence

date: 02-08-2021

1 Resumen

Iniciaremos expandiendo los ingresos promedios (multiplicación del ingreso promedio mensual comunal y los habitantes de la misma comuna) obtenidos de la CASEN 2017 sobre la categoría de respuesta: “Escolaridad” del CENSO de personas del 2017, que fue la categoría de respuesta que más alto correlacionó con los ingresos expandidos, ambos a nivel comunal y ambos a nivel URBANO.

En este trabajo continuaremos con el análisis sobre el Chile urbano pero de manera parcial-regional. Automatizaremos para seleccionar el mejor modelo que maximice el coeficiente de determinación, y sobre tal modelo ejecutaremos la variable independiente para obtener nuestros ingresos estimados y los ingresos medios por zona.

Aplicamos un criterio para evitar que los ingresos promedio estimados por zona salgan de limites razonables


1.1 Variable CENSO

Necesitamos calcular las frecuencias a nivel censal de las respuestas correspondientes a la categoría: Escolaridad del Censo de personas. Recordemos que ésta fué la más alta correlación en relación a los ingresos expandidos (ver aquí).

1.1.1 Lectura y tratamiento de la tabla censal de personas

Leemos la tabla Censo 2017 de personas que ya tiene integrada la clave zonal:

tabla_con_clave <- readRDS("censo_personas_con_clave_17")

Se aplica un ciclo for a una función fn_reg para una region sobre los 8 modelos existentes para elegir el que posea el mayor coeficiente de determinación, y con una condición if, dentro, validamos que los coeficientes de la regresión sean estadisticamente significativos.

for (ff in 1:16) {
  fn_reg(ff)
}
## [1] "------"
## [1] "region 1"
## [1] "log-log"
## 
## Call:
## lm(formula = log(multipob) ~ log(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.50687 -0.16130 -0.00176  0.14035  1.87748 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 14.05199    0.07067   198.8   <2e-16 ***
## log(Freq.x)  0.96185    0.01480    65.0   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4302 on 152 degrees of freedom
##   (43 observations deleted due to missingness)
## Multiple R-squared:  0.9653, Adjusted R-squared:  0.965 
## F-statistic:  4225 on 1 and 152 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 2"
## [1] "log-log"
## 
## Call:
## lm(formula = log(multipob) ~ log(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.28129 -0.22751  0.07178  0.23656  1.09884 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 13.87272    0.07725  179.57   <2e-16 ***
## log(Freq.x)  0.95189    0.01507   63.14   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4125 on 130 degrees of freedom
##   (132 observations deleted due to missingness)
## Multiple R-squared:  0.9684, Adjusted R-squared:  0.9682 
## F-statistic:  3987 on 1 and 130 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 3"
## [1] "log-log"
## 
## Call:
## lm(formula = log(multipob) ~ log(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.87110 -0.22328  0.00864  0.21298  2.85636 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 14.05754    0.05873  239.35   <2e-16 ***
## log(Freq.x)  0.94293    0.01318   71.52   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.435 on 231 degrees of freedom
##   (31 observations deleted due to missingness)
## Multiple R-squared:  0.9568, Adjusted R-squared:  0.9566 
## F-statistic:  5115 on 1 and 231 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 4"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6241.5  -651.3  -112.7   506.5  8113.1 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   832.862     58.769   14.17   <2e-16 ***
## sqrt(Freq.x)  856.795      3.954  216.68   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1251 on 850 degrees of freedom
## Multiple R-squared:  0.9822, Adjusted R-squared:  0.9822 
## F-statistic: 4.695e+04 on 1 and 850 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 5"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6114.7  -820.5  -198.5   634.4 11856.1 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   668.629     85.784   7.794 1.55e-14 ***
## sqrt(Freq.x)  943.983      4.637 203.569  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1629 on 1049 degrees of freedom
##   (189 observations deleted due to missingness)
## Multiple R-squared:  0.9753, Adjusted R-squared:  0.9753 
## F-statistic: 4.144e+04 on 1 and 1049 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 6"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4336.7  -658.1   -99.8   495.3 13021.6 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   724.350     58.968   12.28   <2e-16 ***
## sqrt(Freq.x)  965.711      4.231  228.27   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1296 on 1093 degrees of freedom
## Multiple R-squared:  0.9795, Adjusted R-squared:  0.9794 
## F-statistic: 5.211e+04 on 1 and 1093 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 7"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5502.4  -648.8  -117.2   532.3 15206.6 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   692.037     48.228   14.35   <2e-16 ***
## sqrt(Freq.x)  915.281      3.887  235.46   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1346 on 1547 degrees of freedom
## Multiple R-squared:  0.9729, Adjusted R-squared:  0.9728 
## F-statistic: 5.544e+04 on 1 and 1547 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 8"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10820.6   -689.8   -113.8    577.3   8973.7 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   832.520     53.000   15.71   <2e-16 ***
## sqrt(Freq.x)  870.626      3.762  231.44   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1424 on 1371 degrees of freedom
##   (118 observations deleted due to missingness)
## Multiple R-squared:  0.975,  Adjusted R-squared:  0.975 
## F-statistic: 5.356e+04 on 1 and 1371 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 9"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7389.5  -678.6  -142.6   510.8 10283.2 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   900.872     37.443   24.06   <2e-16 ***
## sqrt(Freq.x)  814.636      3.547  229.65   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1218 on 1923 degrees of freedom
## Multiple R-squared:  0.9648, Adjusted R-squared:  0.9648 
## F-statistic: 5.274e+04 on 1 and 1923 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 10"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4760.5  -667.8  -105.3   472.9  9360.8 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   972.671     44.178   22.02   <2e-16 ***
## sqrt(Freq.x)  848.974      3.941  215.43   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1205 on 1377 degrees of freedom
##   (108 observations deleted due to missingness)
## Multiple R-squared:  0.9712, Adjusted R-squared:  0.9712 
## F-statistic: 4.641e+04 on 1 and 1377 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 11"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2604.3  -655.6  -100.3   547.2  4630.6 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   341.508     94.180   3.626 0.000359 ***
## sqrt(Freq.x) 1017.631      9.571 106.328  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1046 on 215 degrees of freedom
##   (18 observations deleted due to missingness)
## Multiple R-squared:  0.9813, Adjusted R-squared:  0.9813 
## F-statistic: 1.131e+04 on 1 and 215 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 12"
## [1] "log-log"
## 
## Call:
## lm(formula = log(multipob) ~ log(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.24264 -0.16517  0.00359  0.20103  2.41149 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 14.56706    0.08648  168.44   <2e-16 ***
## log(Freq.x)  0.87991    0.01801   48.85   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4799 on 118 degrees of freedom
##   (78 observations deleted due to missingness)
## Multiple R-squared:  0.9529, Adjusted R-squared:  0.9525 
## F-statistic:  2386 on 1 and 118 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 13"
## [1] "log-log"
## 
## Call:
## lm(formula = log(multipob) ~ log(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.19323 -0.20402 -0.03615  0.16156  1.63449 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 14.294782   0.035035   408.0   <2e-16 ***
## log(Freq.x)  0.929090   0.006746   137.7   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3366 on 776 degrees of freedom
##   (1645 observations deleted due to missingness)
## Multiple R-squared:  0.9607, Adjusted R-squared:  0.9606 
## F-statistic: 1.897e+04 on 1 and 776 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 14"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3407.8  -591.3  -102.5   477.1  9672.8 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   794.282     53.008   14.98   <2e-16 ***
## sqrt(Freq.x)  875.924      4.836  181.14   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1057 on 725 degrees of freedom
## Multiple R-squared:  0.9784, Adjusted R-squared:  0.9784 
## F-statistic: 3.281e+04 on 1 and 725 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 15"
## [1] "log-log"
## 
## Call:
## lm(formula = log(multipob) ~ log(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.13160 -0.10597 -0.01099  0.13525  0.73068 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 13.56959    0.06852  198.05   <2e-16 ***
## log(Freq.x)  1.02441    0.01221   83.89   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2722 on 112 degrees of freedom
##   (14 observations deleted due to missingness)
## Multiple R-squared:  0.9843, Adjusted R-squared:  0.9842 
## F-statistic:  7037 on 1 and 112 DF,  p-value: < 2.2e-16
## 
## [1] "------"
## [1] "region 16"
## [1] "raíz-raíz"
## 
## Call:
## lm(formula = sqrt(multipob) ~ sqrt(Freq.x), data = h_y_m_comuna_corr)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6098.9  -542.2   -71.3   502.1 10412.0 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   582.702     45.259   12.88   <2e-16 ***
## sqrt(Freq.x)  890.931      4.575  194.73   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1107 on 1081 degrees of freedom
## Multiple R-squared:  0.9723, Adjusted R-squared:  0.9723 
## F-statistic: 3.792e+04 on 1 and 1081 DF,  p-value: < 2.2e-16

1.2 Tablas de trabajo (sobre la cual se calcula la ecuación de regresión)

archivos <- dir("tablas_regiones_r", pattern = "*.xlsx")
archivos <- as.data.frame(archivos)
archivos <- filter(archivos, grepl("tabla_de_trabajo_multipob_region", archivos) ) 
archivos <- as.vector(archivos$archivos)
receptaculo <- data.frame()

for (n in archivos) {

direcciones <- paste0("tablas_regiones_r/",n)
cargado <- read_xlsx(direcciones) 

region <- str_replace_all(direcciones, "tablas_regiones_r/tabla_de_trabajo_multipob_","")
region <- str_replace_all(region, "_rural.xlsx","")

cargado$region <- paste0(region,"_r")

receptaculo <- rbind(receptaculo, cargado)

}

write_xlsx(receptaculo,"tablas_regiones_r/uniones/Tablas_de_trabajo_r.xlsx")

datatable(head(receptaculo,100),filter = 'bottom',class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))

1.3 Tabla de regresión lineal

archivos <- dir("tablas_regiones_r", pattern = "*.xlsx")
archivos <- as.data.frame(archivos)
archivos <- filter(archivos, grepl("tabla_de_trabajo_region", archivos) ) 
archivos <- as.vector(archivos$archivos)
 
receptaculo <- data.frame()

for (n in archivos) {

direcciones <- paste0("tablas_regiones_r/",n)
cargado <- read_xlsx(direcciones) 

region <- str_replace_all(direcciones, "tablas_regiones_r/tabla_de_trabajo_","")
region <- str_replace_all(region, "_r.xlsx","")

cargado$region <- paste0(region,"_r")

receptaculo <- rbind(receptaculo, cargado)

} 
write_xlsx(receptaculo,"tablas_regiones_r/uniones/Tabla_de_regresión_lineal_r.xlsx")

datatable(head(receptaculo,100),filter = 'bottom',class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))

1.4 Tablas de estadisticas zonales

archivos <- dir("tablas_regiones_r", pattern = "*.xlsx")
archivos <- as.data.frame(archivos)
archivos <- filter(archivos, grepl("estadisticos_finales_region", archivos) ) 
archivos <- as.vector(archivos$archivos)

receptaculo <- data.frame()

for (n in archivos) {

direcciones <- paste0("tablas_regiones_r/",n)
cargado <- read_xlsx(direcciones)
cargado <- cargado[,-c(2,3,4,5,6)]
cargado <- filter(cargado, cargado$mean != 'is.na')

region <- str_replace_all(direcciones, "tablas_regiones_r/estadisticos_finales_","")
region <- str_replace_all(region, "_r.xlsx","")

cargado$region <- paste0(region,"_r")

receptaculo <- rbind(receptaculo, cargado)

}
cargado2 <- read_xlsx(direcciones)
cargado2 <- cargado2[,c(1,2,3,4,5,6)]

receptaculo2u <- merge(x = cargado2, y = receptaculo, by = "código", all.x = TRUE)
write_xlsx(receptaculo2u,"tablas_regiones_r/uniones/Tablas_de_estadisticas_zonales_r.xlsx")

datatable(head(receptaculo2u,100),filter = 'bottom',class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))

2 Verificación.

Por un lado hemos construido nuestro campo ingreso medio zona de una sola vez a nivel nacional, en este trabajo lo hemos hecho parcialmente por region, por lo que en teoria debiesemos haber obtenido estimaciones mas cercanas a la realidad, como metodo de prueba haremos lo siguiente:

Tendremos una tabla con cuatro campos:

  1. clave
  2. promedio_i
  3. ing_medio_zona_nacional
  4. ing_medio_zona_regional
tabla_nacional <- read.dbf("tabla_de_trabajo_escolaridad.dbf")
names(tabla_nacional)[14] <- "ingresos_medios_zona"

tabla_zonal <- read_xlsx("tablas_regiones_r/uniones/Tabla_de_regresión_lineal_r.xlsx")
names(tabla_zonal)[14] <- "ingresos_medios_zonales_parciales"
tabla_comprobar <- merge(x= tabla_nacional, y= tabla_zonal, by= "clave", all.x = TRUE)
tabla_comprobar <- tabla_comprobar[,c(1,6,14,27)]

datatable(head(tabla_comprobar,100),filter = 'bottom',class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))
tabla_comprobar$totales <- abs(tabla_comprobar$ingresos_medios_zona - tabla_comprobar$promedio_i.x)

tabla_comprobar$parciales <- abs(tabla_comprobar$ingresos_medios_zonales_parciales - tabla_comprobar$promedio_i.x)

datatable(head(tabla_comprobar,100),filter = 'bottom',class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))
sum(tabla_comprobar$totales, na.rm = TRUE)
## [1] 626045864
sum(tabla_comprobar$parciales, na.rm = TRUE)
## [1] 735424352
length(tabla_comprobar$totales)
## [1] 10005
length(tabla_comprobar$parciales)
## [1] 10005