Gráficos con encuestas probabilísticas

Julio César

jcmartinez@colmex.mx


Introducción

El objetivo de este tutorial es explorar las herramientas para una efectiva visualización de datos en R. El curso está dirigido a un público variado que incluye tanto a estudiantes como a profesionales interesados en enriquecer sus habilidades en este ámbito. Iniciamos con una introducción a los principios básicos de la creación de gráficos y avanzamos hacia el manejo de técnicas más sofisticadas, como el análisis de datos provenientes de encuestas. Nuestro enfoque es capacitar a los participantes no solo para crear gráficos básicos, sino también para ajustar sus visualizaciones de forma que reflejen el diseño muestral de las encuestas, lo cual es esencial para garantizar interpretaciones confiables.

Durante el curso, utilizaremos la base de datos del cuarto trimestre de 2023 de 2023 de la Encuesta Nacional de Ocupación y Empleo (ENOE). Esta base contiene información exhaustiva sobre las condiciones laborales de la población y es clave para los ejemplos y ejercicios prácticos que desarrollaremos a lo largo del tutorial.



Material

El material de trabajo se encuentra disponible en:



Entorno de trabajo

Los paquetes que vamos a utilizar son los siguientes:

  • tidyverse: Una colección de paquetes para la manipulación y visualización de datos en R.
  • data.table: Proporciona una manera eficiente de manejar y procesar conjuntos de datos grandes en R.
  • foreign y haven: Permiten trabajar con datos de SPSS, Stata y SAS.
  • survey: Especializado en el análisis de encuestas complejas.
  • forcats: Parte de tidyverse, diseñado para manejar factores de manera eficiente.
  • tidyr: Ayuda a organizar los datos en formatos limpios y comprensibles.
  • gridExtra: Herramientas adicionales para mejorar las visualizaciones creadas con ggplot2.
  • knitr y kableExtra: Crea tablas dinámicas y formateadas para informes.

Antes de comenzar, eliminamos las variables existentes, cerramos los gráficos anteriores y desactivamos las advertencias. Esto nos ofrece un entorno limpio para comenzar a trabajar y garantiza una ejecución más fluida del código.


rm(list=ls()); graphics.off(); options(warn=-1)

# Lista de paquetes a utilizar
paquetes = c("tidyverse", "data.table", "foreign", "haven", "survey", "forcats", "dplyr", "tidyr", "ggplot2", "gridExtra", "knitr", "kableExtra")

# Verificar e instalar paquetes faltantes
for (i in paquetes) {
    if (!require(i, character.only = TRUE)) {
        install.packages(i)
        library(i, character.only = TRUE)
    } else {
        library(i, character.only = TRUE)
    }
}

enoe=read_dta("ENOE_SDEMT423.dta")


El contenido de la base de datos es el siguiente:

