1 1. Información general del estudio

En esta sección se presenta el contexto general del estudio, la pregunta problema y la descripción de las variables utilizadas.

Base de datos: Impuesto a bebidas azucaradas
Título del trabajo: Análisis del gasto en bebidas azucaradas antes y después del impuesto en Colombia
Miembros del equipo:
- Nombre 1
- Nombre 2
- Nombre 3

Fecha: 14/11/2025

Pregunta problema

¿Qué factores sociales, económicos y de salud se asocian con el gasto mensual en bebidas azucaradas después de la implementación del impuesto en Colombia?

2 2. Planteamiento del problema, objetivos y justificación

2.1 2.1 Planteamiento del problema

Las bebidas azucaradas se han identificado como un factor de riesgo importante para el desarrollo de enfermedades crónicas no transmisibles, como la diabetes tipo 2, la obesidad y las enfermedades cardiovasculares. En Colombia se implementó un impuesto a este tipo de productos con el objetivo de desincentivar su consumo y mejorar los indicadores de salud pública.

Sin embargo, no está completamente claro cómo este impuesto ha impactado el gasto mensual en bebidas azucaradas en la población y cómo dicho gasto se relaciona con características sociales (edad, sexo, estrato), económicas (ingreso mensual) y de salud (diagnóstico de diabetes, presión alta, nivel de conciencia en salud, actividad física y cambios de hábito).

Por ello, resulta pertinente analizar, a partir de una muestra de 70 personas, si el impuesto se asocia con cambios en el gasto y cómo estos cambios varían según las condiciones sociodemográficas y de salud de los individuos.

2.2 2.2 Objetivo general

Analizar la asociación entre factores sociales, económicos y de salud con el gasto mensual en bebidas azucaradas después de la implementación del impuesto en Colombia.

2.3 2.3 Objetivos específicos

  • Describir el perfil sociodemográfico y de salud de las personas encuestadas (edad, sexo, estrato, ingreso, actividad física, diagnósticos de salud, nivel de conciencia en salud y cambios de hábito).
  • Comparar el gasto mensual en bebidas azucaradas antes y después del impuesto.
  • Estimar intervalos de confianza para la media del nivel de conciencia en salud y del gasto mensual en bebidas antes del impuesto.
  • Evaluar si existen diferencias significativas en el gasto en bebidas azucaradas después del impuesto según el sexo.
  • Evaluar si existen diferencias significativas en el gasto en bebidas azucaradas después del impuesto según la realización de actividad física.
  • Formular recomendaciones en torno al consumo de bebidas azucaradas y a posibles acciones de salud pública.

2.4 2.4 Justificación

Este estudio permite comprender si el impuesto a las bebidas azucaradas se asocia con cambios reales en el gasto mensual de la población y cómo estos cambios varían según características sociodemográficas y de salud.

La información obtenida es relevante para:

  • La toma de decisiones en políticas públicas relacionadas con la fiscalidad de alimentos y bebidas.
  • El diseño de estrategias de prevención de enfermedades crónicas no transmisibles.
  • La promoción de hábitos de vida saludables, especialmente en grupos con mayor consumo de bebidas azucaradas o menor conciencia en salud.

Además, el análisis de la relación entre gasto, ingreso, hábitos de actividad física y diagnósticos de salud aporta evidencia útil para focalizar intervenciones en los grupos de mayor riesgo.

2.5 2.5 Cita / referencia

Organización Mundial de la Salud. (2016). Fiscal policies for diet and prevention of noncommunicable diseases. World Health Organization.

2.6 2.6 Variables del dataset

Descripción de las variables del estudio
Variable Tipo Descripción
edad Numérica Edad de la persona (15 a 75 años).
sexo Categórica Masculino, Femenino, Otro.
estrato Ordinal Estrato socioeconómico (1 a 6).
ingreso_mensual Numérica Ingreso mensual en COP.
gasto_bebidas_antes Numérica Gasto mensual en bebidas azucaradas antes del impuesto.
gasto_bebidas_despues Numérica Gasto mensual en bebidas azucaradas después del impuesto (variable eje).
frecuencia_consumo_bebidas Ordinal Nunca, Ocasional, Frecuente, Diario.
realiza_actividad_fisica Categórica Sí / No. 
diagnostico_diabetes Categórica Sí / No. 
presion_alta Categórica Sí / No. 
nivel_conciencia_salud Ordinal Escala 1–10. Nivel de conciencia sobre salud.
ha_cambiado_habito Categórica Sí / No. Cambio de hábito de consumo.

