Aspectos generales del diseño experimental

El Diseño Completamente Aleatorizado (DCA) permite comparar distintos tratamientos cuando las unidades experimentales se encuentran en condiciones similares. La asignación de los tratamientos se realiza al azar y cada uno cuenta con varias repeticiones, lo que permite estimar el error experimental y estudiar las diferencias entre los resultados.

Entre sus aspectos principales se encuentran:

Descripción de la evaluación sensorial

Se estudió la percepción sensorial de tres marcas de café: Café Tostao, Café Viejo Molino y Café Colcafé. La evaluación consideró dos características: aroma y sabor. Para cada marca se registraron seis calificaciones por característica, correspondientes a seis repeticiones por tratamiento. Las puntuaciones se asignaron en una escala de 1 a 10, donde 1 representa una valoración muy baja y 10 una valoración excelente.

Los datos de aroma y sabor se analizarán de manera independiente, pero dentro de un mismo documento y mediante el mismo Diseño Completamente Aleatorizado (DCA). De esta manera, será posible comparar las marcas para cada característica sensorial sin mezclar las dos variables de respuesta.

Análisis de las puntuaciones del aroma

Organización de la matriz experimental del aroma

En esta etapa se organizan las seis calificaciones registradas para cada marca de café. También se calculan la suma y el promedio de las puntuaciones para facilitar la comparación inicial.

library(printr)

Tratamientos_aroma <- c("Café Tostao",
                        "Café Viejo Molino",
                        "Café Colcafé")

r1_aroma <- c(8, 7, 9)
r2_aroma <- c(9, 8, 8)
r3_aroma <- c(8, 7, 10)
r4_aroma <- c(9, 6, 9)
r5_aroma <- c(10, 8, 8)
r6_aroma <- c(8, 7, 10)

replicas_aroma <- cbind(r1_aroma, r2_aroma, r3_aroma,
                        r4_aroma, r5_aroma, r6_aroma)

Total_aroma <- rowSums(replicas_aroma)
medias_aroma <- Total_aroma / 6

Tabla_aroma <- data.frame(Tratamientos_aroma,
                          replicas_aroma,
                          Total_aroma,
                          medias_aroma)

names(Tabla_aroma) <- c("Tratamientos", "Réplica 1", "Réplica 2",
                        "Réplica 3", "Réplica 4", "Réplica 5",
                        "Réplica 6", "Total", "Media")

Tabla_aroma
Tratamientos Réplica 1 Réplica 2 Réplica 3 Réplica 4 Réplica 5 Réplica 6 Total Media
Café Tostao 8 9 8 9 10 8 52 8.666667
Café Viejo Molino 7 8 7 6 8 7 43 7.166667
Café Colcafé 9 8 10 9 8 10 54 9.000000

Preparación de los registros para el análisis del aroma

Las calificaciones se organizan en una variable de respuesta y otra variable categórica que identifica la marca de café correspondiente a cada observación.

cafe_aroma <- factor(rep(c("Café Tostao",
                           "Café Viejo Molino",
                           "Café Colcafé"), each = 6))

y_aroma <- c(8, 9, 8, 9, 10, 8,
             7, 8, 7, 6, 8, 7,
             9, 8, 10, 9, 8, 10)

DATA_aroma <- data.frame(cafe_aroma, y_aroma)

DATA_aroma
cafe_aroma y_aroma
Café Tostao 8
Café Tostao 9
Café Tostao 8
Café Tostao 9
Café Tostao 10
Café Tostao 8
Café Viejo Molino 7
Café Viejo Molino 8
Café Viejo Molino 7
Café Viejo Molino 6
Café Viejo Molino 8
Café Viejo Molino 7
Café Colcafé 9
Café Colcafé 8
Café Colcafé 10
Café Colcafé 9
Café Colcafé 8
Café Colcafé 10

Representación de la distribución de las calificaciones del aroma

El diagrama de cajas permite observar la distribución de las puntuaciones de cada marca, comparar sus medianas y reconocer la dispersión de los datos registrados para el aroma.

