Centro de Investigación y Docencia Económicas (CIDE)Región Centro

Manejo de Bases de Datos y Programación (R + STATA)
Actividad integradora 1
Profesor: Dr. Héctor de la Torre Gutiérrez

EJERCICIO 1

Lectura de los datos

# lectura
jalisco_inegi2020 <- readxl::read_xlsx(here::here("./data/class/raw/Jalisco.xlsx"))
dicc <- readxl::read_xlsx(here::here("./data/class/raw/Diccionario.xlsx"))

Utilizando la información correspondiente a los resultados del Censo de Población y Vivienda 2020 del INEGI para el estado de Jalisco obtener:

1. Los 10 municipios con mayor proporción de población con alguna discapacidad. (5%)

Lo primero es hacer la búsqueda de la variable de interés la cual es la población con algún tipo de discapacidad. Para esto se busca mediante una palabra o palabras clave dentro del diccionario de variables. En el siguiente código se realiza la búsqueda y se extraen los índices de los resultados.

# Búsqueda de la variable de interés
discapacidad_indexes <- grep("discapacidad", dicc$indicador, ignore.case = TRUE) # Índices

Lo siguiente es filtrar el diccionario utilizando los índices obtenidos anteriormente.

resultados_discapacidad <- dicc[discapacidad_indexes, c("numero", "indicador", "mnemonico")] # Se filtra por discapacidad
numero indicador mnemonico
77 Población con discapacidad PCON_DISC
78 Población con discapacidad para caminar, subir o bajar PCDISC_MOT
79 Población con discapacidad para ver, aun usando lentes PCDISC_VIS
80 Población con discapacidad para hablar o comunicarse PCDISC_LENG
81 Población con discapacidad para oír, aun usando aparato auditivo PCDISC_AUD
82 Población con discapacidad para vestirse, bañarse o comer PCDISC_MOT2
83 Población con discapacidad para recordar o concentrarse PCDISC_MEN
92 Población sin discapacidad, limitación, problema o condición mental PSIND_LIM

Se elige el primer resultado Población con discapacidad con mnemónico “PCON_DISC”.

Una vez encontrada la variable de interés, el siguiente paso es encontrar la variable para la población total, por lo tanto, se realiza el mismo procedimiento pero ahora con la palabra clave “población total”.

# Busqueda de poblacion total
pob_tot_indexes <- grep("población total", dicc$indicador, ignore.case = TRUE) # Índices
resultados_pob_tot <- dicc[pob_tot_indexes, c("numero", "indicador", "mnemonico")] # Se filtra por población total
# Se elige "POBTOT"
numero indicador mnemonico
1 Población total POBTOT

Se elige el único resultado con mnemónico “POBTOT”.

Ahora procedemos a calcular los 10 municipios con mayor proporción de población con algún tipo de discapacidad. Para ello se realizan los siguientes pasos:

  1. Se filtran los datos del INEGI por las variables de interés
# Calculo de la estadística
mun_personas_discap <- jalisco_inegi2020[, c("NOM_MUN", "POBTOT", "PCON_DISC")] # Filtrado
  1. Se calcula la proporción en términos de porcentaje
mun_personas_discap$PROP_POB_DISC <- round(mun_personas_discap$PCON_DISC/mun_personas_discap$POBTOT, 4)*100
  1. Se ordenan y se selecciona a los 10 municipios con mayor proporción de poboblación con algún tipo de discapacidad
mun_personas_discap <- mun_personas_discap[order(mun_personas_discap$PROP_POB_DISC, decreasing = TRUE), ][c(1:10), ]
colnames(mun_personas_discap) <- c("Municipio", "Población Total", "Población con discapacidad", "Proporción\n%")
Municipio Población Total Población con discapacidad Proporción %
Chimaltitán 3270 379 11.59
El Limón 5368 561 10.45
Cañadas de Obregón 4388 454 10.35
San Julián 16792 1549 9.22
Huejúcar 5920 543 9.17
Santa María del Oro 1815 165 9.09
Cuautla 2166 195 9.00
Santa María de los Ángeles 3515 306 8.71
Ejutla 1981 172 8.68
San Cristóbal de la Barranca 2924 241 8.24

Funciones para realizar el cálculo de la proporción y poblaciones totales

Como los procedimientos anteriores son algo que se va a repetir en los siguientes cálculos, se opta por crear dos funciones para automatizar este trabajo.