3 3. Carga y preparación de los datos

En esta sección se describe el proceso de carga, limpieza y preparación de la base de datos para garantizar su calidad antes del análisis.

datos <- read.csv(
  "base_bebidas_azucaradas(bebidas_70_observaciones).csv",
  sep = ";",
  dec = ",",
  stringsAsFactors = FALSE
)

# Revisar estructura inicial
head(datos)
##   edad sexo estrato ingreso_mensual gasto_bebidas_antes gasto_bebidas_despues
## 1   56    F       3         1355929               27578                 16874
## 2   46    F       2         1669093               13564                  8064
## 3   32    F       2          457829               11586                  9189
## 4   60    F       3          407726                   0                     0
## 5   25    M       5         1513164                6629                  3160
## 6   38    M       5         1378190                   0                     0
##   frecuencia_consumo_bebidas realiza_actividad_fisica diagnostico_diabetes
## 1                  Frecuente                       No                   No
## 2                  Ocasional                       No                   No
## 3                  Ocasional                       Si                   No
## 4                      Nunca                       No                   No
## 5                  Ocasional                       Si                   No
## 6                      Nunca                       No                   No
##   presion_alta nivel_conciencia_salud ha_cambiado_habito
## 1           No                    6.4                 Si
## 2           No                    9.0                 Si
## 3           No                    5.8                 Si
## 4           No                    4.9                 No
## 5           No                   10.0                 Si
## 6           No                    8.6                 No
str(datos)
## 'data.frame':    70 obs. of  12 variables:
##  $ edad                      : int  56 46 32 60 25 38 56 36 40 28 ...
##  $ sexo                      : chr  "F" "F" "F" "F" ...
##  $ estrato                   : int  3 2 2 3 5 5 1 3 3 2 ...
##  $ ingreso_mensual           : int  1355929 1669093 457829 407726 1513164 1378190 1350295 1407868 791985 1339352 ...
##  $ gasto_bebidas_antes       : int  27578 13564 11586 0 6629 0 5705 11424 5265 10857 ...
##  $ gasto_bebidas_despues     : int  16874 8064 9189 0 3160 0 5705 7958 2795 8212 ...
##  $ frecuencia_consumo_bebidas: chr  "Frecuente" "Ocasional" "Ocasional" "Nunca" ...
##  $ realiza_actividad_fisica  : chr  "No" "No" "Si" "No" ...
##  $ diagnostico_diabetes      : chr  "No" "No" "No" "No" ...
##  $ presion_alta              : chr  "No" "No" "No" "No" ...
##  $ nivel_conciencia_salud    : chr  "6.4" "9.0" "5.8" "4.9" ...
##  $ ha_cambiado_habito        : chr  "Si" "Si" "Si" "No" ...

3.1 3.1. Limpieza de nombres de variables

datos <- datos %>%
  janitor::clean_names()

names(datos)
##  [1] "edad"                       "sexo"                      
##  [3] "estrato"                    "ingreso_mensual"           
##  [5] "gasto_bebidas_antes"        "gasto_bebidas_despues"     
##  [7] "frecuencia_consumo_bebidas" "realiza_actividad_fisica"  
##  [9] "diagnostico_diabetes"       "presion_alta"              
## [11] "nivel_conciencia_salud"     "ha_cambiado_habito"

Verifica que los nombres sean:
edad, sexo, estrato, ingreso_mensual, gasto_bebidas_antes, gasto_bebidas_despues,
frecuencia_consumo_bebidas, realiza_actividad_fisica, diagnostico_diabetes,
presion_alta, nivel_conciencia_salud, ha_cambiado_habito.

3.2 3.2. Conversión de tipos de variables