boxplot(y_aroma ~ cafe_aroma,
        col = "green",
        main = "Comparación de las calificaciones del aroma",
        xlab = "Marcas de café",
        ylab = "Calificación del aroma",
        ylim = c(1, 10))

Análisis de varianza (ANOVA) para el aroma

Se aplica un análisis de varianza para determinar si existen diferencias estadísticamente significativas entre las calificaciones promedio del aroma de las tres marcas de café.

modelo_aroma <- lm(y_aroma ~ cafe_aroma)
anova_aroma <- aov(modelo_aroma)

summary(modelo_aroma)
## 
## Call:
## lm(formula = y_aroma ~ cafe_aroma)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.16667 -0.66667 -0.08333  0.70833  1.33333 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                   9.0000     0.3361  26.778 4.44e-14 ***
## cafe_aromaCafé Tostao        -0.3333     0.4753  -0.701  0.49386    
## cafe_aromaCafé Viejo Molino  -1.8333     0.4753  -3.857  0.00155 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8233 on 15 degrees of freedom
## Multiple R-squared:  0.5296, Adjusted R-squared:  0.4668 
## F-statistic: 8.443 on 2 and 15 DF,  p-value: 0.003498
summary(anova_aroma)
##             Df Sum Sq Mean Sq F value Pr(>F)   
## cafe_aroma   2  11.44   5.722   8.443 0.0035 **
## Residuals   15  10.17   0.678                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Comparación de medias mediante LSD de Fisher para el aroma

La prueba LSD permite contrastar los promedios de los tratamientos y formar grupos de marcas que presentan o no diferencias significativas.

library(agricolae)

LSD.test(modelo_aroma, "cafe_aroma",
         group = TRUE,
         console = TRUE,
         main = "Comparación LSD de las calificaciones del aroma")
## 
## Study: Comparación LSD de las calificaciones del aroma
## 
## LSD t Test for y_aroma 
## 
## Mean Square Error:  0.6777778 
## 
## cafe_aroma,  means and individual ( 95 %) CI
## 
##                    y_aroma       std r        se      LCL      UCL Min Max  Q25
## Café Colcafé      9.000000 0.8944272 6 0.3360996 8.283621 9.716379   8  10 8.25
## Café Tostao       8.666667 0.8164966 6 0.3360996 7.950287 9.383046   8  10 8.00
## Café Viejo Molino 7.166667 0.7527727 6 0.3360996 6.450287 7.883046   6   8 7.00
##                   Q50  Q75
## Café Colcafé      9.0 9.75
## Café Tostao       8.5 9.00
## Café Viejo Molino 7.0 7.75
## 
## Alpha: 0.05 ; DF Error: 15
## Critical Value of t: 2.13145 
## 
## least Significant Difference: 1.013113 
## 
## Treatments with the same letter are not significantly different.
## 
##                    y_aroma groups
## Café Colcafé      9.000000      a
## Café Tostao       8.666667      a
## Café Viejo Molino 7.166667      b

Comparaciones múltiples mediante Tukey para el aroma

La prueba de Tukey compara los tratamientos por pares y ajusta las comparaciones para controlar el error asociado al análisis múltiple. Se utiliza un nivel de confianza del 95 %.

tukey_aroma <- TukeyHSD(anova_aroma, "cafe_aroma",
                        conf.level = 0.95)

plot(tukey_aroma)

tukey_aroma
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = modelo_aroma)
## 
## $cafe_aroma
##                                      diff       lwr        upr     p adj
## Café Tostao-Café Colcafé       -0.3333333 -1.567954  0.9012875 0.7663903
## Café Viejo Molino-Café Colcafé -1.8333333 -3.067954 -0.5987125 0.0041614
## Café Viejo Molino-Café Tostao  -1.5000000 -2.734621 -0.2653791 0.0169072

Agrupación de las marcas mediante Duncan para el aroma

El procedimiento de Duncan permite ordenar los tratamientos de acuerdo con sus medias y establecer grupos estadísticos. Las marcas que comparten una misma letra no presentan diferencias significativas bajo el nivel de significancia utilizado.

duncan.test(modelo_aroma, "cafe_aroma",
            group = TRUE,
            console = TRUE,
            main = "Agrupación de las marcas según el aroma")