La primera es la función var_int, que sirve para encontrar las variables de interés.

var_int <- function(keyword){
  indexes <- grep(keyword, dicc$indicador, ignore.case = TRUE)
  dicc[indexes, c("numero", "indicador", "mnemonico")]
}

La función prop_num será la encargada de calcular la proporción de la variable de interés respecto a otra variable. También cuenta con la opción total la cual permite a la función únicamente encontrar los valores más altos de la variable de interés. El número de observaciones mostradas está definida por el parámetro n.

prop_mun <- function(df, # Data frame
                     var_control = "NOM_MUN", # Variable a la cual corresponden las cifras
                     var_total, # Variable que representa la totalidad de lo que se quiere calcular
                     var_int, # Variable de interés
                     n = 10, # Número de observaciones a mostrar
                     total = FALSE, # Parámetro para indicar que únicamente muestre los valores más altos de la variable de interés
                     var_name = "Variable" # Nombre de la variable de interés
                     ){
  
  if(total == FALSE){
    df_filter <- df[, c(var_control, var_total, var_int)]
    
    df_filter$prop <- round(df_filter[var_int]/df_filter[var_total], 4)*100
    
    df_order <- df_filter[order(df_filter$prop, decreasing = TRUE), ][c(1:n), ]
    
    colnames(df_order) <- c("Municipio", "Población Total", var_name, "Proporción\n%")
    df_order
  } else {
    df_filter <- df[, c(var_control, var_int)]
    
    df_order <- df_filter[order(as.numeric(unlist(df_filter[var_int])), decreasing = TRUE), ][c(1:n), ]
    
    colnames(df_order) <- c("Municipio", var_name)
    df_order
  }
}

Con las funciones listas podemos proceder a calcular los demás datos de interés.

2. Los 30 municipios con mayor proporción de población con 65 años o más. (10%)

Se aplica la función var_int

var_int("65 años")
numero indicador mnemonico
47 Población de 65 años y más POB65_MAS

Se elige “POB65_MAS” y se aplica la función prop_mun para obtener los 30 municipios con mayor proporción de población con 65 años o más.

prop_mun(jalisco_inegi2020, var_total = "POBTOT", var_int = "POB65_MAS", n = 30, var_name = "Población 65 años o más")
Municipio Población Total Población 65 años o más Proporción %
Ejutla 1981 380 19.18
El Limón 5368 991 18.46
Totatiche 4180 747 17.87
Santa María de los Ángeles 3515 605 17.21
Quitupan 7734 1277 16.51
Huejúcar 5920 976 16.49
Cuautla 2166 347 16.02
Chapala 55196 8496 15.39
Cañadas de Obregón 4388 674 15.36
Guachinango 4199 636 15.15
Mexticacán 5307 804 15.15
Atenguillo 4176 625 14.97
Teocuitatlán de Corona 11039 1641 14.87
San Sebastián del Oeste 5086 743 14.61
Santa María del Oro 1815 265 14.60
Tenamaxtlán 7302 1064 14.57
Tonaya 5961 862 14.46
Mixtlán 3638 518 14.24
Juchitlán 5534 779 14.08
Villa Guerrero 5525 775 14.03
Atengo 5599 775 13.84
Valle de Juárez 6151 850 13.82
Yahualica de González Gallo 22394 3081 13.76
Villa Purificación 11303 1550 13.71
Unión de Tula 13799 1875 13.59
San Martín Hidalgo 28102 3773 13.43
Mascota 14451 1936 13.40
Pihuamo 11386 1516 13.31
Tecolotlán 16603 2157 12.99
Atoyac 8689 1128 12.98

3. Los 30 municipios con mayor población económicamente activa. (5%)

var_int("económicamente activa")
numero indicador mnemonico
135 Población de 12 años y más económicamente activa PEA
136 Población femenina de 12 años y más económicamente activa PEA_F
137 Población masculina de 12 años y más económicamente activa PEA_M
138 Población de 12 años y más no económicamente activa PE_INAC
139 Población femenina de 12 años y más no económicamente activa PE_INAC_F
140 Población masculina de 12 años y más no económicamente activa PE_INAC_M
prop_mun(jalisco_inegi2020, var_total = "POBTOT", var_int = "PEA", n = 30, total = TRUE, var_name = "PEA")
Municipio PEA
Zapopan 781705
Guadalajara 747410
Tlajomulco de Zúñiga 370745
San Pedro Tlaquepaque 357168
Tonalá 294989
Puerto Vallarta 163237
El Salto 111997
Lagos de Moreno 86038
Tepatitlán de Morelos 78547
Zapotlán el Grande 60735
Ocotlán 52863
Tala 44064
Arandas 41838
San Juan de los Lagos 36700
Zapotlanejo 33842
Ixtlahuacán de los Membrillos 33290
Autlán de Navarro 32845
La Barca 31182
Atotonilco el Alto 31024
Ameca 29067
Chapala 26183
Encarnación de Díaz 25385
Poncitlán 24287
Jocotepec 23572
Tequila 21120
Cihuatlán 20220
Ayotlán 18996
Teocaltiche 18412
Tomatlán 18094
Sayula 18078