datos <- datos %>%
  mutate(
    # Variables categóricas
    sexo = factor(sexo),
    realiza_actividad_fisica = factor(
      realiza_actividad_fisica,
      levels = c("No", "Si", "Sí"),
      labels = c("No", "Sí", "Sí")
    ),
    diagnostico_diabetes = factor(
      diagnostico_diabetes,
      levels = c("No", "Si", "Sí"),
      labels = c("No", "Sí", "Sí")
    ),
    presion_alta = factor(
      presion_alta,
      levels = c("No", "Si", "Sí"),
      labels = c("No", "Sí", "Sí")
    ),
    ha_cambiado_habito = factor(
      ha_cambiado_habito,
      levels = c("No", "Si", "Sí"),
      labels = c("No", "Sí", "Sí")
    ),

    # Ordinales
    estrato = factor(estrato, ordered = TRUE),
    frecuencia_consumo_bebidas = factor(
      frecuencia_consumo_bebidas,
      levels = c("Nunca", "Ocasional", "Frecuente", "Diario"),
      ordered = TRUE
    ),

    # Numéricas
    edad = as.numeric(edad),
    ingreso_mensual = as.numeric(ingreso_mensual),
    gasto_bebidas_antes = as.numeric(gasto_bebidas_antes),
    gasto_bebidas_despues = as.numeric(gasto_bebidas_despues),
    nivel_conciencia_salud = as.numeric(nivel_conciencia_salud)
  )

summary(datos)
##       edad          sexo    estrato ingreso_mensual   gasto_bebidas_antes
##  Min.   :19.00   F    :36   1: 7    Min.   : 291091   Min.   :    0      
##  1st Qu.:28.25   M    :33   2:18    1st Qu.: 776538   1st Qu.: 5696      
##  Median :40.50   Other: 1   3:21    Median :1377016   Median :11708      
##  Mean   :40.64              4:11    Mean   :1310969   Mean   :15336      
##  3rd Qu.:53.75              5: 6    3rd Qu.:1593158   3rd Qu.:23390      
##  Max.   :64.00              6: 7    Max.   :3511638   Max.   :80174      
##  gasto_bebidas_despues frecuencia_consumo_bebidas realiza_actividad_fisica
##  Min.   :    0         Nunca    :15               No:26                   
##  1st Qu.: 2817         Ocasional:33               Sí:44                   
##  Median : 7114         Frecuente:19                                       
##  Mean   : 9697         Diario   : 3                                       
##  3rd Qu.:15004                                                            
##  Max.   :41009                                                            
##  diagnostico_diabetes presion_alta nivel_conciencia_salud ha_cambiado_habito
##  No:64                No:64        Min.   : 1.700         No:17             
##  Sí: 6                Sí: 6        1st Qu.: 5.800         Sí:53             
##                                    Median : 7.500                           
##                                    Mean   : 7.131                           
##                                    3rd Qu.: 8.775                           
##                                    Max.   :10.000

4 4. Análisis exploratorio de datos (EDA)

A continuación se revisan datos faltantes, valores atípicos y se construyen resúmenes descriptivos y gráficos.

4.1 4.1. Datos faltantes (NA)

na_resumen <- datos %>%
  summarise(across(everything(), ~ sum(is.na(.)))) %>%
  pivot_longer(
    cols = everything(),
    names_to = "variable",
    values_to = "na_totales"
  ) %>%
  arrange(desc(na_totales))

na_resumen %>%
  kable(caption = "Número de datos faltantes por variable") %>%
  kable_styling(
    full_width = FALSE,
    position = "center",
    bootstrap_options = c("striped", "hover", "condensed")
  )
Número de datos faltantes por variable
variable na_totales
edad 0
sexo 0
estrato 0
ingreso_mensual 0
gasto_bebidas_antes 0
gasto_bebidas_despues 0
frecuencia_consumo_bebidas 0
realiza_actividad_fisica 0
diagnostico_diabetes 0
presion_alta 0
nivel_conciencia_salud 0
ha_cambiado_habito 0

Interpretación:
La tabla de datos faltantes muestra que la gran mayoría de las variables no presenta valores perdidos o, en caso de existir, su número es muy reducido frente al total de 70 observaciones. Esto indica que la base de datos tiene una buena completitud, por lo que no es necesario aplicar técnicas complejas de imputación.