## 
## Study: Agrupación de las marcas según el aroma
## 
## Duncan's new multiple range test
## for y_aroma 
## 
## Mean Square Error:  0.6777778 
## 
## cafe_aroma,  means
## 
##                    y_aroma       std r        se Min Max  Q25 Q50  Q75
## Café Colcafé      9.000000 0.8944272 6 0.3360996   8  10 8.25 9.0 9.75
## Café Tostao       8.666667 0.8164966 6 0.3360996   8  10 8.00 8.5 9.00
## Café Viejo Molino 7.166667 0.7527727 6 0.3360996   6   8 7.00 7.0 7.75
## 
## Alpha: 0.05 ; DF Error: 15 
## 
## Critical Range
##        2        3 
## 1.013113 1.062016 
## 
## Means with the same letter are not significantly different.
## 
##                    y_aroma groups
## Café Colcafé      9.000000      a
## Café Tostao       8.666667      a
## Café Viejo Molino 7.166667      b

Verificación de los supuestos del modelo para el aroma

Los residuos representan las diferencias entre las calificaciones observadas y los valores estimados por el modelo. Su revisión permite examinar el cumplimiento de los supuestos necesarios para interpretar el análisis de varianza.

Cálculo e inspección de los residuos

library(car)
## Cargando paquete requerido: carData
residuos_aroma <- residuals(modelo_aroma)

residuos_aroma
##             1             2             3             4             5 
## -6.666667e-01  3.333333e-01 -6.666667e-01  3.333333e-01  1.333333e+00 
##             6             7             8             9            10 
## -6.666667e-01 -1.666667e-01  8.333333e-01 -1.666667e-01 -1.166667e+00 
##            11            12            13            14            15 
##  8.333333e-01 -1.666667e-01 -1.942890e-16 -1.000000e+00  1.000000e+00 
##            16            17            18 
## -1.942890e-16 -1.000000e+00  1.000000e+00
sort(residuos_aroma)
##            10            14            17             3             6 
## -1.166667e+00 -1.000000e+00 -1.000000e+00 -6.666667e-01 -6.666667e-01 
##             1             7             9            12            13 
## -6.666667e-01 -1.666667e-01 -1.666667e-01 -1.666667e-01 -1.942890e-16 
##            16             2             4             8            11 
## -1.942890e-16  3.333333e-01  3.333333e-01  8.333333e-01  8.333333e-01 
##            15            18             5 
##  1.000000e+00  1.000000e+00  1.333333e+00

Inspección gráfica de normalidad

El gráfico Q-Q permite comparar los cuantiles observados de los residuos con los cuantiles teóricos de una distribución normal. Una disposición aproximadamente lineal de los puntos es compatible con el supuesto de normalidad.

qqnorm(residuos_aroma,
       main = "Gráfico Q-Q de los residuos del aroma")
qqline(residuos_aroma)

qqPlot(residuos_aroma, pch = 10)

## [1]  5 10

Relación entre residuos y valores estimados

Esta representación permite observar si los errores se distribuyen de manera aleatoria alrededor de cero o si presentan algún patrón que pueda indicar problemas en el ajuste del modelo.

plot(modelo_aroma$fitted.values, residuos_aroma,
     main = "Residuos frente a valores ajustados del aroma",
     xlab = "Valores ajustados",
     ylab = "Residuos",
     pch = 20)
abline(h = 0, lty = 2)

Gráficos de diagnóstico del modelo

Los gráficos de diagnóstico reúnen distintas representaciones que ayudan a examinar el comportamiento de los residuos, posibles observaciones influyentes y la adecuación general del modelo.

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

par(mfrow = c(1, 1))

Resumen de residuos por tratamiento

data2_aroma <- data.frame(cafe_aroma, residuos_aroma)
data2_aroma
cafe_aroma residuos_aroma
Café Tostao -0.6666667
Café Tostao 0.3333333
Café Tostao -0.6666667
Café Tostao 0.3333333
Café Tostao 1.3333333
Café Tostao -0.6666667
Café Viejo Molino -0.1666667
Café Viejo Molino 0.8333333
Café Viejo Molino -0.1666667
Café Viejo Molino -1.1666667
Café Viejo Molino 0.8333333
Café Viejo Molino -0.1666667
Café Colcafé 0.0000000
Café Colcafé -1.0000000
Café Colcafé 1.0000000
Café Colcafé 0.0000000
Café Colcafé -1.0000000
Café Colcafé 1.0000000

