Introducción
El director de investigación solicita una primera etapa de análisis
descriptivo sobre una base de datos que recoge cinco
características de 69 marcas de cerveza distribuidas en la ciudad:
precio, calorías, porcentaje
de alcohol, tipo de cerveza y
origen (nacional/importada). El objetivo de este
informe es resumir la información en tablas e indicadores estadísticos
que permitan validar hipótesis iniciales sobre las diferencias entre
tipos de cerveza y su origen.
Importación y
preparación de los datos
# Si el archivo no está en la carpeta del proyecto, descomente y ajuste la ruta:
# setwd("C:/Users/SuUsuario/OneDrive/Documentos/Caso1")
datos <- read.csv("beer.csv", sep = ",", stringsAsFactors = FALSE)
# Las variables numéricas vienen con coma decimal (formato en español) y
# fueron leídas como texto entre comillas; se convierten a numérico:
datos$precio <- as.numeric(gsub(",", ".", datos$precio))
datos$poralcoh <- as.numeric(gsub(",", ".", datos$poralcoh))
datos$calorias <- as.numeric(datos$calorias)
# Se etiquetan las variables categóricas según el diccionario del caso
datos$tipo <- factor(datos$tipo,
levels = 1:5,
labels = c("Lager artesanal", "Clara artesanal",
"Lager importada", "Normal y helada",
"Baja en calorías y sin alcohol"))
datos$origen <- factor(datos$origen,
levels = c(0, 1),
labels = c("Nacional", "Importada"))
str(datos)
## 'data.frame': 69 obs. of 6 variables:
## $ marca : chr "m1" "m2" "m3" "m4" ...
## $ precio : num 6.24 4.79 5.96 4.7 4.11 3.85 2.52 5.46 6 3.71 ...
## $ calorias: num 159 160 160 162 157 151 155 135 162 142 ...
## $ poralcoh: num 5.2 5 4.9 4.9 5.5 4.9 4.7 5.1 5.4 4.8 ...
## $ tipo : Factor w/ 5 levels "Lager artesanal",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ origen : Factor w/ 2 levels "Nacional","Importada": 2 2 2 2 2 2 2 2 2 2 ...
kable(head(datos, 10), caption = "Primeras 10 observaciones de la base de datos") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Primeras 10 observaciones de la base de datos
|
marca
|
precio
|
calorias
|
poralcoh
|
tipo
|
origen
|
|
m1
|
6.24
|
159
|
5.2
|
Lager artesanal
|
Importada
|
|
m2
|
4.79
|
160
|
5.0
|
Lager artesanal
|
Importada
|
|
m3
|
5.96
|
160
|
4.9
|
Lager artesanal
|
Importada
|
|
m4
|
4.70
|
162
|
4.9
|
Lager artesanal
|
Importada
|
|
m5
|
4.11
|
157
|
5.5
|
Lager artesanal
|
Importada
|
|
m6
|
3.85
|
151
|
4.9
|
Lager artesanal
|
Importada
|
|
m7
|
2.52
|
155
|
4.7
|
Lager artesanal
|
Importada
|
|
m8
|
5.46
|
135
|
5.1
|
Lager artesanal
|
Importada
|
|
m9
|
6.00
|
162
|
5.4
|
Lager artesanal
|
Importada
|
|
m10
|
3.71
|
142
|
4.8
|
Lager artesanal
|
Importada
|
La base contiene 69 marcas de cerveza y
6 variables.
Análisis descriptivo de
las variables cuantitativas
Las variables cuantitativas del estudio son precio,
calorías y porcentaje de alcohol. A
continuación se presenta una tabla resumen con los principales
indicadores de tendencia central, dispersión y forma.
resumen_cuant <- describe(datos[, c("precio", "calorias", "poralcoh")])[, c("n","mean","sd","median","min","max","range","skew","kurtosis")]
kable(round(resumen_cuant, 2),
caption = "Estadísticos descriptivos - Precio, Calorías y % de alcohol") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Estadísticos descriptivos - Precio, Calorías y % de alcohol
|
|
n
|
mean
|
sd
|
median
|
min
|
max
|
range
|
skew
|
kurtosis
|
|
precio
|
69
|
4.96
|
1.45
|
4.79
|
2.36
|
7.8
|
5.44
|
0.11
|
-1.11
|
|
calorias
|
69
|
142.35
|
29.90
|
148.00
|
58.00
|
201.0
|
143.00
|
-1.25
|
1.18
|
|
poralcoh
|
69
|
4.42
|
1.57
|
4.90
|
0.00
|
6.0
|
6.00
|
-2.12
|
3.39
|
cv <- sapply(datos[, c("precio","calorias","poralcoh")], function(x) sd(x)/mean(x)*100)
tabla_cv <- data.frame(Variable = names(cv), CV_porcentaje = round(as.numeric(cv), 2))
kable(tabla_cv,
caption = "Coeficiente de variación (%)") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Coeficiente de variación (%)
|
Variable
|
CV_porcentaje
|
|
precio
|
29.14
|
|
calorias
|
21.01
|
|
poralcoh
|
35.63
|
Visualización de las
variables cuantitativas
p1 <- ggplot(datos, aes(x = precio)) +
geom_histogram(bins = 10, fill = "#7B4B2A", color = "white") +
labs(title = "Distribución del precio", x = "Precio (USD)", y = "Frecuencia") +
theme_minimal()
p2 <- ggplot(datos, aes(x = calorias)) +
geom_histogram(bins = 10, fill = "#C9A66B", color = "white") +
labs(title = "Distribución de calorías", x = "Calorías", y = "Frecuencia") +
theme_minimal()
p3 <- ggplot(datos, aes(x = poralcoh)) +
geom_histogram(bins = 10, fill = "#4B6043", color = "white") +
labs(title = "Distribución del % de alcohol", x = "% Alcohol", y = "Frecuencia") +
theme_minimal()
gridExtra::grid.arrange(p1, p2, p3, ncol = 3)

