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?
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.
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.
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:
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.
Organización Mundial de la Salud. (2016). Fiscal policies for diet and prevention of noncommunicable diseases. World Health Organization.
| 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. |
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" ...
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.
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
A continuación se revisan datos faltantes, valores atípicos y se construyen resúmenes descriptivos y gráficos.
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")
)
| 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.
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")
)
| 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.
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")
)
| 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.
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")
)
| 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.
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")
)
| 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 |
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"
)
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)"
)
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"
)
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)"
)
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)"
)
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)"
)
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
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
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
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
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
| 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 |
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.