1 El paquete ESdata

ESdata es un paquete de R que permite acceder a información estadística de España estructurada como datos ordenados (tidy data). Si se tiene instalado previamente el paquete devtools, puede instalarse el paquete desde Github haciendo:

devtools::install_github("jmsallan/ESdata")

Una vez instalado el paquete, podemos acceder a los datos haciendo:

library(ESdata)

El paquete permite acceder a un conjunto de datos estructurados en data frames, con la única dependencia de disponer de una versión de R superior a la 3.5.0. Una buena alternativa para explorar estos datos es usar los paquetes del tidyverse:

library(tidyverse)

En su versión actual, el paquete dispone de información relativa a:

  • Empleo: Encuesta de Población actíva (EPA).
  • Inflación: Índice de Precios al Consumo (IPC).
  • Crecimiento: PIB a precios de mercado.

En este documento mostraremos la información disponible sobre la Encuesta de Población Activa.

2 La Encuesta de Población activa (EPA)

La Encuesta de Población Activa (EPA) es un estudio estadístico destinado a capturar datos sobre el mercado de trabajo, sigiendo los estándares de la Organización Internacional del Trabajo (OIT). Dado que el desempleo es uno de los problemas más relevantes de la economía española, la publicación de los resultados de la EPA cada trimestre es objeto de la atención de los medios de comunicación.

En España, la EPA es realizada por el Instituto Nacional de Estadística (INE). Se recogen datos de manera trimestral, encuestando a 160.000 personas que residen en 65.000 viviendas familiares. La ficha metodológica estandarizada de la encuesta se encuentra en: https://www.ine.es/dyngs/IOE/es/operacion.htm?numinv=30308

Las tablas incorporadas al paquete recogen parte de la información publicada por el Instituto Nacional de Estadística en: https://www.ine.es/dynt3/inebase/es/index.htm?padre=982&capsel=983

Si cree que ESdata no recoge información de la EPA que podría ser de su interés, puede indicarlo en: https://github.com/jmsallan/ESdata

3 La EPA en ESdata

ESdata contiene las siguientes tablas con información sobre la EPA:

Tablas EPA en ESdata
tabla contenido
epa_edad EPA por grupo de edad.
epa_form EPA por nivel de formación
epa_nac EPA por nacionalidad
epa_sector EPA por sector

Las variables de cada una de las tablas son:

Variables de cada una de las tablas
tabla periodo region edad form nac sector dato valor
epa_edad
epa_form
epa_nac
epa_sector

Para todas las tablas, los datos se encuentran en la columna dato, expresados en miles de personas. La variable periodo indica a qué trimestre y año corresponde el dato, y el resto de variables son categóricas que describen la situación de cada fila.

Contenido de las variables
variable significado
periodo ültimo día del trimestre del dato
region código ISO 3166-2 de la región del dato (ver tabla)
edad grupo de edad
form nivel de formación (ver tabla)
nac nacionalidad (ES: española, EX: extranjera, UE: miembro UE, no_UE: no-miembro UE)
sector sector de actividad (agricultura, industria, construcción, servicios)
dato pob: población, act: población activa, ocu: población ocupada, par: población parada, ina: población inactiva
valor en miles de personas

El nombre oficial de cada una de las regiones (Comunidades y Ciudades Autónomas, y el conjunto del territorio nacional), y su código ISO 3166-2, que es el que aparece en la variable region, se encuentra en la tabla ccaa_iso:

Comunidades y Ciudades Autónomas de España
iso nombres
ES España
ES-AN Andalucía
ES-AR Aragón
ES-AS Principado de Asturias
ES-IB Illes Balears
ES-CN Canarias
ES-CB Cantabria
ES-CL Castilla y León
ES-CM Castilla - La Mancha
ES-CT Catalunya
ES-VC Comunidad Valenciana
ES-EX Extremadura
ES-GA Galicia
ES-MD Comunidad de Madrid
ES-MC Región de Murcia
ES-NC Comunidad Foral de Navarra
ES-PV País Vasco
ES-RI La Rioja
ES-CE Ceuta
ES-ML Melilla

