1 INTRODUCCIÓN

El presente trabajo tiene como finalidad realizar un análisis estadístico de tres tipos de café tostado y molido: La Casona, Tostao Selecto y Café Córdoba, mediante la evaluación de dos características sensoriales: aroma y sabor.

Para el análisis de los datos se utilizaron herramientas estadísticas en el programa R, con el propósito de comparar los tratamientos y determinar si existen diferencias significativas entre las calificaciones obtenidas.

2 OBJETIVO

Evaluar y comparar las características sensoriales de aroma y sabor de tres tipos de café mediante herramientas de estadística descriptiva y análisis de varianza (ANOVA).

3 ANÁLISIS ESTADÍSTICO

En esta sección se presentan los procedimientos estadísticos realizados para analizar las variables aroma y sabor, incluyendo estadísticas descriptivas, análisis de varianza, comparaciones múltiples y pruebas de los supuestos del modelo.

3.1 ANÁLISIS DE LA VARIABLE AROMA

3.1.1 Creación de la base de datos

Se construyó una base de datos con las calificaciones de aroma correspondientes a los tres tipos de café, considerando seis observaciones por tratamiento.

3.1.2 Procedimiento estadístico

# BASE DE DATOS: AROMA

cafe_aroma <- data.frame(
  Tratamiento = factor(
    rep(
      c("La Casona", "Tostao Selecto", "Cafe Cordoba"),
      each = 6
    ),
    levels = c("La Casona", "Tostao Selecto", "Cafe Cordoba")
  ),

  Aroma = c(
    8, 9, 7, 8, 9, 8,
    7, 8, 8, 7, 9, 8,
    6, 7, 6, 8, 7, 6
  )
)

cat("\n===== BASE DE DATOS: AROMA =====\n")
print(cafe_aroma)


# TABLA DE PROMEDIOS

tabla_promedios_aroma <- aggregate(
  Aroma ~ Tratamiento,
  data = cafe_aroma,
  FUN = mean
)

cat("\n===== PROMEDIOS DE AROMA =====\n")
print(tabla_promedios_aroma, row.names = FALSE)


# ESTADISTICAS DESCRIPTIVAS

tabla_descriptiva_aroma <- do.call(
  rbind,
  lapply(levels(cafe_aroma$Tratamiento), function(grupo) {

    datos <- cafe_aroma[
      cafe_aroma$Tratamiento == grupo,
    ]

    data.frame(
      Tratamiento = grupo,
      n = nrow(datos),
      Media_Aroma = mean(datos$Aroma),
      DE_Aroma = sd(datos$Aroma)
    )
  })
)

cat("\n===== ESTADISTICAS DESCRIPTIVAS: AROMA =====\n")
print(tabla_descriptiva_aroma, row.names = FALSE)


# ANOVA PARA AROMA

modelo_aroma <- aov(
  Aroma ~ Tratamiento,
  data = cafe_aroma
)

tabla_anova_aroma <- anova(modelo_aroma)

cat("\n===== ANOVA: AROMA =====\n")
print(tabla_anova_aroma)


# PRUEBA DE TUKEY

tabla_tukey_aroma <- TukeyHSD(modelo_aroma)

cat("\n===== PRUEBA DE TUKEY: AROMA =====\n")
print(tabla_tukey_aroma)


# NORMALIDAD: SHAPIRO-WILK

tabla_shapiro_aroma <- shapiro.test(
  residuals(modelo_aroma)
)

cat("\n===== SHAPIRO-WILK: AROMA =====\n")
print(tabla_shapiro_aroma)


# HOMOGENEIDAD DE VARIANZAS: LEVENE

if (!requireNamespace("car", quietly = TRUE)) {
  install.packages(
    "car",
    repos = "https://cloud.r-project.org"
  )
}

tabla_levene_aroma <- car::leveneTest(
  Aroma ~ Tratamiento,
  data = cafe_aroma,
  center = median
)

cat("\n===== LEVENE: AROMA =====\n")
print(tabla_levene_aroma)


# GRAFICA 1: DIAGRAMA DE CAJA

boxplot(
  Aroma ~ Tratamiento,
  data = cafe_aroma,
  col = c("lightblue", "lightgreen", "lightpink"),
  main = "Grafica 1: Diagrama de caja - Aroma",
  xlab = "Tipo de cafe",
  ylab = "Calificacion",
  ylim = c(1, 10)
)

# GRAFICA 2: COMPARACIONES DE TUKEY

plot(tabla_tukey_aroma)
title(main = "Grafica 2: Comparaciones de Tukey - Aroma")

# GRAFICA 3: Q-Q DE NORMALIDAD

qqnorm(
  residuals(modelo_aroma),
  main = "Grafica 3: Normalidad de residuos - Aroma"
)

qqline(
  residuals(modelo_aroma),
  col = "red"
)

# GRAFICA 4: DIAGNOSTICO DEL ANOVA