r_def loc mun est est_d_tri est_d_men ageb t_loc_tri t_loc_men cd_a ent con upm d_sem n_pro_viv v_sel n_hog h_mud n_ent per n_ren c_res par_c sex eda nac_dia nac_mes nac_anio l_nac_c cs_p12 cs_p13_1 cs_p13_2 cs_p14_c cs_p15 cs_p16 cs_p17 n_hij e_con cs_p20a_1 cs_p20a_c cs_p20b_1 cs_p20b_c cs_p20c_1 cs_ad_mot cs_p21_des cs_ad_des cs_nr_mot cs_p23_des cs_nr_ori ur zona salario fac_tri fac_men clase1 clase2 clase3 pos_ocu seg_soc rama c_ocu11c ing7c dur9c emple7c medica5c buscar5c rama_est1 rama_est2 dur_est ambito1 ambito2 tue1 tue2 tue3 busqueda d_ant_lab d_cexp_est dur_des sub_o s_clasifi remune2c pre_asa tip_con dispo nodispo c_inac5c pnea_est niv_ins eda5c eda7c eda12c eda19c hij5c domestico anios_esc hrsocup ingocup ing_x_hrs tpg_p8a tcco cp_anoc imssissste ma48me1sm p14apoyos scian t_tra emp_ppal tue_ppal trans_ppal mh_fil2 mh_col sec_ins tipo mes_cal
0 NA 2 20 123 109 0 1 1 1 9 4021 900534 107 81 5 1 0 5 423 4 1 301 2 10 1 6 2013 9 1 2 3 NA NA 1 NA NA 1 9 1 2 NA NA NA NA NA 1 2 6223 1638 5593 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 4 0 0 0 0 0 0.00000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 11
0 NA 8 30 124 109 0 1 1 1 9 4282 911056 211 95 5 1 0 4 423 3 1 301 2 0 29 1 2023 9 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 1 2 6223 1214 4143 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0.00000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 12
0 NA 10 30 124 NA 0 1 NA 1 9 40002 912033 101 76 4 1 0 5 423 3 1 401 2 93 10 2 1930 21 1 6 3 21600 1 1 2 7 4 1 9 1 10 NA NA NA NA NA 1 2 6223 1058 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 5 6 2 4 6 11 18 4 6 9 0 0 0.00000 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 99
0 NA 13 30 124 NA 0 1 NA 1 9 40013 915488 201 54 3 1 0 4 423 1 1 101 2 67 1 9 1956 13 1 2 6 NA NA 2 4 2 1 9 1 13 NA NA NA NA NA 1 2 6223 1109 0 1 1 1 1 1 4 8 2 6 5 3 4 3 10 4 2 4 2 3 0 2 0 0 0 0 0 1 1 3 0 0 0 0 2 4 6 11 16 3 3 6 45 0 0.00000 0 0 0 1 0 0 19 1 2 2 0 3 2 6 1 99
0 NA 5 20 123 NA 0 1 NA 1 9 40032 902860 401 85 5 1 0 2 423 1 1 101 1 43 15 6 1980 9 1 3 3 NA NA 2 NA 5 1 9 1 5 NA NA NA NA NA 1 2 6223 907 0 1 1 1 1 2 3 6 4 6 2 4 4 3 5 4 2 3 1 2 0 2 0 0 0 0 0 1 1 5 0 0 0 0 3 2 4 6 11 0 4 9 48 20000 96.89922 0 0 0 4 0 0 7 2 1 2 0 3 1 4 1 99
0 NA 7 30 124 NA 0 1 NA 1 9 40035 909615 401 36 4 1 0 2 423 4 1 408 2 27 2 7 1996 9 1 4 3 NA NA 2 0 6 1 9 1 7 NA NA NA NA NA 1 2 6223 896 0 1 1 1 1 1 4 4 2 6 7 3 4 3 8 4 3 0 1 1 0 2 0 0 0 0 0 1 1 3 0 0 0 0 4 2 2 3 8 1 3 12 44 0 0.00000 0 0 0 1 0 0 14 1 2 2 0 3 2 2 1 99


Para replicar los tabulados publicados, filtramos los datos en el dataframe enoe creando una columna llamada f que identifica las filas que cumplen las condiciones específicas. En particular, validamos que se trate de una entrevista completa y que las personas sea residentes habituales del hogar. Utilizamos la función mutate() para evaluar si r_def es igual a 0, lo que indica que la entrevista fue completada satisfactoriamente. Verificamos que c_res sea 1 o 3, donde 1 corresponde a residentes habituales y 3 a nuevos residentes. Además, restringimos el rango de edad (eda) a individuos entre 15 y 98 años.

enoe <- enoe %>%
  mutate(f = r_def == 0 & (c_res == 1 | c_res == 3) & eda >= 15 & eda <= 98)


enoe=enoe %>% filter(f==1)


Subconjuntos de Datos

