Analítica de datos aplicada a estudios sobre desarrollo

Introducción a al paquete R

Sobre Mi

PhD en Estadística, MSc en Analytics & Big Data, MSc en Estadística. Con 20 años de experiencia, actual director de analítica en el CNC, miembro del comité de expertos en pobreza en el DANE y consultor de la División de Estadística de la CEPAL. Ex-decano de la Facultad de Estadística USTA, ex-director de operaciones en el ICFES, PM CEV …

Puedes encontrarme en:

ORGANIZACIÓN DE DATOS

Proceso de analítica

Wickham, H. y otros (2023)

Trabajando con R

Organización y proyectos en R

  • Facilita entornos colaborativos - reproducible y replicable
  • Evite la asignación de rutas de trabajo setwd(mi/ruta/)
  • Cree un R-project y solo revise getwd()
  • Organice su espacio de trabajo:

Organización de datos

Una de las maneras más sencillas de transformar, organizar y resumir los datos es usando el paquete dplyr

Organización de datos




  • dplyr es del entorno tidyverse
  • Pipeline: |> o %>%
  • Seleccionar filas: filter(condición)
  • Seleccionar columnas: select(var1, var2, ...)
  • Ordenar conjunto de datos: arrange(var) o arrange(desc(var))
  • Crear nuevas columnas: mutate(operación)
  • Agrupar o resumir: summarise()

Operador de tubería |>, %>%

Permite realizar varias operaciones antes de guardar el resultado en un objeto

1 |> 
  sum(2, 3)
[1] 6
25 |> 
  sqrt()
[1] 5
"Bienvenid@s" |> 
    paste("al curso de") |> 
    paste("Analítica de Datos")
[1] "Bienvenid@s al curso de Analítica de Datos"

Seleccionar filas

Allison Horst

Operadores de comparación en R

Operador Definición
< es menor que
<= es menor o igual que
> es mayor que
>= es mayor o igual que
== es exactamente igual a
!= es diferente de

Operadores lógicos en R

Operador Definición
x & y x Y y
x \| y x O y
is.na(x) x es NA (valor faltante)
!is.na(x) x no es NA
x %in% y está x en y
!(x %in% y) no está x en y

Ejemplo

Crear un subconjunto de datos desde la ENSIN con los registros de Bogotá y que sean personas de estrato 3 o menos.

library(pacman)

p_load(tidyverse, haven)

url <- "https://github.com/jgbabativam/AnaDatos/raw/main/datos/ENSIN.sav"
ensin <- read_sav(url)

#glimpse(ensin)

#-->  Filtro de registros de Bogotá y estrato menor o igual que 3

df_filt <- ensin |> 
           filter(departamento == 11 & Estrato <= 3)

nrow(df_filt)
[1] 1111

Seleccionar columnas

El verbo select(var1, var2, ...) permite conservar solo las variables de interés.


df_filt <- ensin |> 
           filter(departamento == 11 & Estrato <= 3) |> 
           select(llavehog, llaveper, departamento, Estrato, edad, sexo, Peso, Estatura)

head(df_filt)
# A tibble: 6 × 8
  llavehog llaveper   departamento Estrato   edad      sexo       Peso Estatura
  <chr>    <chr>      <dbl+lbl>    <dbl+lbl> <dbl+lbl> <dbl+lbl> <dbl>    <dbl>
1 46010101 4601010103 11 [Bogotá]  3         32        2 [Mujer] 61.1     159. 
2 46020101 4602010104 11 [Bogotá]  2         13        2 [Mujer] 51       162  
3 46020101 4602010105 11 [Bogotá]  2          6        2 [Mujer] 20.7     116. 
4 46020201 4602020103 11 [Bogotá]  2          0        2 [Mujer]  6.70     61.6
5 46020201 4602020105 11 [Bogotá]  2          0        2 [Mujer]  5.5      59.9
6 46020301 4602030103 11 [Bogotá]  2         16        2 [Mujer] 51.6     156. 

Ordenar el conjunto de datos con arrange()

Con arrage(var1, var2, ...) puede ordenar su conjunto de datos por las variables que desee.


df_filt <- ensin |> 
           filter(departamento == 11 & Estrato <= 3) |> 
           select(llavehog, llaveper, departamento, Estrato, edad, sexo, Peso, Estatura) |> 
           arrange(desc(edad))

head(df_filt)
# A tibble: 6 × 8
  llavehog llaveper   departamento Estrato   edad      sexo       Peso Estatura
  <chr>    <chr>      <dbl+lbl>    <dbl+lbl> <dbl+lbl> <dbl+lbl> <dbl>    <dbl>
1 46880801 4688080101 11 [Bogotá]  3         49        2 [Mujer]  52.2     152.
2 47111201 4711120102 11 [Bogotá]  3         49        2 [Mujer]  52.8     158 
3 47120701 4712070107 11 [Bogotá]  3         49        2 [Mujer]  72       167.
4 47260601 4726060101 11 [Bogotá]  2         49        2 [Mujer]  62       153 
5 47630007 4763000702 11 [Bogotá]  3         49        2 [Mujer]  70.9     153.
6 47810009 4781000901 11 [Bogotá]  2         49        2 [Mujer]  72.5     151.

Crear nuevas columnas mutate()