par(mfrow = c(2, 2))
plot(modelo_aroma)

par(mfrow = c(1, 1))
## 
## ===== BASE DE DATOS: AROMA =====
##       Tratamiento Aroma
## 1       La Casona     8
## 2       La Casona     9
## 3       La Casona     7
## 4       La Casona     8
## 5       La Casona     9
## 6       La Casona     8
## 7  Tostao Selecto     7
## 8  Tostao Selecto     8
## 9  Tostao Selecto     8
## 10 Tostao Selecto     7
## 11 Tostao Selecto     9
## 12 Tostao Selecto     8
## 13   Cafe Cordoba     6
## 14   Cafe Cordoba     7
## 15   Cafe Cordoba     6
## 16   Cafe Cordoba     8
## 17   Cafe Cordoba     7
## 18   Cafe Cordoba     6
## 
## ===== PROMEDIOS DE AROMA =====
##     Tratamiento    Aroma
##       La Casona 8.166667
##  Tostao Selecto 7.833333
##    Cafe Cordoba 6.666667
## 
## ===== ESTADISTICAS DESCRIPTIVAS: AROMA =====
##     Tratamiento n Media_Aroma  DE_Aroma
##       La Casona 6    8.166667 0.7527727
##  Tostao Selecto 6    7.833333 0.7527727
##    Cafe Cordoba 6    6.666667 0.8164966
## 
## ===== ANOVA: AROMA =====
## Analysis of Variance Table
## 
## Response: Aroma
##             Df Sum Sq Mean Sq F value  Pr(>F)  
## Tratamiento  2 7.4444  3.7222  6.2037 0.01088 *
## Residuals   15 9.0000  0.6000                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ===== PRUEBA DE TUKEY: AROMA =====
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Aroma ~ Tratamiento, data = cafe_aroma)
## 
## $Tratamiento
##                                   diff       lwr          upr     p adj
## Tostao Selecto-La Casona    -0.3333333 -1.494957  0.828290667 0.7409430
## Cafe Cordoba-La Casona      -1.5000000 -2.661624 -0.338376000 0.0113961
## Cafe Cordoba-Tostao Selecto -1.1666667 -2.328291 -0.005042667 0.0489452
## 
## 
## ===== SHAPIRO-WILK: AROMA =====
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_aroma)
## W = 0.95369, p-value = 0.4858
## 
## 
## ===== LEVENE: AROMA =====
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.2174 0.8071
##       15

3.2 ANÁLISIS DE LA VARIABLE SABOR

3.2.1 Creación de la base de datos

Se construyó una base de datos con las calificaciones de sabor de los tres tipos de café, utilizando seis observaciones por tratamiento.

3.2.2 Procedimiento estadístico

# BASE DE DATOS: SABOR

cafe_sabor <- data.frame(
  Tratamiento = factor(
    rep(
      c("La Casona", "Tostao Selecto", "Cafe Cordoba"),
      each = 6
    ),
    levels = c("La Casona", "Tostao Selecto", "Cafe Cordoba")
  ),

  Sabor = c(
    7, 8, 7, 9, 8, 8,
    8, 9, 8, 7, 8, 9,
    6, 7, 7, 6, 8, 7
  )
)

cat("\n===== BASE DE DATOS: SABOR =====\n")
print(cafe_sabor)


# TABLA DE PROMEDIOS

tabla_promedios_sabor <- aggregate(
  Sabor ~ Tratamiento,
  data = cafe_sabor,
  FUN = mean
)

cat("\n===== PROMEDIOS DE SABOR =====\n")
print(tabla_promedios_sabor, row.names = FALSE)


# ESTADISTICAS DESCRIPTIVAS

tabla_descriptiva_sabor <- do.call(
  rbind,
  lapply(levels(cafe_sabor$Tratamiento), function(grupo) {

    datos <- cafe_sabor[
      cafe_sabor$Tratamiento == grupo,
    ]

    data.frame(
      Tratamiento = grupo,
      n = nrow(datos),
      Media_Sabor = mean(datos$Sabor),
      DE_Sabor = sd(datos$Sabor)
    )
  })
)

cat("\n===== ESTADISTICAS DESCRIPTIVAS: SABOR =====\n")
print(tabla_descriptiva_sabor, row.names = FALSE)


# ANOVA PARA SABOR

modelo_sabor <- aov(
  Sabor ~ Tratamiento,
  data = cafe_sabor
)

tabla_anova_sabor <- anova(modelo_sabor)

cat("\n===== ANOVA: SABOR =====\n")
print(tabla_anova_sabor)


# PRUEBA DE TUKEY

tabla_tukey_sabor <- TukeyHSD(modelo_sabor)

cat("\n===== PRUEBA DE TUKEY: SABOR =====\n")
print(tabla_tukey_sabor)


# NORMALIDAD: SHAPIRO-WILK