4. Los 10 municipios con mayor proporción de población sin educación básica. (5%)

En este caso no se puede utilizar la función prop_mun dado que se necesita sumar ambas variables.

Al buscar la variable de interés nos encontramos con que esta vez hay dos variables de interés: la población con primaria inconclusa y la población con secundaria inconclusa.

var_int("primaria incompleta|secundaria incompleta")
numero indicador mnemonico
117 Población de 15 años y más con primaria incompleta P15PRI_IN
118 Población femenina de 15 años y más con primaria incompleta P15PRI_INF
119 Población masculina de 15 años y más con primaria incompleta P15PRI_INM
123 Población de 15 años y más con secundaria incompleta P15SEC_IN
124 Población femenina de 15 años y más con secundaria incompleta P15SEC_INF
125 Población masculina de 15 años y más con secundaria incompleta P15SEC_INM

Se selecciona “P15PRI_IN” y “P15SEC_IN”

En este caso no se puede utilizar la función prop_mun dado que se necesita sumar ambas variables para obtener la población total que no cuenta con educación básica. Por esta razón, se añade un paso al procedimiento del ejercicio 1.

# Filtrado
mun_pob_sin_educ_bas <- jalisco_inegi2020[, c("NOM_MUN", "POBTOT", "P15PRI_IN", "P15SEC_IN")] # Se filtran los datos por las variables de interes

# PASO EXTRA - Se suman las variables
mun_pob_sin_educ_bas$pobtot_sin_pri_sec <- mun_pob_sin_educ_bas$P15PRI_IN + mun_pob_sin_educ_bas$P15SEC_IN

# Cálculo de la proporción
mun_pob_sin_educ_bas$prop_sin_edu_bas <- round(mun_pob_sin_educ_bas$pobtot_sin_pri_sec/mun_pob_sin_educ_bas$POBTOT, 4)*100

# Ordenado y selección
mun_pob_sin_educ_bas <- mun_pob_sin_educ_bas[order(mun_pob_sin_educ_bas$prop_sin_edu_bas, decreasing = TRUE), ][c(1:10), -c(3, 4)]

# Se modifican los nombres
colnames(mun_pob_sin_educ_bas) <- c("Municipio", "Población Total", "Población sin educación básica", "Proporción\n%")
Municipio Población Total Población sin educación básica Proporción %
Santa María de los Ángeles 3515 766 21.79
Jilotlán de los Dolores 9425 1979 21.00
Huejúcar 5920 1217 20.56
Cañadas de Obregón 4388 820 18.69
Cuautla 2166 397 18.33
Quitupan 7734 1404 18.15
Tuxcacuesco 5482 987 18.00
Chimaltitán 3270 587 17.95
Teocuitatlán de Corona 11039 1978 17.92
Ejutla 1981 354 17.87

5. Los 10 municipios con mayor población indígena. (5%)

var_int("indígena")

Se elige “PHOG_IND”