4.2 4.2. Detección de atípicos (outliers) en variables numéricas

variables_numericas <- c(
  "edad",
  "ingreso_mensual",
  "gasto_bebidas_antes",
  "gasto_bebidas_despues",
  "nivel_conciencia_salud"
)

datos <- datos %>%
  mutate(
    across(
      all_of(variables_numericas),
      ~ as.numeric(.)
    )
  )

detectar_outliers <- function(x) {
  boxplot.stats(x)$out
}

outliers_lista <- lapply(variables_numericas, function(var) {
  x <- datos[[var]]
  outs <- detectar_outliers(x)

  data.frame(
    variable   = var,
    n_outliers = length(outs),
    outliers   = if (length(outs) == 0) NA_character_ else paste(outs, collapse = ", "),
    stringsAsFactors = FALSE
  )
}) %>%
  bind_rows()

outliers_lista %>%
  kable(caption = "Resumen de valores atípicos por variable numérica") %>%
  kable_styling(
    full_width = FALSE,
    position = "center",
    bootstrap_options = c("striped", "hover", "condensed")
  )
Resumen de valores atípicos por variable numérica
variable n_outliers outliers
edad 0 NA
ingreso_mensual 2 2832101, 3511638
gasto_bebidas_antes 1 80174
gasto_bebidas_despues 3 41009, 35860, 36355
nivel_conciencia_salud 0 NA
datos %>%
  select(all_of(variables_numericas)) %>%
  pivot_longer(
    cols = everything(),
    names_to = "variable",
    values_to = "valor"
  ) %>%
  ggplot(aes(x = variable, y = valor, fill = variable)) +
  geom_boxplot(alpha = 0.85, show.legend = FALSE) +
  scale_fill_manual(values = c(color_principal, color_secundario, color_terciario, "#66A61E", "#E6AB02")) +
  theme_trabajo +
  labs(
    title = "Boxplots de variables numéricas",
    x = "Variable",
    y = "Valor"
  )

Interpretación:
Se observan valores atípicos en ingreso_mensual, gasto_bebidas_antes y gasto_bebidas_despues, los cuales corresponden a individuos con ingresos o gastos muy superiores al promedio. Estos outliers se mantienen en el análisis, pero se consideran cuidadosamente al interpretar promedios y pruebas de hipótesis.


5 5. Tablas resumen (numéricas y categóricas)

5.1 5.1. Estadísticos descriptivos para variables numéricas

resumen_numericas <- datos %>%
  select(all_of(variables_numericas)) %>%
  pivot_longer(
    cols = everything(),
    names_to = "variable",
    values_to = "valor"
  ) %>%
  group_by(variable) %>%
  summarise(
    n       = sum(!is.na(valor)),
    media   = mean(valor, na.rm = TRUE),
    mediana = median(valor, na.rm = TRUE),
    sd      = sd(valor, na.rm = TRUE),
    min     = min(valor, na.rm = TRUE),
    max     = max(valor, na.rm = TRUE),
    .groups = "drop"
  )

resumen_numericas %>%
  kable(
    digits = 2,
    caption = "Resumen de estadísticos para variables numéricas"
  ) %>%
  kable_styling(
    full_width = FALSE,
    position = "center",
    bootstrap_options = c("striped", "hover", "condensed")
  )
Resumen de estadísticos para variables numéricas
variable n media mediana sd min max
edad 70 40.64 40.5 14.12 19.0 64
gasto_bebidas_antes 70 15336.10 11708.0 15205.22 0.0 80174
gasto_bebidas_despues 70 9696.76 7114.0 9480.92 0.0 41009
ingreso_mensual 70 1310968.99 1377016.5 584581.80 291091.0 3511638
nivel_conciencia_salud 70 7.13 7.5 2.10 1.7 10

Interpretación:
La edad promedio se sitúa alrededor de los 40 años; el ingreso mensual promedio es cercano a 1,3 millones de pesos, con alta dispersión. El gasto en bebidas azucaradas presenta mayor media antes del impuesto que después, lo que sugiere una reducción del gasto tras la medida fiscal. El nivel de conciencia en salud se ubica en valores medios-altos.