Para enfocar el análisis en los individuos ocupados dentro del conjunto de datos enoe, filtramos según la condición de ocupación que identifica la variable clase2. Esta variable categoriza a las personas de acuerdo con su situación laboral actual mediante los códigos: 1 para Ocupado, 2 para Desocupado, 3 para Disponible y 4 para No disponible.

Dado que nuestro interés reside en los individuos ocupados, procedemos a crear un subconjunto de datos específico. Inicialmente, transformamos clase2 en un dato numérico para garantizar que las operaciones posteriores se ejecuten sin errores:

enoe$clase2 = as.numeric(enoe$clase2)

Luego, filtramos el dataframe para incluir solamente a los individuos que están ocupados (clase2 == 1), ya que este grupo será el foco de análisis posterior:

ocupados = enoe %>% filter(clase2 == 1)


Etiquetado de Variables

Dentro del subconjunto de datos ocupados recodificamos algunas variables para simplificar su interpretación. En particular, asignamos las etiquetas a las variables exo (sex) considerando: 1 Hombre y 2 Mujer. Así como a la posición en la ocupación (pos_ocu), cuyas etiquetas son: 0 No Aplica, 1 Subordinado, 2 Empleadores, 3 Cuenta propia y 4 Sin pago.

ocupados <- ocupados %>%
  mutate(sex = fct_recode(factor(sex), 
                          "Hombre" = "1", 
                          "Mujer" = "2"))

ocupados <- ocupados %>%
  mutate(pos_ocu = fct_recode(factor(pos_ocu), 
                              "No Aplica" = "0", 
                              "Suborninado" = "1", 
                              "Empleadores" = "2", 
                              "Cuenta propia" = "3", 
                              "Sin pago" = "4"))

Nota Importante: Al recodificar directamente en las mismas variables, los valores originales se pierden. Esto es adecuado cuando los códigos numéricos no tienen relevancia más allá de su representación en las etiquetas asignadas y no se requieren para análisis futuros. Si se necesita conservar la información original, considera crear nuevas columnas para las versiones recodificadas de estas variables.

sex pos_ocu
Mujer Suborninado
Hombre Suborninado
Mujer Suborninado
Hombre Suborninado
Hombre Suborninado
Hombre Suborninado



Gráficas

Las gráficas son herramientas poderosas para contar una historia visualmente, permitiendo presentar datos de manera que se comprenda rápida y eficazmente. Los elementos básicos que componen una gráfica efectiva incluyen:

  • Título: Descripción del contenido y propósito del gráfico.

  • Etiquetas de los ejes: Unidades de medida para cada variable.

  • Leyenda: Texto que explique los colores, símbolos o líneas si el gráfico contiene múltiples categorías.

  • Notas: Sirve para clarar la fuente de los datos o proporcionar información adicional relevante.

Estos puntos se deben tener en cuenta para que el gráfico sea autocontenido y comprensible sin necesidad de referencias adicionales del texto.


Tener una visualización clara de los datos es crucial, ya que facilita la identificación de patrones y mejora significativamente la comunicación de resultados. En el entorno de R, existen múltiples librerías diseñadas para la elaboración de gráficos, sin embargo, ggplot2 se destaca como una de las opciones más robustas debido a su capacidad para generar visualizaciones estéticamente agradables y su simplicidad de uso.

La metodología de ggplot2 se basa en la idea de construcción por capas. Cada capa se puede ajustar individualmente, lo que permite una gran flexibilidad para manipular los datos. Para diseñar un gráfico los pasos básicos incluyen:

  1. Seleccionar el conjunto de datos: Esto se realiza con el comando ggplot(data = base), donde base es el dataframe que se desea utilizar.

  2. Definir los aspectos estéticos: Se utiliza la función aes() para especificar qué variables se emplearán en el gráfico. Aquí se pueden asignar características como el color, tamaño y forma, dependiendo de cómo se quiera representar cada variable.

  3. Elegir el tipo de gráfico Esta decisión depende del mensaje que se desea comunicar con los datos y de la naturaleza de los datos mismos. Algunas de las opciones más recurrentes son geom_bar() para gráficos de barras, geom_line() para gráficos de líneas o geom_point() para diagramas de dispersión.


