UNIVERSIDAD DEL NORTE
Estadística Inferencial
Trabajo Final
Factores asociados al gasto en bebidas azucaradas en Colombia
después del impuesto
Endy Paola Salón Acosta
NRC 1797 - 2025-01
Grupo 06
En Colombia, el consumo de bebidas azucaradas ha aumentado de manera sostenida en las últimas décadas, contribuyendo de forma directa a la obesidad, los trastornos cardiovasculares y la diabetes tipo 2, y elevando los costos en el sistema de salud pública. Para contrarrestar estos efectos, en 2017 se introdujo un impuesto específico sobre estas bebidas, con el fin de incrementar su precio al consumidor y fomentar prácticas de consumo más saludables. Aun así, persisten múltiples factores que pueden atenuar o potenciar el impacto de esta medida: por un lado, la intensidad de las campañas de concienciación sobre los riesgos del azúcar; por otro, características demográficas como la edad de los consumidores; y, finalmente, el estado nutricional reflejado en el índice de masa corporal (IMC). Es decir, aunque el gravamen incremente el precio, la efectividad real en la reducción de consumo podría variar según el nivel de conocimiento sobre los daños del azúcar, la edad y el IMC de la población.
Para abordar esta cuestión, nuestro estudio incorpora variables demográficas (edad de los encuestados); perceptuales (grado de conciencia sobre los riesgos del azúcar); clínicas (índice de masa corporal); y de comportamiento (frecuencia y gasto en bebidas azucaradas antes y después de la entrada en vigor del impuesto). Esta base de datos simula los resultados de una encuesta aplicada a personas entre 15 y 75 años. A partir de este planteamiento, nuestra pregunta de investigación es:
¿En qué medida la implementación del impuesto a las bebidas azucaradas en Colombia ha modificado, por motivos de salud, el consumo de estas bebidas, y cómo se asocian entre sí, el nivel de conciencia sobre los riesgos del azúcar, la edad de los consumidores y su índice de masa corporal?
Determinar el nivel de conocimiento y acciones que las personas tienen con respecto al daño producido por el consumo de bebidas azucaradas.
Determinar si las personas han tratado de reducir el consumo de este tipo de bebidas por salud.
Establecer la relación entre el cambio de hábito del consumo de bebidas azucaradas y el aumento significativo en los impuestos sobre estos productos.
Determinar el grado de asociación entre la edad de una persona y nivel de conocimiento sobre el riesgo de este tipo de bebidas.
Determinar si hay relación entre el indica de masa corporal y la frecuencia con que se consume este tipo de bebidas.
El presente estudio se fundamenta en los conocimientos desarrollados a lo largo del curso de Estadística Inferencial, en el cual se abordaron técnicas esenciales tales como el análisis exploratorio de datos, las medidas de tendencia central y de dispersión, así como el diseño y evaluación de pruebas de hipótesis para dos o más grupos. Estas herramientas resultan imprescindibles para evaluar objetivamente el impacto de un impuesto sobre bebidas azucaradas en el comportamiento de consumo de la población colombiana. Según Bettcher (2016), “si los gobiernos gravan productos como las bebidas azucaradas, pueden reducir los padecimientos y salvar vidas”, al tiempo que generan recursos adicionales para fortalecer los sistemas de salud. La Organización Mundial de la Salud (OMS, 2015) recomienda que el consumo de azúcares libres no supere el 10 % de las necesidades energéticas diarias, dado que las bebidas y alimentos con alto contenido de azúcar son responsables de gran parte de las calorías innecesarias en la dieta de niños, adolescentes y adultos jóvenes. Además, la evidencia indica que los hogares de menores ingresos y los consumidores habituales muestran una mayor sensibilidad a los aumentos de precio derivados de gravámenes impositivos, lo cual puede traducirse en beneficios de salud más pronunciados en dichos grupos (OMS, 2016). Este estudio aplicará técnicas inferenciales,desde pruebas t de Student hasta ANOVA, chi-cuadrado, y correlación de Pearson,para cuantificar estadísticamente estas diferencias y asociaciones, garantizando un soporte empírico sólido para el diseño de políticas públicas. De esta manera, se busca proporcionar información valiosa que permita optimizar la estructura del impuesto y orientar campañas de concientización y subsidios focalizados en los segmentos de población más vulnerables.
##** Revisión de datos:**
Variables
Edad: cuantitativa de razón
Sexo: cualitativa nominal
Estrato: cualitativa ordinal
Ingreso_mensual: cuantitativa de razón
Gasto_bebidas_antes: cuantitativa de razón
Gasto_bebidas_despues: cuantitativa de razón
Frecuencia_consumo_bebidas: cualitativa ordinal
Realiza_actividad_fisica: cualitativa nominal
Diagnostico_diabetes: cualitativa nominal
Presion_alta: cualitativa nominal
Nivel_conciencia_salud: cualitativa ordinal
Ha_cambiado_habito: cualitativa nominal
Instalar y cargar paquetes necesarios
#Codigo aquí
# Fijar CRAN mirror
options(repos = c(CRAN = "https://cloud.r-project.org"))
# Paquetes de uso frecuente
if (!requireNamespace("readr", quietly=TRUE)) install.packages("readr")
if (!requireNamespace("dplyr", quietly=TRUE)) install.packages("dplyr")
if (!requireNamespace("ggplot2", quietly=TRUE)) install.packages("ggplot2")
library(readr)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
Cargar base de datos:
#Codigo aqui
datos <- readr::read_csv("base_bebidas_azucaradas.csv")
## Rows: 378 Columns: 16
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (9): sexo, consume_bebidas_azucaradas, frecuencia_consumo_bebidas, prefe...
## dbl (7): edad, estrato, ingreso_mensual, gasto_bebidas_antes, gasto_bebidas_...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Nombres de variables
names(datos)
## [1] "edad" "sexo"
## [3] "estrato" "ingreso_mensual"
## [5] "gasto_bebidas_antes" "gasto_bebidas_despues"
## [7] "consume_bebidas_azucaradas" "frecuencia_consumo_bebidas"
## [9] "preferencia_bebidas" "nivel_conciencia_salud"
## [11] "realiza_actividad_fisica" "imc"
## [13] "diagnostico_diabetes" "presion_alta"
## [15] "percepcion_impuesto" "ha_cambiado_habito"
Dimesiones de la base de datos
dim(datos)
## [1] 378 16
Mostrar las primeras filas de la base de datos
head(datos, 10)
## # A tibble: 10 × 16
## edad sexo estrato ingreso_mensual gasto_bebidas_antes gasto_bebidas_despues
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 53 Feme… 3 1557312 114059 9885.
## 2 66 Feme… 1 1029382 53719 5317.
## 3 43 Feme… 2 2103256 132084 7052.
## 4 29 Masc… 2 1135667 161231 7370.
## 5 57 Masc… 3 827640 70832 8369.
## 6 22 Masc… 3 1909214 101930 9017.
## 7 35 Masc… 2 200000 172781 6976.
## 8 72 Masc… 3 366012 137290 8129.
## 9 33 Feme… 1 2222341 129671 6342.
## 10 37 Feme… 2 991178 57313 7388.
## # ℹ 10 more variables: consume_bebidas_azucaradas <chr>,
## # frecuencia_consumo_bebidas <chr>, preferencia_bebidas <chr>,
## # nivel_conciencia_salud <dbl>, realiza_actividad_fisica <chr>, imc <dbl>,
## # diagnostico_diabetes <chr>, presion_alta <chr>, percepcion_impuesto <chr>,
## # ha_cambiado_habito <chr>
Tipos de datos
str(datos)
## spc_tbl_ [378 × 16] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ edad : num [1:378] 53 66 43 29 57 22 35 72 33 37 ...
## $ sexo : chr [1:378] "Femenino" "Femenino" "Femenino" "Masculino" ...
## $ estrato : num [1:378] 3 1 2 2 3 3 2 3 1 2 ...
## $ ingreso_mensual : num [1:378] 1557312 1029382 2103256 1135667 827640 ...
## $ gasto_bebidas_antes : num [1:378] 114059 53719 132084 161231 70832 ...
## $ gasto_bebidas_despues : num [1:378] 9885 5317 7052 7370 8369 ...
## $ consume_bebidas_azucaradas: chr [1:378] "Si" "Si" "Si" "Si" ...
## $ frecuencia_consumo_bebidas: chr [1:378] "Nunca" "Ocasional" "Frecuente" "Ocasional" ...
## $ preferencia_bebidas : chr [1:378] "Te azucarado" "Jugos industriales" "Gaseosa" "Jugos industriales" ...
## $ nivel_conciencia_salud : num [1:378] 10 3 9 4 3 2 10 4 3 7 ...
## $ realiza_actividad_fisica : chr [1:378] "Si" "Si" "Si" "Si" ...
## $ imc : num [1:378] 26.1 24.5 29 39.8 NA ...
## $ diagnostico_diabetes : chr [1:378] "No" "No" "No" "No" ...
## $ presion_alta : chr [1:378] "No" "No" "No" "No" ...
## $ percepcion_impuesto : chr [1:378] "Negativa" "Negativa" "Negativa" "Positiva" ...
## $ ha_cambiado_habito : chr [1:378] "Si" "No" "Si" "Si" ...
## - attr(*, "spec")=
## .. cols(
## .. edad = col_double(),
## .. sexo = col_character(),
## .. estrato = col_double(),
## .. ingreso_mensual = col_double(),
## .. gasto_bebidas_antes = col_double(),
## .. gasto_bebidas_despues = col_double(),
## .. consume_bebidas_azucaradas = col_character(),
## .. frecuencia_consumo_bebidas = col_character(),
## .. preferencia_bebidas = col_character(),
## .. nivel_conciencia_salud = col_double(),
## .. realiza_actividad_fisica = col_character(),
## .. imc = col_double(),
## .. diagnostico_diabetes = col_character(),
## .. presion_alta = col_character(),
## .. percepcion_impuesto = col_character(),
## .. ha_cambiado_habito = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
###** Revisión de valores faltantes**
colSums(is.na(datos))
## edad sexo
## 0 0
## estrato ingreso_mensual
## 0 18
## gasto_bebidas_antes gasto_bebidas_despues
## 0 0
## consume_bebidas_azucaradas frecuencia_consumo_bebidas
## 0 0
## preferencia_bebidas nivel_conciencia_salud
## 0 0
## realiza_actividad_fisica imc
## 0 14
## diagnostico_diabetes presion_alta
## 0 0
## percepcion_impuesto ha_cambiado_habito
## 0 0
Al inspeccionar los valores faltantes encontramos que, de las 16 variables de la base, únicamente ingreso_mensual presenta 18 observaciones ausentes y IMC acumula 14 casos sin valor, mientras que el resto de las variables no registra ninguna falta. Esto equivale a un 4,8 % de la muestra sin dato de ingreso y un 3,7 % sin cálculo de IMC. Dado que estos porcentajes son relativamente bajos pero concentrados en variables clave para el análisis inferencial, conviene evaluar si estas omisiones obedecen a errores en la captura o a casos que no pudieron medirse. Como estrategia, podríamos imputar los ingresos faltantes —por ejemplo, usando la mediana por estrato— y calcular el IMC a partir de peso y talla cuando sea posible; en caso contrario, limitar los análisis que requieran estas dos variables al subconjunto completo sin faltantes. De esta manera preservamos el máximo de información sin comprometer la validez de los resultados.
###** Revisión de datos atípicos**
library(dplyr)
datos %>%
select_if(is.numeric) %>%
summarise_all(~ list(boxplot.stats(.x)$out)) -> out_list
out_list
## # A tibble: 1 × 7
## edad estrato ingreso_mensual gasto_bebidas_antes gasto_bebidas_despues
## <list> <list> <list> <list> <list>
## 1 <dbl [0]> <dbl [31]> <dbl [1]> <dbl [3]> <dbl [0]>
## # ℹ 2 more variables: nivel_conciencia_salud <list>, imc <list>
El análisis de valores atípicos mediante el criterio de cajas y bigotes reveló que, mientras las variables edad, gasto_bebidas_despues, nivel_conciencia_salud e IMC no presentaron observaciones fuera de los límites intercuartílicos, se detectaron 31 casos con estrato fuera del rango esperado (1–6), un ingreso mensual extraordinariamente alto y tres registros de gasto en bebidas antes del impuesto muy superiores al resto de la muestra. Estos hallazgos sugieren posibles errores de captura en la codificación de estrato y en el reporte de ingresos, así como comportamientos de consumo excepcionalmente altos en algunos participantes. Para mantener la integridad del análisis, será necesario revisar y, de ser apropiado, corregir o excluir estos registros atípicos.
Por todo la anterior, decidimos imputar por la mediana los datos atípicos y los datos faltantes.
library(dplyr)
impute_median <- function(x) {
med <- median(x, na.rm = TRUE)
Q1 <- quantile(x, 0.25, na.rm = TRUE)
Q3 <- quantile(x, 0.75, na.rm = TRUE)
iqr <- Q3 - Q1
lower <- Q1 - 1.5 * iqr
upper <- Q3 + 1.5 * iqr
x[x < lower | x > upper] <- med
x[is.na(x)] <- med
return(x)
}
datos_imputados <- datos %>%
mutate(across(where(is.numeric), impute_median))
# Comprobar
summary(select(datos_imputados, where(is.numeric)))
## edad estrato ingreso_mensual gasto_bebidas_antes
## Min. :15.00 Min. :1.000 Min. : 200000 Min. : 5000
## 1st Qu.:29.25 1st Qu.:2.000 1st Qu.: 702789 1st Qu.: 70404
## Median :46.00 Median :3.000 Median :1224921 Median :104039
## Mean :44.70 Mean :2.423 Mean :1229618 Mean :100729
## 3rd Qu.:59.00 3rd Qu.:3.000 3rd Qu.:1692715 3rd Qu.:132094
## Max. :74.00 Max. :4.000 Max. :3121621 Max. :220740
## gasto_bebidas_despues nivel_conciencia_salud imc
## Min. : 4011 Min. : 1.000 Min. :12.80
## 1st Qu.: 5839 1st Qu.: 3.000 1st Qu.:22.89
## Median : 7126 Median : 6.000 Median :26.20
## Mean : 7237 Mean : 5.521 Mean :26.16
## 3rd Qu.: 8851 3rd Qu.: 8.000 3rd Qu.:29.57
## Max. :10414 Max. :10.000 Max. :39.83
##Organización de datos en tablas de frecuencias:
Tablas resumen de estadísticos para cada una variables numéricas
library(dplyr)
library(knitr)
# Lista de variables numéricas
num_vars <- names(select_if(datos, is.numeric))
# Para cada variable, calculamos y mostramos su tabla resumen
for (v in num_vars) {
stats <- datos %>%
summarise(
media = mean(.data[[v]], na.rm = TRUE),
mediana = median(.data[[v]], na.rm = TRUE),
sd = sd(.data[[v]], na.rm = TRUE),
min = min(.data[[v]], na.rm = TRUE),
max = max(.data[[v]], na.rm = TRUE)
)
cat("### Estadísticos de", v, "\n\n")
print(
kable(
stats,
digits = 2,
caption = paste("Resumen de", v)
)
)
cat("\n\n")
}
## ### Estadísticos de edad
##
##
##
## Table: Resumen de edad
##
## | media| mediana| sd| min| max|
## |-----:|-------:|-----:|---:|---:|
## | 44.7| 46| 17.76| 15| 74|
##
##
## ### Estadísticos de estrato
##
##
##
## Table: Resumen de estrato
##
## | media| mediana| sd| min| max|
## |-----:|-------:|----:|---:|---:|
## | 2.6| 3| 1.21| 1| 6|
##
##
## ### Estadísticos de ingreso_mensual
##
##
##
## Table: Resumen de ingreso_mensual
##
## | media| mediana| sd| min| max|
## |-------:|-------:|--------:|-----:|-------:|
## | 1236312| 1224921| 690879.6| 2e+05| 3550202|
##
##
## ### Estadísticos de gasto_bebidas_antes
##
##
##
## Table: Resumen de gasto_bebidas_antes
##
## | media| mediana| sd| min| max|
## |--------:|-------:|--------:|----:|------:|
## | 101765.9| 104078| 46829.57| 5000| 236543|
##
##
## ### Estadísticos de gasto_bebidas_despues
##
##
##
## Table: Resumen de gasto_bebidas_despues
##
## | media| mediana| sd| min| max|
## |------:|-------:|-------:|-------:|--------:|
## | 7237.5| 7126.14| 1660.77| 4010.99| 10414.33|
##
##
## ### Estadísticos de nivel_conciencia_salud
##
##
##
## Table: Resumen de nivel_conciencia_salud
##
## | media| mediana| sd| min| max|
## |-----:|-------:|----:|---:|---:|
## | 5.52| 6| 2.84| 1| 10|
##
##
## ### Estadísticos de imc
##
##
##
## Table: Resumen de imc
##
## | media| mediana| sd| min| max|
## |-----:|-------:|----:|----:|-----:|
## | 26.16| 26.2| 5.07| 12.8| 39.83|
Tablas resumen de estadísticos para cada una variables cualitativas
### Frecuencias de variables cualitativas
library(dplyr)
library(knitr)
# Extraer nombres de las variables cualitativas
qual_vars <- names(select_if(datos, ~ !is.numeric(.x)))
# Recorrer cada variable categórica
for (v in qual_vars) {
freq <- table(datos[[v]])
prop <- prop.table(freq)
df_freq <- data.frame(
Categoría = names(freq),
Frecuencia = as.vector(freq),
Proporción = round(as.vector(prop), 3),
stringsAsFactors = FALSE
)
cat("### Frecuencias de", v, "\n\n")
print(
kable(
df_freq,
caption = paste("Tabla de frecuencias para", v),
align = c("l", "r", "r")
)
)
cat("\n\n")
}
## ### Frecuencias de sexo
##
##
##
## Table: Tabla de frecuencias para sexo
##
## |Categoría | Frecuencia| Proporción|
## |:---------|----------:|----------:|
## |Femenino | 195| 0.516|
## |Masculino | 183| 0.484|
##
##
## ### Frecuencias de consume_bebidas_azucaradas
##
##
##
## Table: Tabla de frecuencias para consume_bebidas_azucaradas
##
## |Categoría | Frecuencia| Proporción|
## |:---------|----------:|----------:|
## |No | 19| 0.05|
## |Si | 359| 0.95|
##
##
## ### Frecuencias de frecuencia_consumo_bebidas
##
##
##
## Table: Tabla de frecuencias para frecuencia_consumo_bebidas
##
## |Categoría | Frecuencia| Proporción|
## |:---------|----------:|----------:|
## |Diario | 50| 0.132|
## |Frecuente | 134| 0.354|
## |Nunca | 38| 0.101|
## |Ocasional | 156| 0.413|
##
##
## ### Frecuencias de preferencia_bebidas
##
##
##
## Table: Tabla de frecuencias para preferencia_bebidas
##
## |Categoría | Frecuencia| Proporción|
## |:------------------|----------:|----------:|
## |Energizantes | 102| 0.270|
## |Gaseosa | 96| 0.254|
## |Jugos industriales | 87| 0.230|
## |Te azucarado | 93| 0.246|
##
##
## ### Frecuencias de realiza_actividad_fisica
##
##
##
## Table: Tabla de frecuencias para realiza_actividad_fisica
##
## |Categoría | Frecuencia| Proporción|
## |:---------|----------:|----------:|
## |No | 145| 0.384|
## |Si | 233| 0.616|
##
##
## ### Frecuencias de diagnostico_diabetes
##
##
##
## Table: Tabla de frecuencias para diagnostico_diabetes
##
## |Categoría | Frecuencia| Proporción|
## |:---------|----------:|----------:|
## |No | 324| 0.857|
## |Si | 54| 0.143|
##
##
## ### Frecuencias de presion_alta
##
##
##
## Table: Tabla de frecuencias para presion_alta
##
## |Categoría | Frecuencia| Proporción|
## |:---------|----------:|----------:|
## |No | 301| 0.796|
## |Si | 77| 0.204|
##
##
## ### Frecuencias de percepcion_impuesto
##
##
##
## Table: Tabla de frecuencias para percepcion_impuesto
##
## |Categoría | Frecuencia| Proporción|
## |:-----------|----------:|----------:|
## |Indiferente | 82| 0.217|
## |Negativa | 181| 0.479|
## |Positiva | 115| 0.304|
##
##
## ### Frecuencias de ha_cambiado_habito
##
##
##
## Table: Tabla de frecuencias para ha_cambiado_habito
##
## |Categoría | Frecuencia| Proporción|
## |:---------|----------:|----------:|
## |No | 37| 0.098|
## |Si | 341| 0.902|
Tabla de contingencia para las variables: sexo y Cambio de hábito
#tabla de contingencia
### Tabla de contingencia: Sexo vs Cambio de hábito
library(knitr)
# Construir la tabla de contingencia
tabla_sexo_habito <- table(
Sexo = datos$sexo,
Cambio = datos$ha_cambiado_habito
)
# Añadir totales por fila y columna
tabla_sexo_habito_margins <- addmargins(tabla_sexo_habito)
# Mostrar con knitr::kable
kable(
tabla_sexo_habito_margins,
caption = "Contingencia entre Sexo y Cambio de hábito",
align = c("l", "r", "r", "r")
)
No | Si | Sum | |
---|---|---|---|
Femenino | 19 | 176 | 195 |
Masculino | 18 | 165 | 183 |
Sum | 37 | 341 | 378 |
##** 5. Organización de datos en gráficos**
Histograma la EDAD
library(ggplot2)
# Colores vivos: azul, rosado, naranja, amarillo, morado, verde
cols_vivos <- c(
"#1f77b4", # azul
"#e377c2", # rosado
"#ff7f0e", # naranja
"#ffdb58", # amarillo
"#9467bd", # morado
"#2ca02c" # verde
)
ggplot(datos, aes(x = edad)) +
geom_histogram(binwidth = 5, fill = cols_vivos[1], color = "black") +
labs(
title = "Gráfico de tipo histograma para la variable: edad",
x = "Edad",
y = "Frecuencia"
) +
theme_minimal()
En el histograma de la edad se aprecia una distribución amplia que va de aproximadamente 15 a 75 años, con la mayor concentración de participantes situada entre los 35 y los 55 años. Las barras correspondientes a estos intervalos alcanzan frecuencias cercanas a 30–40 encuestados, mientras que tanto en los extremos juveniles (15–25 años) como en los más longevos (65–75 años) las frecuencias disminuyen notablemente. No se observan huecos abruptos en la distribución, lo que indica un muestreo continuo a lo largo de todo el rango, aunque con un leve sesgo hacia la mediana de la muestra (alrededor de los 40 años). Esta forma casi simétrica, con un pico en la franja intermedia, sugiere que la mayor parte de la población encuestada se concentra en edades medias, con menor representación en los grupos muy jóvenes o muy adultos.
##** Caja y bigotes para PERCEPCIÓN DEL IMPUESTO**
library(ggplot2)
ggplot(datos, aes(x = percepcion_impuesto, fill = percepcion_impuesto)) +
geom_bar(color = "black") +
scale_fill_manual(values = c(
"Negativa" = "#ff7f0e",
"Indiferente"= "#9467bd",
"Positiva" = "#2ca02c"
)) +
labs(
title = "Percepción del impuesto a bebidas azucaradas",
x = "Opinión sobre el impuesto",
y = "Número de personas"
) +
theme_minimal() +
theme(legend.position = "none")
En el gráfico de barras sobre la percepción del impuesto a las bebidas azucaradas se observa que la opinión negativa es la más frecuente, con aproximadamente 180 personas que rechazan el gravamen. Le sigue la percepción positiva, con alrededor de 120 encuestados que aprueban la medida, mientras que el grupo indiferente es el más reducido, con poco más de 80 participantes que no expresan una posición clara. Este patrón indica que, aunque existe un segmento importante que valora la utilidad del impuesto, la mayoría de la población encuestada mantiene una actitud crítica o de rechazo hacia esta política.
##**Histograma para NIVEL DE CONCIENCIA**
``` r
ggplot(datos, aes(x = nivel_conciencia_salud)) +
geom_histogram(binwidth = 1, fill = "#e377c2", color = "black") +
labs(
title = "Nivel de conciencia sobre la salud",
x = "Autoevaluación (1–10)",
y = "Número de personas"
) +
theme_minimal()
En el histograma del nivel de conciencia sobre la salud se observa que los valores cubren de forma continua toda la escala de 1 a 10, sin huecos abruptos, lo cual indica que los participantes abarcan desde muy baja hasta muy alta autopercepción de salud. El pico más notable se da en el intervalo 7–8, con alrededor de 50 personas, seguido de frecuencias ligeramente menores (35–40) en los tramos 1–2 y 9–10. La mediana se sitúa aproximadamente entre 6 y 7, lo que muestra que la mitad de los encuestados se autoevalúan con un nivel de conciencia medio a alto. En conjunto, aunque la distribución es bastante homogénea, hay una ligera concentración hacia los valores más altos, sugiriendo que la mayoría de la muestra reporta un nivel de conciencia sobre la salud relativamente elevado
##Diagrama de barras para FRECUENCIA DE CONSUMO DE BEBIDAS AZUCARADAS
ggplot(datos, aes(x = frecuencia_consumo_bebidas)) +
geom_bar(fill = "#1F77B4", color = NA) +
labs(
title = "Gráfico de tipo barras para la variable: frecuencia_consumo_bebidas",
x = "Frecuencia de consumo de bebidas azucaradas",
y = "Conteo"
) +
theme_minimal()
En este diagrama de barras observamos que la categoría “Ocasional” concentra la mayor parte de la muestra (alrededor de 160 personas), seguida de cerca por “Frecuente” (aprox. 130). Muy por debajo quedan tanto los que “Diario” consumen (cerca de 50 encuestados) como los que “Nunca” lo hacen (unos 35). Esto indica que, tras la implementación del impuesto, la mayoría de los participantes opta por un consumo intermedio (ocasional o frecuente), mientras que un porcentaje mucho menor mantiene un hábito diario o se abstiene por completo de las bebidas azucaradas.
6. Planteamiento de hipótesis
Hipótesis 1 DIFERENCIAS DE MEDIAS
Hipótesis
- H₀: μ_d = 0
- H₁: μ_d ≠ 0
library(dplyr)
library(ggplot2)
library(readr)
library(stats)
library(tidyverse)
datos <- datos %>%
mutate(
gasto_bebidas_antes = as.numeric(gasto_bebidas_antes),
gasto_bebidas_despues = as.numeric(gasto_bebidas_despues),
frecuencia_consumo_bebidas = factor(
frecuencia_consumo_bebidas,
levels = c("Nunca","Ocasional","Frecuente","Diario")
)
)
# 2. Crear data frame pareado (sin NAs)
df_pareado <- datos %>%
select(gasto_bebidas_antes, gasto_bebidas_despues) %>%
drop_na()
cat("Número de pares completos:", nrow(df_pareado), "\n\n")
## Número de pares completos: 378
# 3. Prueba t pareada (gasto antes vs después)
resultado_t <- t.test(
df_pareado$gasto_bebidas_antes,
df_pareado$gasto_bebidas_despues,
paired = TRUE,
alternative = "two.sided"
)
print(resultado_t)
##
## Paired t-test
##
## data: df_pareado$gasto_bebidas_antes and df_pareado$gasto_bebidas_despues
## t = 39.141, df = 377, p-value < 2.2e-16
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## 89779.66 99277.19
## sample estimates:
## mean difference
## 94528.42
El p-valor obtenido (< 2.2×10⁻¹⁶) es muchísimo más pequeño que el umbral de significancia habitual de 0.05, lo que indica que la probabilidad de observar una diferencia tan grande (o mayor) en el gasto, asumiendo que en realidad no hubiera ningún cambio, es prácticamente nula. Por lo tanto, rechazamos la hipótesis nula de que la media de las diferencias sea cero.
La estimación puntual de la diferencia de medias es de 94 528,42 COP, lo que significa que, en promedio, las personas gastaban 94 528 COP más en bebidas azucaradas antes de la implementación del impuesto que después.
El intervalo de confianza al 95 % para esa diferencia (8 979 779 COP a 99 277 19 COP) no incluye el valor cero, reforzando la certeza de que el impuesto produjo una reducción real y no debida al azar.
En conjunto, estos resultados proporcionan evidencia muy sólida de que la introducción del gravamen tuvo un efecto significativo en el comportamiento de compra, reduciendo de forma apreciable el gasto en bebidas azucaradas.
Hipótesis 2
##PRUEBA CHI CUADRADO
En esta prueba vamos a analizar la relación entre los impuestos y el cambio de hábito de las bebidas azucaradas.
Planteamiento de la prueba de hipótesis
Hipótesis nula (H₀): No existe relación entre la percepción del impuesto y el cambio de hábito de consumo.
Hipótesis alternativa (H₁): Existe una relación entre la percepción del impuesto y el cambio de hábito de consumo.
Estadístico de prueba (\(χ^2\)) se calcula como
-\(χ^2=\sum_{i=1}^{n} (O_i-E_i)^2/E_i\)
\(O_i\) son las frecuencias observadas
\(E_i\) son las frecuencias esperadas bajo Ho
Nivel de significancia
\(α=0.05\)
TABLA DE CONTIGENCIA
names(datos)
## [1] "edad" "sexo"
## [3] "estrato" "ingreso_mensual"
## [5] "gasto_bebidas_antes" "gasto_bebidas_despues"
## [7] "consume_bebidas_azucaradas" "frecuencia_consumo_bebidas"
## [9] "preferencia_bebidas" "nivel_conciencia_salud"
## [11] "realiza_actividad_fisica" "imc"
## [13] "diagnostico_diabetes" "presion_alta"
## [15] "percepcion_impuesto" "ha_cambiado_habito"
# Prueba Chi-cuadrado (percepción del impuesto vs cambio de hábito)
tabla_perc_hab <- table(
Percepción = datos$percepcion_impuesto,
Cambio = datos$ha_cambiado_habito
)
cat("\nTabla de contingencia percepción vs hábito:\n")
##
## Tabla de contingencia percepción vs hábito:
print(addmargins(tabla_perc_hab))
## Cambio
## Percepción No Si Sum
## Indiferente 5 77 82
## Negativa 18 163 181
## Positiva 14 101 115
## Sum 37 341 378
resultado_chi <- chisq.test(tabla_perc_hab)
print(resultado_chi)
##
## Pearson's Chi-squared test
##
## data: tabla_perc_hab
## X-squared = 2.0111, df = 2, p-value = 0.3658
En la tabla de contingencia vemos que, por ejemplo, entre quienes tienen percepción “Indiferente” 77 sí cambiaron y solo 5 no; en el grupo “Negativa” cambiaron 163 y no 18; y en “Positiva” cambiaron 101 y no 14. Al aplicar la prueba Chi-cuadrado obtenemos χ²≈2.01 con 2 grados de libertad y un p-valor de 0.3658. Dado que este p-valor es mayor que el nivel de significancia habitual (α=0.05), no rechazamos la hipótesis nula de independencia. Es decir, esto indica que NO existe evidencia estadística suficiente para afirmar que la percepción del impuesto esté asociada con el hecho de haber cambiado o no el hábito de consumo de bebidas azucaradas.
Hipótesis 3
##ANOVA (IMC ~ frecuencia de consumo) En esta prueba vamos a analizar si hay diferencia entre las medias del índice de masa Corporal y frecuencia con la que una persona consumo de bebidas azucaradas
Planteamiento de la hipótesis
Queremos analizar si el promedio del IMC difiere entre los diferentes niveles de frecuencia de consumo de bebidas azucaradas.
H₀ (hipótesis nula): Las medias del IMC son iguales para todos los grupos de frecuencia de consumo.
H₁ (hipótesis alternativa): Al menos una media de IMC es diferente entre los grupos.
Nivel de significancia
\(α=0.05\)
Estadístico de prueba
\(F=MS_(entre)/MS_dentro\)
donde
\(MS_(entre)=Suma de cuadrados entre grupos(SSB)/GLentre\)
\(MS_(dentro)=Suma de cuadrados entre grupos(SSE)/GLdentro\)
\(gl=grados de libertad\)
nos aseguramos de que la variable ‘frecuencia_consumo’ sea categórica
names(datos)
## [1] "edad" "sexo"
## [3] "estrato" "ingreso_mensual"
## [5] "gasto_bebidas_antes" "gasto_bebidas_despues"
## [7] "consume_bebidas_azucaradas" "frecuencia_consumo_bebidas"
## [9] "preferencia_bebidas" "nivel_conciencia_salud"
## [11] "realiza_actividad_fisica" "imc"
## [13] "diagnostico_diabetes" "presion_alta"
## [15] "percepcion_impuesto" "ha_cambiado_habito"
modelo_anova <- aov(imc ~ frecuencia_consumo_bebidas, data = datos)
cat("\nResumen ANOVA (IMC según frecuencia de consumo):\n")
##
## Resumen ANOVA (IMC según frecuencia de consumo):
print(summary(modelo_anova))
## Df Sum Sq Mean Sq F value Pr(>F)
## frecuencia_consumo_bebidas 3 82 27.41 1.066 0.363
## Residuals 360 9255 25.71
## 14 observations deleted due to missingness
En el análisis de varianza (ANOVA) para comparar el IMC entre los grupos definidos por la frecuencia de consumo de bebidas azucaradas, se obtuvieron 3 grados de libertad para el factor y 360 para los residuales, tras eliminar 14 observaciones con datos faltantes. El estadístico F resultó ser 1.066, con un p-valor de 0.363.
Como este p-valor excede ampliamente el nivel de significancia convencional de 0.05, no tenemos fundamento estadístico para rechazar la hipótesis nula de que las medias de IMC sean iguales en todos los niveles de consumo. En otras palabras, no se detectan diferencias significativas en el índice de masa corporal entre quienes consumen bebidas azucaradas “Nunca”, “Ocasional”, “Frecuente” o “Diario”. Este hallazgo sugiere que, al menos en esta muestra, la frecuencia de consumo de bebidas azucaradas no se asocia de manera aparente con variaciones en el IMC.
Hipótesis 4
##Correlación de Pearson (edad vs nivel de conciencia)
Planteamiento de la hipótesis
H₀ (nula): No hay correlación entre la edad y el nivel de conciencia de la salud
\(H_0:ρ=0\)
H₁ (alternativa): Sí hay correlación entre la edad y el nivel de conciencia de la salud
\(H_1:ρ\neq0\)
Nivel de significancia
\(α=0.05\)
resultado_cor <- cor.test(
datos$edad,
datos$nivel_conciencia_salud,
method = "pearson"
)
cat("\nResultado correlación Pearson (edad vs conciencia):\n")
##
## Resultado correlación Pearson (edad vs conciencia):
print(resultado_cor)
##
## Pearson's product-moment correlation
##
## data: datos$edad and datos$nivel_conciencia_salud
## t = 0.62534, df = 376, p-value = 0.5321
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.06885916 0.13266921
## sample estimates:
## cor
## 0.03223263
# 2) Gráfico de dispersión con línea de regresión
ggplot(datos, aes(x = edad, y = nivel_conciencia_salud)) +
geom_point(color = "#9467BD", alpha = 0.6, size = 2) +
geom_smooth(method = "lm", se = TRUE, linetype = "dashed", color = "#FF7F0E") +
labs(
title = "Gráfico de dispersión: Edad vs. Nivel de Conciencia de Salud",
x = "Edad (años)",
y = "Nivel de Conciencia (1–10)"
) +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
El coeficiente de correlación de Pearson obtenido es r ≈ 0.03, lo que indica una relación prácticamente inexistente entre la edad y el nivel de conciencia de salud. Además, el p-valor = 0.5321 es mucho mayor que α = 0.05, por lo que no rechazamos H₀ de “no correlación”. El intervalo de confianza al 95 % (−0.069, 0.133) incluye el cero, reforzando que la correlación real podría ser nula. Es decir, NO hay evidencia estadística de que la edad y la autopercepción de salud estén linealmente relacionadas en esta muestra.
De los resultados obtenidos en los distintos análisis podemos concluir que la población demuestra un alto nivel de conciencia frente a los efectos negativos de las bebidas azucaradas, tal como evidencian las reducciones significativas en el gasto reportado tras la implementación del impuesto. Este descenso en el consumo sugiere que los mensajes y advertencias sobre los riesgos asociados han calado en el comportamiento de compra de los consumidores.
Independientemente de la percepción inicial que tuvieran sobre la medida impositiva, los datos muestran que muchas personas han modificado voluntariamente sus hábitos de consumo. Es decir, más allá de si califican al impuesto como justo o no, la mayoría ha adoptado patrones más saludables, reduciendo la frecuencia y el volumen de ingesta de estas bebidas.
En lo que respecta al índice de masa corporal (IMC), nuestros análisis no encontraron una relación significativa con la frecuencia de consumo de bebidas azucaradas: los promedios de IMC son muy parecidos entre quienes consumen ocasionalmente y quienes lo hacen de forma habitual. Esto sugiere que otros factores, quizá genéticos o relacionados con la actividad física y la dieta en general, juegan un papel más determinante en la variación del IMC que el consumo de estos productos por sí solo.
Por último, al analizar el nivel de conciencia sobre salud según grupos de edad, observamos que no existe una tendencia clara: tanto personas jóvenes como adultos y adultos mayores presentan valores similares en su autoevaluación de conciencia sanitaria. En otras palabras, la edad no parece influir de manera directa en el grado de atención que cada individuo presta a su propia salud.
Con base en estos hallazgos, podemos afirmar que el impuesto a las bebidas azucaradas produjo una reducción estadísticamente significativa en el consumo, independientemente de si las personas lo percibían como justo o no. No obstante, al examinar las interrelaciones entre el nivel de conciencia sobre los riesgos del azúcar, la edad de los consumidores y su índice de masa corporal, no se detectó ninguna asociación significativa entre estas tres variables. Esto sugiere que otros determinantes de salud,como la dieta habitual, el nivel de actividad física o factores genéticos, entre otros, podrían estar influyendo en los patrones de consumo.
A partir de los hallazgos de reducción significativa en gasto y frecuencia tras el impuesto, se recomienda reforzar y diversificar las campañas de concienciación, incorporando nuevas plataformas (apps, redes sociales e influencers) para mantener el nivel alto de conciencia en todos los grupos etarios. Al mismo tiempo, destinar un porcentaje de la recaudación a programas escolares y comunitarios que promuevan la alimentación balanceada y la actividad física, atendiendo a que el IMC no se asocia directamente con el consumo de estas bebidas.
Para afianzar el impacto del impuesto, debe complementarse su aplicación con medidas de entorno: restringir la oferta de bebidas azucaradas en escuelas y eventos públicos, incentivar posiciones preferentes de opciones sin o bajas en azúcar en puntos de venta, y fomentar alianzas con la industria para la reformulación gradual de productos (mínimo 10 % menos azúcar) y la creación de un sello “Bajo en azúcar” que facilite la elección de alternativas más saludables.
En futuras fases de la investigación, conviene ampliar el modelo de análisis incluyendo factores como actividad física (minutos semanales de ejercicio), calidad de la dieta (consumo de ultraprocesados vs. frutas y verduras), antecedentes familiares de obesidad/diabetes y determinantes psicosociales (nivel educativo, estrés percibido, apoyo social). De esta forma se podrá explicar la ausencia de asociación directa entre conciencia, edad e IMC, y diseñar intervenciones más integrales según las rutas de influencia identificadas.
Referencias
Bettcher, D. (2016). Si los gobiernos gravan productos como las bebidas azucaradas, pueden reducir los padecimientos y salvar vida. Organización Mundial de la Salud. https://www.who.int/news-room
Organización Mundial de la Salud. (2015). Guía de nutrición: Azúcares libres en la dieta. https://www.who.int/publications
Organización Mundial de la Salud. (2016). Fiscal policies for diet and prevention of noncommunicable diseases. <https://www.who.int/dietphysicalactivity/publications/fiscal-policies-diet-prevention/en/