Comprobación de la igualdad de varianzas para el aroma

La homogeneidad de varianzas supone que la variabilidad de las calificaciones es comparable entre los tratamientos. Para examinar este supuesto se analizan los residuos absolutos y se aplica la prueba de Levene.

mod1_aroma <- lm(abs(residuos_aroma) ~ cafe_aroma)
anv1_aroma <- aov(mod1_aroma)

summary(anv1_aroma)
##             Df Sum Sq Mean Sq F value Pr(>F)
## cafe_aroma   2 0.0494 0.02469   0.124  0.884
## Residuals   15 2.9815 0.19877
leveneTest(residuos_aroma ~ cafe_aroma,
           center = mean,
           data = data2_aroma)
Df F value Pr(>F)
group 2 0.1242236 0.8840815
15 NA NA

Prueba de normalidad de Shapiro-Wilk para el aroma

La prueba de Shapiro-Wilk permite evaluar si los residuos se apartan significativamente de una distribución normal. Un valor p superior a 0.05 indica que no se encuentra evidencia estadística suficiente para rechazar la hipótesis de normalidad.

shapiro.test(residuos_aroma)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos_aroma
## W = 0.94337, p-value = 0.3305

Evaluación complementaria de Kolmogorov-Smirnov para el aroma

Como complemento, se presenta la prueba de Kolmogorov-Smirnov para comparar la distribución empírica de los residuos con una distribución normal cuyos parámetros se estiman a partir de los mismos datos. Esta salida se conserva como referencia del ejercicio; debido a la estimación de los parámetros y a la presencia de valores repetidos, no debe considerarse una prueba formal de normalidad.

ks.test(residuos_aroma, "pnorm",
        mean = mean(residuos_aroma),
        sd = sd(residuos_aroma))
## Warning in ks.test.default(residuos_aroma, "pnorm", mean =
## mean(residuos_aroma), : ties should not be present for the one-sample
## Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  residuos_aroma
## D = 0.13901, p-value = 0.8775
## alternative hypothesis: two-sided

Análisis de las puntuaciones del sabor

Organización de la matriz experimental del sabor

Se organizan las seis calificaciones del sabor registradas para cada marca de café. Al igual que en el análisis anterior, se calculan la suma y el promedio de las puntuaciones para facilitar la comparación entre tratamientos.

Tratamientos_sabor <- c("Café Tostao",
                        "Café Viejo Molino",
                        "Café Colcafé")

r1_sabor <- c(9, 7, 10)
r2_sabor <- c(8, 6, 9)
r3_sabor <- c(9, 8, 9)
r4_sabor <- c(8, 7, 10)
r5_sabor <- c(10, 7, 8)
r6_sabor <- c(9, 8, 9)

replicas_sabor <- cbind(r1_sabor, r2_sabor, r3_sabor,
                        r4_sabor, r5_sabor, r6_sabor)

Total_sabor <- rowSums(replicas_sabor)
medias_sabor <- Total_sabor / 6

Tabla_sabor <- data.frame(Tratamientos_sabor,
                          replicas_sabor,
                          Total_sabor,
                          medias_sabor)

names(Tabla_sabor) <- c("Tratamientos", "Réplica 1", "Réplica 2",
                        "Réplica 3", "Réplica 4", "Réplica 5",
                        "Réplica 6", "Total", "Media")

Tabla_sabor
Tratamientos Réplica 1 Réplica 2 Réplica 3 Réplica 4 Réplica 5 Réplica 6 Total Media
Café Tostao 9 8 9 8 10 9 53 8.833333
Café Viejo Molino 7 6 8 7 7 8 43 7.166667
Café Colcafé 10 9 9 10 8 9 55 9.166667

Preparación de los registros para el análisis del sabor

Las calificaciones se organizan en una variable de respuesta y otra variable categórica que identifica la marca de café correspondiente a cada observación.

