1 Enunciado

La base de datos contiene información de 69 marcas de cerveza distribuidas en la ciudad, recogida con el fin de clasificar los productos y realizar un análisis descriptivo. Las variables son:

Variable Descripción
precio Precio de la presentación en caja de seis botellas de 12 onzas
calorias Calorías contenidas en una unidad de 12 onzas
alcohol Porcentaje de contenido de alcohol por 12 onzas de contenido (poralcoh)
tipo 1-lager artesanal, 2-clara artesanal, 3-lager importada, 4-cerveza normal y helada, 5-cerveza baja en calorías y sin alcohol
origen 0-nacional, 1-importada

El objetivo de este primer informe es resumir la información en tablas e indicadores estadísticos que permitan validar algunas hipótesis del director de investigación, y presentar un análisis de los resultados obtenidos.

2 Carga de datos

Se puede cargar la base de datos de dos formas equivalentes:

Opción A — paquete del curso (paquetePROB):

install.packages("devtools")                       # solo una vez
devtools::install_github("dgonxalex80/paquetePROB") # descarga el paquete
library(paquetePROB)
data("beer")

Opción B — archivo beer.csv (el que se usa en este informe):

beer <- read_csv("beer.csv", show_col_types = FALSE)

# Recodificación de variables categóricas para lectura más clara
beer <- beer %>%
  mutate(
    origen_lbl = factor(origen, levels = c(0, 1),
                         labels = c("Nacional", "Importada")),
    tipo_lbl   = factor(tipo, levels = 1:5,
                         labels = c("Lager artesanal", "Clara artesanal",
                                    "Lager importada", "Normal y helada",
                                    "Baja en calorías / sin alcohol"))
  )

glimpse(beer)
## Rows: 69
## Columns: 8
## $ marca      <chr> "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", "m10"…
## $ precio     <dbl> 624, 479, 596, 47, 411, 385, 252, 546, 6, 371, 67, 499, 41,…
## $ calorias   <dbl> 159, 160, 160, 162, 157, 151, 155, 135, 162, 142, 146, 148,…
## $ poralcoh   <dbl> 52, 5, 49, 49, 55, 49, 47, 51, 54, 48, 44, 43, 51, 5, 58, 5…
## $ tipo       <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,…
## $ origen     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ origen_lbl <fct> Importada, Importada, Importada, Importada, Importada, Impo…
## $ tipo_lbl   <fct> Lager artesanal, Lager artesanal, Lager artesanal, Lager ar…

3 Base de datos

DT::datatable(
  beer %>% select(marca, precio, calorias, poralcoh, tipo_lbl, origen_lbl),
  options = list(pageLength = 8),
  colnames = c("Marca", "Precio", "Calorías", "% Alcohol", "Tipo", "Origen")
)

4 Análisis descriptivo

4.1 Precio

beer %>%
  summarise(
    n = n(), media = mean(precio), mediana = median(precio),
    desv_std = sd(precio), min = min(precio), max = max(precio),
    Q1 = quantile(precio, 0.25), Q3 = quantile(precio, 0.75),
    CV = sd(precio) / mean(precio) * 100
  ) %>%
  kable(digits = 2, caption = "Indicadores estadísticos del precio") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Indicadores estadísticos del precio
n media mediana desv_std min max Q1 Q3 CV
69 424.58 425 212.37 4 779 319 596 50.02
ggplot(beer, aes(x = precio)) +
  geom_histogram(bins = 10, fill = "#B8860B", color = "white") +
  labs(title = "Distribución del precio", x = "Precio (USD)", y = "Frecuencia") +
  theme_minimal()

4.2 Calorías

beer %>%
  summarise(
    n = n(), media = mean(calorias), mediana = median(calorias),
    desv_std = sd(calorias), min = min(calorias), max = max(calorias),
    Q1 = quantile(calorias, 0.25), Q3 = quantile(calorias, 0.75),
    CV = sd(calorias) / mean(calorias) * 100
  ) %>%
  kable(digits = 2, caption = "Indicadores estadísticos de las calorías") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Indicadores estadísticos de las calorías
n media mediana desv_std min max Q1 Q3 CV
69 142.35 148 29.9 58 201 142 160 21.01
ggplot(beer, aes(x = calorias)) +
  geom_histogram(bins = 10, fill = "#8B4513", color = "white") +
  labs(title = "Distribución de las calorías", x = "Calorías", y = "Frecuencia") +
  theme_minimal()

4.3 Porcentaje de alcohol

beer %>%
  summarise(
    n = n(), media = mean(poralcoh), mediana = median(poralcoh),
    desv_std = sd(poralcoh), min = min(poralcoh), max = max(poralcoh),
    Q1 = quantile(poralcoh, 0.25), Q3 = quantile(poralcoh, 0.75),
    CV = sd(poralcoh) / mean(poralcoh) * 100
  ) %>%
  kable(digits = 2, caption = "Indicadores estadísticos del % de alcohol") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Indicadores estadísticos del % de alcohol
n media mediana desv_std min max Q1 Q3 CV
69 36.25 46 21.09 0 59 5 51 58.18
ggplot(beer, aes(x = poralcoh)) +
  geom_histogram(bins = 10, fill = "#CD853F", color = "white") +
  labs(title = "Distribución del % de alcohol", x = "% Alcohol", y = "Frecuencia") +
  theme_minimal()

4.4 Tipo de cerveza