Vamos a crear un gráfico con la variable sex, por lo que el primer paso es verificar su formato:

class(ocupados$sex)    
## [1] "factor"


Una variable discreta

Creamos un gráfico de barras simple que muestra la distribución de hombres y mujeres. Para ello, las funciones y argumentos requerímos son:

  • Definir la base de datos y la variable:
    • ggplot(ocupados): Indicar el dataframe de referencia.
    • aes(sex): Definir la variable que deseamos graficar.
  • Tipo de gráfico:
    • geom_bar(fill="yellowgreen"): Agregar una gráfica de barras al gráfico, el argumento fill="yellowgreen" especifica el color de las barras.
ggplot(ocupados) + aes(sex) + geom_bar(fill="yellowgreen")


Para hacerlo más legible hay varios ajustes que podemos implementar. Estos cambios aumentan la claridad visual y facilitan la interpretación de los datos por parte de los usuarios. Aquí están los ajustes:

  • Etiquetas:
    • xlab("Sexo") y ylab("Personas"): Nombre los ejes.
    • ggtitle("Total de mujeres y hombres"): Título del gráfico.
    • geom_text(aes(label = scales::comma(..count..)), ...: Etiquetas numéricas de las barras que muestran el conteo de personas en cada categoría. scales::comma(..count..) convierte los conteos en un formato numérico con comas para mejorar la legibilidad. El stat = 'count' indica que las etiquetas deben basarse en el conteo de observaciones en cada barra. position_dodge(0.5) separa las etiquetas en barras adyacentes para evitar solapamientos, y vjust = -0.5 ajusta la posición vertical de las etiquetas para que aparezcan justo encima de cada barra.
  • Diseño y alineación:
    • theme_minimal(base_size = 14): Aplica un tema minimalista al gráfico con un tamaño base de fuente de 14, lo que hace que el diseño general sea fácil de leer.
    • theme(plot.title = element_text(hjust = 0.5)): Centra horizontalmente el título del gráfico.
ggplot(ocupados) + aes(sex) + geom_bar(fill="yellowgreen") + 
  xlab("Sexo") + ylab("Personas") + ggtitle("Total de mujeres y hombres")+ 
  geom_text(aes(label = scales::comma(..count..)), stat = 'count',                 
            position = position_dodge(0.5), vjust = -0.5, size = 3.5) +           
  theme_minimal(base_size = 14) +                                                  
  theme(plot.title = element_text(hjust = 0.5))                                    


En el grafico anterior mostramos los totales, ahora nos vamos a enfocar en los porcentajes de hombres y mujeres. Para ello, vamos a modificar el código anterior con los siguientes argumentos:

ggplot(ocupados, aes(x = sex, y = ..prop.. * 100, group = 1))
  • ggplot(): Función principal para crear gráficos basada en la gramática de gráficos.
    • ocupados: Conjunto de datos que se utiliza para el gráfico.
    • aes(): Define las estéticas del gráfico.
      • x = sex: Asigna la variable sex al eje x.
      • y = ..prop.. * 100: Calcula el porcentaje de cada grupo en sex para el eje y.
      • group = 1: Fuerza que todos los datos sean considerados como parte de un único grupo.
geom_bar(aes(fill = sex), position = "dodge", stat = "count")
  • geom_bar(): Crea un gráfico de barras.
    • aes(fill = sex): Usa la variable sex para determinar el color de las barras.
    • position = "dodge": Coloca las barras lado a lado en lugar de apiladas.
    • stat = "count": Utiliza el recuento de observaciones para determinar la altura de las barras.
geom_text(aes(label = scales::percent(..prop..)), stat = 'count', vjust = -0.5, position = position_dodge(0.5), size = 3.5)
  • geom_text(): Añade texto a las posiciones especificadas en el gráfico.
    • aes(label = scales::percent(..prop..)): Muestra el porcentaje de cada grupo como etiqueta.
    • stat = 'count': Cuenta las observaciones para el cálculo de ..prop...
    • vjust = -0.5: Ajusta verticalmente el texto para que aparezca justo encima de cada barra.
    • position = position_dodge(0.5): Alinea el texto con las barras correspondientes.
    • size = 3.5: Tamaño de la fuente del texto.
labs(x = "Sexo", y = "Porcentaje", title = "Porcentaje de mujeres y hombres", caption = "Nota: población de 15 años y más\nFuente: ENOE cuarto trimestre 2023")
  • labs(): Define las etiquetas y títulos del gráfico.
    • x, y, title, caption: Textos para el eje x, el eje y, el título del gráfico y el pie de página, respectivamente.
theme_minimal(base_size = 14)
  • theme_minimal(): Aplica un tema minimalista al gráfico.
    • base_size = 14: Tamaño base de la fuente para el texto del gráfico.
theme(plot.title = element_text(hjust = 0.5), plot.caption = element_text(hjust = 0, size = 9))

La función theme() en ggplot2 permite personalizar varios aspectos estéticos de un gráfico. Los argumentos que has incluido sirven para ajustar el texto del título y el texto del pie de página (caption) de tu gráfico. Aquí te detallo cómo funcionan estos ajustes específicos:

  • plot.title = element_text(hjust = 0.5): Este ajuste personaliza el texto del título del gráfico.
    • element_text(): Se usa para definir las propiedades del texto.
    • hjust = 0.5: Este parámetro controla la alineación horizontal del texto. Un valor de 0.5 significa que el texto estará centrado horizontalmente. hjust (horizontal justify) toma valores de 0 a 1, donde 0 alinea el texto a la izquierda, 1 lo alinea a la derecha y 0.5 es el centro.
  • plot.caption = element_text(hjust = 0, size = 9): Este ajuste personaliza el texto del pie de página del gráfico.
    • hjust = 0: Aquí, el texto del pie de página se alineará completamente a la izquierda (justificación horizontal).
    • size = 9: Establece el tamaño del texto del pie de página a 9.

Estos ajustes son muy útiles para mejorar la presentación y la legibilidad del gráfico, asegurando que tanto el título como el pie de página no solo proporcionen información relevante sino que también estén alineados de manera que complementen la disposición general del gráfico.

scale_y_continuous(labels = scales::percent_format(scale = 1))
  • scale_y_continuous(): Configura la escala del eje y.
    • labels = scales::percent_format(scale = 1): Formatea las etiquetas del eje y como porcentajes, adecuado para la representación en el gráfico.
ggplot(ocupados, aes(x = sex, y = ..prop.. * 100, group = 1)) +
  geom_bar(aes(fill = sex), position = "dodge", stat = "count") +
  geom_text(aes(label = scales::percent(..prop..)), stat = 'count',
            vjust = -0.5, position = position_dodge(0.5), size = 3.5) +
  labs(x = "Sexo", y = "Porcentaje", title = "Porcentaje de Mujeres y Hombres",
       caption = "Nota: población de 15 años y más\nFuente: ENOE cuarto trimestre 2023") +
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5),
        plot.caption = element_text(hjust = 0, size = 9)) +
  scale_y_continuous(labels = scales::percent_format(scale = 1))