cafe_sabor <- factor(rep(c("Café Tostao",
                           "Café Viejo Molino",
                           "Café Colcafé"), each = 6))

y_sabor <- c(9, 8, 9, 8, 10, 9,
             7, 6, 8, 7, 7, 8,
             10, 9, 9, 10, 8, 9)

DATA_sabor <- data.frame(cafe_sabor, y_sabor)

DATA_sabor
cafe_sabor y_sabor
Café Tostao 9
Café Tostao 8
Café Tostao 9
Café Tostao 8
Café Tostao 10
Café Tostao 9
Café Viejo Molino 7
Café Viejo Molino 6
Café Viejo Molino 8
Café Viejo Molino 7
Café Viejo Molino 7
Café Viejo Molino 8
Café Colcafé 10
Café Colcafé 9
Café Colcafé 9
Café Colcafé 10
Café Colcafé 8
Café Colcafé 9

Representación de la distribución de las calificaciones del sabor

El diagrama de cajas permite observar la distribución de las puntuaciones de cada marca, comparar sus medianas y reconocer la dispersión de los datos registrados para el sabor.

boxplot(y_sabor ~ cafe_sabor,
        col = "green",
        main = "Comparación de las calificaciones del sabor",
        xlab = "Marcas de café",
        ylab = "Calificación del sabor",
        ylim = c(1, 10))

Análisis de varianza (ANOVA) para el sabor

Se aplica un análisis de varianza para determinar si existen diferencias estadísticamente significativas entre las calificaciones promedio del sabor de las tres marcas de café.

modelo_sabor <- lm(y_sabor ~ cafe_sabor)
anova_sabor <- aov(modelo_sabor)

summary(modelo_sabor)
## 
## Call:
## lm(formula = y_sabor ~ cafe_sabor)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.1667 -0.1667 -0.1667  0.6667  1.1667 
## 
## Coefficients:
##                             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                   9.1667     0.3073  29.828 9.05e-15 ***
## cafe_saborCafé Tostao        -0.3333     0.4346  -0.767 0.455005    
## cafe_saborCafé Viejo Molino  -2.0000     0.4346  -4.602 0.000346 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7528 on 15 degrees of freedom
## Multiple R-squared:  0.6185, Adjusted R-squared:  0.5676 
## F-statistic: 12.16 on 2 and 15 DF,  p-value: 0.0007271
summary(anova_sabor)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## cafe_sabor   2  13.78   6.889   12.16 0.000727 ***
## Residuals   15   8.50   0.567                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Comparación de medias mediante LSD de Fisher para el sabor

La prueba LSD permite contrastar los promedios de los tratamientos y formar grupos de marcas que presentan o no diferencias significativas.

LSD.test(modelo_sabor, "cafe_sabor",
         group = TRUE,
         console = TRUE,
         main = "Comparación LSD de las calificaciones del sabor")
## 
## Study: Comparación LSD de las calificaciones del sabor
## 
## LSD t Test for y_sabor 
## 
## Mean Square Error:  0.5666667 
## 
## cafe_sabor,  means and individual ( 95 %) CI
## 
##                    y_sabor       std r        se      LCL      UCL Min Max  Q25
## Café Colcafé      9.166667 0.7527727 6 0.3073181 8.511634 9.821700   8  10 9.00
## Café Tostao       8.833333 0.7527727 6 0.3073181 8.178300 9.488366   8  10 8.25
## Café Viejo Molino 7.166667 0.7527727 6 0.3073181 6.511634 7.821700   6   8 7.00
##                   Q50  Q75
## Café Colcafé        9 9.75
## Café Tostao         9 9.00
## Café Viejo Molino   7 7.75
## 
## Alpha: 0.05 ; DF Error: 15
## Critical Value of t: 2.13145 
## 
## least Significant Difference: 0.9263567 
## 
## Treatments with the same letter are not significantly different.
## 
##                    y_sabor groups
## Café Colcafé      9.166667      a
## Café Tostao       8.833333      a
## Café Viejo Molino 7.166667      b

Comparaciones múltiples mediante Tukey para el sabor

