Estudio Censo por manzanas 2017

De zona a manzana.

VE-CC-AJ

DataIntelligence
date: 13-08-2021

1 Intro

La división territorial chilena consiste en la siguiente secuencia: región-provincia-comuna-zona-manzana. Por un asunto legal no todas las manzanas pueden contener toda la información requerida, pues sería muy fácil identificar a las personas. Éstas manzanas se denominan indeterminadas en los campos en cuestión.

Por ejemplo a nivel manzanal tenemos el dato de la cantidad de personas que la componen, pero no cuántos hombres y mujeres hay. A nivel zonal éste dato lo tenemos pudiendo calcular tanto la frecuencia como las proporciones que extrapolaremos a nivel manzanal.

Es ésto lo que vamos a implementar a una serie de variables a nivel manzanal, obteniendo primero frecuencias y proporciones zonales.

1.1 Lectura de Censo 2017

En el Censo de manzanas tenemos algunos campos que nos indican la cantidad de personas, pero no de hombres y mujeres

casen_2017 <- readRDS(file = "censo_personas_con_clave_17")

1.1.1 Cálculo de población total de hombres y mujeres por zona

a <- casen_2017  %>%
    group_by(clave) %>%
    summarise(PobTotH = sum(P08 == 1))

b <- casen_2017  %>%
    group_by(clave) %>%
    summarise(PobTotM = sum(P08 == 2))

ab <- cbind(a,b)

ab <- ab[,-c(3)]

# write_xlsx(ab, "hym_censo_2017.xlsx")
head(ab,30) %>%   datatable(class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))

1.2 Lectura de censo de manzanas

El problema

options(scipen=999)
censo2017_manzanas <- read.csv2("censo2017_manzanas.csv")
head(censo2017_manzanas,30) %>% datatable(extensions = 'Buttons',class = 'cell-border stripe',
          options = list( 
            pageLength = 5,
            autoWidth = TRUE,
            scrollX = TRUE
))

1.3 Corrección de códigos de manzana

El Censo de manzanas posee un código de identificación para cada una. El código que identifica la zona en el Censo de manzanas es diferente al del Censo de personas, en una hay un 0 que precede a los códigos comunales de 4 dígitos, por lo que se tuvieron que realizar correcciones en el código de manzana del Censo de manzanas.

Hagamos un subset de las columnas que nos interesan por el momento:

# censo2017_clavle <- censo2017_manzanas[,c(9,10,11,12)]
# censo2017_clavle$ID_MANZENT <- as.character(censo2017_clavle$ID_MANZENT)
# head(censo2017_clavle,30) %>%   datatable(class = 'cell-border stripe',
#           options = list(
#             pageLength = 5,
#             autoWidth = TRUE
# ))

Se evalúan los códigos de manzana y se le asigna un 0 al inicio a los que sólo posean 13 caracteres, los tienen 14 caracteres se dejan tal y como están.

# vector <- seq(1,nrow(censo2017_clavle))
# for (j in vector) {
#   censo2017_clavle$ID_MANZENT[censo2017_clavle$ID_MANZENT == censo2017_clavle[j,1]] <- ifelse(str_length(censo2017_clavle[j,1]) < 14, paste0(0,censo2017_clavle[j,1]),paste0(censo2017_clavle[j,1]))
# }
# 
# censo2017_clavle

Agregamos la columna ID_MANZENT_2 que contiene los códigos originales del Censo de manzanas.

# censo2017_clavle$ID_MANZENT_2 <- as.numeric(censo2017_clavle$ID_MANZENT)
# censo2017_clavle <- censo2017_clavle[,c(1,5,2,3,4)]
# censo2017_clavle
# write_xlsx(censo2017_clavle,"censo2017_clavle.xlsx")
# censo2017_manzanas_f <- read_xlsx("censo2017_clavle.xlsx")
# head(censo2017_manzanas_f,30)  %>%   datatable(class = 'cell-border stripe',
#           options = list(
#             pageLength = 5,
#             autoWidth = TRUE
# ))

1.4 Ejercicio

Se filtra por código zona(ID_MANZENT) en la base de datos de manzana

filtro_zona <- filter(censo2017_manzanas, grepl("1101011001", ID_MANZENT) )
filtro_zona <- filtro_zona[,c(9,10,11,12)]
filtro_zona <- filtro_zona[1:25,]
filtro_zona %>%   datatable(class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))

Por motivos del Ejercicio cambiamos los asteriscos * por 0 y tambiénn excluimos los valores 0 en la columna de personas y se separan los registros que poseen 0 en la columna de hombres y mujeres

filtro_zona$HOMBRES[filtro_zona$HOMBRES == "*"] <- 0
filtro_zona$MUJERES[filtro_zona$MUJERES == "*"] <- 0

filtro_zona$HOMBRES <- as.numeric(filtro_zona$HOMBRES)
filtro_zona$MUJERES <- as.numeric(filtro_zona$MUJERES)

filtro_zona_sin0 <- filter(filtro_zona, filtro_zona$PERSONAS != 0)
 
filtro <- filter(filtro_zona_sin0, filtro_zona_sin0$HOMBRES != 0)
filtro %>%   datatable(class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))

Se calcula la proporción de hombres y mujeres a nivel zonal

porcent_h <-  sum(filtro_zona$HOMBRES)/sum(filtro_zona$PERSONAS)
porcent_m <-  sum(filtro_zona$MUJERES)/sum(filtro_zona$PERSONAS)

print(data.frame(
  prop_h = porcent_h,
  prop_m = porcent_m
))
##      prop_h   prop_m
## 1 0.4957848 0.490566

Estimamos la cantidad de hombres y mujeres para la manzana 1101011001001 que tiene un total de 15 personas

porcent_h*15
## [1] 7.436772
porcent_m*15
## [1] 7.358491

Expandimos el calculo al resto de manzanas, se evalúa cual de los porcentajes es mayo y se redondea al numero entero superior (7.414495 => 8) y al inverso con el porcentaje menor(7.37785 => 7)

filtro2 <- filter(filtro_zona_sin0, filtro_zona_sin0$HOMBRES == 0)
filtro2$HOMBRES <- ifelse(porcent_h*filtro2$PERSONAS > porcent_m*filtro2$PERSONAS, ceiling(porcent_h*filtro2$PERSONAS) ,floor(porcent_h*filtro2$PERSONAS) ) 
filtro2$MUJERES <- ifelse(porcent_m*filtro2$PERSONAS > porcent_h*filtro2$PERSONAS, ceiling(porcent_m*filtro2$PERSONAS) ,floor(porcent_m*filtro2$PERSONAS) )
filtro2 %>%   datatable(class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))

1.5 Unión con la tabla base

tabla_final <- rbind(filtro2,filtro)
tabla_final %>%   datatable(class = 'cell-border stripe',
          options = list(
            pageLength = 5,
            autoWidth = TRUE
))