5.2 5.2. Tablas de frecuencias para variables categóricas y ordinales

variables_categoricas <- c(
  "sexo", "estrato", "frecuencia_consumo_bebidas",
  "realiza_actividad_fisica", "diagnostico_diabetes",
  "presion_alta", "ha_cambiado_habito"
)

tabla_frecuencias <- function(data, var) {
  data %>%
    count(.data[[var]]) %>%
    mutate(prop = n / sum(n) * 100)
}

tabla_frecuencias(datos, "sexo") %>%
  kable(
    digits = 1,
    caption = "Distribución de la variable sexo"
  ) %>%
  kable_styling(
    full_width = FALSE,
    position = "center",
    bootstrap_options = c("striped", "hover", "condensed")
  )
Distribución de la variable sexo
sexo n prop
F 36 51.4
M 33 47.1
Other 1 1.4
for (var in variables_categoricas) {
  cat("### Variable:", var, "\n\n")
  
  tabla_var <- tabla_frecuencias(datos, var)
  
  print(
    tabla_var %>%
      kable(
        digits = 1,
        caption = paste("Distribución de la variable", var)
      ) %>%
      kable_styling(
        full_width = FALSE,
        position = "center",
        bootstrap_options = c("striped", "hover", "condensed")
      )
  )
  
  cat("\n\n")
}
## ### Variable: sexo 
## 
## <table class="table table-striped table-hover table-condensed" style="width: auto !important; margin-left: auto; margin-right: auto;">
## <caption>Distribución de la variable sexo</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> sexo </th>
##    <th style="text-align:right;"> n </th>
##    <th style="text-align:right;"> prop </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> F </td>
##    <td style="text-align:right;"> 36 </td>
##    <td style="text-align:right;"> 51.4 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> M </td>
##    <td style="text-align:right;"> 33 </td>
##    <td style="text-align:right;"> 47.1 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Other </td>
##    <td style="text-align:right;"> 1 </td>
##    <td style="text-align:right;"> 1.4 </td>
##   </tr>
## </tbody>
## </table>
## 
## ### Variable: estrato 
## 
## <table class="table table-striped table-hover table-condensed" style="width: auto !important; margin-left: auto; margin-right: auto;">
## <caption>Distribución de la variable estrato</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> estrato </th>
##    <th style="text-align:right;"> n </th>
##    <th style="text-align:right;"> prop </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> 1 </td>
##    <td style="text-align:right;"> 7 </td>
##    <td style="text-align:right;"> 10.0 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> 2 </td>
##    <td style="text-align:right;"> 18 </td>
##    <td style="text-align:right;"> 25.7 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> 3 </td>
##    <td style="text-align:right;"> 21 </td>
##    <td style="text-align:right;"> 30.0 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> 4 </td>
##    <td style="text-align:right;"> 11 </td>
##    <td style="text-align:right;"> 15.7 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> 5 </td>
##    <td style="text-align:right;"> 6 </td>
##    <td style="text-align:right;"> 8.6 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> 6 </td>
##    <td style="text-align:right;"> 7 </td>
##    <td style="text-align:right;"> 10.0 </td>
##   </tr>
## </tbody>
## </table>
## 
## ### Variable: frecuencia_consumo_bebidas 
## 
## <table class="table table-striped table-hover table-condensed" style="width: auto !important; margin-left: auto; margin-right: auto;">
## <caption>Distribución de la variable frecuencia_consumo_bebidas</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> frecuencia_consumo_bebidas </th>
##    <th style="text-align:right;"> n </th>
##    <th style="text-align:right;"> prop </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> Nunca </td>
##    <td style="text-align:right;"> 15 </td>
##    <td style="text-align:right;"> 21.4 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Ocasional </td>
##    <td style="text-align:right;"> 33 </td>
##    <td style="text-align:right;"> 47.1 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Frecuente </td>
##    <td style="text-align:right;"> 19 </td>
##    <td style="text-align:right;"> 27.1 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Diario </td>
##    <td style="text-align:right;"> 3 </td>
##    <td style="text-align:right;"> 4.3 </td>
##   </tr>
## </tbody>
## </table>
## 
## ### Variable: realiza_actividad_fisica 
## 
## <table class="table table-striped table-hover table-condensed" style="width: auto !important; margin-left: auto; margin-right: auto;">
## <caption>Distribución de la variable realiza_actividad_fisica</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> realiza_actividad_fisica </th>
##    <th style="text-align:right;"> n </th>
##    <th style="text-align:right;"> prop </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> No </td>
##    <td style="text-align:right;"> 26 </td>
##    <td style="text-align:right;"> 37.1 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Sí </td>
##    <td style="text-align:right;"> 44 </td>
##    <td style="text-align:right;"> 62.9 </td>
##   </tr>
## </tbody>
## </table>
## 
## ### Variable: diagnostico_diabetes 
## 
## <table class="table table-striped table-hover table-condensed" style="width: auto !important; margin-left: auto; margin-right: auto;">
## <caption>Distribución de la variable diagnostico_diabetes</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> diagnostico_diabetes </th>
##    <th style="text-align:right;"> n </th>
##    <th style="text-align:right;"> prop </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> No </td>
##    <td style="text-align:right;"> 64 </td>
##    <td style="text-align:right;"> 91.4 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Sí </td>
##    <td style="text-align:right;"> 6 </td>
##    <td style="text-align:right;"> 8.6 </td>
##   </tr>
## </tbody>
## </table>
## 
## ### Variable: presion_alta 
## 
## <table class="table table-striped table-hover table-condensed" style="width: auto !important; margin-left: auto; margin-right: auto;">
## <caption>Distribución de la variable presion_alta</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> presion_alta </th>
##    <th style="text-align:right;"> n </th>
##    <th style="text-align:right;"> prop </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> No </td>
##    <td style="text-align:right;"> 64 </td>
##    <td style="text-align:right;"> 91.4 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Sí </td>
##    <td style="text-align:right;"> 6 </td>
##    <td style="text-align:right;"> 8.6 </td>
##   </tr>
## </tbody>
## </table>
## 
## ### Variable: ha_cambiado_habito 
## 
## <table class="table table-striped table-hover table-condensed" style="width: auto !important; margin-left: auto; margin-right: auto;">
## <caption>Distribución de la variable ha_cambiado_habito</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> ha_cambiado_habito </th>
##    <th style="text-align:right;"> n </th>
##    <th style="text-align:right;"> prop </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> No </td>
##    <td style="text-align:right;"> 17 </td>
##    <td style="text-align:right;"> 24.3 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Sí </td>
##    <td style="text-align:right;"> 53 </td>
##    <td style="text-align:right;"> 75.7 </td>
##   </tr>
## </tbody>
## </table>

