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
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.
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.
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:
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
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
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.