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
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) # ÍndicesLo 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:
- 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- 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- 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.