b1 <- ggplot(datos, aes(x = tipo, y = precio, fill = tipo)) +
geom_boxplot(show.legend = FALSE) +
labs(title = "Precio por tipo de cerveza", x = "", y = "Precio") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 35, hjust = 1))
b1

Análisis descriptivo de
las variables cualitativas
Las variables cualitativas son tipo de cerveza y
origen.
tabla_tipo <- datos %>%
count(tipo) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 1))
kable(tabla_tipo, col.names = c("Tipo de cerveza", "Frecuencia", "Porcentaje (%)"),
caption = "Distribución de frecuencias - Tipo de cerveza") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Distribución de frecuencias - Tipo de cerveza
|
Tipo de cerveza
|
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 y sin alcohol
|
13
|
18.8
|
tabla_origen <- datos %>%
count(origen) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 1))
kable(tabla_origen, col.names = c("Origen", "Frecuencia", "Porcentaje (%)"),
caption = "Distribución de frecuencias - Origen") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Distribución de frecuencias - Origen
|
Origen
|
Frecuencia
|
Porcentaje (%)
|
|
Nacional
|
15
|
21.7
|
|
Importada
|
54
|
78.3
|
g1 <- ggplot(tabla_tipo, aes(x = reorder(tipo, -n), y = n, fill = tipo)) +
geom_col(show.legend = FALSE) +
labs(title = "Marcas por tipo de cerveza", x = "", y = "Número de marcas") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 30, hjust = 1))
g2 <- ggplot(tabla_origen, aes(x = origen, y = n, fill = origen)) +
geom_col(show.legend = FALSE) +
labs(title = "Marcas por origen", x = "", y = "Número de marcas") +
theme_minimal()
gridExtra::grid.arrange(g1, g2, ncol = 2)

