Tomaremos la proyección de la población establecida por el INE con base en el 2017 para los años 2006, 2009, 2011, 2013, 2015 y 2017 y la compararemos con la suma total de las frecuencias expandidas de las tablas de contingencia generadas en torno a las variables de sexo y pobreza (Corte) a nivel comunal.

Para el 2015 se detecta una anomalía.

Fuentes de datos:

Proyección base 2017 Estimaciones y proyecciones 2002-2035, comunas:
https://www.ine.cl/estadisticas/sociales/demografia-y-vitales/proyecciones-de-poblacion

Leemos la base de datos referida a población del INE desde un csv, la transformamos a rds y la cargamos:

poblacion_chilena <- read.csv2('poblacion_chilena.csv', stringsAsFactors=FALSE)
saveRDS(poblacion_chilena, file = "poblacion_chilena.rds")
pob_chilena  <- readRDS("poblacion_chilena.rds")

Visualicemos sus cuatro primeras líneas:

head(pob_chilena,4)
##   Region Nombre.Region Provincia Nombre.Provincia Comuna Nombre.Comuna
## 1      1      Tarapacá        11          Iquique   1101       Iquique
## 2      1      Tarapacá        11          Iquique   1101       Iquique
## 3      1      Tarapacá        11          Iquique   1101       Iquique
## 4      1      Tarapacá        11          Iquique   1101       Iquique
##   Sexo.1.Hombre.2.Mujer Edad Poblacion.2002 Poblacion.2003 Poblacion.2004
## 1                     1    0           1469           1395           1392
## 2                     1    1           1472           1379           1342
## 3                     1    2           1461           1377           1323
## 4                     1    3           1464           1376           1329
##   Poblacion.2005 Poblacion.2006 Poblacion.2007 Poblacion.2008 Poblacion.2009
## 1           1376           1360           1409           1466           1550
## 2           1360           1360           1350           1402           1461
## 3           1310           1342           1348           1342           1395
## 4           1298           1299           1337           1345           1340
##   Poblacion.2010 Poblacion.2011 Poblacion.2012 Poblacion.2013 Poblacion.2014
## 1           1583           1615           1608           1590           1596
## 2           1547           1582           1615           1605           1588
## 3           1455           1543           1580           1608           1600
## 4           1394           1454           1541           1574           1600
##   Poblacion.2015 Poblacion.2016 Poblacion.2017 Poblacion.2018 Poblacion.2019
## 1           1588           1546           1435           1442           1491
## 2           1591           1586           1543           1449           1460
## 3           1583           1584           1583           1556           1470
## 4           1588           1570           1576           1590           1576
##   Poblacion.2020 Poblacion.2021 Poblacion.2022 Poblacion.2023 Poblacion.2024
## 1           1550           1576           1575           1564           1553
## 2           1507           1550           1567           1565           1553
## 3           1481           1508           1538           1554           1552
## 4           1490           1478           1492           1520           1535
##   Poblacion.2025 Poblacion.2026 Poblacion.2027 Poblacion.2028 Poblacion.2029
## 1           1534           1518           1500           1483           1466
## 2           1539           1523           1507           1489           1470
## 3           1541           1526           1509           1492           1477
## 4           1532           1521           1508           1491           1474
##   Poblacion.2030 Poblacion.2031 Poblacion.2032 Poblacion.2033 Poblacion.2034
## 1           1446           1441           1425           1410           1395
## 2           1454           1434           1429           1413           1397
## 3           1458           1440           1420           1412           1401
## 4           1457           1439           1422           1401           1395
##   Poblacion.2035
## 1           1378
## 2           1383
## 3           1383
## 4           1380

Ésta información la tenemos desglosada por sexo y edad, pero la queremos simplemente agregada a nivel de comuna y año.

pob_por_comuna_ine_2006 <- aggregate(pob_chilena$Poblacion.2006, by=list(Comuna=pob_chilena$Nombre.Comuna), FUN=sum)
pob_por_comuna_ine_2009 <- aggregate(pob_chilena$Poblacion.2009, by=list(Comuna=pob_chilena$Nombre.Comuna), FUN=sum)
pob_por_comuna_ine_2011 <- aggregate(pob_chilena$Poblacion.2011, by=list(Comuna=pob_chilena$Nombre.Comuna), FUN=sum)
pob_por_comuna_ine_2013 <- aggregate(pob_chilena$Poblacion.2013, by=list(Comuna=pob_chilena$Nombre.Comuna), FUN=sum)
pob_por_comuna_ine_2015 <- aggregate(pob_chilena$Poblacion.2015, by=list(Comuna=pob_chilena$Nombre.Comuna), FUN=sum)
pob_por_comuna_ine_2017 <- aggregate(pob_chilena$Poblacion.2017, by=list(Comuna=pob_chilena$Nombre.Comuna), FUN=sum)

