Objetivo:

Analizar un conjunto de datos por medio de estadísticos descriptivos y gráficos, y obtener conclusiones y/o propuestas de lo observado.

Desarrollo

1. Usar el conjunto de datos de natalidad en un programa en R

df=read.csv("C:/Users/parcs/OneDrive/Escritorio/ipn/Cursos/R-Básico/natalidad.csv")
  • Las dimensiones de este conjunto de datos son:
dim(df)
## [1] 2162535      44
  • Los atributos son:
names(df)
##  [1] "ent_regis"  "mun_regis"  "loc_regis"  "tloc_regis" "ent_resid" 
##  [6] "mun_resid"  "loc_resid"  "tloc_resid" "ent_ocurr"  "mun_ocurr" 
## [11] "loc_ocurr"  "tloc_ocurr" "sexo"       "edad_reg"   "edad_madn" 
## [16] "edad_padn"  "dia_nac"    "mes_nac"    "ano_nac"    "dia_reg"   
## [21] "mes_reg"    "ano_reg"    "edad_madr"  "edad_padr"  "tipo_nac"  
## [26] "orden_part" "lugar_part" "q_atendio"  "hijos_vivo" "hijos_sobr"
## [31] "edociv_mad" "escol_mad"  "escol_pad"  "act_mad"    "act_pad"   
## [36] "pos_mad"    "pos_pad"    "sitlab_mad" "sitlab_pad" "fue_prese" 
## [41] "hora_nac"   "minuto_nac" "comparecio" "dis_re_oax"

La descripción de cada atributo la tenemos en la siguiente tabla:

Atributo Descripción
Ent_regis Entidad de registro
Mun_regis Municipio de registro
Loc_regis Localidad de registro
Tloc_regis Tamaño de localidad de registro
Ent_resid Entidad de residencia habitual de la madre
Mun_resid Municipio de residencia habitual de la madre
Loc_resid Localidad de residencia habitual de la madre
Tloc_resid Tamaño de localidad de residencia de la madre
Ent_ocurr Entidad de ocurrencia
Mun_ocurr Municipio de ocurrencia
Loc_ocurr Localidad de ocurrencia
Tloc_ocurr Tamaño de localidad de ocurrencia
Sexo Sexo del registrado
Edad_reg Edad del registrado
Edad_madn Edad de la madre al momento del nacimiento
Edad_padn Edad del padre al momento del nacimiento
Dia_nac Día de ocurrencia
Mes_nac Mes de ocurrencia
Ano_nac Año de ocurrencia
Dia_reg Día de registro
Mes_reg Mes de registro
Ano_reg Año de registro
Edad_madr Edad de la madre al momento del registro
Edad_padr Edad del padre al momento del registro
Tipo_nac Tipo de nacimiento
Orden_part Orden del nacimiento o parto
Lugar_part Lugar de atención del parto
Q_atendio Persona que atendió el parto
Hijos_vivo Número de hijos nacidos vivos
Hijos_sobr Número de hijos sobrevivientes
Edociv_mad Estado conyugal (civil) de la madre
Escol_mad Nivel de escolaridad de la madre (escolaridad)
Escol_pad Nivel de escolaridad del padre (escolaridad)
Act_mad Condición de actividad económica de la madre
Act_pad Condición de actividad económica del padre
Pos_mad Posición en el trabajo de la madre
Pos_pad Posición en el trabajo del padre
Sitlab_mad Situación laboral de la madre
Sitlab_pad Situación laboral del padre
Fue_prese Condición de sobrevivencia del registrado
Hora_nac Hora del nacimiento
Minuto_nac Minuto del nacimiento
Comparecio Compareció (declarante)
Dis_re_oax Distrito de registro de Oaxaca

Elijo cuatro atributos para analizar: escolaridad de la madre, edad de la madre al nacimiento, estado civil de la madre al registrar y entidad de residencia habitual de la madre.

2. Procesar los datos o atributos, justifique lo realizado.

Escolaridad de la madre

Comenzaré con el resumen estadístico de los datos de escolaridad de la madre