La prueba de Tukey compara los tratamientos por pares y ajusta las comparaciones para controlar el error asociado al análisis múltiple. Se utiliza un nivel de confianza del 95 %.

tukey_sabor <- TukeyHSD(anova_sabor, "cafe_sabor",
                        conf.level = 0.95)

plot(tukey_sabor)

tukey_sabor
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = modelo_sabor)
## 
## $cafe_sabor
##                                      diff       lwr        upr     p adj
## Café Tostao-Café Colcafé       -0.3333333 -1.462229  0.7955623 0.7282733
## Café Viejo Molino-Café Colcafé -2.0000000 -3.128896 -0.8711044 0.0009486
## Café Viejo Molino-Café Tostao  -1.6666667 -2.795562 -0.5377711 0.0043512

Agrupación de las marcas mediante Duncan para el sabor

El procedimiento de Duncan permite ordenar los tratamientos de acuerdo con sus medias y establecer grupos estadísticos. Las marcas que comparten una misma letra no presentan diferencias significativas bajo el nivel de significancia utilizado.

duncan.test(modelo_sabor, "cafe_sabor",
            group = TRUE,
            console = TRUE,
            main = "Agrupación de las marcas según el sabor")
## 
## Study: Agrupación de las marcas según el sabor
## 
## Duncan's new multiple range test
## for y_sabor 
## 
## Mean Square Error:  0.5666667 
## 
## cafe_sabor,  means
## 
##                    y_sabor       std r        se Min Max  Q25 Q50  Q75
## Café Colcafé      9.166667 0.7527727 6 0.3073181   8  10 9.00   9 9.75
## Café Tostao       8.833333 0.7527727 6 0.3073181   8  10 8.25   9 9.00
## Café Viejo Molino 7.166667 0.7527727 6 0.3073181   6   8 7.00   7 7.75
## 
## Alpha: 0.05 ; DF Error: 15 
## 
## Critical Range
##         2         3 
## 0.9263567 0.9710719 
## 
## Means with the same letter are not significantly different.
## 
##                    y_sabor groups
## Café Colcafé      9.166667      a
## Café Tostao       8.833333      a
## Café Viejo Molino 7.166667      b

Verificación de los supuestos del modelo para el sabor

Los residuos representan las diferencias entre las calificaciones observadas y los valores estimados por el modelo. Su revisión permite examinar el cumplimiento de los supuestos necesarios para interpretar el análisis de varianza.

Cálculo e inspección de los residuos

residuos_sabor <- residuals(modelo_sabor)

residuos_sabor
##          1          2          3          4          5          6          7 
##  0.1666667 -0.8333333  0.1666667 -0.8333333  1.1666667  0.1666667 -0.1666667 
##          8          9         10         11         12         13         14 
## -1.1666667  0.8333333 -0.1666667 -0.1666667  0.8333333  0.8333333 -0.1666667 
##         15         16         17         18 
## -0.1666667  0.8333333 -1.1666667 -0.1666667
sort(residuos_sabor)
##          8         17          2          4          7         10         11 
## -1.1666667 -1.1666667 -0.8333333 -0.8333333 -0.1666667 -0.1666667 -0.1666667 
##         14         15         18          3          6          1          9 
## -0.1666667 -0.1666667 -0.1666667  0.1666667  0.1666667  0.1666667  0.8333333 
##         12         13         16          5 
##  0.8333333  0.8333333  0.8333333  1.1666667

Inspección gráfica de normalidad

qqnorm(residuos_sabor,
       main = "Gráfico Q-Q de los residuos del sabor")
qqline(residuos_sabor)

qqPlot(residuos_sabor, pch = 10)

## [1]  8 17

Relación entre residuos y valores estimados

plot(modelo_sabor$fitted.values, residuos_sabor,
     main = "Residuos frente a valores ajustados del sabor",
     xlab = "Valores ajustados",
     ylab = "Residuos",
     pch = 20)
abline(h = 0, lty = 2)

Gráficos de diagnóstico del modelo

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

par(mfrow = c(1, 1))

Resumen de residuos por tratamiento

