2. Procesamiento de datos con tidyverse

Agenda

  • Base de datos de La Corporación Nuevos Rumbos
  • Tidyverse
  • Explorar los datos
  • Estimar un modelo
  • Práctica

Base de datos Corporación Nuevos Rumbos

  • 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(DataWorkshopKL)
los_datos <- DataWorkshopKL::base_NR

los_datos  |> 
  glimpse()


Tip

  1. |>: 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 los datos los_datos a la función glimpse().

  2. glimpse(): imprimir una vista previa de los datos, incluyendo el tipo de datos de cada columna y algunos valores. 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()


Tip

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

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

select()

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 valor 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()

Las funciones en R son sus mejores amigas y pueden hacer mucho por usted. En este caso, la función transformar_respuesta toma un argumento x y devuelve un valor numérico en función de la comparación de x con los valores de mi diccionario.


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

mutate()

Calcular el promedio de las tres variables

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


Tip

  1. case_when(): 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 del diccionario.

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

  3. everything(): 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()

Permite seleccionar filas de la base de datos según una condición.

Voy a utilizar un filtro para seleccionar solamente las filas en las que los adultos respondieron “No tan mal” cuando preguntaron por sus actitudes frente al 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 seleccionó que no está tan mal fumar marihuana, sus respuestas sobre el consumo de alcohol y cigarrillo parecen seguir un patrón similar.

filter()

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


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


Como en el ejemplo anterior, se observa que el patrón de respuestas es más o menos consistente.

Tip

  1. filter(): seleccionar filas específicas de un data frame 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”.

summarize()

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(): calcular medidas de resumen de un data frame. 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(): 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”.

Práctica

Cuál es la prevalencia de consumo de las siguientes drogas en los últimos 30 días.

  • Alcohol: ALC30DY
  • Cigarrillo: CIG30DY
  • Marihuana: MAR30DY

La prevalencia de consumo de una droga se define como el porcentaje de personas que consumieron la droga.

Explorar los datos

Explorar los datos 1

  1. Crear un subset con las variables de interés
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")
  1. Observar las variables de interés
los_datos  |> 
  select(all_of(factores_de_riesgo), 
         all_of(demograficas), 
         all_of(consumo_alcohol))  |> 
  glimpse()

Explorar los datos 1

  1. Guardo las variables de interés en un nuevo objeto
mini_datos <- los_datos %>% 
  select(all_of(factores_de_riesgo), 
         all_of(demograficas), 
         all_of(consumo_alcohol)) 
  1. Doy una mirada más general de los datos
mini_datos |> 
  skimr::skim()