Los niveles de formación de la variable form, tal y como los define el INE, son:

Niveles de información considerados en la EPA
codigo significado
analf Analfabetos
prim_inic Estudios primarios incompletos
prim Educación primaria
sec_1 Primera etapa de Educación Secundaria y similar
sec_2_gen Segunda etapa de educación secundaria, con orientación general
sec_2_voc Segunda etapa de educación secundaria con orientación profesional (incluye educación postsecundaria no superior)
ed_sup Educación Superior

4 Ejemplos de utilización

Cada una de las tablas puede consultarse de múltiples maneras, así que hay que realizar un filtrado previo de las filas que necesitamos, y posteriormente realizar el análisis que se requiera. En esta sección presentaremos algunos ejemplos de visualizaciones de los datos de la EPA.

4.1 Población activa total

Por ejemplo, si queremos obtener la población activa en España para cada período podemos usar la tabla epa_edad haciendo:

epa_edad %>% filter(region=="ES" & edad =="total" & dato=="pob" & edad=="total" & sexo=="total")
## # A tibble: 75 x 6
##    periodo    region edad  sexo  dato   valor
##    <date>     <chr>  <chr> <chr> <chr>  <dbl>
##  1 2020-09-30 ES     total total pob   46904.
##  2 2020-06-30 ES     total total pob   46896.
##  3 2020-01-31 ES     total total pob   46874.
##  4 2019-12-31 ES     total total pob   46794.
##  5 2019-09-30 ES     total total pob   46702.
##  6 2019-06-30 ES     total total pob   46599 
##  7 2019-01-31 ES     total total pob   46523.
##  8 2018-12-31 ES     total total pob   46435.
##  9 2018-09-30 ES     total total pob   46326.
## 10 2018-06-30 ES     total total pob   46241 
## # … with 65 more rows

Entonces podemos usar ggplot para graficar la evolución temporal de la población activa:

epa_edad %>% filter(region=="ES" & edad =="total" & dato=="pob" & edad=="total" & sexo=="total") %>% 
  ggplot(aes(periodo, valor)) + 
  geom_line()

4.2 Evolución de la población por sexo

En esta gráfica realizamos las operaciones siguientes:

  • Filtrado de los datos con filter.
  • Modificación de los niveles de sexocon mutate para mostrar los niveles en el mismo orden que aparecen en el gráfico.
  • Definición de un gráfico de línea con ggplot y geom_line().
  • Modificación del título del gráfico y de los nombres del eje x e y con labs. Por ser autoexplicativo, no he puesto nombre en el eje x.
  • Modificación de la leyenda con scale_color_manual.
  • Fondo blanco del gráfico con theme_bw().
  • Posicionamiento de la leyenda debajo del gráfico con legend.position = "bottom".
epa_edad %>% 
  filter(region=="ES" & edad =="total" & dato=="pob" & edad=="total" & sexo!="total") %>% 
  mutate(sexo=factor(sexo, levels = c("mujeres", "hombres"))) %>%
  ggplot(aes(periodo, valor, col=sexo)) + 
  geom_line() + 
  labs(title="Evolución de la población (España)", x="", y="pob. (miles)") +
  scale_color_manual(values = c("#FF0000", "#0000FF")) + 
  theme_bw() +
  theme(legend.position = "bottom")

En scale_color_manual se definen los colores de cada línea en values usando un formato hexadecimal. Puede obtenerse información sobre estos códigos hexadecimales en:

https://www.rapidtables.com/web/color/RGB_Color.html

4.3 Población total, activa e inactiva de 20 a 24 años por sexo

Aquí tenemos dos categorizaciones: una de diferentes tipos de población (total, activa e inactiva) y otra por sexo para un rango de edad específico. Utilizamos facet_grid para obtener un gráfico para cada sexo:

epa_edad %>% filter(region=="ES" & edad == "20-24" & sexo!="total" & dato %in% c("act", "pob", "ina")) %>% 
  mutate(dato = factor(dato, levels = c("pob", "act", "ina"))) %>%
  ggplot(aes(periodo, valor, col=dato)) + 
  geom_line() + 
  scale_color_manual(name="Población", values=c("#000000", "#0000FF", "#FF0000"), labels=c("total", "activa", "inactiva")) + 
  theme_bw() + 
  labs(title="Evolución actividad personas 20-24 años en España", x = "", y = "pob. (miles)")  + 
  theme(legend.position = "bottom") + 
  ylim(0, 1700) +
  facet_grid(. ~ sexo)

Observamos que las poblaciones activa e inactiva tienen componente estacional, reflejando la población que pasa a ser activa en determinadas estaciones del año. Podemos compensar este efecto reteniendo sólo los datos del tercer trimestre de cada año. Para ello usamos la función month del paquete lubridate en el filtrado.

library(lubridate)
epa_edad %>% filter(region=="ES" & edad == "20-24" & sexo!="total" & dato %in% c("act", "pob", "ina") & month(periodo) == 9) %>% 
  mutate(dato = factor(dato, levels = c("pob", "act", "ina"))) %>%
  ggplot(aes(periodo, valor, col=dato)) + 
  geom_line() + 
  scale_color_manual(name="Población", values=c("#000000", "#0000FF", "#FF0000"), labels=c("total", "activa", "inactiva")) + 
  theme_bw() + 
  labs(title="Evolución actividad personas 20-24 años en España (tercer trimestre)", x = "", y = "pob. (miles)")  + 
  theme(legend.position = "bottom") + 
  ylim(0, 1700) +
  facet_grid(. ~ sexo)

4.4 Tasas de actividad y de paro

Los datos que suministra el paquete son en población total, y podemos estar interesados en tener datos de tasas de actividad y tasa de paro. Podemos tener valores de tasa de actividad con epa_edad haciendo:

\[ \text{tasa de actividad} = \frac{\text{act}}{\text{act} + \text{ina}} \]

Podemos evaluar la tasa de paro conepa_edad, epa_form y epa_nac haciendo:

\[ \text{tasa de paro} = \frac{\text{ocu}}{\text{act}}\]

Para calcular las tasas de actividad usamos pivot_wider y pivot_longer de tidyr. Primero usamos pivot_wider para generar una columna para cada uno de los valores de dato y usamos mutate para calcular las tasas:

epa_edad %>% filter(region=="ES" & edad=="total" & sexo=="total") %>%
  pivot_wider(names_from = "dato", values_from = "valor") %>%
  mutate(t_act=act/(act+ina), t_paro=par/act)
## # A tibble: 75 x 11
##    periodo    region edad  sexo     pob    act    ocu   par    ina t_act t_paro
##    <date>     <chr>  <chr> <chr>  <dbl>  <dbl>  <dbl> <dbl>  <dbl> <dbl>  <dbl>
##  1 2020-09-30 ES     total total 46904. 22900. 19177. 3723. 16696  0.578  0.163
##  2 2020-06-30 ES     total total 46896. 21975. 18607. 3368  17589. 0.555  0.153
##  3 2020-01-31 ES     total total 46874. 22994. 19681. 3313  16526. 0.582  0.144
##  4 2019-12-31 ES     total total 46794. 23159. 19967. 3192. 16268. 0.587  0.138
##  5 2019-09-30 ES     total total 46702. 23089. 19874. 3214. 16233. 0.587  0.139
##  6 2019-06-30 ES     total total 46599  23036. 19805. 3231. 16178. 0.587  0.140
##  7 2019-01-31 ES     total total 46523. 22825. 19471. 3354. 16289. 0.584  0.147
##  8 2018-12-31 ES     total total 46435. 22869. 19565. 3304. 16151. 0.586  0.144
##  9 2018-09-30 ES     total total 46326. 22854  19528  3326  16058. 0.587  0.146
## 10 2018-06-30 ES     total total 46241  22834. 19344. 3490. 16001. 0.588  0.153
## # … with 65 more rows