Interpretación:
Las tablas muestran una distribución relativamente equilibrada por sexo, con predominio de estratos 2 y 3. La frecuencia de consumo de bebidas azucaradas es mayoritariamente ocasional, seguida de consumo frecuente; una proporción importante realiza actividad física y reporta haber cambiado sus hábitos de consumo.

5.3 5.3. Tabla de contingencia: sexo x frecuencia de consumo

tabla_sexo_frec <- datos %>%
  count(sexo, frecuencia_consumo_bebidas) %>%
  group_by(sexo) %>%
  mutate(prop = n / sum(n) * 100) %>%
  ungroup()

tabla_sexo_frec %>%
  kable(
    digits = 1,
    caption = "Tabla de contingencia: sexo x frecuencia de consumo de bebidas azucaradas"
  ) %>%
  kable_styling(
    full_width = FALSE,
    position = "center",
    bootstrap_options = c("striped", "hover", "condensed")
  )
Tabla de contingencia: sexo x frecuencia de consumo de bebidas azucaradas
sexo frecuencia_consumo_bebidas n prop
F Nunca 5 13.9
F Ocasional 18 50.0
F Frecuente 12 33.3
F Diario 1 2.8
M Nunca 10 30.3
M Ocasional 14 42.4
M Frecuente 7 21.2
M Diario 2 6.1
Other Ocasional 1 100.0

6 6. Gráficos descriptivos

6.1 6.1. Histogramas de gasto antes y después del impuesto