tabla_shapiro_sabor <- shapiro.test(
  residuals(modelo_sabor)
)

cat("\n===== SHAPIRO-WILK: SABOR =====\n")
print(tabla_shapiro_sabor)


# HOMOGENEIDAD DE VARIANZAS: LEVENE

tabla_levene_sabor <- car::leveneTest(
  Sabor ~ Tratamiento,
  data = cafe_sabor,
  center = median
)

cat("\n===== LEVENE: SABOR =====\n")
print(tabla_levene_sabor)


# GRAFICA 5: DIAGRAMA DE CAJA

boxplot(
  Sabor ~ Tratamiento,
  data = cafe_sabor,
  col = c("lightblue", "lightgreen", "lightpink"),
  main = "Grafica 5: Diagrama de caja - Sabor",
  xlab = "Tipo de cafe",
  ylab = "Calificacion",
  ylim = c(1, 10)
)

# GRAFICA 6: COMPARACIONES DE TUKEY

plot(tabla_tukey_sabor)
title(main = "Grafica 6: Comparaciones de Tukey - Sabor")

# GRAFICA 7: Q-Q DE NORMALIDAD

qqnorm(
  residuals(modelo_sabor),
  main = "Grafica 7: Normalidad de residuos - Sabor"
)

qqline(
  residuals(modelo_sabor),
  col = "red"
)

# GRAFICA 8: DIAGNOSTICO DEL ANOVA

par(mfrow = c(2, 2))
plot(modelo_sabor)

par(mfrow = c(1, 1))
## 
## ===== BASE DE DATOS: SABOR =====
##       Tratamiento Sabor
## 1       La Casona     7
## 2       La Casona     8
## 3       La Casona     7
## 4       La Casona     9
## 5       La Casona     8
## 6       La Casona     8
## 7  Tostao Selecto     8
## 8  Tostao Selecto     9
## 9  Tostao Selecto     8
## 10 Tostao Selecto     7
## 11 Tostao Selecto     8
## 12 Tostao Selecto     9
## 13   Cafe Cordoba     6
## 14   Cafe Cordoba     7
## 15   Cafe Cordoba     7
## 16   Cafe Cordoba     6
## 17   Cafe Cordoba     8
## 18   Cafe Cordoba     7
## 
## ===== PROMEDIOS DE SABOR =====
##     Tratamiento    Sabor
##       La Casona 7.833333
##  Tostao Selecto 8.166667
##    Cafe Cordoba 6.833333
## 
## ===== ESTADISTICAS DESCRIPTIVAS: SABOR =====
##     Tratamiento n Media_Sabor  DE_Sabor
##       La Casona 6    7.833333 0.7527727
##  Tostao Selecto 6    8.166667 0.7527727
##    Cafe Cordoba 6    6.833333 0.7527727
## 
## ===== ANOVA: SABOR =====
## Analysis of Variance Table
## 
## Response: Sabor
##             Df Sum Sq Mean Sq F value  Pr(>F)  
## Tratamiento  2 5.7778 2.88889   5.098 0.02045 *
## Residuals   15 8.5000 0.56667                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## ===== PRUEBA DE TUKEY: SABOR =====
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Sabor ~ Tratamiento, data = cafe_sabor)
## 
## $Tratamiento
##                                   diff        lwr        upr     p adj
## Tostao Selecto-La Casona     0.3333333 -0.7955623  1.4622289 0.7282733
## Cafe Cordoba-La Casona      -1.0000000 -2.1288956  0.1288956 0.0865323
## Cafe Cordoba-Tostao Selecto -1.3333333 -2.4622289 -0.2044377 0.0201164
## 
## 
## ===== SHAPIRO-WILK: SABOR =====
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_sabor)
## W = 0.92015, p-value = 0.1301
## 
## 
## ===== LEVENE: SABOR =====
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2       0      1
##       15

4 CONCLUSIONES

A partir del análisis estadístico realizado, se encontró que existen diferencias significativas entre los tres tipos de café evaluados en las características sensoriales de aroma y sabor, de acuerdo con los resultados del análisis de varianza (ANOVA).

En cuanto al aroma, La Casona presentó el promedio más alto (8,17), seguido de Tostao Selecto (7,83) y Café Córdoba (6,67). La prueba de Tukey mostró diferencias significativas entre Café Córdoba y los otros dos tratamientos, mientras que entre La Casona y Tostao Selecto no se encontraron diferencias significativas.

Respecto al sabor, Tostao Selecto obtuvo el promedio más alto (8,17), seguido de La Casona (7,83) y Café Córdoba (6,83). Según la prueba de Tukey, solamente se encontraron diferencias significativas entre Tostao Selecto y Café Córdoba.

En general, Tostao Selecto y La Casona presentaron las mejores calificaciones sensoriales, mientras que Café Córdoba obtuvo los promedios más bajos en ambas características evaluadas.