summary(df$escol_mad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   5.000   5.000   5.588   6.000   9.000

Podemos ver que la escolaridad se muestra con valores numéricos del 1 al 9 y que la distribución es:

table(df$escol_mad)
## 
##      1      2      3      4      5      6      7      8      9 
##  45001  34081  27629 285644 774973 497386 283993  25262 188566

Es mejor si lo vemos con un gráfico

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
ggplot(df, aes(x = escol_mad)) +
  geom_bar(fill = "deeppink4") +
  labs(title = "Distribución del Nivel de Escolaridad de la Madre",
       x = "Nivel de Escolaridad", 
       y = "Frecuencia") 

Los números representan las siguientes categorías:

Valor Categoría
1 Sin escolaridad
2 De 1 a 3 años de primaria
3 De 4 a 5 años de primaria
4 Primaria completa
5 Secundaria o equivalente
6 Preparatoria o equivalente
7 Profesional
8 Otra
9 No especificada

Como podemos ver si queremos utilizar estos datos necesitamos hacer la limpieza de los datos en relación a escolaridad (8) “Otra” y (9) “No especificada”.

Para ello pienso que será mejor omitir los datos relacionados a esas categorías:

df_limpio <- df[df$escol_mad != 8 & df$escol_mad != 9, ]

Verificamos que se haya realizado correctamente

table(df_limpio$escol_mad)
## 
##      1      2      3      4      5      6      7 
##  45001  34081  27629 285644 774973 497386 283993

Ahora veamos el porcentaje de cada nivel de escolaridad en relación a los datos “limpios”:

prop.table(table(df_limpio$escol_mad)) * 100
## 
##         1         2         3         4         5         6         7 
##  2.309275  1.748903  1.417812 14.658130 39.768575 25.523899 14.573407

Podemos ver que el 39% de las madres tienen escolaridad de secundaria y el 25% tiene escolaridad de preparatoria. Pocas madres tienen menos escolaridad que la primaria terminada.

Edad de la madre

Se me ocurre que pueda haber relación entre la escolaridad de la madre y su edad al momento del nacimiento

Pero como sabemos los datos no se encuentran limpios, ahora el rango de edad es de 10 a 50, pero además se colocó el 99 en los casos que no se conoce la edad, pienso que lo más justo para los datos es retirar esos registros:

df_limpio2 <- df_limpio[df_limpio$edad_madn != 99, ]

Vemos que efectivamente se han retirado esos registros:

table(df_limpio2$edad_madn)
## 
##     10     11     12     13     14     15     16     17     18     19     20 
##     79     98    199   1068   5878  19915  44938  68387  94036 104458 109495 
##     21     22     23     24     25     26     27     28     29     30     31 
## 111332 112368 115099 113268 110441 105994 100071  94377  86833  80646  73981 
##     32     33     34     35     36     37     38     39     40     41     42 
##  66287  58777  52339  46626  39487  32085  26153  20143  15377  11040   7264 
##     43     44     45     46     47     48     49     50 
##   4627   2588   1494    763    439    264    201    332

Podemos observar el histograma

ggplot(df_limpio2, aes(x = factor(edad_madn))) +
  geom_bar(fill = "firebrick") +
  labs(title = "Histograma de edad de la madre",
       x = "Edad de la madre",
       y = "Frecuencia")

Observamos los estadísticos básicos:

summary(df_limpio2$edad_madn)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.00   21.00   25.00   25.85   30.00   50.00

Mostramos la relación entre el promedio de edad de la madre y su escolaridad:

media_edad <-aggregate(edad_madn ~ escol_mad, data = df_limpio2, FUN = mean)
ggplot(media_edad, aes(x = factor(escol_mad), y = edad_madn)) +
  geom_bar(stat = "identity", fill = "chocolate") +
  labs(title = "Media de la Edad de la Madre por Nivel de Escolaridad",
       x = "Nivel de Escolaridad",
       y = "Media de la Edad de la Madre")

Me pareció interesante ver si esa es la edad que más se repetía por nivel de escolaridad, por lo que busqué como calcular la moda en R, encontré una función que calcula la moda y la utilicé:

get_mode <- function(v) {
  uniqv <- unique(v)
  uniqv[which.max(tabulate(match(v, uniqv)))]
}

moda_edad <- aggregate(edad_madn ~ escol_mad, data = df_limpio2, FUN = get_mode)
ggplot(moda_edad, aes(x = factor(escol_mad), y = edad_madn)) +
  geom_bar(stat = "identity", fill = "cadetblue3") +
  labs(title = "Moda de la Edad de la Madre por Nivel de Escolaridad",
       x = "Nivel de Escolaridad",
       y = "Moda de la Edad de la Madre")

En este gráfico podemos ver los valores que más se repiten como edad de la madre al tener un hijo cuando no se tiene escolaridad o cuando sólo se estudió la primaria o secundaria es de menos de 20 años.

También podemos ver que la edad para las mujeres que deciden tener hijos cuando han sido profesionistas es alrededor de los 30 años.

Estado civil de la madre

Creo que también será interesante considerar la escolaridad de la madre y la relación con su estado civil.

Los datos de estado civil vienen en las siguientes categorías:

Valor Categoría
1 Soltera
2 Casada
3 Unión libre
4 Separada
5 Divorciada
6 Viuda
9 No especificado

En este caso, considero que lo más justo es retirar los datos relacionados a la categoría “no especificado”.

df_limpio_civ <- df_limpio[df_limpio$edociv_mad != 9, ]

Podemos ver los resultados de la limpieza:

table(df_limpio_civ$edociv_mad)
## 
##       1       2       3       4       5       6 
##  247360  595743 1085260    4913    1612    1711

Veamos el histograma

ggplot(df_limpio_civ, aes(x = factor(edociv_mad))) +
  geom_bar(fill = "chartreuse3") +
  labs(title = "Histograma del estado civil",
       x = "Estado civil",
       y = "Frecuencia")

Vemos los estadísticos básicos:

summary(df_limpio_civ$edociv_mad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.000   3.000   2.444   3.000   6.000

Mostramos la relación entre la moda de estado civil de la madre y su escolaridad:

aggregate(edociv_mad ~ escol_mad, data = df_limpio_civ, FUN = median)

Como se puede apreciar la mediana indica que la para casi cualquier escolaridad las madres se encuentran en unión libre, mientras que solo para aquellas con estudios profesionales lo típico es que se encuentren casadas.

Podemos comparar estos resultados con la forma contraria, es decir, que probemos el nivel de escolaridad por cada estado civil:

aggregate(escol_mad ~ edociv_mad, data = df_limpio_civ, FUN = median)

Como podemos ver para cada estado civil la escolaridad es de secundaria predominantemente, sólo para las madres casadas la escolaridad es de preparatoria.

Ahora si vemos la relación entre edad de la madre y estado civil tenemos lo siguiente:

moda_edociv <- aggregate(edad_madn ~ edociv_mad, data = df_limpio_civ, FUN = get_mode)
ggplot(moda_edociv, aes(x = factor(edociv_mad), y = edad_madn)) +
  geom_bar(stat = "identity", fill = "coral2") +
  labs(title = "Moda de la edad de la madre por estado civil",
       x = "Estado civil",
       y = "Moda de edad")

Como podemos apreciar en la gráfica el estado civil contra edad de la madre, las mujeres divorciadas con mayor frecuencia son las que cuentan con mayor edad, seguidas de las mujeres casadas; en contraste las mujeres más jóvenes al momento de tener un hijo son con mayor frecuencia las solteras o las separadas.

Entidad de residencia habitual de la madre

Considero que los datos de residencia de la madre pueden relacionarse a la escolaridad o a la edad de la madre para obtener conclusiones interesantes.

Los datos de residencia habitual de la madre vienen dados por las siguientes categorías

Valor Categoría Valor Categoría
01 Aguascalientes 02 Baja California
03 Baja California Sur 04 Campeche
05 Coahuila de Zaragoza 06 Colima
07 Chiapas 08 Chihuahua
09 Ciudad de México 10 Durango
11 Guanajuato 12 Guerrero
13 Hidalgo 14 Jalisco
15 México 16 Michoacán de Ocampo
17 Morelos 18 Nayarit
19 Nuevo León 20 Oaxaca
21 Puebla 22 Querétaro
23 Quintana Roo 24 San Luis Potosí
25 Sinaloa 26 Sonora
27 Tabasco 28 Tamaulipas
29 Tlaxcala 30 Veracruz de Ignacio de la Llave
31 Yucatán 32 Zacatecas
33 Estados Unidos de Norteamérica 34 Otros países de América Latina
35 Otros países

Aplicamos los estadísticos básicos

summary(df$ent_resid)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00   11.00   15.00   16.48   22.00   35.00

No me parece que sea necesario realizar una la limpieza de los datos

Mostramos el histograma de los datos:

ggplot(df, aes(x = factor(ent_resid))) +
  geom_bar(fill = "darkorchid3") +
  labs(title = "Histograma de la entidad de residencia de la madre",
       x = "Entidad de residencia",
       y = "Frecuencia")

Podemos ver la relación que hay entre la moda de escolaridad de la madre y la entidad de residencia

mediana_esc <- aggregate(escol_mad ~ ent_resid, data = df_limpio2, FUN = median)
moda_esc <- aggregate(escol_mad ~ ent_resid, data = df_limpio2, FUN = get_mode)

mediana_esc$Tipo <- "Mediana"
moda_esc$Tipo <- "Moda"
df_comparacion <- rbind(mediana_esc, moda_esc)

ggplot(df_comparacion, aes(x = factor(ent_resid), y = escol_mad, fill = Tipo)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Mediana y moda de la escolaridad de la madre por entidad",
       y = "Nivel de Escolaridad",
       x = "Entidad de la madre") +
  scale_fill_manual(values = c("Mediana" = "steelblue", "Moda" = "orange"))

Como podemos ver en este análisis, comparé la mediana y la moda porque dan resultados distintos entre las entidades, aunque en general lo más común es que las madres tengan sólo secundaria terminada.

En relación a la moda podemos decir que las madres de Chiapas con mayor frecuencia tienen sólo primaria terminada, mientras que las madres con residencia en otros países con mayor frecuencia tienen profesión.

Ahora, en términos de la mediana, tenemos que en la Ciudad de México, en Baja California Sur y las madres de otros países tienen escolaridad de preparatoria.

Conclusiones

Hay varias conclusiones que puedo remarcar a partir del análisis realizado.

  1. Lo más común (39%) es que las madres tienen escolaridad de secundaria.

  2. Típicamente la edad de la madre con estudios de primaria o secundaria es de menos de 20 años.

  3. La edad típica de las madres profesionistas es alrededor de los 30 años.

  4. Lo común es que las madres se encuentran en unión libre independientemente de la escolaridad, con excepción de las que cuentan con estudios profesionales que típicamente se encuentran casadas.

  5. Sólo para las madres casadas la escolaridad predominante es de preparatoria, para los demás estados civiles la escolaridad es de secundaria.

  6. Las mujeres divorciadas con mayor frecuencia son las que cuentan con mayor edad, seguidas de las mujeres casadas; en contraste las mujeres más jóvenes al momento de tener un hijo son con mayor frecuencia las solteras o las separadas.

  7. Las madres de Chiapas con mayor frecuencia tienen sólo primaria terminada, mientras que las madres con residencia en otros paises con mayor frecuencia tienen profesión.

  8. La tendencia es que en la Ciudad de México, en Baja California Sur y las madres de otros países tienen escolaridad de preparatoria.

Además, me gustaría remarcar que al realizar el análisis me di cuenta que los datos sin registro de escolaridad tenían relación a los datos sin registro de edad, pienso que serán los datos de niños que no se conoce bien quien fue su madre al ser niños tal vez huérfanos o algo parecido.

Conclusión sobre el curso

Me pareció muy útil conocer la facilidad de procesamiento que nos proporciona R, creo que me ha gustado mucho conocerlo y poderlo aplicar a un análisis de datos, pienso que es muy breve el tiempo de un curso para conocer todas las herramientas y funciones que tiene un lenguaje, pero supero mis expectativas y espero poder seguir usándolo para mis futuras clases.

Le agradezco compartir sus conocimientos Dr. Ricardo, gracias.