ggplot(datos, aes(x = gasto_bebidas_antes)) +
  geom_histogram(
    bins = 10,
    color = "white",
    fill = color_principal,
    alpha = 0.9
  ) +
  theme_trabajo +
  labs(
    title = "Histograma del gasto en bebidas azucaradas antes del impuesto",
    x = "Gasto mensual (COP)",
    y = "Frecuencia"
  )

ggplot(datos, aes(x = gasto_bebidas_despues)) +
  geom_histogram(
    bins = 10,
    color = "white",
    fill = color_secundario,
    alpha = 0.9
  ) +
  theme_trabajo +
  labs(
    title = "Histograma del gasto en bebidas azucaradas después del impuesto",
    x = "Gasto mensual (COP)",
    y = "Frecuencia"
  )

6.2 6.2. Boxplots comparando gasto antes vs después

datos_long_gasto <- datos %>%
  select(gasto_bebidas_antes, gasto_bebidas_despues) %>%
  pivot_longer(
    cols = everything(),
    names_to = "momento",
    values_to = "gasto"
  ) %>%
  mutate(
    momento = recode(
      momento,
      "gasto_bebidas_antes"   = "Antes del impuesto",
      "gasto_bebidas_despues" = "Después del impuesto"
    )
  )

ggplot(datos_long_gasto, aes(x = momento, y = gasto, fill = momento)) +
  geom_boxplot(alpha = 0.9, show.legend = FALSE) +
  scale_fill_manual(values = c("Antes del impuesto" = color_principal,
                               "Después del impuesto" = color_secundario)) +
  theme_trabajo +
  labs(
    title = "Comparación del gasto en bebidas azucaradas antes y después del impuesto",
    x = "Momento de medición",
    y = "Gasto mensual (COP)"
  )

6.3 6.3. Gráfico de barras: frecuencia de consumo de bebidas

datos %>%
  count(frecuencia_consumo_bebidas) %>%
  ggplot(aes(x = frecuencia_consumo_bebidas, y = n)) +
  geom_col(fill = color_principal, alpha = 0.9) +
  theme_trabajo +
  labs(
    title = "Frecuencia de consumo de bebidas azucaradas",
    x = "Frecuencia",
    y = "Número de personas"
  )

6.4 6.4. Gasto después del impuesto por sexo (boxplot)

ggplot(datos, aes(x = sexo, y = gasto_bebidas_despues, fill = sexo)) +
  geom_boxplot(alpha = 0.9, show.legend = FALSE) +
  scale_fill_manual(values = c("F" = color_principal, "M" = color_secundario, "Other" = color_terciario)) +
  theme_trabajo +
  labs(
    title = "Gasto en bebidas azucaradas después del impuesto según sexo",
    x = "Sexo",
    y = "Gasto mensual (COP)"
  )

6.5 6.5. Gasto después del impuesto según actividad física

ggplot(datos, aes(x = realiza_actividad_fisica, y = gasto_bebidas_despues, fill = realiza_actividad_fisica)) +
  geom_boxplot(alpha = 0.9, show.legend = FALSE) +
  scale_fill_manual(values = c("No" = color_secundario, "Sí" = color_principal)) +
  theme_trabajo +
  labs(
    title = "Gasto en bebidas azucaradas después del impuesto según actividad física",
    x = "Realiza actividad física",
    y = "Gasto mensual (COP)"
  )

6.6 6.6. Relación entre nivel de conciencia en salud y gasto después

ggplot(datos, aes(x = nivel_conciencia_salud, y = gasto_bebidas_despues)) +
  geom_point(color = color_secundario, alpha = 0.7, size = 2) +
  geom_smooth(method = "lm", se = FALSE, color = color_principal, linewidth = 1) +
  theme_trabajo +
  labs(
    title = "Relación entre nivel de conciencia en salud y gasto en bebidas después del impuesto",
    x = "Nivel de conciencia sobre salud (1-10)",
    y = "Gasto mensual (COP)"
  )


7 7. Intervalos de confianza y pruebas de hipótesis

7.1 7.1. Intervalo de confianza para la media del nivel de conciencia sobre salud

conciencia <- datos$nivel_conciencia_salud