data2_sabor <- data.frame(cafe_sabor, residuos_sabor)
data2_sabor
cafe_sabor residuos_sabor
Café Tostao 0.1666667
Café Tostao -0.8333333
Café Tostao 0.1666667
Café Tostao -0.8333333
Café Tostao 1.1666667
Café Tostao 0.1666667
Café Viejo Molino -0.1666667
Café Viejo Molino -1.1666667
Café Viejo Molino 0.8333333
Café Viejo Molino -0.1666667
Café Viejo Molino -0.1666667
Café Viejo Molino 0.8333333
Café Colcafé 0.8333333
Café Colcafé -0.1666667
Café Colcafé -0.1666667
Café Colcafé 0.8333333
Café Colcafé -1.1666667
Café Colcafé -0.1666667

Comprobación de la igualdad de varianzas para el sabor

mod1_sabor <- lm(abs(residuos_sabor) ~ cafe_sabor)
anv1_sabor <- aov(mod1_sabor)

summary(anv1_sabor)
##             Df Sum Sq Mean Sq F value Pr(>F)
## cafe_sabor   2  0.000  0.0000       0      1
## Residuals   15  2.944  0.1963
leveneTest(residuos_sabor ~ cafe_sabor,
           center = mean,
           data = data2_sabor)
Df F value Pr(>F)
group 2 0 1
15 NA NA

Prueba de normalidad de Shapiro-Wilk para el sabor

shapiro.test(residuos_sabor)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos_sabor
## W = 0.92015, p-value = 0.1301

Evaluación complementaria de Kolmogorov-Smirnov para el sabor

Como complemento, se presenta la prueba de Kolmogorov-Smirnov para comparar la distribución empírica de los residuos con una distribución normal cuyos parámetros se estiman a partir de los mismos datos. Esta salida se conserva como referencia del ejercicio; debido a la estimación de los parámetros y a la presencia de valores repetidos, no debe considerarse una prueba formal de normalidad.

ks.test(residuos_sabor, "pnorm",
        mean = mean(residuos_sabor),
        sd = sd(residuos_sabor))
## Warning in ks.test.default(residuos_sabor, "pnorm", mean =
## mean(residuos_sabor), : ties should not be present for the one-sample
## Kolmogorov-Smirnov test
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  residuos_sabor
## D = 0.18461, p-value = 0.5716
## alternative hypothesis: two-sided

Interpretación conjunta de los resultados

Los análisis de aroma y sabor se realizan por separado, debido a que corresponden a dos características sensoriales distintas. En ambos casos, el análisis de varianza permite evaluar si las calificaciones promedio de las tres marcas presentan diferencias estadísticamente significativas.

Para el aroma, las medias obtenidas son 8.67 para Café Tostao, 7.17 para Café Viejo Molino y 9.00 para Café Colcafé. El ANOVA evidencia diferencias significativas entre las marcas (F = 8.443; p = 0.0035). La comparación de Tukey indica que Café Viejo Molino presenta una calificación significativamente menor que Café Tostao y Café Colcafé, mientras que entre estas dos últimas marcas no se identifica una diferencia significativa.

Para el sabor, las medias son 8.83 para Café Tostao, 7.17 para Café Viejo Molino y 9.17 para Café Colcafé. El ANOVA también evidencia diferencias significativas entre las marcas (F = 12.157; p = 0.0007). De acuerdo con la prueba de Tukey, Café Viejo Molino presenta una calificación significativamente menor que Café Tostao y Café Colcafé, mientras que no se encuentra una diferencia significativa entre Café Tostao y Café Colcafé.

En las verificaciones de normalidad, las pruebas de Shapiro-Wilk no muestran evidencia estadística suficiente para rechazar la normalidad de los residuos, tanto para aroma como para sabor. La evaluación de homogeneidad de varianzas debe interpretarse junto con los gráficos de diagnóstico y los resultados de las pruebas correspondientes.

En conjunto, los resultados muestran que Café Colcafé obtiene el promedio más alto en ambas características sensoriales, seguido de Café Tostao. Café Viejo Molino presenta los promedios más bajos tanto en aroma como en sabor. Estas conclusiones corresponden a las calificaciones registradas en este ejercicio y no deben generalizarse más allá de las condiciones de la evaluación realizada.