Dos variables discretas

Para crear una gráfica que compare dos variables discretas, en este caso la posición en la ocupación por sexo. Exploramos tres opciones diferentes, cada una adaptada para ofrecer una perspectiva visual clara y comparativa. Estos métodos son especialmente útiles para analizar las similitudes en la distribución de las ocupaciones entre hombres y mujeres.

A continuación, describimos cada opción y cómo se implementa para obtener los resultados más informativos.

Opción 1: Pantalla Dividida

Esta opción utiliza facet_wrap para separar los gráficos por sexo, lo que permite una comparación visual directa entre hombres y mujeres en distintas posiciones de ocupación.

# Base de gráfico con datos y variable posición de ocupación
g1 <- ggplot(ocupados, aes(pos_ocu))

# Añadir barras, configurar etiquetas y título
g1 + geom_bar(fill="yellowgreen") +
  facet_wrap(~ sex) +                                   # Separa gráficos por sexo
  ggtitle("Ocupación por Sexo") +
  xlab("Posición de la Ocupación") +
  ylab("Personas") +
  geom_text(aes(label=..count..), stat='count',  
            position=position_dodge(0.5), 
            vjust=-0.5, 
            size=3.5)                                   # Añadir etiquetas numéricas sobre las barras


Opción 2: Barras Separadas