Despleguemos la población para las primeras 4 comunas del dataset para el 2017:

head(pob_por_comuna_ine_2017,4)
##            Comuna sum.pob_chilena$Poblacion.2017
## 1       Algarrobo                          14221
## 2           Alhué                           6835
## 3     Alto Biobío                           6719
## 4 Alto del Carmen                           5575

Una vez listos estos datasets, vamos a construir tablas de contingencia relativas a la clasificación de las personas según su situación de pobreza y sexo y a comparar las sumas totales de estos resultados (que ya están expandidos) con el de la población total comunal. Deben aproximarse.

Digresión

Actualmente la poblacion esta disminuyendo?

sum(pob_por_comuna_ine_2006[,2])
## [1] 16347890
sum(pob_por_comuna_ine_2009[,2])
## [1] 16881078
sum(pob_por_comuna_ine_2011[,2])
## [1] 17254159
sum(pob_por_comuna_ine_2013[,2])
## [1] 17611902
sum(pob_por_comuna_ine_2015[,2])
## [1] 17971423
sum(pob_por_comuna_ine_2017[,2])
## [1] 18419192

En general no, pero Canela y Carahue si, no es absurdo pensar que disminuye en algunas actualmente.


Análisis para el año 2015

Al comparar las sumas de las frecuencias de las tablas de contingencia con el valor de la población para cada comuna, observamos que no coinciden y por mucho, situación que es evidente cuando se compara con el total de la población nacional, donde el descuadre es de varios millones.

Sospechamos que existen comunas que no poseen factor de expansión en la Casen 2015

dataset2015  <- readRDS("dataset2015.rds")
sum(is.na(dataset2015$expc))
## [1] 52770

Así es: 52770 no tienen factor de expansión comunal. ¿Que comunas son?

new_DF <- subset(dataset2015, is.na(dataset2015$expc))
newdata <- new_DF[c("comuna", "expc")]
newdata <- distinct(newdata, comuna, .keep_all = TRUE)
head(newdata, 10)
##                     comuna expc
## 7732                camiña   NA
## 7864                 huara   NA
## 8132                  pica   NA
## 11220           mejillones   NA
## 11557         sierra gorda   NA
## 11655               taltal   NA
## 13569 san pedro de atacama   NA
## 14829          maría elena   NA
## 24073              caldera   NA
## 24497      tierra amarilla   NA
# head(newdata, 10)

1 Son 185!

2 El problema es que los factores de expansión están asociados a cada una de LAS OBSERVACIONES, por lo que no se puede obtener un factor de expansión comunal que sea extrapolable a otra base de datos.

Estrategia

Es entonces que las promediaremos por comuna para el 2013 y el 2017 y las promediaremos, redondeando al entero.

Haremso un subset con la data del 2015 que no tiene fdee y le asociaremos uno como ésta media. Luego lo uniremos al subset remanente del dataset2015.

Obtengamos los promedios del fde comunal para el 2013:

2013

dataset2013  <- readRDS("dataset2013.rds")

dataset2013_sub <- dataset2013[  , c("folio", "comuna", "expc")]
    
dataset2013_sub_expc_prom <- aggregate(dataset2013_sub$expc, by=list(Comuna=dataset2013_sub$comuna), FUN=mean)

dataset2013_sub_expc_prom$`mean.dataset2013_sub$expc`<-round(dataset2013_sub_expc_prom$`mean.dataset2013_sub$expc`)

head(dataset2013_sub_expc_prom, 10)
##           Comuna mean.dataset2013_sub$expc
## 1        iquique                        32
## 2  alto hospicio                        30
## 3   pozo almonte                        53
## 4         camiña                         9
## 5          huara                        14
## 6           pica                        49
## 7    antofagasta                        72
## 8     mejillones                        60
## 9   sierra gorda                        14
## 10        taltal                        31

Les asociamos el código comunal correcto:

data_cod <- dataset2013[  , c("folio", "comuna")]
    
