En la última clase aprendimos a:
Construir nuevas variables es una de tarea central en las ciencias sociales. A partir de combinar las categorías de una o varias variables podremos obtener nuevas perspectivas sobre un fenómeno.
El primer paso, como siempre, es cargar los paquetes con los que vamos a trabajar
library("eph")
library("tidyverse")
Luego cargar la eph y ponerle sus etiquetas.
eph23_3<-get_microdata(year = 2023, period = 3, type = "individual") %>%
organize_labels(.,"individual")
Ahora, propongámonos construir una variable que pueda medir los niveles de formalidad de un trabajo.
Para esto podemos analizar el diseño de registro de la EPH publicado en INDEC. Si bien son varias las dimensiones sobre el trabajo de la personas que se analizan, nosotros nos focalizaremos en la sección titulada Ocupación principal de los asalariados (pág. 27) y dentro de esta sección tomaremos seis variables.
¿Este trabajo tiene…
Considerando estad variables deberíamos construir una tipología de los asalariados según las condiciones de trabajo, el cual diferencie alta precariedad (no tiene ningún derecho), mediana precariedad (al menos un derecho no se le respeta) y baja precariedad (tiene todos los derechos). ¿De qué manera se les ocurre que se pueden combinar las variables para crear un índice que permita clasificar a los asalariados?
Empecemos por explorar una de las variables, por ejemplo PP07G2. Para seleccionar solo una variable de un data set la traemos a partir de poner el nombre de la base + $ + nombre de la variable.
En nuestro caso sería eph23_3$PP07G2.
La función summary() nos indica los valores máximos mínimos y los cuartiles de nuestra variable. La función table() la cantidad de casos en cada uno de ellos.
summary(eph23_3$PP07G2)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.000 1.000 1.000 1.009 2.000 9.000 26711
table(eph23_3$PP07G2)
##
## 0 Si No Ns./Nr..
## 5356 10815 5440 13
Base_n <- eph23_3 %>%
filter ( CAT_OCUP == 3 & ESTADO == 1)
table(Base_n$PP07G2)
##
## 0 Si No Ns./Nr..
## 45 10815 5440 13
A partir de explorar estas variables nos damos cuenta que las categorías de nuestras variables son 1 = si, 2 = no, 0 = no corresponde y 9 = NS/NR. De hecho cuando filtramos por ocupado y obreros o empleados, las 0 se reducen.
De esta manera podríamos intentar crear una nueva variable que surja sumar estos resultados. Para esto primero deberíamos recategorizar algunas variables.
Base_n <- Base_n %>%
mutate(PP07C_r = case_when(
PP07C == 1 ~ 0,
PP07C == 2 ~ 1,
TRUE ~ 0 )) %>%
mutate(PP07G1_r = case_when(
PP07G1 == 1 ~ 1,
PP07G1 == 2 ~ 0,
TRUE ~ 0 )) %>%
mutate(PP07G2_r = case_when(
PP07G2 == 1 ~ 1,
PP07G2 == 2 ~ 0,
TRUE ~ 0 )) %>%
mutate(PP07G3_r = case_when(
PP07G3 == 1 ~ 1,
PP07G3 == 2 ~ 0,
TRUE ~ 0 )) %>%
mutate(PP07G4_r = case_when(
PP07G4 == 1 ~ 1,
PP07G4 == 2 ~ 0,
TRUE ~ 0 )) %>%
mutate(PP07H_r = case_when(
PP07H == 1 ~ 1,
PP07H == 2 ~ 0,
TRUE ~ 0 )) %>%
mutate(IPL_r = PP07C_r + PP07G1_r + PP07G2_r + PP07G3_r + PP07G4_r + PP07H_r) %>%
mutate(IPL = case_when(
IPL_r == 0 ~ "Bajo",
IPL_r %in% 1:5 ~ "Medio",
IPL_r == 6 ~ "Alto"
)) %>%
mutate(IPL = factor(IPL, levels = c("Bajo", "Medio", "Alto")))
table(Base_n$IPL)
##
## Bajo Medio Alto
## 3206 3623 9484
IPL <- Base_n %>%
calculate_tabulates("IPL", weights = "PONDERA", add.totals = "row")
IPL
## IPL Freq
## 1 Bajo 1674373
## 2 Medio 2528514
## 3 Alto 5821430
## 4 Total 10024317
La visualización de datos es el proceso por el cual se representa la información de forma gráfica para hacerla mas fácil y comprensible al lector. Esto puede asumir muchas formas como gráficos, diagramas, mapas, etc. Esto, ademas de aportar claridad, nos permite resumir mucha información en poca cantidad de espacio. Representar gráficamente nuestros datos es también otra forma de presentar distribuciones.
Ser capaz de contar historias con datos es una habilidad que se está volviendo cada vez más importante en un mundo en el que cada vez hay más datos y en el que se desea tomar decisiones basadas en ellos. Una visualización de datos eficaz puede significar la diferencia entre el éxito y el fracaso a la hora de comunicar los resultados de su estudio, recaudar dinero para su organización sin ánimo de lucro, presentar a su junta directiva, o simplemente hacer llegar su punto de vista a su público.
La Escuela de Psicología de la Gestalt se propuso, a principios del siglo XX, comprender cómo los individuos perciben el orden en el mundo que les rodea. Lo que obtuvieron son 6 principios de la percepción visual que aún se aceptan que definen cómo las personas interactúan con los estímulos visuales y crean de los estímulos visuales.
Proximidad: Si unos elementos se encuentran juntos se perciben como un grupo, los tres grupos de puntos.
Similitud o semejanza: Los atributos con colores o formas semejantes se perciben como parte del mismo grupo, como el caso de los círculos y triángulos o el color rojo y el turquesa.
Cierre: Los elementos que parecen tener un contorno o borde alrededor se perciben como parte de un mismo grupo.
Compleción: Nuestra percepción tiende a completar las partes que faltan rellenándolas con los elementos que faltan.
Continuidad: Los elementos que están uno al lado del otro se perciben elementos continuos aunque haya espacios.
Conexión: Los elementos conectados físicamente entre si se perciben como un grupo de manera mas fuerte que todas las demás leyes.
Es necesario poner la mínima cantidad de información necesario en nuestra visualizaciones
Ggplot2 es la biblioteca de visualización de datos mas usada en R. Esta basada en el concepto de “gramática de gráficos”, que proporciona una forma estructurada y coherente de construir visualizaciones. La clave de esta gramática esta la posibilidad de trabajar por capas en la construcción de nuestras visualizaciones. Ggplot permite visualizar un gran cantidad de información a la par que un nivel muy detallado de personalización de nuestros gráficos.
Como dijimos ggplot trabaja creando “capas” (layers en ingles). Las capas pueden definir geometrías, calcular estadísticas de resumen, definir qué escalas usar o incluso cambiar estilos. Usamos el símbolo + para ir añiniedo nuevas capas a nuestro gráfico.
Para buscar ejemplos y tutoriales sobre gráficos con ggplot2 The R Graph Gallery una excelente fuente.
La primera capa es el mapeo estético (aesthetic mappings en inglés). Los mapeos estéticos vinculan propiedades de los datos con características visuales del gráfico, como posición en un eje, tamaño o color. Usando la función aes(), establecemos estas conexiones, lo que la convierte en una herramienta fundamental para la creación de gráficos. Normalmente, el resultado de aes se pasa como argumento a funciones geométricas para completar el gráfico
De esta manera, abrimos primero la función ggplot() establecemos nuestro data set como primer parametro y luego la función aes(). Adentro de esta ultima operación es necesario aclarar que rol tiene las variables que queremos trabajar. Serán el eje x? el eje y? el color? la forma? Esto es lo que hay pensar y definir.
Usemos nuestra variable IPL como ejemplo. Indiquemos la nuestro datset “Base_N” y dentro del aes() que en el eje x queremos la variable IPL y que ponderamos (weights en ingles) con PONDERA. Por ultimo, asignamos todo al objeto “gráfico1”
grafico1 <- ggplot(data = Base_n, aes(x = IPL, weights = PONDERA))
grafico1
Como resultado obtuvimos un plano vacío (el “lienzo”) en donde se estableció en el eje x las categorías de las variable IPL. Ahora bien ningún tipo de forma geométrica. Este es el próximo paso.
En este sentido quedaría es establecer las figuras de los gráficos. En función de que tipo de gráfico queramos hacer es el geom que tenemos que usar
Primero entonces realicemos un gráfico de barras. Para esto tenemos que adosar un + y la función geom_bar() a nuestra linea de código anterior
Este tipo de gráficos se utilizan comúnmente para mostrar la distribución de una variable categórica o para comparar cantidades entre diferentes categorías. En un gráfico de barras, las categorías se muestran en el eje horizontal (eje x), mientras que las alturas de las barras representan las frecuencias, recuentos o valores asociados con cada categoría y se muestran en el eje vertical (eje y).
options(scipen=999)
grafico1 <- ggplot(data = Base_n, aes(x = IPL, weights = PONDERA)) +
geom_bar()
grafico1
Existen algunos parámetros estéticos que podemos modificar de este gráfico. Podemos, por ejemplo, elegir entre estos “temas” para modificar sus componentes:
theme_grey, theme_bw, theme_linedraw, theme_light, theme_dark, theme_minimal o theme_classic.
Probamos?
grafico1 <- ggplot(data = Base_n, aes(x = IPL, weights = PONDERA)) +
geom_bar()+
theme_classic()
grafico1
Que piensan de este gráfico? siguiendo los consejos que vimos al principio seria bueno quitar todo tipo de información redundante. En este sentido los nombres de las variable no aportan demasiado, sobre todo si logramos pasar algunas cosa a títulos o etiquetas.
Para poner títulos y subtitulos usamos la función labs(). Como siempre sumamos otra linea de código con el +. Una vez que aclaramos esto en el titulo es redundante tener el nombre de la categoría en el eje x. Podemos modificar los componentes de los ejes a través de la función theme(). Dentro de esta función establecemos que axis.title.x = element_blank(). Traducido al castellano seria: eje.titulo.x = elemento_vació . Con esta misma lógica podemos ir modificando todo el resto de los elementos del gráfico( por ejemplo: tamaños, colores, fuentes y posiciones de títulos, ejes y leyendas)
grafico1 <- ggplot(data = Base_n, aes(x = IPL, weights = PONDERA)) +
geom_bar()+
theme_classic()+
labs( title = "Cantidad de trabajadores según indice de precariedad laboral (IPL)" , subtitle = "EPH: 3° trim. 2023")+
theme(axis.title.x = element_blank())
grafico1
Es un poco difícil de distinguir el valor de cada columna a simple vista. En este sentido es que siempre es deseable, en la medida que se pueda poner etiquetas a los gráficos. Para esto sumamos otro geom a nuestro código: geom_text. Esta función requiere que le pasemos algunos parámetros dado que no indicamos una variable y (lo veremos la próximas clases).
grafico1 <- ggplot(data = Base_n, aes(x = IPL, weights = PONDERA)) +
geom_bar()+
geom_text(aes( label = ..count..), stat = "count", vjust =-0.5)+
theme_classic()+
labs( title = "Cantidad de trabajadores según indice de precariedad laboral (IPL)" , subtitle = "EPH: 3° trim. 2023")+
theme(axis.title.x = element_blank())
grafico1
Por ultimo, ahora que tenemos las etiquetas sobre las barras todo el eje Y carece de sentido, quitemoslo. Configuremos el texto del eje (axis.text.y), el titulo del eje (axis.title.y) y las lineas del eje (axis.line.y) como vacías (element_blank)
grafico1 <- ggplot(data = Base_n, aes(x = IPL, weights = PONDERA)) +
geom_bar()+
geom_text(aes( label = ..count..), stat = "count", vjust =-0.5)+
theme_classic()+
labs( title = "Cantidad de trabajadores según indice de precariedad laboral (IPL)", subtitle = "EPH: 3° trim. 2023")+
theme(axis.title.x = element_blank(), axis.text.y = element_blank(), axis.line.y = element_blank(), axis.title.y = element_blank())
grafico1
## 5 Más ejercicios para practicar
a- Simplifique la variable Nivel Educativo (NIVEL_ED) para que solamente tenga 3 categorías. b - Elabore un gráfico de barras para visualizar los resultados.
Base_r <- eph23_3 %>%
mutate(NIVEL_ED_R = case_when(NIVEL_ED <= 3 | NIVEL_ED == 7 ~ "Bajo",
NIVEL_ED == 4 ~ "Medio",
NIVEL_ED >= 5 & NIVEL_ED <= 6 ~ "Alto",
TRUE ~ "Otro" )) %>%
mutate(NIVEL_ED_R = factor(NIVEL_ED_R, levels = c("Bajo", "Medio", "Alto")))
table(Base_r$NIVEL_ED_R)
##
## Bajo Medio Alto
## 25552 10104 12679
grafico2 <- ggplot(data = Base_r, aes(x = NIVEL_ED_R, weights = PONDERA)) +
geom_bar()+
geom_text(aes( label = ..count..), stat = "count", vjust =-0.5)+
theme_classic()+
labs( title = "Cantidad de personas según nivel educativo simplificado", subtitle = "EPH: 3° trim. 2023")+
theme(axis.title.x = element_blank(), axis.text.y = element_blank(), axis.line.y = element_blank(), axis.title.y = element_blank())
grafico2