2. Procesamiento de datos con tidyverse

Agenda

  • Base de datos de Nuevos Rumbos
  • Tidyverse
  • Explorar los datos
  • Estimar un modelo
  • Juego 1

Base de datos de Nuevos Rumbos

Nuevos Rumbos

::: {.r-fit-text}

Introducción

  • Organización sin ánimo de lucro: Enfocada en la investigación y prevención de problemas sociales.
  • Áreas de Interés: Consumo de sustancias, delincuencia, y violencia.
  • Alcance Geográfico: Colombia y América Latina.

Fundación y Trayectoria

  • Establecida en Bogotá: Octubre de 2002.
  • Trayectoria: Más de dos décadas comprometidas con la prevención y la investigación.

Colaboraciones y Alianzas

  • Organizaciones Locales: Alcaldías y gobernaciones, Ministerios de Salud y de Justicia, Instituto Colombiano de Bienestar Familiar.
  • Organizaciones Internacionales: Organización Panamericana de la Salud, Comisión Europea, CICAD/OEA.
  • Instituciones Académicas: Universidades de New Jersey, Washington, y Miami.

Más información aquí

:::

Base de datos

  • Factores de riesgo y de protección
    • Disponibilidad percibida de drogas
    • Actitudes de la comunidad frente al consumo de drogas
    • Actitudes de los padres frente al consumo de drogas
    • Involucramiento en actividades comunitarias
  • Consumo de alcohol y otras drogas
    • Consumo de alcohol en la vida, 12 meses últimos 30 días
    • Haber estado en una pelea
  • Características demográficas
    • Edad
    • Sexo
    • Grado

Importar la base de datos

library(tidyverse)
library()
los_datos <- readRDS("DATA/base_NR.rds") |> 
             as_tibble()


Tip

  1. readRDS(): esta función se utiliza para leer un archivo de datos en formato RDS. En este caso, se utiliza para leer el archivo “base_NR.rds” y almacenar los datos en un objeto llamado “los_datos”.

  2. |>:se puede leer como “siguiente”. Este operador se utiliza para encadenar varias operaciones juntas en una sola línea de código. En este caso, se utiliza para encadenar la función readRDS() a la función as_tibble().

  3. as_tibble(): esta función se utiliza para convertir un objeto en un tibble, que es una versión mejorada de un data frame en R. En este caso, se utiliza para convertir el objeto “los_datos” en un tibble.

Explorar los datos

los_datos %>% 
  glimpse()


::: {.callout-tip}

  1. glimpse(): Esta función se utiliza para imprimir una vista previa de los datos, incluyendo el tipo de datos de cada columna y las primeras filas de los datos. En este caso, se utiliza para explorar los datos almacenados en el objeto “los_datos”.

:::

Funciones en Tidyverse para procesar datos

select()

Esta función selecciona columnas de una base de datos.

En este ejemplo, quiero una nueva base de datos que tenga la variable NHPROUD (“Hay gente en mi barrio que se siente orgullosa de mí cuando hago algo bien”)

los_datos |> 
  select(NHPROUD) |>
  distinct()


::: {.callout-tip}

  1. select(): Esta función se utiliza para seleccionar columnas específicas de un data frame o tibble. En este caso, se utiliza para seleccionar la columna “NHPROUD” del objeto “los_datos”.

  2. distinct(): Esta función se utiliza para eliminar filas duplicadas de un data frame o tibble. En este caso, se utiliza para eliminar filas duplicadas de la columna “NHPROUD” del objeto “los_datos”.

:::

select()

En este ejemplo voy a seleccionar las variables GENDER, AWRMAR, AWRALC, AWRCIG

  • GENDER: Sexo

“Qué tan mal ven la mayoría de los adultos de tu barrio (aquellos más cercanos a ti) el que los jóvenes de tu edad…”

  • AWRMAR = fumen marihuana
  • AWRALC = Consuman alcohol
  • AWRCIG = fumen cigarrillo
los_datos |> 
  select(GENDER, AWRMAR, AWRALC, AWRCIG)

mutate()

Esta función crea una nueva variable -añade una nueva columna a la base de datos- o tranforma una variable que esté presente en la base de datos.

Por ejemplo, si quiero transformar las tres variables del ejemplo anterior para asignar un puntaje de las percepciones de los estudiantes sobre las creencias de los adultos…

¿Qué debo hacer?

  1. Transformar el texto que hay en la base por los valores: 1, 2, 3 y 4.
  2. Crear una nueva variable que calcule la media de los puntajes.

mutate()

los_datos |> 
  select(AWRMAR, AWRALC, AWRCIG) |> 
  mutate(AWRMAR = case_when(
    AWRMAR == "Muy mal" ~ 1,
    AWRMAR == "Mal" ~ 2,
    AWRMAR == "Notan mal" ~ 3,
    AWRMAR == "Para nada mal" ~ 4,
   TRUE ~ NA
  ))