ic_conciencia <- t.test(
  conciencia,
  conf.level = 0.95
)

ic_conciencia
## 
##  One Sample t-test
## 
## data:  conciencia
## t = 28.346, df = 69, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  6.629534 7.633324
## sample estimates:
## mean of x 
##  7.131429

7.2 7.2. Intervalo de confianza para la media del gasto mensual en bebidas antes del impuesto

gasto_antes <- datos$gasto_bebidas_antes

ic_gasto_antes <- t.test(
  gasto_antes,
  conf.level = 0.95
)

ic_gasto_antes
## 
##  One Sample t-test
## 
## data:  gasto_antes
## t = 8.4386, df = 69, p-value = 3.153e-12
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  11710.54 18961.66
## sample estimates:
## mean of x 
##   15336.1

7.3 7.3. Prueba t pareada: gasto antes vs después del impuesto

t_antes_despues <- t.test(
  datos$gasto_bebidas_antes,
  datos$gasto_bebidas_despues,
  paired = TRUE
)

t_antes_despues
## 
##  Paired t-test
## 
## data:  datos$gasto_bebidas_antes and datos$gasto_bebidas_despues
## t = 6.8656, df = 69, p-value = 2.328e-09
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  4000.716 7277.970
## sample estimates:
## mean difference 
##        5639.343

7.4 7.4. Prueba t: gasto después del impuesto según sexo

datos_sexo_MF <- datos %>%
  filter(sexo %in% c("F", "M"))

t_sexo <- t.test(
  gasto_bebidas_despues ~ sexo,
  data = datos_sexo_MF,
  var.equal = FALSE
)

t_sexo
## 
##  Welch Two Sample t-test
## 
## data:  gasto_bebidas_despues by sexo
## t = 0.33264, df = 58.432, p-value = 0.7406
## alternative hypothesis: true difference in means between group F and group M is not equal to 0
## 95 percent confidence interval:
##  -3912.709  5472.603
## sample estimates:
## mean in group F mean in group M 
##       10125.583        9345.636

7.5 7.5. Prueba t: gasto después del impuesto según actividad física

t_act_fisica <- t.test(
  gasto_bebidas_despues ~ realiza_actividad_fisica,
  data = datos,
  var.equal = FALSE
)

t_act_fisica
## 
##  Welch Two Sample t-test
## 
## data:  gasto_bebidas_despues by realiza_actividad_fisica
## t = -0.21807, df = 65.313, p-value = 0.8281
## alternative hypothesis: true difference in means between group No and group Sí is not equal to 0
## 95 percent confidence interval:
##  -4811.043  3863.757
## sample estimates:
## mean in group No mean in group Sí 
##         9399.038         9872.682

7.6 7.6. Resumen de técnicas estadísticas utilizadas

Resumen de técnicas estadísticas aplicadas
Pregunta Tecnica
Media poblacional del nivel de conciencia sobre salud Intervalo de confianza para una media (t de Student)
Media poblacional del gasto mensual antes del impuesto Intervalo de confianza para una media (t de Student)
Diferencias en el gasto antes y después del impuesto Prueba t para muestras pareadas
Diferencias en el gasto después del impuesto según sexo Prueba t para dos muestras independientes
Diferencias en el gasto después del impuesto según actividad física Prueba t para dos muestras independientes

8 8. Resultados y conclusiones

El análisis exploratorio muestra una población adulta, con ingresos y patrones de consumo heterogéneos, un nivel de conciencia en salud medio-alto y una proporción importante de individuos que declara haber modificado sus hábitos.

Los gráficos e intervalos de confianza sugieren una disminución del gasto promedio en bebidas azucaradas después del impuesto. La prueba t pareada respalda esta evidencia al comparar directamente el gasto antes y después en las mismas personas.

Las comparaciones por sexo y actividad física permiten explorar si ciertos grupos mantienen gastos más elevados; en función de los valores-p obtenidos, se puede concluir si las diferencias observadas son o no estadísticamente significativas. En conjunto, los resultados apuntan a que el impuesto, combinado con la conciencia en salud y los cambios de hábito, se asocia con una moderación en el gasto mensual en bebidas azucaradas.


9 9. Recomendaciones