Si queremos graficar las tasas, volvemos a poner en formato largo los datos, y seleccionamos sólo las tasas de paro:

epa_edad %>% filter(region=="ES" & edad=="total" & sexo=="total") %>%
  pivot_wider(names_from = "dato", values_from = "valor") %>%
  mutate(t_act=act/(act+ina), t_paro=par/act) %>% 
  pivot_longer(cols = pob:t_paro, names_to = "dato", values_to = "valor") %>% 
  filter(dato %in% c("t_paro", "t_act"))
## # A tibble: 150 x 6
##    periodo    region edad  sexo  dato   valor
##    <date>     <chr>  <chr> <chr> <chr>  <dbl>
##  1 2020-09-30 ES     total total t_act  0.578
##  2 2020-09-30 ES     total total t_paro 0.163
##  3 2020-06-30 ES     total total t_act  0.555
##  4 2020-06-30 ES     total total t_paro 0.153
##  5 2020-01-31 ES     total total t_act  0.582
##  6 2020-01-31 ES     total total t_paro 0.144
##  7 2019-12-31 ES     total total t_act  0.587
##  8 2019-12-31 ES     total total t_paro 0.138
##  9 2019-09-30 ES     total total t_act  0.587
## 10 2019-09-30 ES     total total t_paro 0.139
## # … with 140 more rows

Y ahora ya podemos graficar los datos. Usamos scale_y_continuous para poner los valores en porcentaje:

epa_edad %>% filter(region=="ES" & edad=="total" & sexo=="total") %>%
  pivot_wider(names_from = "dato", values_from = "valor") %>%
  mutate(t_act=act/(act+ina), t_paro=par/act) %>% 
  pivot_longer(cols = pob:t_paro, names_to = "dato", values_to = "valor") %>% 
  filter(dato %in% c("t_paro", "t_act")) %>%
  ggplot(aes(periodo, valor, col=dato)) +
  geom_line() +
  scale_color_manual(name="tasas", labels=c("actividad", "paro"), values=c("#009900", "#FF0000")) +
  labs(title = "Tasas de actividad y paro en España", x="", y="tasa") + 
  scale_y_continuous(labels = scales::percent, limits=c(0,0.65)) +
  theme_bw() + 
  theme(legend.position = "bottom")

4.5 Anotaciones

Podemos hacer observaciones en el gráfico usando la función annote, y señalar valores con líneas verticales usando geom_vline:

epa_edad %>% filter(region=="ES" & edad=="total" & sexo=="total") %>%
  pivot_wider(names_from = "dato", values_from = "valor") %>%
  mutate(t_act=act/(act+ina), t_paro=par/act) %>% 
  pivot_longer(cols = pob:t_paro, names_to = "dato", values_to = "valor") %>% 
  filter(dato %in% c("t_paro", "t_act")) %>%
  ggplot(aes(periodo, valor, col=dato)) +
  geom_line() +
  scale_color_manual(name="tasas", labels=c("actividad", "paro"), values=c("#009900", "#FF0000")) +
  labs(title = "Tasas de actividad y paro en España", x="", y="tasa") + 
  geom_vline(xintercept = as.Date("2008-12-31"), linetype="dashed", size=0.25) +
  annotate("text", x=as.Date("2010-06-30"), y=0.4, label="crisis del 2008", hjust="left") +
  annotate("curve", x=as.Date("2010-06-15"), y =0.4, xend=as.Date("2008-12-31"), yend=0.35, curvature=0.2, arrow = arrow(length = unit(2, "mm"))) +
  scale_y_continuous(labels = scales::percent, limits=c(0,0.65)) +
  theme_bw() + 
  theme(legend.position = "bottom")

En este gráfico, mostramos cómo la crisis de 2008 supuso un aumento de la tasa de paro, sin que se viera afectada la tasa de actividad.

5 Propuestas de mejora

Si tiene alguna propuesta o ha detectado algún error, puede ponerse en contacto conmigo desde: https://github.com/jmsallan/ESdata