Este enfoque muestra barras para hombres y mujeres en la misma gráfica, diferenciadas por color y separadas horizontalmente para evitar solapamientos y facilitar la comparación.

# Base de gráfico con datos, variable y color por sexo
g2 <- ggplot(ocupados, aes(x=pos_ocu, fill=sex))

# Configurar barras, etiquetas y título
g2 + geom_bar(position = "dodge") +
  ggtitle("Ocupación por Sexo") +
  xlab("Posición de la Ocupación") +
  ylab("Personas") +
  scale_fill_brewer(palette = "Blues") +
  scale_y_continuous(labels = scales::comma) +
  geom_text(aes(label = scales::comma(..count..)), stat = "count", position = position_dodge(width = 0.9), vjust = -0.5, size = 2.5)  # Etiquetas numéricas


Opción 3: Barras Apiladas por Porcentajes

Aquí, las barras se apilan para mostrar la proporción de hombres y mujeres en cada categoría de ocupación. Para ello, primero creamos el subonjunto de datos llamado ocupados_r. Para ello, primero calcular porcentajes de ocupación por sexo dentro de cada categoría de posición ocupacional (pos_ocu). Esto prepara los datos para el cálculo de agregaciones específicas por cada combinación de posición y sexo.Después de agrupar los datos, summarise() se utiliza para calcular el número total de observaciones (count) en cada grupo. El argumento .groups = 'drop' indica que la estructura de grupos creada por group_by() debe descartarse después de completar la operación de sumarización. Esto resulta en un dataframe que contiene las columnas pos_ocu, sex y count, donde este último refleja el número de personas en cada categoría de posición y sexo.

# Preparar los datos para mostrar porcentajes
ocupados_r <- ocupados %>%
  group_by(pos_ocu, sex) %>%
  summarise(count = n(), .groups = 'drop') %>%
  group_by(pos_ocu) %>%
  mutate(percent = count / sum(count) * 100)

Posteriormente, usamos la base ocupados_r para crear el gráfico

# Base de gráfico con datos preparados
g3 <- ggplot(ocupados_r, aes(x = pos_ocu, y = percent, fill = sex))

# Configurar gráfico apilado con etiquetas y título
g3 + geom_bar(stat = "identity", position = "fill") +  # Barras apiladas por porcentajes
  geom_text(aes(label = scales::percent(percent / 100, accuracy = 0.1)), position = position_fill(vjust = 0.5), size = 3.5) +
  ggtitle("Ocupación por Sexo") +
  xlab("Posición de la Ocupación") +
  ylab("Porcentaje de Personas") +
  scale_fill_brewer(palette = "Blues", name = "Sexo") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  # Formatear eje Y como porcentaje
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Estas opciones ofrecen distintas perspectivas sobre los mismos datos, facilitando análisis específicos según las necesidades del estudio o la presentación de resultados.


Una Variable Continua