Arte de Allison Horst

Crear nuevas columnas mutate()

Para crear una variable con el IMC

(df_filt <- df_filt |> 
           mutate(imc = Peso/(Estatura/100)^2))
# A tibble: 1,111 × 9
   llavehog llaveper   departamento Estrato   edad  sexo     Peso Estatura   imc
   <chr>    <chr>      <dbl+lbl>    <dbl+lbl> <dbl> <dbl+l> <dbl>    <dbl> <dbl>
 1 46880801 4688080101 11 [Bogotá]  3         49    2 [Muj…  52.2     152.  22.5
 2 47111201 4711120102 11 [Bogotá]  3         49    2 [Muj…  52.8     158   21.2
 3 47120701 4712070107 11 [Bogotá]  3         49    2 [Muj…  72       167.  25.7
 4 47260601 4726060101 11 [Bogotá]  2         49    2 [Muj…  62       153   26.5
 5 47630007 4763000702 11 [Bogotá]  3         49    2 [Muj…  70.9     153.  30.4
 6 47810009 4781000901 11 [Bogotá]  2         49    2 [Muj…  72.5     151.  31.7
 7 47880003 4788000302 11 [Bogotá]  2         49    2 [Muj…  60.7     156.  24.9
 8 48040801 4804080101 11 [Bogotá]  3         49    2 [Muj…  59.2     152.  25.5
 9 48340301 4834030101 11 [Bogotá]  2         49    2 [Muj…  67.1     152.  28.9
10 48357530 4835753001 11 [Bogotá]  2         49    2 [Muj…  62       150.  27.5
# ℹ 1,101 more rows

Columnas basado en condiciones case_when()

Para sentencias binarias puede usar ifelse()

Ejercicio

Arme los grupos etarios según la OMS: infancia (0-11 años), adolescencia (12-18 años), juventud (19-29 años), adultez (30-59 años) y vejez (60 años en adelante).

df_edad <- df_filt |> 
           mutate(grupo_etario = case_when(
                between(edad,  0, 11) ~ "Infancia (0-11)",
                between(edad, 12, 18) ~ "Adolescencia (12-18)",
                between(edad, 19, 29) ~ "Juventud (19-29)",
                between(edad, 30, 59) ~ "Adultez (30-59)",
                TRUE ~ "Vejez (60 o más)"
           ))

head(df_edad |> select(-llavehog, -llaveper))
# A tibble: 6 × 8
  departamento Estrato   edad      sexo       Peso Estatura   imc grupo_etario  
  <dbl+lbl>    <dbl+lbl> <dbl+lbl> <dbl+lbl> <dbl>    <dbl> <dbl> <chr>         
1 11 [Bogotá]  3         49        2 [Mujer]  52.2     152.  22.5 Adultez (30-5…
2 11 [Bogotá]  3         49        2 [Mujer]  52.8     158   21.2 Adultez (30-5…
3 11 [Bogotá]  3         49        2 [Mujer]  72       167.  25.7 Adultez (30-5…
4 11 [Bogotá]  2         49        2 [Mujer]  62       153   26.5 Adultez (30-5…
5 11 [Bogotá]  3         49        2 [Mujer]  70.9     153.  30.4 Adultez (30-5…
6 11 [Bogotá]  2         49        2 [Mujer]  72.5     151.  31.7 Adultez (30-5…

Agrupar y resumir summarise()

El objetivo es crear un nuevo conjunto de datos con un resumen de estadísticos

Algunos ejemplos ilustrativos se encuentran aquí

Agrupar y resumir summarise()



Agrupar y resumir summarise()


Ejemplo

Andrew Heiss

Ejemplo

Calcular el promedio del Peso, Estatura e IMC por grupo etario

res <- df_edad |> 
       group_by(grupo_etario) |> 
       summarise(media_peso = mean(Peso, na.rm=T),
                 media_estatura = mean(Estatura, na.rm=T),
                 media_imc = mean(imc, na.rm=T)) |> 
       arrange(media_peso)

res
# A tibble: 4 × 4
  grupo_etario         media_peso media_estatura media_imc
  <chr>                     <dbl>          <dbl>     <dbl>
1 Infancia (0-11)            17.4           98.1      16.6
2 Adolescencia (12-18)       52.7          156.       21.6
3 Juventud (19-29)           60.3          156.       24.7
4 Adultez (30-59)            64.3          156.       26.5

GRACIAS!

Referencias

  • R for data science. Section 3. Data visualization. Disponible aquí

  • Dougherty, J. and Ilyankou, I. (2022) Hands-On Data Visualization. Interactive Storytelling from Spreadsheets to Code. Section 6. Chart Design Principles. Disponible aquí

  • Williams, G. (2022) Data Science Desktop Survival Guide. Togaware. Disponible aquí Chapter 2 introducing R

  • Jadey Ryan. Reproducible reports and presentations with Quarto. Disponible aquí

Citación y derechos de autor

Este material ha sido creado por Giovany Babativa-Márquez y es de libre distribución bajo la licencia Creative Commons Attribution-ShareAlike 4.0.

Si se copia parcial o totalmente, debe citar la fuente como:

Babativa-Márquez, J.G. Materiales del curso de Analítica de Datos. URL: https://github.com/jgbabativam/AnaDatos.