names(data_cod)[2] <- "Comuna"
data_cod <- distinct(data_cod ,Comuna, .keep_all = TRUE)
data_cod <- data_cod %>% mutate(Comuna = str_squish(Comuna))
data_cod <- data_cod %>% mutate(codigo = case_when(as.integer(folio / 10000000000) == 0 ~ as.integer(folio/ 10000000), as.integer(folio / 10000000000) <17 ~ as.integer(folio / 10000000)))
    
    data_cod <- subset( data_cod, select = -folio )
    data_cod[171,2]<-16101
    data_cod[172,2]<-16102
    data_cod[173,2]<-16202
    data_cod[174,2]<-16203
    data_cod[175,2]<-16302
    data_cod[176,2]<-16103
    data_cod[177,2]<-16104
    data_cod[178,2]<-16204
    data_cod[179,2]<-16303
    data_cod[180,2]<-16105
    data_cod[181,2]<-16106
    data_cod[182,2]<-16205
    data_cod[183,2]<-16107
    data_cod[184,2]<-16201
    data_cod[185,2]<-16206
    data_cod[186,2]<-16301
    data_cod[187,2]<-16304
    data_cod[188,2]<-16108
    data_cod[189,2]<-16305
    data_cod[190,2]<-16207
    data_cod[191,2]<-16109
    

    df_2013 = merge( x = dataset2013_sub_expc_prom, y = data_cod, by = "Comuna", all.x = TRUE)
    
   head(df_2013,10)
##             Comuna mean.dataset2013_sub$expc codigo
## 1        algarrobo                        69   5602
## 2            alhué                        15  13502
## 3      alto biobío                        42   8314
## 4  alto del carmen                        25   3302
## 5    alto hospicio                        30   1107
## 6            ancud                        62  10202
## 7        andacollo                        29   4103
## 8            angol                        45   9201
## 9      antofagasta                        72   2101
## 10          antuco                        12   8302

Hacemos lo mismo para el 2017

dataset2017  <- readRDS("dataset2017.rds")

dataset2017_sub <- dataset2017[ , c("folio", "comuna", "expc")]
    
dataset2017_sub_expc_prom <- aggregate(dataset2017_sub$expc, by=list(Comuna=dataset2017_sub$comuna), FUN=mean)

dataset2017_sub_expc_prom$`mean.dataset2017_sub$expc`<-round(dataset2017_sub_expc_prom$`mean.dataset2017_sub$expc`)

head(dataset2017_sub_expc_prom, 10)
##           Comuna mean.dataset2017_sub$expc
## 1        Iquique                        28
## 2  Alto Hospicio                        42
## 3   Pozo Almonte                        68
## 4         Camiña                        10
## 5          Huara                        20
## 6           Pica                        91
## 7    Antofagasta                        71
## 8     Mejillones                        70
## 9   Sierra Gorda                        23
## 10        Taltal                        39

Les asociamos el código comunal correcto:

      data_code <- dataset2017[  , c("folio", "comuna")]
      
      names(data_code)[2] <- "Comuna"
      data_code <- distinct(data_code , Comuna, .keep_all = TRUE)
      #
      data_code <- data_code %>% mutate(Comuna = str_squish(Comuna))
      
      data_code <- data_code %>% mutate(codigo = case_when(as.integer(folio / 1000000000000) == 0 ~ as.integer(folio/ 100000000)
                                                           , as.integer(folio / 1000000000000) <17 ~ as.integer(folio / 100000000)
                                                           
      ))
      
      data_cod <- subset( data_code, select = -folio )
      
      data_cod[172,2]<-16102
      data_cod[171,2]<-16101
      data_cod[176,2]<-16103
      data_cod[173,2]<-16202
      data_cod[174,2]<-16203
      data_cod[175,2]<-16302
      data_cod[177,2]<-16104
      data_cod[178,2]<-16204
      data_cod[179,2]<-16303
      data_cod[180,2]<-16105
      data_cod[181,2]<-16106
      data_cod[182,2]<-16205
      data_cod[183,2]<-16107
      data_cod[184,2]<-16201
      data_cod[185,2]<-16206
      data_cod[186,2]<-16301
      data_cod[187,2]<-16304
      data_cod[188,2]<-16108
      data_cod[189,2]<-16305
      data_cod[190,2]<-16207
      data_cod[191,2]<-16109
      

      
      df_2017 = merge( x = dataset2017_sub_expc_prom, y = data_cod, by = "Comuna", all.x = TRUE)

      
      
head(df_2017, 10)
##             Comuna mean.dataset2017_sub$expc codigo
## 1        Algarrobo                        81   5602
## 2            Alhué                        18  13502
## 3      Alto Biobío                        37   8314
## 4  Alto del Carmen                        42   3302
## 5    Alto Hospicio                        42   1107
## 6            Ancud                        79  10202
## 7        Andacollo                        27   4103
## 8            Angol                        55   9201
## 9      Antofagasta                        71   2101
## 10          Antuco                        15   8302