numero indicador mnemonico
61 Población de 3 años y más que habla alguna lengua indígena P3YM_HLI
62 Población femenina de 3 años y más que habla alguna lengua indígena P3YM_HLI_F
63 Población masculina de 3 años y más que habla alguna lengua indígena P3YM_HLI_M
64 Población de 3 años y más que habla alguna lengua indígena y no habla español P3HLINHE
65 Población femenina de 3 años y más que habla alguna lengua indígena y no habla español P3HLINHE_F
66 Población masculina de 3 años y más que habla alguna lengua indígena y no habla español P3HLINHE_M
67 Población de 3 años y más que habla alguna lengua indígena y habla español P3HLI_HE
68 Población femenina de 3 años y más que habla alguna lengua indígena y habla español P3HLI_HE_F
69 Población masculina de 3 años y más que habla alguna lengua indígena y habla español P3HLI_HE_M
70 Población de 5 años y más que habla alguna lengua indígena P5_HLI
71 Población de 5 años y más que habla alguna lengua indígena y no habla español P5_HLI_NHE
72 Población de 5 años y más que habla alguna lengua indígena y habla español P5_HLI_HE
73 Población en hogares censales indígenas PHOG_IND
prop_mun(jalisco_inegi2020, var_total = "POBTOT", var_int = "PHOG_IND", total = TRUE, var_name = "Población indígena")
Municipio Población indígena
Zapopan 26955
Mezquitic 16776
Tlajomulco de Zúñiga 9052
Guadalajara 7689
San Pedro Tlaquepaque 7676
Puerto Vallarta 6928
Bolaños 4183
Tonalá 2974
El Salto 2739
Tala 2081

6. Los 10 municipios con mayor proporción de viviendas particulares habitadas con internet. (10%)

var_int("internet")

Se selecciona “VPH_INTER”

numero indicador mnemonico
214 Viviendas particulares habitadas que disponen de Internet VPH_INTER
216 Viviendas particulares habitadas que disponen de servicio de películas, música o videos de paga por Internet VPH_SPMVPI
220 Viviendas particulares habitadas sin computadora ni Internet VPH_SINCINT
prop_mun(jalisco_inegi2020, var_total = "POBTOT", var_int = "VPH_INTER", var_name = "Viviendas con internet")
Municipio Población Total Viviendas con internet Proporción %
Zapopan 1476491 319756 21.66
Guadalajara 1385629 299970 21.65
Puerto Vallarta 291839 59566 20.41
Chapala 55196 10384 18.81
Zapotlán el Grande 115141 21061 18.29
Tlajomulco de Zúñiga 727750 131838 18.12
San Pedro Tlaquepaque 687127 123377 17.96
Autlán de Navarro 64931 11337 17.46
La Manzanilla de la Paz 4099 712 17.37
El Grullo 25920 4381 16.90

EJERCICIO 2

7. Demostrar que la siguiente cadena de texto es un palíndromo: A mamá Roma le aviva el amor a papá y a papá Roma le aviva el amor a mamá

# Se define la cadena
string_original <- "A mamá Roma le aviva el amor a papá y a papá Roma le aviva el amor a mamá"

# reemplazar acentos y mayusculas 
string_clean <- gsub("á", "a", string_original)
string_clean <- tolower(string_clean)
string_clean <- gsub(" ", "", string_clean)

# se aplica la funcion rev() para "voltear" la cadena de texto
string_reverse <- rev(string_clean)

ifelse(string_clean == string_reverse, "Es un palíndromo", "No es un palíndromo")
x
Es un palíndromo

EJERCICIO 3

8. Probar si la siguiente matriz \((X)\) es definida positiva y, si sí, obtener su inversa. Y una vez obtenida su inversa, comprobar que \(XX1 = I\)

\[ X = \left(\begin{array}{ccc} 3 & 4 & -1\\ 2 & -1 & 3\\ 2 & 2 & 1 \end{array}\right) \]

# Se definen los vectores que conformaran la matriz X
v1 <- c(3, 4, -1)
v2 <- c(2, -1, 3)
v3 <- c(2, 2, 1)

# Se crea la matriz
X <- rbind(v1, v2, v3)

# Se asignan los determinantes
H_1 <- X[1, 1]
H_2 <- det(X[-3, -3])

# Regla de decision
ifelse(H_1 > 0 & H_2 > 0, 
       "Como H_1 > 0 & H_2 > 0: La matriz X es definida positiva",
       ifelse(H_1 > 0 & H_2  < 0, "Como H_1 > 0 & H_2 < 0: La matriz X es definida negativa", 
              "Como no se cumple ni H_1 > 0 & H_2 > 0 o H_1 > 0 & H_2 < 0: La matriz X es indefinida"))
x
v1 Como H_1 > 0 & H_2 < 0: La matriz X es definida negativa

EJERCICIO 4

Ejercicio libre de programación: El 20% de la calificación final se asignará a la mejora del formato del documento Markdown. Esto es, si el formato del reporte es mejorado, comparado con el formato básico, se otorgará este 20% de la calificación final. Los aspecto a mejorar, entre otros posibles, puede ser el tipo de letra, color de fondo, tema del documento en general o tipo de imágenes.