Tabla cruzada: tipo
de cerveza vs. origen
tabla_cruzada <- table(datos$tipo, datos$origen)
kable(tabla_cruzada, caption = "Tipo de cerveza según origen") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Tipo de cerveza según origen
|
|
Nacional
|
Importada
|
|
Lager artesanal
|
0
|
13
|
|
Clara artesanal
|
1
|
16
|
|
Lager importada
|
10
|
0
|
|
Normal y helada
|
1
|
15
|
|
Baja en calorías y sin alcohol
|
3
|
10
|
Comparación de
indicadores según origen (nacional vs. importada)
resumen_origen <- datos %>%
group_by(origen) %>%
summarise(
Precio_promedio = round(mean(precio), 2),
Calorias_promedio = round(mean(calorias), 2),
Alcohol_promedio = round(mean(poralcoh), 2),
n = n()
)
kable(resumen_origen,
col.names = c("Origen", "Precio promedio", "Calorías promedio", "% Alcohol promedio", "N° marcas"),
caption = "Promedios de precio, calorías y alcohol según origen") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Promedios de precio, calorías y alcohol según origen
|
Origen
|
Precio promedio
|
Calorías promedio
|
% Alcohol promedio
|
N° marcas
|
|
Nacional
|
5.86
|
138.60
|
4.13
|
15
|
|
Importada
|
4.71
|
143.39
|
4.50
|
54
|
Análisis de
resultados
- Precio: El precio promedio de las 69 marcas es de
USD 4.96 por caja de seis botellas de 12 onzas, con una desviación
estándar de 1.45 y un coeficiente de variación de 29.1%, lo que refleja
una dispersión moderada-alta: no todas las marcas se agrupan cerca del
promedio, sino que coexisten opciones económicas y premium. En el
boxplot general no se observan marcas atípicas para el conjunto completo
de datos, pero al segmentar por tipo de cerveza sí aparecen algunos
valores atípicos puntuales: dentro de la categoría “baja en calorías y
sin alcohol” hay tres marcas (m62, m68 y m69) con precios notablemente
más altos que el resto de su grupo (entre USD 5.42 y 6.49, cuando la
mayoría de esa categoría se ubica alrededor de USD 3-4); y dentro de
“lager importada” la marca m40 (USD 7.80) se comporta como un valor
atípico por ser la más cara de su categoría.
- Calorías: El contenido calórico promedio general es
de 142.3 calorías, pero varía claramente según el tipo: “clara
artesanal” es la más calórica (165.4 cal en promedio), seguida de “lager
artesanal” (154.4 cal) y “lager importada” (151.2 cal). Las cervezas
“baja en calorías y sin alcohol” (tipo 5) sí presentan, en efecto, el
valor promedio más bajo de todos, con 89.2 calorías, muy por debajo de
las demás categorías, lo que confirma que esta clasificación cumple con
su nombre.
- Porcentaje de alcohol: El promedio general es
4.42%, pero nuevamente el tipo 5 se distingue del resto: su contenido de
alcohol promedio es de solo 1.92%, muy inferior al de las otras
categorías (que oscilan entre 4.77% y 5.28%). Al revisar el detalle, 7
de las 13 marcas clasificadas como “baja en calorías y sin alcohol”
tienen efectivamente 0% de alcohol, lo que respalda en gran medida la
definición del grupo, aunque no de forma perfecta (las 6 marcas
restantes de esa categoría sí registran algo de alcohol).
- Tipo de cerveza: La categoría con mayor número de
marcas es “clara artesanal”, con 17 marcas, equivalentes al 24.6% del
total de 69 marcas analizadas. Le sigue de cerca “normal y helada” con
16 marcas (23.2%).
- Origen: De las 69 marcas, 54 son importadas (78.3%)
y solo 15 son nacionales (21.7%), es decir, casi 4 de cada 5 marcas
distribuidas en la ciudad son importadas. Sin embargo, al comparar los
promedios, son las marcas nacionales las que presentan el precio más
alto (USD 5.86 frente a USD 4.71 de las importadas), un contenido
calórico ligeramente mayor (138.6 vs 143.4, prácticamente similar) y un
porcentaje de alcohol algo menor (4.13% vs 4.50%). Esto no confirma la
hipótesis habitual de que “lo importado es más costoso”; en esta base
ocurre justamente lo contrario.
Conclusiones
-Precio: promedio USD 4.96, dispersión moderada-alta (CV 29%). Rango:
USD 2.36 – 7.80. Calorías: promedio 142.3 cal, la variable más homogénea
(CV 21%). % Alcohol: promedio 4.42%, la más dispersa (CV 36%), por las
cervezas tipo 5 (0% alcohol). Tipo: “clara artesanal” es la más común
(24.6%) y también la más cara y calórica; “baja en calorías y sin
alcohol” tiene, lógicamente, los valores más bajos en calorías y
alcohol. Origen: 78% importadas, 22% nacionales. Sorpresa: las
nacionales resultan más caras en promedio (USD 5.86 vs 4.71), contrario
a lo esperado. Hallazgo curioso: el tipo “lager importada” está
codificado como origen “nacional” en los datos — son variables
independientes, no hay que confundirlas. Conclusión general: hay
diferencias claras entre tipos de cerveza, pero la hipótesis de que
“importado = más caro” no se sostiene. Se recomienda seguir con pruebas
estadísticas para confirmar significancia.