beer %>%
  count(tipo_lbl) %>%
  mutate(porcentaje = round(n / sum(n) * 100, 1)) %>%
  kable(col.names = c("Tipo", "Frecuencia", "Porcentaje (%)"),
        caption = "Distribución por tipo de cerveza") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Distribución por tipo de cerveza
Tipo Frecuencia Porcentaje (%)
Lager artesanal 13 18.8
Clara artesanal 17 24.6
Lager importada 10 14.5
Normal y helada 16 23.2
Baja en calorías / sin alcohol 13 18.8
ggplot(beer, aes(x = tipo_lbl, fill = tipo_lbl)) +
  geom_bar() +
  labs(title = "Frecuencia por tipo de cerveza", x = "Tipo", y = "Frecuencia") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 25, hjust = 1), legend.position = "none")

4.5 Origen

beer %>%
  count(origen_lbl) %>%
  mutate(porcentaje = round(n / sum(n) * 100, 1)) %>%
  kable(col.names = c("Origen", "Frecuencia", "Porcentaje (%)"),
        caption = "Distribución por origen") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Distribución por origen
Origen Frecuencia Porcentaje (%)
Nacional 15 21.7
Importada 54 78.3
ggplot(beer, aes(x = origen_lbl, fill = origen_lbl)) +
  geom_bar() +
  labs(title = "Frecuencia por origen", x = "Origen", y = "Frecuencia") +
  theme_minimal() +
  theme(legend.position = "none")

5 Análisis cruzado (apoyo para validar hipótesis)

5.1 Precio según origen

beer %>%
  group_by(origen_lbl) %>%
  summarise(media_precio = mean(precio), sd_precio = sd(precio), n = n()) %>%
  kable(digits = 2, caption = "Precio promedio según origen") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Precio promedio según origen
origen_lbl media_precio sd_precio n
Nacional 539.47 146.9 15
Importada 392.67 217.7 54
ggplot(beer, aes(x = origen_lbl, y = precio, fill = origen_lbl)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Precio según origen", x = "Origen", y = "Precio") +
  theme_minimal() +
  theme(legend.position = "none")

5.2 Calorías según tipo de cerveza

beer %>%
  group_by(tipo_lbl) %>%
  summarise(media_calorias = mean(calorias), sd_calorias = sd(calorias), n = n()) %>%
  kable(digits = 2, caption = "Calorías promedio según tipo") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Calorías promedio según tipo
tipo_lbl media_calorias sd_calorias n
Lager artesanal 154.38 9.59 13
Clara artesanal 165.41 15.56 17
Lager importada 151.20 6.68 10
Normal y helada 145.75 6.44 16
Baja en calorías / sin alcohol 89.15 22.59 13
ggplot(beer, aes(x = tipo_lbl, y = calorias, fill = tipo_lbl)) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Calorías según tipo de cerveza", x = "Tipo", y = "Calorías") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 25, hjust = 1), legend.position = "none")

5.3 Relación precio - porcentaje de alcohol

ggplot(beer, aes(x = poralcoh, y = precio, color = origen_lbl)) +
  geom_point(size = 2.5, alpha = 0.8) +
  labs(title = "Precio vs. % de alcohol", x = "% de alcohol", y = "Precio",
       color = "Origen") +
  theme_minimal()

6 Análisis de resultados

(Complete esta sección con la interpretación de los resultados obtenidos)

  • Precio: [Con una media de 424.58 y una desviación estándar de 212.37 (coeficiente de variación ≈ 50%), el precio muestra alta variabilidad entre las 69 marcas — va desde 4 hasta 779, un rango muy amplio para un mercado que en teoría debería tener precios más homogéneos.]
  • Calorías: [El promedio es 142.35 calorías (rango 58–201). El tipo “Baja en calorías / sin alcohol” tiene un promedio muy inferior (89.15) frente a los demás tipos (145–165), lo cual es coherente con su nombre y evidencia que sí cumple su propósito comercial.]
  • Porcentaje de alcohol: [La media es 36.25% con una desviación muy alta (21.09, CV=58%) — el rango va de 0 a 59, lo que indica que hay un grupo de cervezas sin alcohol (o casi) mezclado con otras de alto contenido, generando bimodalidad más que una distribución homogénea.]
  • Tipo: [El tipo más frecuente es “Clara artesanal” (17 marcas, 24.6%), seguido de cerca por “Normal y helada” (16, 23.2%). Esto sugiere que el mercado está dominado por cervezas artesanales y de consumo masivo tradicional, con menor presencia de nichos como la lager importada (14.5%).]
  • Origen: [El 78.3% de las marcas son importadas frente a solo 21.7% nacionales. Curiosamente, el precio promedio de las nacionales es mayor (539.47) que el de las importadas (392.67) — lo contrario de lo que normalmente se esperaría, aunque las importadas tienen mucha más dispersión (sd=217.7).]
  • Conclusión general: [Los datos no apoyan la hipótesis típica de que “lo importado es más caro” — aquí ocurre lo inverso. Sí se confirma que el tipo “bajo en calorías” cumple su promesa nutricional, y se evidencia un mercado con alta heterogeneidad en precio y contenido de alcohol, posiblemente porque agrupa segmentos muy distintos (artesanal, industrial, sin alcohol) bajo una sola base de datos.]

Informe generado en R Markdown como respuesta al Caso 1 del curso de Estadística para la toma de decisiones.