Ahora unimos los datasets y calculamos un promedio para el f de e:

factores_de_exp_mean <- merge( x = df_2013, y = df_2017, by = "codigo", all.x = TRUE)
factores_de_exp_mean$mean <- rowMeans(factores_de_exp_mean[,c('mean.dataset2013_sub$expc', 'mean.dataset2017_sub$expc')], na.rm=TRUE)
factores_de_exp_mean$mean <- round(factores_de_exp_mean$mean)
head(factores_de_exp_mean, 10)
##    codigo      Comuna.x mean.dataset2013_sub$expc      Comuna.y
## 1    1101       iquique                        32       Iquique
## 2    1107 alto hospicio                        30 Alto Hospicio
## 3    1401  pozo almonte                        53  Pozo Almonte
## 4    1402        camiña                         9        Camiña
## 5    1404         huara                        14         Huara
## 6    1405          pica                        49          Pica
## 7    2101   antofagasta                        72   Antofagasta
## 8    2102    mejillones                        60    Mejillones
## 9    2103  sierra gorda                        14  Sierra Gorda
## 10   2104        taltal                        31        Taltal
##    mean.dataset2017_sub$expc mean
## 1                         28   30
## 2                         42   36
## 3                         68   60
## 4                         10   10
## 5                         20   17
## 6                         91   70
## 7                         71   72
## 8                         70   65
## 9                         23   18
## 10                        39   35

Aplicación al 2015

Ahora debemos asignar el mismo factor de expansión de acuerdo a las comunas a las que pertenecen cada uno de las observaciones que en la Casen 2015 no lo tienen.

La estrategia es construir una subset de la data que no contiene el factor de expansion, para luego agregarla a la data 2015 que si los tiene y asi construir un dataset completo.

Tomamos factores_de_exp_mean y hacemos un merge por codigo con la Casen2015 original

Pero primero obtengamos el dataset2015 con sus códigos comunales correctos:

dataset2015  <- readRDS("dataset2015.rds")

      data_code <- dataset2015[  , c("folio", "comuna")]
      
      data_code <- distinct(data_code , comuna, .keep_all = TRUE)
      
      data_code <- data_code %>% mutate(comuna = str_squish(comuna))
      
      data_code <- data_code %>% mutate(codigo = case_when(as.integer(folio / 10000000000) == 0 ~ as.integer(folio/ 10000000)
                                                           , as.integer(folio / 10000000000) <17 ~ as.integer(folio / 10000000)))
      
      data_cod <- subset( data_code, select = -folio )
      data_cod[171,2]<-16101
      data_cod[172,2]<-16102
      data_cod[173,2]<-16202
      data_cod[174,2]<-16203
      data_cod[175,2]<-16302
      data_cod[176,2]<-16103
      data_cod[177,2]<-16104
      data_cod[178,2]<-16204
      data_cod[179,2]<-16303
      data_cod[180,2]<-16105
      data_cod[181,2]<-16106
      data_cod[182,2]<-16205
      data_cod[183,2]<-16107
      data_cod[184,2]<-16201
      data_cod[185,2]<-16206
      data_cod[186,2]<-16301
      data_cod[187,2]<-16304
      data_cod[188,2]<-16108
      data_cod[189,2]<-16305
      data_cod[190,2]<-16207
      data_cod[191,2]<-16109

      df_2015 = merge( x = dataset2015, y = data_cod, by = "comuna", all.x = TRUE)

# head(df_2015, 10)

El problema es que tenemos todas las comunas. Debemos hacer un subset solo con las de interes!

df_2015_sub <- subset(df_2015, is.na(df_2015$expc))
# head(df_2015_sub, 10)

Como uno de los pasos finales unimos nuestra tabla con los promedios del f de e comunal, con el subset anterior:

db_final_2015 = merge( x = df_2015_sub, y = factores_de_exp_mean, by = "codigo", all.x = TRUE)
# head(db_final_2015,10)

Verificamos que posee el mismo numero de filas:

nrow(db_final_2015)
## [1] 52770

Y verificamos que todas sus filas posean el factor de expansión que hemos construído y asignado:

sum(is.na(db_final_2015$mean))
## [1] 0

Ahora sólo hay que ordenar la cantidad y nombres de las columnas, eliminar los na expc del dataset2015 y añadir nuestro ultimo dataframe al final.

Así quedaría lista la Casen2015 para ser trabajada.