los_datos |> 
  select(AWRMAR, AWRALC, AWRCIG) |> 
  mutate(across(everything(), transformar_respuesta)) |> 
  mutate(TOTAL = (AWRMAR + AWRALC + AWRCIG)/3)


Tip

## Pro
transformar_respuesta <- function(x) {
  case_when(
    x == "Muy mal" ~ 1,
    x == "Mal" ~ 2,
    x == "Notan mal" ~ 3,
    x == "Para nada mal" ~ 4,
    TRUE ~ NA
  )
}

los_datos |> 
  select(AWRMAR, AWRALC, AWRCIG) |> 
  mutate(across(everything(), transformar_respuesta)) |> 
   mutate(TOTAL = (AWRMAR + AWRALC + AWRCIG)/3)

mutate()

Tip

  1. case_when(): Esta función se utiliza para realizar una serie de comparaciones y asignar valores en función de las comparaciones. En este caso, se utiliza para asignar un valor numérico a la columna “AWRMAR” del objeto “los_datos” en función de los valores de texto que contiene.

  2. across(): Esta función se utiliza para aplicar una función a varias columnas de un data frame o tibble. En este caso, se utiliza para aplicar la función transformar_respuesta() a todas las columnas del objeto “los_datos”.

  3. everything(): Esta función se utiliza para seleccionar todas las columnas de un data frame o tibble. En este caso, se utiliza para aplicar la función transformar_respuesta() a todas las columnas del objeto “los_datos”.

filter()

filter() es una función que permite seleccionar filas de la base de datos según una condición.

Ahora voy a utilizar un filtro para seleccionar solamente las filas en las que los adultos respondieron “No tan mal” para el consumo de marihuana (AWRMAR).

los_datos |> 
  select(GENDER, AWRMAR, AWRALC, AWRCIG) |> 
  filter(AWRMAR == "No tan mal")


Con este filtro puedo ver que en los primeros 10 casos, cuando un adulto juzga que no está tan mal fumar marihuana, el juicio de consumo de alcohol y cigarrillo parece seguir el mismo patrón.

filter()

Ahora miremos qué pasa si filtro por la opción “Muy mal”

los_datos |> 
  select(GENDER, AWRMAR, AWRALC, AWRCIG) |> 
  filter(AWRMAR == "Muy mal")


Es diferente al primer ejemplo, juzgar el consumo de marihuana como Muy mal parece también coincidir con el consumo de alcohol y cigarrillo.

Tip

  1. filter(): Esta función se utiliza para seleccionar filas específicas de un data frame o tibble en función de una o varias condiciones. En este caso, se utiliza para seleccionar las filas del objeto “los_datos” en las que la columna “AWRMAR” es igual a “No tan mal”.

summarise()

Esta función permiten obtener medidas de resumen de la base de datos, como por ejemplo, la media, moda, frecuencias, desviación estándar, etc.

# Para marihuana

los_datos |> 
  select(GENDER, AWRMAR, AWRALC, AWRCIG) |> 
  mutate(across(starts_with("A"),transformar_respuesta)) |> 
  summarise(mean_AWRMAR = mean(AWRMAR, na.rm = TRUE),
            sd_AWRMAR = sd(AWRMAR, na.rm = TRUE), 
            max_AWRMAR = max(AWRMAR, na.rm = TRUE), 
            min_AWRMAR = min(AWRMAR, na.rm = TRUE))

Tip

  1. summarise(): Esta función se utiliza para obtener medidas de resumen de un data frame o tibble. En este caso, se utiliza para obtener la media, la desviación estándar, el valor máximo y el valor mínimo de la columna “AWRMAR” del objeto “los_datos”.

  2. starts_with(): Esta función se utiliza para seleccionar columnas que comienzan con un determinado prefijo. En este caso, se utiliza para seleccionar las columnas que comienzan con “A” del objeto “los_datos”.

Explorar los datos

Explorar los datos 1

factores_de_riesgo <- c("CRPAD", "CRLNFD", "FRPFD", "FRPFM", "SRLCS", "PRFAD", 
                        "PRATA", "PRFUD", "PRIAP", "FPOPI", "FPRPI", "SPRPI")
demograficas <- c("YEAR", "GRADE", "GENDER", "AGE")
consumo_alcohol <- c("PYALC")


los_datos %>% 
  select(all_of(factores_de_riesgo), 
         all_of(demograficas), 
         all_of(consumo_alcohol)) %>% 
  glimpse()


mini_datos <- los_datos %>% 
  select(all_of(factores_de_riesgo), 
         all_of(demograficas), 
         all_of(consumo_alcohol)) 


mini_datos |> 
  skimr::skim()