Nos centramos ahora en el análisis de variables continuas, las cuales proporcionan un enfoque detallado sobre atributos cuantitativos dentro de un conjunto de datos. Como ejemplo utilizaremos la variable eda para demostrar el manejo y la visualización de este tipo de variables. Aunque las variables continuas difieren de las discretas en su naturaleza, la metodología para representarlas gráficamente sigue principios análogos.

Para iniciar, este código verifica y, de ser necesario, convierte la variable eda a formato numérico, un paso esencial para realizar análisis gráficos de variables continuas.

class(ocupados$eda)                            
## [1] "numeric"
ocupados$eda <- as.numeric(ocupados$eda)  # Asegura que la variable edad es numérica
class(ocupados$eda)
## [1] "numeric"

Primero seleccionamos la base de datos ocupados y la variable eda. Guardamos esta definición en g4 con el objetivo de reutilizarla y evitar repetir el proceso en cada ocasión.

g4 <- ggplot(ocupados, aes(eda))  

Así, g4 se establece como una base para múltiples gráficos que visualizan la distribución de la edad.


Gráfico de Área

El gráfico de área se construye sobre la base preparada en g4 aprovechando la configuración inicial. En este código, geom_area(stat="bin") permite visualizar la acumulación de frecuencias de edad agrupadas en intervalos y la opción stat="bin" organiza los datos.

  g4 + geom_area(stat="bin")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


Gráfico de Frecuencia Poligonal

El gráfico de frecuencia poligonal ofrece una perspectiva alternativa al gráfico de área. Conectando los centros de cada bin del histograma con líneas, este gráfico facilita la identificación de picos y valles en la distribución de la edad.Este fragmento de código utiliza geom_freqpoly() para crear el gráfico de frecuencia poligonal. Al igual que con el gráfico de área, se emplea la configuración base g4 para mantener la consistencia en la manipulación de datos.

  g4 + geom_freqpoly()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


Histograma El histograma que presentaremos ajusta el ancho de cada bin a 5 rangos. Esta especificación permite una segmentación adecuada de los datos, facilitando la observación de las tendencias principales y proporcionando una comparación clara entre diferentes rangos de edad.La función geom_histogram(binwidth = 5) crea el histograma dividido en 5 años.

  g4 + geom_histogram(binwidth = 5)


Dos variables continuas

Ahora avanzaremos en nuestro análisis incorporando dos variables continuas, lo que nos permitirá explorar relaciones más complejos dentro del conjunto de datos. Utilizaremos eda, que representa la edad de los individuos y ing_x_hrs que indica los ingresos por hora.

El código para visualizar las relaciones entre dos variables continuas usa la función geom_point(alpha = 0.5, color = "blue"), la cual crea un diagrama de dispersión en donde cada punto representa una observación en el espacio definido por las dos variables. alpha = 0.5 ajusta la transparencia de los puntos en el gráfico. Al establecer un valor de 0.5, los puntos son semi-transparentes, lo que permite visualizar la superposición de datos sin perder claridad. color = "blue" define el color de los puntos usando el color azul.

ggplot(ocupados, aes(x = eda, y = ing_x_hrs)) +
  geom_point(alpha = 0.5, color = "blue") +
  ggtitle("Relación entre edad e ingresos por Hora") +
  xlab("Edad (años)") +
  ylab("Ingresos por hora") +
  theme_minimal()

Gráficos con datos de encuestas

En construcción !


Referencias

  • González, C. G., & Lise, A. V. (2013). Gráficos estadísticos y mapas con R. Ediciones Díaz de Santos.

  • Hilfiger, J. J. (2015). Graphing Data with R: An Introduction. ” O’Reilly Media, Inc.”.

  • Kabacoff, R. (2022). R in action: Data analysis and graphics with R and Tidyverse. Simon and Schuster.



Material extra

Te invito a visitar mi canal de YouTube Link donde comparto videos sobre estadística multivariada y demografía. Si consideras que el contenido es de tu interés y utilidad, te agradecería mucho si decides suscribirte.