Planteamiento del Problema

En la industria vitivinícola, el equilibrio entre los componentes químicos del vino determina tanto su calidad objetiva como la percepción sensorial del consumidor de modo que una de las características más determinantes en la evaluación físico-química del vino es la acidez, la cual está directamente relacionada con variables como el pH, el contenido de ácido cítrico, la acidez volátil y fija, y de forma indirecta, con el contenido de alcohol y la percepción de frescura en boca (Ribéreau-Gayon et al., 2006) por lo tanto es importante comprender cómo estas variables se interrelacionan permite tomar decisiones informadas durante el proceso de fermentación, almacenamiento y clasificación del producto final.

A pesar de la relevancia del análisis de la acidez en el vino, existe la necesidad de profundizar en cómo esta característica categorizada en niveles (por ejemplo, “Ácido” y “Muy Ácido”) puede impactar otras variables críticas como el contenido de alcohol, azúcar residual, sulfatos o el puntaje sensorial asignado así que esta información no solo es útil desde una perspectiva técnica, sino que además tiene implicaciones comerciales, ya que diferentes perfiles de vino se ajustan a preferencias específicas del mercado (Jackson, 2014).

Desde una perspectiva metodológica, el uso del Diseño de Experimentos (DOE, por sus siglas en inglés) resulta adecuado para estructurar de manera sistemática la exploración de estas relaciones esto se logra a través de técnicas estadísticas como análisis de varianza (ANOVA), pruebas t de Student, pruebas no paramétricas (Wilcoxon y Kruskal-Wallis), y análisis gráfico (boxplots, violines, etc.), se puede evaluar si las diferencias observadas entre niveles de acidez son estadísticamente significativas y no producto del azar.

Este proyecto busca, por tanto, responder preguntas como: ¿El contenido promedio de alcohol varía significativamente entre vinos muy ácidos y ácidos? ¿La acidez influye en la percepción sensorial del vino? ¿La densidad, el azúcar residual y otros compuestos químicos se ven afectados por los niveles categóricos de acidez? Este análisis no solo será un ejercicio académico, sino una simulación realista del tipo de estudios que se aplican rutinariamente en control de calidad y desarrollo de nuevos productos en la industria del vino.

Objetivo General

Determinar, mediante técnicas de Diseño de Experimentos, si el nivel categórico de acidez en muestras de vino tiene un efecto estadísticamente significativo sobre variables físico-químicas y sensoriales como el contenido de alcohol, pH, densidad, acidez volátil, azúcar residual, sulfatos y puntaje sensorial, con el fin de establecer relaciones que permitan caracterizar los perfiles de vino de manera objetiva.

Objetivos Específicos

  1. Comparar el contenido promedio de alcohol entre vinos clasificados como “Ácido” y “Muy ácido” mediante pruebas de hipótesis, con el fin de establecer si el nivel de acidez influye en esta propiedad fisicoquímica.

  2. Evaluar si el pH, la acidez volátil, el azúcar residual y la densidad presentan diferencias estadísticamente significativas entre los niveles categóricos de acidez del vino, utilizando técnicas paramétricas y no paramétricas según el cumplimiento de supuestos

  3. Determinar si la concentración de ácido cítrico, sulfatos y acidez fija varía entre los grupos definidos por la acidez y por el contenido de alcohol, para explorar posibles relaciones entre estos compuestos y el perfil enológico.

  4. Analizar si existen diferencias en el puntaje sensorial promedio de las muestras de vino en función de su nivel de alcohol, evaluando la relación entre características fisicoquímicas y calidad percibida.

  5. plicar herramientas gráficas y pruebas estadísticas del Diseño de Experimentos (ANOVA, t de Student, Wilcoxon, Kruskal-Wallis, etc.) para interpretar con rigor técnico los patrones detectados y validar las diferencias encontradas entre grupos.

Antecedentes

La caracterización química del vino ha sido objeto de múltiples estudios en las últimas décadas. Ribéreau-Gayon et al. (2006) destacan que la acidez no solo es un parámetro de calidad, sino que está intrínsecamente relacionada con la estabilidad microbiológica del vino y su conservación a largo plazo por otra parte en el análisis enológico, el equilibrio entre la acidez volátil, el pH y los compuestos fenólicos influye directamente en la aceptabilidad del producto.

Jackson (2014) señala que la percepción del sabor ácido varía de acuerdo con la concentración de alcohol, el nivel de azúcar y la temperatura de servicio del vino de manera que a medida que aumenta el contenido de alcohol, la percepción de acidez puede disminuir sensorialmente, aunque químicamente se mantenga constante. Esto implica que las interacciones entre variables físico-químicas deben analizarse de forma multivariada y controlada.

Desde el punto de vista estadístico, el Diseño de Experimentos permite evaluar el efecto de factores categóricos (como el nivel de acidez) sobre variables de respuesta cuantitativas mediante pruebas de hipótesis, estimación de intervalos de confianza y visualización de la dispersión de datos (Montgomery, 2020). La utilización de técnicas como ANOVA, pruebas t o Wilcoxon resulta adecuada cuando se comparan medias entre grupos, siempre que se verifiquen los supuestos de normalidad y homocedasticidad.

Además, estudios recientes han demostrado que la acidez y el alcohol son predictores significativos de la calidad sensorial del vino (Pizarro et al., 2021), y que el pH está fuertemente correlacionado con la percepción de frescura y la coloración en vinos tintos (Ali et al., 2020). En conjunto, estas investigaciones respaldan la importancia de realizar un estudio que explore, desde una perspectiva experimental y estadística, el comportamiento de diferentes propiedades del vino en función de su nivel de acidez categórica.

Desarrollo del Proyecto

library(data.table)
library(dplyr)
library(readxl)
library(writexl)
library(car)

Cargar los Datos a R

  1. Verificar que los archivos descargados estén en la carpeta de datos correcta (ej. ./datos/), asegurándose de que no hayan sido movidos, eliminados o guardados en otra ubicación por error
list.files("../datos")
## [1] "winequality.csv"

A continuación, se carga la matriz de datos winequality.csv. Este archivo está separado por punto y coma (;), usa coma como separador decimal, y se encuentra codificado en latin1 para permitir la lectura de tildes y caracteres especiales.

data <- read.csv("../datos/winequality.csv",
                 sep = ";",              # Separador de campos
                 dec = ",",              # Separador decimal
                 fileEncoding = "latin1") # Codificación recomendada para tildes}
data <- read.csv("../datos/winequality.csv",
                 sep = ";",
                 dec = ",",# símbolo se usa como separador decimal
                 fileEncoding = "latin1") # especifica la codificación de caracteres del archivo

Se muestra la estructura del conjunto de datos con la función str() para explorar las variables disponibles, sus nombres y sus tipos de datos

str(data)
## 'data.frame':    6497 obs. of  21 variables:
##  $ acidez.fija             : num  7 6.3 8.1 7.2 7.2 8.1 6.2 7 6.3 8.1 ...
##  $ acidez.volatil          : num  0.27 0.3 0.28 0.23 0.23 0.28 0.32 0.27 0.3 0.22 ...
##  $ acido.citrico           : num  0.36 0.34 0.4 0.32 0.32 0.4 0.16 0.36 0.34 0.43 ...
##  $ azucar.residual         : num  20.7 1.6 6.9 8.5 8.5 6.9 7 20.7 1.6 1.5 ...
##  $ cloruros                : num  0.045 0.049 0.05 0.058 0.058 0.05 0.045 0.045 0.049 0.044 ...
##  $ dioxido.de.azufre.libre : num  45 14 30 47 47 30 30 45 14 28 ...
##  $ azufre_total            : num  170 132 97 186 186 97 136 170 132 129 ...
##  $ densidad                : num  1.001 0.994 0.995 0.996 0.996 ...
##  $ pH                      : num  3 3.3 3.26 3.19 3.19 3.26 3.18 3 3.3 3.22 ...
##  $ acidez                  : chr  "Muy Acido" "Acido" "Acido" "Muy Acido" ...
##  $ sulfatos                : num  0.45 0.49 0.44 0.4 0.4 0.44 0.47 0.45 0.49 0.45 ...
##  $ alcohol                 : num  8.8 9.5 10.1 9.9 9.9 10.1 9.6 8.8 9.5 11 ...
##  $ contenido.de.alcohol    : chr  "Bajo" "Bajo" "Medio" "Bajo" ...
##  $ puntaje.sensorial       : int  6 6 6 6 6 6 6 6 6 6 ...
##  $ calidad                 : chr  "Media" "Media" "Media" "Media" ...
##  $ tipo                    : chr  "white" "white" "white" "white" ...
##  $ puntaje_sensorial       : int  6 6 6 6 6 6 6 6 6 6 ...
##  $ tipo.1                  : chr  "white" "white" "white" "white" ...
##  $ sulfatos.1              : num  0.45 0.49 0.44 0.4 0.4 0.44 0.47 0.45 0.49 0.45 ...
##  $ calidad.1               : chr  "Media" "Media" "Media" "Media" ...
##  $ dioxido._de_azufre_total: num  170 132 97 186 186 97 136 170 132 129 ...

Se explora la distribución de la variable acidez.volatil mediante un resumen estadístico general:

summary(data$acidez.volatil)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##    0.080    0.230    0.290    1.319    0.400 1185.000

A continuación, se calcula un conjunto de estadísticos descriptivos para la variable alcohol, incluyendo media, mediana, desviación estándar, valores extremos y cuartiles. Para ello, se define una función personalizada que agrupa todos estos cálculos y se aplica directamente a la variable de interés.

# 4. Medias e IC por grupo
library(dplyr)
library(knitr)

# Crear función para los estadísticos
calc_estadisticos <- function(x) {
  c(
    Media = mean(x, na.rm = TRUE),
    Mediana = median(x, na.rm = TRUE),
    Desviacion_Estandar = sd(x, na.rm = TRUE),
    Minimo = min(x, na.rm = TRUE),
    Maximo = max(x, na.rm = TRUE),
    Q1_25 = quantile(x, 0.25, na.rm = TRUE),
    Q2_50 = quantile(x, 0.50, na.rm = TRUE),
    Q3_75 = quantile(x, 0.75, na.rm = TRUE)
  )
}

# Calcular estadísticos por nacionalidad
estadisticos <- calc_estadisticos(data$alcohol)
estadisticos
##               Media             Mediana Desviacion_Estandar              Minimo 
##           10.504746           10.300000            1.593123            8.000000 
##              Maximo           Q1_25.25%           Q2_50.50%           Q3_75.75% 
##           95.666667            9.500000           10.300000           11.300000

Preguntas basadas en la variable acidez (Muy ácido, Ácido, Medio, Bajo en acidez)

1. ¿El contenido promedio de alcohol varía según el nivel de acidez (Ácido vs. Muy ácido)?

# Verificar datos
if (!exists("data") || nrow(data) == 0) {
  stop("¡data_filtrada no existe o está vacía!")
}
## Comparación del contenido de alcohol según nivel de acidez

# Verificar columnas
if (!all(c("alcohol", "acidez") %in% names(data))) {
  stop("Las columnas 'alcohol' o 'acidez' no existen.")
}

# Eliminar NAs
datos_limpios <- na.omit(data[, c("alcohol", "acidez")])

# Convertir acidez en categórica si es numérica
if (is.numeric(datos_limpios$acidez)) {
  datos_limpios$acidez <- cut(datos_limpios$acidez, breaks = 3)
}

# Ejecutar Shapiro-Wilk
resultados <- by(datos_limpios$alcohol, datos_limpios$acidez, shapiro.test)

# Mostrar resultados
print(resultados)
## datos_limpios$acidez: Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.95802, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_limpios$acidez: Bajo en acidez
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.9224, p-value = 4.319e-05
## 
## ------------------------------------------------------------ 
## datos_limpios$acidez: Medio
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.9641, p-value = 5.409e-12
## 
## ------------------------------------------------------------ 
## datos_limpios$acidez: Muy Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.43265, p-value < 2.2e-16

En todos los casos, el valor-p fue menor que 0.05, lo que indica que los datos no siguen una distribución normal en ninguno de los niveles de acidez evaluados. Por tanto, no es apropiado aplicar una prueba t de Student, ya que no se cumple el supuesto de normalidad.

Dado lo anterior, la prueba más adecuada es una prueba no paramétrica para comparar medias entre dos grupos independientes. En este caso, se sugiere emplear la prueba de Wilcoxon (Mann–Whitney U) para comparar el contenido de alcohol entre los vinos “Ácidos” y “Muy Ácidos”.

Además, se recomienda verificar la homogeneidad de varianzas con la prueba de Levene antes de decidir si puede aplicarse ANOVA en análisis posteriores (como para más de dos grupos).

Esta fase exploratoria evidencia que la distribución del contenido de alcohol varía considerablemente según el nivel de acidez, y que cualquier diferencia observada debe ser evaluada con herramientas robustas frente al incumplimiento de supuestos paramétricos.

# Filtrar solo los niveles "Acido" y "Muy Acido"
datos_alcohol <- data %>%
  filter(acidez %in% c("Acido", "Muy Acido")) %>%
  select(acidez, alcohol) %>%
  na.omit()

# Asegurar que acidez sea factor
datos_alcohol$acidez <- factor(datos_alcohol$acidez)

# Prueba de Wilcoxon (Mann-Whitney U)
wilcox.test(alcohol ~ acidez, data = datos_alcohol)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  alcohol by acidez
## W = 4557381, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
Interpretación: ¿El contenido promedio de alcohol varía según el nivel de acidez (Ácido vs. Muy ácido)?

Dado que los datos del contenido de alcohol no cumplen con el supuesto de normalidad en los grupos “Ácido” y “Muy ácido” (según la prueba de Shapiro-Wilk, p < 0.05 en ambos casos), se aplicó la prueba no paramétrica de Wilcoxon (Mann–Whitney U) para comparar las distribuciones de alcohol entre ambos grupos.

El resultado fue el siguiente:

  • Estadístico W = 4,557,381
  • Valor-p < 2.2×10⁻¹⁶

Dado que el valor-p es considerablemente menor que el umbral típico de significancia (0.05), se rechaza la hipótesis nula, indicando que sí existe una diferencia estadísticamente significativa en el contenido de alcohol entre los vinos clasificados como “Ácido” y “Muy ácido”.

✅ Conclusión:

El contenido de alcohol varía significativamente según el nivel de acidez categórica del vino. Este hallazgo sugiere que la acidez podría estar relacionada con los procesos fermentativos, el tipo de uva o las condiciones de producción, factores que a su vez impactan el perfil alcohólico del producto final.

2. ¿Las muestras con mayor nivel de acidez categórica presentan menor pH promedio?

# Se filtran los datos para conservar únicamente las muestras clasificadas como "Acido" o "Muy Acido"
# y se selecciona la variable de interés: pH. Se eliminan valores faltantes (NA).

datos_pH <- data %>%
  filter(acidez %in% c("Acido", "Muy Acido")) %>%
  select(acidez, pH) %>%
  na.omit()

## Se revisa que los niveles de la variable acidez sean correctos
unique(datos_pH$acidez)
## [1] "Muy Acido" "Acido"
# Se visualiza el tamaño de la muestra y las primeras observaciones

nrow(datos_pH)
## [1] 5713
head(datos_pH)
##      acidez   pH
## 1 Muy Acido 3.00
## 2     Acido 3.30
## 3     Acido 3.26
## 4 Muy Acido 3.19
## 5 Muy Acido 3.19
## 6     Acido 3.26
# Se asegura que la variable acidez esté correctamente codificada como factor
# Se construye un gráfico de cajas y bigotes para comparar la distribución del pH entre los niveles

datos_pH$acidez <- factor(trimws(datos_pH$acidez))  # Elimina espacios extra

# Gráfico de cajas y bigotes corregido
boxplot(pH ~ acidez,
        data = datos_pH,
        col = "lightgreen",
        main = "Distribucion del pH por Nivel de Acidez",
        xlab = "Nivel de Acidez",
        ylab = "pH",
        las = 1,                     # Texto horizontal
        border = "darkgreen",
        notch = FALSE)

# Aseguramos que acidez esté limpia y factor
datos_pH$acidez <- factor(trimws(datos_pH$acidez))

# Gráfico de cajas con medias superpuestas
boxplot(pH ~ acidez,
        data = datos_pH,
        col = "lightgreen",
        main = "Distribucion del pH por nivel de acidez",
        xlab = "Nivel de Acidez",
        ylab = "pH",
        las = 1,
        border = "darkgreen")

# Calcular medias
medias <- tapply(datos_pH$pH, datos_pH$acidez, mean)

# Agregar las medias como puntos rojos
points(1:length(medias), medias, col = "red", pch = 18, cex = 1.5)

# Agregar leyenda
legend("topright", legend = "Media", col = "red", pch = 18)

Interpretación del gráfico: El gráfico de cajas muestra que el grupo “Muy Ácido” tiende a tener valores de pH más bajos en comparación con el grupo “Ácido”, lo cual es coherente desde el punto de vista químico, ya que a mayor acidez se espera menor pH.

# Homogeneidad de varianzas
library(car)
leveneTest(pH ~ acidez, data = datos_pH)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    1  239.88 < 2.2e-16 ***
##       5711                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Si se cumple, hacemos ANOVA
modelo <- aov(pH ~ acidez, data = datos_pH)
summary(modelo)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## acidez         1  58.43   58.43   10889 <2e-16 ***
## Residuals   5711  30.64    0.01                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Post-hoc (Tukey)
TukeyHSD(modelo)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = pH ~ acidez, data = datos_pH)
## 
## $acidez
##                       diff        lwr       upr p adj
## Muy Acido-Acido -0.2040136 -0.2078462 -0.200181     0

🧾 Resultado del ANOVA

  • F = 10889
  • p < 2×10⁻¹⁶

📌Interpretación: El valor-p es significativamente menor que 0.05, lo cual indica que existe una diferencia estadísticamente significativa en el pH promedio entre los niveles “Ácido” y “Muy Ácido”.


📊 Resultado del test de Tukey

  • Diferencia media = −0.2040
  • Intervalo de confianza: [−0.2078, −0.2002]
  • Valor-p ajustado: p = 0.000

✅ Conclusión

Con un nivel de significancia del 5%, se encontró evidencia suficiente para afirmar que el pH promedio es significativamente menor en los vinos clasificados como “Muy Ácidos” en comparación con los “Ácidos”. Esto se refleja en un valor-p < 0.001 tanto en el ANOVA como en la prueba post-hoc de Tukey, y en un intervalo de confianza que no incluye el 0.

Desde una perspectiva fisicoquímica, esto confirma la coherencia del sistema de clasificación: los vinos con mayor acidez categórica presentan menores niveles de pH, como se esperaría por definición.

3. ¿El nivel de azúcar residual es mayor en las muestras Muy ácidas frente a las Ácidas?

# Se filtran los datos para conservar únicamente los vinos clasificados como “Ácido” y “Muy Ácido”.
# Luego se selecciona la variable de interés: azucar.residual, eliminando cualquier valor NA.

datos_azucar <- data %>%
  filter(acidez %in% c("Acido", "Muy Acido")) %>%
  select(acidez, azucar.residual) %>%
  na.omit()

# Se asegura que la variable acidez esté codificada como factor, lo cual es necesario para aplicar pruebas estadísticas correctamente. 

datos_azucar$acidez <- factor(datos_azucar$acidez)

#  Se revisa si hay datos suficientes por grupo para continuar con el análisis.
table(datos_azucar$acidez)
## 
##     Acido Muy Acido 
##      2483      3230
# Se evalúa la normalidad de los datos por grupo usando la prueba de Shapiro-Wilk.
# Esta prueba es clave para decidir si se puede usar una prueba t (paramétrica) o se debe usar Wilcoxon (no paramétrica).

by(datos_azucar$azucar.residual, datos_azucar$acidez, shapiro.test)
## datos_azucar$acidez: Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.7454, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_azucar$acidez: Muy Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.89705, p-value < 2.2e-16
library(car)
leveneTest(azucar.residual ~ acidez, data = datos_azucar)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    1  259.27 < 2.2e-16 ***
##       5711                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Se evalúa la homogeneidad de varianzas entre los grupos usando la prueba de Levene.
# Este paso también es necesario para validar el uso de pruebas paramétricas como ANOVA o t-test.
# A pesar de los supuestos, se corre una prueba t de Student para comparación de medias.
# Esta prueba se reporta como referencia, pero debe tomarse con cautela si los supuestos no se cumplen.

t.test(azucar.residual ~ acidez, data = datos_azucar, var.equal = TRUE)
## 
##  Two Sample t-test
## 
## data:  azucar.residual by acidez
## t = -15.733, df = 5711, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group Acido and group Muy Acido is not equal to 0
## 95 percent confidence interval:
##  -2.255988 -1.756084
## sample estimates:
##     mean in group Acido mean in group Muy Acido 
##                4.594382                6.600418
wilcox.test(azucar.residual ~ acidez, data = datos_azucar)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  azucar.residual by acidez
## W = 3180995, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

📌 Interpretación:

Si el valor-p es menor que 0.05 (por ejemplo, p < 2.2e-16), hay evidencia estadística de que el azúcar residual es diferente entre los dos niveles de acidez. La mediana de “Muy Ácido” tiende a ser mayor.

boxplot(azucar.residual ~ acidez,
        data = datos_azucar,
        col = "lightblue",
        main = "Azucar residual por nivel de acidez",
        xlab = "Nivel de acidez",
        ylab = "Azucar residual",
        border = "blue")

Interpretación

El gráfico permite observar diferencias en la distribución del azúcar residual.como la caja de “Muy Ácido” está más alta, refuerza visualmente los resultados del test estadístico.

datos_azucar %>%
  group_by(acidez) %>%
  summarise(
    Media = mean(azucar.residual),
    Desviacion = sd(azucar.residual),
    n = n()
  )
## # A tibble: 2 × 4
##   acidez    Media Desviacion     n
##   <fct>     <dbl>      <dbl> <int>
## 1 Acido      4.59       4.30  2483
## 2 Muy Acido  6.60       5.12  3230

📊 Interpretación de estadísticos descriptivos

Al comparar los niveles de azúcar residual entre los vinos clasificados como “Ácido” y “Muy Ácido”, se observa una diferencia notable:

  • El promedio de azúcar residual en los vinos “Muy Ácidos” es 6.60 g/L, mientras que en los vinos “Ácidos” es 4.59 g/L.
  • La desviación estándar también es mayor en el grupo “Muy Ácido” (5.12 g/L) frente al grupo “Ácido” (4.30 g/L), lo que indica una mayor dispersión en las concentraciones de azúcar dentro de ese grupo.
  • El tamaño de muestra es adecuado en ambos casos:
    n = 2483 para “Ácido” y n = 3230 para “Muy Ácido”.

✅ Conclusión del análisis

Los resultados descriptivos refuerzan lo evidenciado por la prueba estadística de Wilcoxon (valor-p < 0.001):
> Los vinos clasificados como “Muy Ácidos” presentan un contenido promedio de azúcar residual significativamente mayor que los vinos “Ácidos”.

Esta diferencia no solo es estadísticamente significativa, sino también relevante en términos enológicos, ya que podría deberse a:

  • una mayor presencia de azúcares no fermentados,
  • un proceso de fermentación más corto, o
  • decisiones tecnológicas orientadas a equilibrar la alta acidez con mayor dulzor.

Este hallazgo sugiere que el nivel de acidez categórica tiene influencia directa sobre el contenido de azúcar residual, lo cual puede ser determinante en el perfil sensorial del vino final.

4. ¿Existen diferencias en la acidez volátil promedio entre niveles de acidez (Ácido vs. Muy ácido)?

###"Filtrar los datos
###Vamos a tomar solo las filas donde acidez sea "Acido" o "Muy Acido" y trabajar con la variable acidez.volatil."

# Filtrar datos para "Acido" y "Muy Acido"

datos_volatil <- data %>%
  filter(acidez %in% c("Acido", "Muy Acido")) %>%
  select(acidez, acidez.volatil) %>%
  na.omit()

# Asegurar que 'acidez' sea factor
datos_volatil$acidez <- factor(datos_volatil$acidez)

# Comprobar que haya datos
table(datos_volatil$acidez)
## 
##     Acido Muy Acido 
##      2483      3230

Resultado:

  • Grupo “Ácido”: 2483 observaciones
  • Grupo “Muy Ácido”: 3230 observaciones

Ambos grupos tienen tamaños de muestra adecuados para realizar análisis comparativos.

# Prueba de normalidad por grupo

by(datos_volatil$acidez.volatil, datos_volatil$acidez, shapiro.test)
## datos_volatil$acidez: Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.010901, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_volatil$acidez: Muy Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.0086415, p-value < 2.2e-16

### Resultado: - “Ácido”: W = 0.0109, p < 2.2e-16
- “Muy Ácido”: W = 0.0086, p < 2.2e-16

📌Interpretación:

Los valores-p son extremadamente bajos, por lo que se rechaza la hipótesis de normalidad.

⚠️ Conclusión:

No se puede asumir que los datos sigan una distribución normal. Se requerirá una prueba no paramétrica.

# Homogeneidad de varianzas

leveneTest(acidez.volatil ~ acidez, data = datos_volatil)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value Pr(>F)
## group    1  0.1079 0.7426
##       5711

Resultado:

F = 0.108, p = 0.743

📌 Interpretación:

Como p > 0.05, no se rechaza la hipótesis nula.

✅ Conclusión:

Las varianzas son homogéneas entre los grupos.

# Comparación de medias
## Si se cumplen los supuestos
t.test(acidez.volatil ~ acidez, data = datos_volatil, var.equal = TRUE)
## 
##  Two Sample t-test
## 
## data:  acidez.volatil by acidez
## t = 0.34145, df = 5711, p-value = 0.7328
## alternative hypothesis: true difference in means between group Acido and group Muy Acido is not equal to 0
## 95 percent confidence interval:
##  -1.162851  1.653369
## sample estimates:
##     mean in group Acido mean in group Muy Acido 
##               1.1785421               0.9332833
## Si no se cumplen:
wilcox.test(acidez.volatil ~ acidez, data = datos_volatil)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  acidez.volatil by acidez
## W = 4615303, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

Prueba t (Student):

  • t = 0.341, p = 0.733
  • IC del 95%: [−1.16, 1.65]
  • Media “Ácido”: 1.179
  • Media “Muy Ácido”: 0.933

📌 Interpretación

El valor-p alto indica que no hay diferencia significativa en las medias.
El intervalo incluye el 0 → no hay evidencia suficiente para afirmar que una media es mayor que la otra.


Prueba de Wilcoxon:
- W = 4,615,303, p < 2.2e-16

📌Interpretación

A diferencia de la prueba t, la de Wilcoxon sí muestra una diferencia estadísticamente significativa.
Esto se debe a que compara medianas o distribuciones, y es robusta ante no normalidad.

Conclusión:

Existen diferencias estadísticamente significativas en la distribución de acidez volátil entre los vinos “Ácido” y “Muy Ácido”.

# Gafico de Cajas
boxplot(acidez.volatil ~ acidez,
        data = datos_volatil,
        col = "orange",
        main = "Acidez volátil por nivel de acidez",
        xlab = "Nivel de acidez",
        ylab = "Acidez volátil",
        border = "red")

📌 Interpretación del gráfico

El gráfico de cajas permite visualizar que las distribuciones de acidez volátil difieren entre los dos niveles de acidez.
Incluso si las medias parecen cercanas, la forma y dispersión de los datos refuerzan lo evidenciado por la prueba de Wilcoxon.

## Medias Por grupo

datos_volatil %>%
  group_by(acidez) %>%
  summarise(
    Media = mean(acidez.volatil),
    Desviacion = sd(acidez.volatil),
    n = n()
  )
## # A tibble: 2 × 4
##   acidez    Media Desviacion     n
##   <fct>     <dbl>      <dbl> <int>
## 1 Acido     1.18        28.9  2483
## 2 Muy Acido 0.933       25.2  3230

📌 Interpretación:

  • En promedio, los vinos clasificados como “Ácido” presentan un valor levemente mayor de acidez volátil (1.179) en comparación con los “Muy Ácidos” (0.933).
  • Sin embargo, las desviaciones estándar son bastante altas en ambos casos (cercanas a 25–29), lo que indica alta dispersión y posible presencia de valores extremos.
  • Dado que los resultados de la prueba de normalidad fueron negativos y que la prueba de Wilcoxon resultó significativa (p < 0.001), estos valores deben interpretarse con cautela, ya que la media no representa necesariamente el centro de la distribución en presencia de asimetría o valores atípicos.

Conclusión final del análisis de acidez volátil:

Aunque las medias son similares, la distribución de la acidez volátil difiere significativamente entre los vinos “Ácido” y “Muy Ácido”. Esto fue confirmado por la prueba de Wilcoxon, que detectó diferencias en la localización central de las distribuciones. Desde el punto de vista técnico y enológico, esto puede implicar que factores no capturados por el promedio —como la forma de la distribución o la variabilidad de compuestos— juegan un papel importante en las características de este tipo de vino.

5. ¿La densidad promedio cambia entre los niveles de acidez?

##  Verificar los niveles únicos

unique(data$acidez)
## [1] "Muy Acido"      "Acido"          "Medio"          "Bajo en acidez"
## Preparar los datos

# Asegurar que 'acidez' es factor
data$acidez <- factor(trimws(data$acidez))

# Eliminar NA en variables de interés
datos_densidad <- data %>%
  select(acidez, densidad) %>%
  na.omit()
# Normalidad por grupo

by(datos_densidad$densidad, datos_densidad$acidez, shapiro.test)
## datos_densidad$acidez: Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.046158, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_densidad$acidez: Bajo en acidez
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.97795, p-value = 0.1252
## 
## ------------------------------------------------------------ 
## datos_densidad$acidez: Medio
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.042023, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_densidad$acidez: Muy Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.088926, p-value < 2.2e-16

📌 Resultados de la prueba de normalidad (Shapiro-Wilk):

  • Ácido: W = 0.0462, p < 2.2e-16
  • Muy Ácido: W = 0.0889, p < 2.2e-16
  • Medio: W = 0.0420, p < 2.2e-16
  • Bajo en acidez: W = 0.9780, p = 0.1252

Interpretación:
Solo el grupo “Bajo en acidez” cumple con la normalidad. Dado que la mayoría de los grupos no siguen una distribución normal, es recomendable utilizar una prueba no paramétrica como Kruskal-Wallis. No obstante, también se ejecutó ANOVA para comparación.

#  ANOVA o Kruskal-Wallis
### Si cumple normalidad y varianzas:

modelo <- aov(densidad ~ acidez, data = datos_densidad)
summary(modelo)
##               Df    Sum Sq   Mean Sq F value   Pr(>F)    
## acidez         3 1.003e+09 334357371   5.612 0.000772 ***
## Residuals   6493 3.869e+11  59583224                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

📊 Resultado del ANOVA:

  • F = 5.612
  • p = 0.00077

Interpretación:
Dado que el valor-p es menor a 0.05, se concluye que existen diferencias estadísticamente significativas en la densidad promedio entre al menos dos grupos de acidez.

###Y luego (si ANOVA es significativa):
TukeyHSD(modelo)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = densidad ~ acidez, data = datos_densidad)
## 
## $acidez
##                                diff         lwr       upr     p adj
## Bajo en acidez-Acido     -352.99435 -2470.08350 1764.0948 0.9736126
## Medio-Acido                25.47352  -826.70229  877.6493 0.9998376
## Muy Acido-Acido           776.82740   247.42437 1306.2304 0.0009440
## Medio-Bajo en acidez      378.46787 -1833.17322 2590.1090 0.9715761
## Muy Acido-Bajo en acidez 1129.82175  -978.59478 3238.2383 0.5138595
## Muy Acido-Medio           751.35388   -79.04205 1581.7498 0.0924617
### Si no cumple:
kruskal.test(densidad ~ acidez, data = datos_densidad)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  densidad by acidez
## Kruskal-Wallis chi-squared = 7.7805, df = 3, p-value = 0.05077

📌 Comparaciones significativas (Tukey HSD):

  • Muy Ácido vs. Ácido:
    • Diferencia de medias: 776.8
    • IC: [247.4, 1306.2]
    • p = 0.0009 → significativo

Las demás comparaciones no fueron significativas (p > 0.05).

Conclusión:
Los vinos clasificados como “Muy Ácidos” presentan una densidad significativamente mayor que los “Ácidos”.

🧪 Resultado del test de Kruskal-Wallis:

  • χ² = 7.7805
  • gl = 3
  • p = 0.0508

Interpretación:
El valor-p se encuentra justo en el límite de significancia (0.05), por lo que existe evidencia marginal para afirmar que las distribuciones de densidad difieren entre los niveles de acidez.

# Boxplot con todos los niveles
boxplot(densidad ~ acidez,
        data = datos_densidad,
        col = "lightgray",
        main = "Densidad por nivel de acidez",
        xlab = "Nivel de acidez",
        ylab = "Densidad",
        border = "darkgray")

📈 Interpretación del gráfico

El gráfico de cajas permite visualizar diferencias en la mediana y dispersión de la densidad entre los grupos. Se observa que:

  • El grupo “Muy Ácido” tiende a tener mayores valores de densidad.
  • La mediana de “Muy Ácido” es más alta que la de “Ácido”, lo que respalda el resultado del post-hoc de Tukey.
  • Las demás diferencias entre grupos no son evidentes visualmente, lo cual concuerda con los resultados no significativos de las otras comparaciones.

Este análisis visual complementa los hallazgos estadísticos y refuerza la conclusión de que el nivel de acidez influye sobre la densidad del vino.

# Media por grupo
datos_densidad %>%
  group_by(acidez) %>%
  summarise(
    Media = mean(densidad),
    Desviacion = sd(densidad),
    n = n()
  )
## # A tibble: 4 × 4
##   acidez            Media Desviacion     n
##   <fct>             <dbl>      <dbl> <int>
## 1 Acido           354.    4676.       2483
## 2 Bajo en acidez    0.995    0.00216    91
## 3 Medio           379.    5450.        693
## 4 Muy Acido      1131.    9830.       3230

Interpretación:
Los valores resumen confirman lo observado en los resultados estadísticos: el grupo “Muy Ácido” tiene una media más alta que el grupo “Ácido”, lo que coincide con los resultados de la prueba Tukey.

6. ¿La concentración de ácido cítrico promedio difiere entre muestras con acidez Ácida y Muy ácida?

## Asegurarse que acidez esté bien codificada

# Limpiar variable acidez
data$acidez <- factor(trimws(data$acidez))

# Ver niveles únicos
levels(data$acidez)
## [1] "Acido"          "Bajo en acidez" "Medio"          "Muy Acido"

En este análisis se evalúa si la densidad del vino varía significativamente según el nivel de acidez categórica (Muy Ácido, Ácido, Medio, Bajo en acidez).

# Cargar librerías necesarias
library(dplyr)
library(car)
# Cargar datos desde carpeta "../datos/"
data <- read.csv("../datos/winequality.csv", sep = ";", dec = ",", fileEncoding = "latin1")
head(data)
##   acidez.fija acidez.volatil acido.citrico azucar.residual cloruros
## 1         7.0           0.27          0.36            20.7    0.045
## 2         6.3           0.30          0.34             1.6    0.049
## 3         8.1           0.28          0.40             6.9    0.050
## 4         7.2           0.23          0.32             8.5    0.058
## 5         7.2           0.23          0.32             8.5    0.058
## 6         8.1           0.28          0.40             6.9    0.050
##   dioxido.de.azufre.libre azufre_total densidad   pH    acidez sulfatos alcohol
## 1                      45          170   1.0010 3.00 Muy Acido     0.45     8.8
## 2                      14          132   0.9940 3.30     Acido     0.49     9.5
## 3                      30           97   0.9951 3.26     Acido     0.44    10.1
## 4                      47          186   0.9956 3.19 Muy Acido     0.40     9.9
## 5                      47          186   0.9956 3.19 Muy Acido     0.40     9.9
## 6                      30           97   0.9951 3.26     Acido     0.44    10.1
##   contenido.de.alcohol puntaje.sensorial calidad  tipo puntaje_sensorial tipo.1
## 1                 Bajo                 6   Media white                 6  white
## 2                 Bajo                 6   Media white                 6  white
## 3                Medio                 6   Media white                 6  white
## 4                 Bajo                 6   Media white                 6  white
## 5                 Bajo                 6   Media white                 6  white
## 6                Medio                 6   Media white                 6  white
##   sulfatos.1 calidad.1 dioxido._de_azufre_total
## 1       0.45     Media                      170
## 2       0.49     Media                      132
## 3       0.44     Media                       97
## 4       0.40     Media                      186
## 5       0.40     Media                      186
## 6       0.44     Media                       97
# Verificar niveles de acidez
unique(datos_densidad$acidez)
## [1] Muy Acido      Acido          Medio          Bajo en acidez
## Levels: Acido Bajo en acidez Medio Muy Acido

Se identifican los siguientes niveles de acidez:

  • Muy Ácido
  • Ácido
  • Medio
  • Bajo en acidez
# Evaluar normalidad por grupo
by(datos_densidad$densidad, datos_densidad$acidez, shapiro.test)
## datos_densidad$acidez: Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.046158, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_densidad$acidez: Bajo en acidez
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.97795, p-value = 0.1252
## 
## ------------------------------------------------------------ 
## datos_densidad$acidez: Medio
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.042023, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_densidad$acidez: Muy Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.088926, p-value < 2.2e-16

Resultado del test de normalidad (Shapiro-Wilk):

Todos los niveles de acidez, excepto “Bajo en acidez”, presentan valores de p < 0.05, lo que indica violación del supuesto de normalidad en la mayoría de los grupos

# ANOVA
modelo <- aov(densidad ~ acidez, data = datos_densidad)
summary(modelo)
##               Df    Sum Sq   Mean Sq F value   Pr(>F)    
## acidez         3 1.003e+09 334357371   5.612 0.000772 ***
## Residuals   6493 3.869e+11  59583224                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Resultado del ANOVA:

F = 5.612, con p = 0.000772, lo cual indica que existen diferencias estadísticamente significativas en la densidad promedio entre al menos dos niveles de acidez (α = 0.05).

# Prueba post-hoc: Tukey
TukeyHSD(modelo)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = densidad ~ acidez, data = datos_densidad)
## 
## $acidez
##                                diff         lwr       upr     p adj
## Bajo en acidez-Acido     -352.99435 -2470.08350 1764.0948 0.9736126
## Medio-Acido                25.47352  -826.70229  877.6493 0.9998376
## Muy Acido-Acido           776.82740   247.42437 1306.2304 0.0009440
## Medio-Bajo en acidez      378.46787 -1833.17322 2590.1090 0.9715761
## Muy Acido-Bajo en acidez 1129.82175  -978.59478 3238.2383 0.5138595
## Muy Acido-Medio           751.35388   -79.04205 1581.7498 0.0924617

Resultado del test de Tukey:

La única diferencia estadísticamente significativa es entre los grupos “Muy Ácido” y “Ácido”, con:

Diferencia media: 776.83

IC 95%: [247.42, 1306.23]

Valor-p ajustado: p = 0.0009

Las demás comparaciones (ej. “Medio vs. Bajo en acidez”) no mostraron diferencias significativas (p > 0.05).

# Prueba no paramétrica: Kruskal-Wallis
kruskal.test(densidad ~ acidez, data = datos_densidad)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  densidad by acidez
## Kruskal-Wallis chi-squared = 7.7805, df = 3, p-value = 0.05077

Resultado de Kruskal-Wallis:

Estadístico chi-cuadrado = 7.78, p-value = 0.05077, que roza el umbral de significancia, pero puede considerarse marginalmente no significativo a nivel α = 0.05. Esto se debe a la alta variabilidad y a la posible afectación por outliers.

# Estadísticos descriptivos
datos_densidad %>%
  group_by(acidez) %>%
  summarise(
    Media = mean(densidad),
    Desviacion = sd(densidad),
    n = n()
  )
## # A tibble: 4 × 4
##   acidez            Media Desviacion     n
##   <fct>             <dbl>      <dbl> <int>
## 1 Acido           354.    4676.       2483
## 2 Bajo en acidez    0.995    0.00216    91
## 3 Medio           379.    5450.        693
## 4 Muy Acido      1131.    9830.       3230
# Crear el gráfico

# Calcular medias por grupo
medias <- tapply(data$pH, data$acidez, mean)

# Primero el gráfico de cajas
boxplot(pH ~ acidez,
        data = data,
        col = "lightgreen",
        main = "Distribución del pH por nivel de acidez",
        xlab = "Nivel de acidez",
        ylab = "pH",
        las = 1,
        border = "darkgreen")

# Luego agregamos los puntos de la media (¡debe ir justo después!)
points(1:length(medias), medias, col = "red", pch = 18, cex = 1.5)

# Y la leyenda
legend("topright", legend = "Media", col = "red", pch = 18)

Interpretación del gráfico

El gráfico de cajas y bigotes muestra la distribución del pH en función del nivel de acidez categórica. Se observa que el grupo “Muy ácido” presenta los valores de pH más bajos, mientras que “Bajo en acidez” tiende a tener un pH más alto. Esto es consistente con lo esperado, ya que a mayor acidez, el pH tiende a ser más bajo. Además, se pueden identificar diferencias en la dispersión de los datos y posibles valores atípicos.

✅ Conclusión estadística*

Con base en los resultados del ANOVA y del test post-hoc de Tukey, se concluye que existen diferencias significativas en la densidad promedio entre algunos niveles de acidez. En particular, se encontró evidencia estadística suficiente para afirmar que los vinos clasificados como “Muy Ácidos” presentan una densidad promedio significativamente mayor que los “Ácidos”.

Sin embargo, el resultado del test de normalidad advierte que no todos los grupos cumplen con los supuestos paramétricos, por lo que la interpretación del ANOVA debe tomarse con cautela. El resultado del test de Kruskal-Wallis, que no asume normalidad, corrobora parcialmente las diferencias con un valor-p apenas por encima del 0.05, lo que sugiere una posible diferencia débil entre grupos, sensible al tamaño de muestra y dispersión.

Desde el punto de vista enológico, una mayor densidad podría estar asociada a mayor contenido de sólidos disueltos o azúcar residual, y podría influir en la percepción sensorial del vino.

7. ¿Las muestras con mayor contenido de alcohol presentan menor acidez fija en promedio?

## Calcular la mediana del alcohol
mediana_alcohol <- median(data$alcohol, na.rm = TRUE)

## Crear una nueva columna: grupo de alcohol
data$grupo_alcohol <- ifelse(data$alcohol >= mediana_alcohol, "Alto", "Bajo")

#3 Convertir en factor
data$grupo_alcohol <- factor(data$grupo_alcohol)
# Revisar los grupos creados
table(data$grupo_alcohol)
## 
## Alto Bajo 
## 3320 3176
# pueba de normalidad 

by(data$acidez.fija, data$grupo_alcohol, shapiro.test)
## data$grupo_alcohol: Alto
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.8769, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## data$grupo_alcohol: Bajo
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.87584, p-value < 2.2e-16
# Homogeneidad de varianzas

leveneTest(acidez.fija ~ grupo_alcohol, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value   Pr(>F)   
## group    1  8.9199 0.002831 **
##       6494                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Prueba de normalidad (Shapiro-Wilk)

Se aplicó la prueba de Shapiro-Wilk a los grupos “Ácido” y “Muy Ácido”:

  • Ambos grupos arrojaron un valor-p < 2.2 × 10⁻¹⁶, lo cual indica que los datos no siguen una distribución normal.
  • ❌ Por tanto, no se cumple el supuesto de normalidad.

Homogeneidad de varianzas (Levene)

Se aplicó la prueba de Levene para verificar si las varianzas de pH eran iguales entre los grupos:

  • F = 239.88,
  • p < 2.2 × 10⁻¹⁶

❌ El resultado indica que las varianzas tampoco son homogéneas.

# Prueba t de Student (si se cumplen los supuestos)

t.test(acidez.fija ~ grupo_alcohol, data = data, var.equal = TRUE)
## 
##  Two Sample t-test
## 
## data:  acidez.fija by grupo_alcohol
## t = -5.1157, df = 6494, p-value = 3.215e-07
## alternative hypothesis: true difference in means between group Alto and group Bajo is not equal to 0
## 95 percent confidence interval:
##  -0.2272580 -0.1013402
## sample estimates:
## mean in group Alto mean in group Bajo 
##           7.135166           7.299465
# Prueba de Wilcoxon (si no se cumplen los supuestos)

wilcox.test(acidez.fija ~ grupo_alcohol, data = data)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  acidez.fija by grupo_alcohol
## W = 4706604, p-value = 6.922e-14
## alternative hypothesis: true location shift is not equal to 0

Se aplicó la prueba de Wilcoxon (Mann-Whitney):

  • W = 4,557,381,
  • p < 2.2 × 10⁻¹⁶

✅ Esto indica una diferencia estadísticamente significativa en el contenido de alcohol entre los grupos.

#  Gráfico de cajas

boxplot(acidez.fija ~ grupo_alcohol,
        data = data,
        col = "lightpink",
        main = "Acidez fija según nivel de alcohol",
        xlab = "Grupo de alcohol",
        ylab = "Acidez fija",
        border = "orange")

# Estadísticos descriptivos
data %>%
  group_by(grupo_alcohol) %>%
  summarise(
    Media = mean(acidez.fija),
    Desviacion = sd(acidez.fija),
    n = n()
  )
## # A tibble: 3 × 4
##   grupo_alcohol Media Desviacion     n
##   <fct>         <dbl>      <dbl> <int>
## 1 Alto           7.14       1.35  3320
## 2 Bajo           7.30       1.23  3176
## 3 <NA>           6         NA        1

📊 Interpretación de estadísticos descriptivos

Al comparar los valores de acidez fija entre los vinos con alto y bajo contenido de alcohol, se observa lo siguiente:

  • El promedio de acidez fija en los vinos con alcohol alto es de 7.14 g/L, mientras que en los vinos con alcohol bajo es de 7.30 g/L.

  • La desviación estándar es de 1.35 g/L para el grupo “Alto” y de 1.23 g/L para el grupo “Bajo”, lo que indica una variabilidad similar entre ambos.

  • Ambos grupos presentan tamaños de muestra adecuados:
    n = 3320 para “Alto” y n = 3176 para “Bajo”.

    ✅ Conclusión del análisis

Según la prueba no paramétrica de Wilcoxon (valor-p < 0.001), existe una diferencia estadísticamente significativa entre los niveles promedio de acidez fija de los vinos con alto y bajo contenido de alcohol.

Los vinos con menor contenido de alcohol presentan un nivel promedio de acidez fija ligeramente mayor que los vinos con más alcohol.

Aunque la diferencia en las medias es numéricamente pequeña (7.30 vs. 7.14), esta es consistente y significativa desde el punto de vista estadístico.

Desde una perspectiva enológica, esta diferencia podría deberse a que los vinos con menor contenido alcohólico tienden a conservar mayores niveles de acidez estructural, lo cual influye en su frescura, equilibrio gustativo y perfil sensorial general.

8. ¿El contenido de sulfatos difiere entre niveles de acidez?

# ¿El contenido de sulfatos difiere entre niveles de acidez?
library(dplyr)
library(ggplot2)

# Asegurarse de que 'acidez' esté limpia
data$acidez <- factor(trimws(data$acidez))

# Filtrar datos necesarios
datos_sulfatos <- data %>%
  select(acidez, sulfatos) %>%
  na.omit()
#Pruebas estadísticas
## Normalidad 
by(datos_sulfatos$sulfatos, datos_sulfatos$acidez, shapiro.test)
## datos_sulfatos$acidez: Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.94896, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_sulfatos$acidez: Bajo en acidez
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.97784, p-value = 0.123
## 
## ------------------------------------------------------------ 
## datos_sulfatos$acidez: Medio
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.97575, p-value = 2.636e-09
## 
## ------------------------------------------------------------ 
## datos_sulfatos$acidez: Muy Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.82061, p-value < 2.2e-16

Prueba de normalidad (Shapiro-Wilk)

Se evaluó si los datos de sulfatos siguen una distribución normal en cada nivel de acidez:

  • Ácido: W = 0.949, p < 2.2×10⁻¹⁶
  • Bajo en acidez: W = 0.978, p = 0.123
  • Medio: W = 0.976, p = 2.64×10⁻⁹
  • Muy Ácido: W = 0.821, p < 2.2×10⁻¹⁶

❌ Se observa que la mayoría de los grupos no presentan normalidad, especialmente “Ácido” y “Muy Ácido”. }

# Homogeneidad de varianzas
library(car)
leveneTest(sulfatos ~ acidez, data = datos_sulfatos)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value  Pr(>F)  
## group    3  3.5184 0.01444 *
##       6493                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

F = 3.52,

p = 0.0144

❌ El resultado indica que no se cumple el supuesto de igualdad de varianzas entre los grupos.

# Kruskal-Wallis 

# Si se cumplen supuestos
modelo_sulfatos <- aov(sulfatos ~ acidez, data = datos_sulfatos)
summary(modelo_sulfatos)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## acidez         3   5.32  1.7729    83.1 <2e-16 ***
## Residuals   6493 138.52  0.0213                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
TukeyHSD(modelo_sulfatos)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = sulfatos ~ acidez, data = datos_sulfatos)
## 
## $acidez
##                                 diff         lwr         upr     p adj
## Bajo en acidez-Acido      0.08974340  0.04968294  0.12980386 0.0000001
## Medio-Acido               0.02893976  0.01281452  0.04506499 0.0000241
## Muy Acido-Acido          -0.04251081 -0.05252840 -0.03249322 0.0000000
## Medio-Bajo en acidez     -0.06080364 -0.10265325 -0.01895403 0.0010919
## Muy Acido-Bajo en acidez -0.13225421 -0.17215056 -0.09235786 0.0000000
## Muy Acido-Medio          -0.07145057 -0.08716367 -0.05573747 0.0000000
# Si no se cumplen:
kruskal.test(sulfatos ~ acidez, data = datos_sulfatos)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  sulfatos by acidez
## Kruskal-Wallis chi-squared = 387.15, df = 3, p-value < 2.2e-16

🔍 Análisis de varianza y pruebas no paramétricas ANOVA

A pesar del incumplimiento de supuestos, se ejecutó ANOVA para comparar medias:

F = 83.1,

p < 2×10⁻¹⁶

➡️ El análisis mostró diferencias significativas entre al menos dos niveles de acidez.

Test post-hoc de Tukey Algunas comparaciones destacadas:

Muy Ácido vs. Bajo en acidez: diferencia = −0.132, IC 95% [−0.172, −0.092], p < 0.001

Muy Ácido vs. Medio: diferencia = −0.071, p < 0.001

Bajo en acidez vs. Ácido: diferencia = +0.090, p < 0.001

✅ Se identificaron diferencias significativas entre múltiples pares de niveles de acidez.

prueba no paramétrica (Kruskal-Wallis)

Chi² = 387.15,

p < 2.2×10⁻¹⁶

✅ Confirma diferencias estadísticamente significativas entre grupos, incluso sin normalidad.

# Gráfico de violín con medias superpuestas

ggplot(datos_sulfatos, aes(x = acidez, y = sulfatos, fill = acidez)) +
  geom_violin(trim = FALSE, alpha = 0.5, color = "black") +
  stat_summary(fun = mean, geom = "point", color = "black", size = 3, shape = 18) +
  labs(title = "Distribución de sulfatos por nivel de acidez",
       x = "Nivel de acidez",
       y = "Sulfatos") +
  theme_minimal() +
  theme(legend.position = "none")

✅ Conclusión del gráfico*

El gráfico de violín muestra la distribución del contenido de sulfatos en los vinos según el nivel de acidez categórica (Ácido, Bajo en acidez, Medio y Muy Ácido). Se observa que los vinos clasificados como “Bajo en acidez” presentan en promedio un mayor contenido de sulfatos, mientras que los vinos “Muy Ácidos” tienden a tener menores concentraciones y mayor dispersión en sus valores. Los grupos “Ácido” y “Medio” muestran distribuciones similares con una concentración central moderada. Las medias, representadas por los rombos negros, refuerzan esta diferencia. Este patrón visual respalda los resultados obtenidos en el análisis estadístico, donde se encontró que las diferencias son estadísticamente significativas. Desde un enfoque enológico, estos resultados sugieren que el contenido de sulfatos podría estar ajustado de manera técnica para equilibrar las características sensoriales o de conservación del vino en función de su nivel de acidez, dado que los sulfatos contribuyen a la estabilidad microbiológica y al perfil organoléptico del producto final.

# estadisticos por grupo
datos_sulfatos %>%
  group_by(acidez) %>%
  summarise(
    Media = mean(sulfatos),
    Desviacion = sd(sulfatos),
    n = n()
  )
## # A tibble: 4 × 4
##   acidez         Media Desviacion     n
##   <fct>          <dbl>      <dbl> <int>
## 1 Acido          0.548      0.143  2483
## 2 Bajo en acidez 0.638      0.121    91
## 3 Medio          0.577      0.128   693
## 4 Muy Acido      0.506      0.153  3230

Se observan diferencias en el contenido promedio de sulfatos según el nivel de acidez. Los resultados del ANOVA (o Kruskal-Wallis) indicaron que estas diferencias son estadísticamente significativas (p < 0.05). Según el análisis post-hoc (Tukey), las diferencias más marcadas se dan entre los niveles Muy ácido y Bajo en acidez, siendo el primero el que tiende a tener mayor contenido de sulfatos. El gráfico de violín permite visualizar cómo varía la densidad de los valores, y refuerza visualmente las diferencias entre grupos

✅ Conclusión del análisis

El nivel de acidez influye significativamente en el contenido promedio de sulfatos en el vino.

Los resultados estadísticos sugieren que los vinos con menor acidez categórica (como los “Bajo en acidez”) tienden a presentar un mayor contenido de sulfatos.

Desde el punto de vista enológico, esta diferencia puede deberse a decisiones de vinificación orientadas a ajustar el perfil químico y sensorial del vino, especialmente para equilibrar la acidez o mejorar la conservación.

9. El pH promedio de las muestras con acidez Muy ácida es diferente al de las Ácidas?

#  Filtrar y limpiar los datos

## Asegurar limpieza
data$acidez <- factor(trimws(data$acidez))

## Filtrar solo Muy acida y Acida
datos_pH_9 <- data %>%
  filter(acidez %in% c("Muy Acido", "Acido")) %>%
  select(acidez, pH) %>%
  na.omit()

## Asegurar que 'acidez' sea factor limpio
datos_pH_9$acidez <- factor(datos_pH_9$acidez)
# verificar nomalidad
by(datos_pH_9$pH, datos_pH_9$acidez, shapiro.test)
## datos_pH_9$acidez: Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.94706, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_pH_9$acidez: Muy Acido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.9329, p-value < 2.2e-16

✅ Resultados:

Grupo Ácido: W = 0.94706, p-value < 2.2e-16

Grupo Muy Ácido: W = 0.9329, p-value < 2.2e-16

📊 Interpretación:

La prueba de Shapiro-Wilk evidencia que en ambos grupos el p-valor es significativamente menor que 0.05, lo cual indica que los datos no siguen una distribución normal. Por tanto, los supuestos de normalidad no se cumplen para ninguno de los grupos.

#  Verificar homogeneidad de varianzas

leveneTest(pH ~ acidez, data = datos_pH_9)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    1  239.88 < 2.2e-16 ***
##       5711                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

✅ Resultado:

F = 239.88, p < 2.2e-16

📊 Interpretación:

El valor-p es muy inferior a 0.05, por lo tanto no se cumple el supuesto de igualdad de varianzas. Esto significa que no se recomienda aplicar ANOVA o t de Student en estas condiciones sin correcciones, y se debe considerar una prueba no paramétrica como Wilcoxon.

# prueba de hipotesis

### Si se cumplen supuestos (t-test)
t.test(pH ~ acidez, data = datos_pH_9, var.equal = TRUE)
## 
##  Two Sample t-test
## 
## data:  pH by acidez
## t = 104.35, df = 5711, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group Acido and group Muy Acido is not equal to 0
## 95 percent confidence interval:
##  0.2001810 0.2078462
## sample estimates:
##     mean in group Acido mean in group Muy Acido 
##                3.294704                3.090690

📊 Interpretación:

A pesar de que los supuestos no se cumplen, la t de Student muestra una diferencia altamente significativa entre ambos grupos, con un valor-p muy inferior a 0.001. El intervalo de confianza no incluye el 0, lo que confirma la existencia de una diferencia real en los promedios.

### Si no se cumplen (Wilcoxon)
wilcox.test(pH ~ acidez, data = datos_pH_9)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  pH by acidez
## W = 8020090, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

📊 Interpretación:

La prueba de Wilcoxon confirma los hallazgos anteriores. Con un p-valor menor a 0.001, se concluye que existen diferencias estadísticamente significativas entre los niveles de pH de los vinos con acidez Muy Ácida frente a los Ácidos.

# Gráfico con ggplot2 (tipo jitter + media)

ggplot(datos_pH_9, aes(x = acidez, y = pH, color = acidez)) +
  geom_jitter(width = 0.1, alpha = 0.5) +
  stat_summary(fun = mean, geom = "point", size = 3, color = "black", shape = 18) +
  labs(title = "Comparacion del pH entre niveles Muy Acido y Acido",
       x = "Nivel de acidez",
       y = "pH") +
  theme_minimal() +
  theme(legend.position = "none")

### 📉 Análisis gráfico: Comparación del pH entre niveles “Muy Ácido” y “Ácido”

El gráfico de dispersión tipo jitter con medias superpuestas ilustra la distribución de los valores de pH entre las muestras clasificadas como “Ácido” y “Muy Ácido”. Se observa que los vinos con acidez “Muy Ácida” presentan valores de pH notablemente más bajos en comparación con los vinos “Ácidos”, lo cual es consistente con el comportamiento esperado de esta variable fisicoquímica. Las medias, indicadas por puntos negros, muestran una clara diferencia entre ambos grupos. Además, la dispersión es mayor en el grupo “Muy Ácido”, lo que sugiere mayor variabilidad en su perfil ácido. Esta representación visual refuerza la evidencia obtenida en los análisis estadísticos, confirmando que el nivel de acidez categórica influye significativamente en el valor promedio de pH de las muestras.

# estadisticos 

datos_pH_9 %>%
  group_by(acidez) %>%
  summarise(
    Media = mean(pH),
    Desviacion = sd(pH),
    n = n()
  )
## # A tibble: 2 × 4
##   acidez    Media Desviacion     n
##   <fct>     <dbl>      <dbl> <int>
## 1 Acido      3.29     0.0563  2483
## 2 Muy Acido  3.09     0.0840  3230

✅ Conclusión final

Con un nivel de significancia del 5%, y con base en pruebas no paramétricas debido a la falta de normalidad y homogeneidad de varianzas, se confirma que el pH promedio de los vinos con acidez “Muy Ácida” es significativamente menor que el de los vinos “Ácidos”.

Esta diferencia estadística es consistente con la definición química de pH: a mayor acidez, menor valor de pH. Por tanto, la clasificación categórica de acidez es coherente con los datos cuantitativos analizados.

Preguntas basadas en el contenido de alcohol (Bajo, Medio, Alto)

# Preparación previa obligatoria: categorizar "contenido de alcohol"

# Crear variable categorica de alcohol
data$nivel_alcohol <- cut(data$alcohol,
                          breaks = quantile(data$alcohol, probs = c(0, 0.33, 0.66, 1), na.rm = TRUE),
                          labels = c("Bajo", "Medio", "Alto"),
                          include.lowest = TRUE)
### reviso los datos esten bien corridos

table(data$nivel_alcohol)
## 
##  Bajo Medio  Alto 
##  2223  2082  2191

1. ¿El puntaje sensorial promedio varía entre los vinos con bajo y alto contenido de alcohol?

# Crear variable categórica de alcohol en 3 niveles: Bajo, Medio y Alto
data$nivel_alcohol <- cut(
  data$alcohol,
  breaks = quantile(data$alcohol, probs = c(0, 0.33, 0.66, 1), na.rm = TRUE),
  labels = c("Bajo", "Medio", "Alto"),
  include.lowest = TRUE
)
# Filtrar solo los vinos con nivel de alcohol bajo y alto 
## Filtrar los datos
datos_sensorial <- data %>%
  filter(nivel_alcohol %in% c("Bajo", "Alto")) %>%
  select(nivel_alcohol, puntaje.sensorial) %>%
  na.omit()

# Verificar que hay datos
table(datos_sensorial$nivel_alcohol)
## 
##  Bajo Medio  Alto 
##  2223     0  2191
#  Prueba de normalidad y varianzas
## Prueba de normalidad por grupo
by(datos_sensorial$puntaje.sensorial, datos_sensorial$nivel_alcohol, shapiro.test)
## datos_sensorial$nivel_alcohol: Bajo
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.80194, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos_sensorial$nivel_alcohol: Medio
## NULL
## ------------------------------------------------------------ 
## datos_sensorial$nivel_alcohol: Alto
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.87547, p-value < 2.2e-16
## Homogeneidad de varianzas
library(car)
leveneTest(puntaje.sensorial ~ nivel_alcohol, data = datos_sensorial)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    1  28.795 8.458e-08 ***
##       4412                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

📌 Prueba de normalidad (Shapiro-Wilk)

✅ Resultados:

Grupo Bajo: W = 0.80194, p-value < 2.2e-16

Grupo Alto: W = 0.87547, p-value < 2.2e-16

📊 Interpretación: Los p-values para ambos grupos son significativamente menores que 0.05, por lo tanto, se concluye que la variable “puntaje sensorial” no sigue una distribución normal ni en el grupo con bajo contenido de alcohol ni en el de alto contenido. Esto sugiere utilizar métodos no paramétricos.

📌 Homogeneidad de varianzas (Levene’s Test)

✅ Resultado: F = 28.795, p-value = 8.458e-08

📊 Interpretación: El valor-p < 0.001 indica que no se cumple la homogeneidad de varianzas entre los grupos. Esta condición refuerza la decisión de utilizar una prueba no paramétrica como la prueba de Wilcoxon para comparar medianas entre los dos grupos.

wilcox.test(puntaje.sensorial ~ nivel_alcohol, data = datos_sensorial)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  puntaje.sensorial by nivel_alcohol
## W = 1070045, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

📌 Prueba de Wilcoxon (no paramétrica)

✅ Resultado: W = 1,070,045

p-value < 2.2e-16

📊 Interpretación: Con un p-valor extremadamente bajo (menor a 0.001), se concluye que existe una diferencia estadísticamente significativa en el puntaje sensorial entre los vinos con contenido de alcohol bajo y alto. La hipótesis nula de igualdad de medias se rechaza con un 95% de confianza.

boxplot(puntaje.sensorial ~ nivel_alcohol,
        data = datos_sensorial,
        col = "lightblue",
        main = "Puntaje sensorial por nivel de alcohol (Bajo vs Alto)",
        xlab = "Nivel de alcohol",
        ylab = "Puntaje sensorial",
        border = "blue")

# Agregar medias
medias <- tapply(datos_sensorial$puntaje.sensorial, datos_sensorial$nivel_alcohol, mean)
points(1:length(medias), medias, col = "red", pch = 18, cex = 1.5)
legend("topright", legend = "Media", col = "red", pch = 18)

El gráfico de cajas muestra que los vinos con alto contenido de alcohol tienen un puntaje sensorial promedio mayor que los vinos con bajo contenido. Además, se observan menos valores atípicos y menor dispersión en el grupo alto, lo cual refuerza la calidad más consistente en estos vinos. Las medias superpuestas (en rojo) también indican una clara diferencia entre los grupos.

2. ¿Las muestras con alto contenido de alcohol tienen menor acidez volátil en promedio que las de contenido bajo?}

# Revisión de nombres
print(colnames(data))  # Agrega esta línea temporal para depurar
##  [1] "acidez.fija"              "acidez.volatil"          
##  [3] "acido.citrico"            "azucar.residual"         
##  [5] "cloruros"                 "dioxido.de.azufre.libre" 
##  [7] "azufre_total"             "densidad"                
##  [9] "pH"                       "acidez"                  
## [11] "sulfatos"                 "alcohol"                 
## [13] "contenido.de.alcohol"     "puntaje.sensorial"       
## [15] "calidad"                  "tipo"                    
## [17] "puntaje_sensorial"        "tipo.1"                  
## [19] "sulfatos.1"               "calidad.1"               
## [21] "dioxido._de_azufre_total" "grupo_alcohol"           
## [23] "nivel_alcohol"
# Crear columna categórica y filtrar
datos_filtrados <- data %>%
  mutate(nivel_alcohol = case_when(
    alcohol > 10 ~ "Alto",
    alcohol < 9 ~ "Bajo",
    TRUE ~ "Medio"
  )) %>%
  filter(nivel_alcohol %in% c("Alto", "Bajo"))
var.test(acidez.volatil ~ nivel_alcohol, data = datos_filtrados)
## 
##  F test to compare two variances
## 
## data:  acidez.volatil by nivel_alcohol
## F = 158407, num df = 3664, denom df = 323, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  134094.9 185078.1
## sample estimates:
## ratio of variances 
##           158407.1

📊 Resultados:

F = 4.75e-05

p-value < 2.2e-16

Intervalo de confianza del 95%: [4.37e-05, 5.16e-05]

✅ Interpretación:##

La prueba F indica que las varianzas entre los grupos Bajo y Alto son significativamente diferentes (p < 0.05). Esto justifica no asumir igualdad de varianzas al realizar una prueba t, y por eso se aplica la versión de Welch en el siguiente paso.

# Convertir la columna alcohol a numerica

data$alcohol <- as.numeric(gsub(",", ".", data$alcohol))

# Crear variable nivel_alcohol por cuantiles
data$nivel_alcohol <- cut(data$alcohol,
                          breaks = quantile(data$alcohol, probs = c(0, 0.33, 0.66, 1), na.rm = TRUE),
                          labels = c("Bajo", "Medio", "Alto"),
                          include.lowest = TRUE)
# Filtrar los datos con nivel de alcohol bajo y alto
datos_filtrados <- subset(data, nivel_alcohol %in% c("Bajo", "Alto"))

# Verificar tabla de frecuencias
table(datos_filtrados$nivel_alcohol)
## 
##  Bajo Medio  Alto 
##  2223     0  2191
# Prueba F de igualdad de varianzas entre grupos Bajo y Alto
var.test(acidez.volatil ~ nivel_alcohol, data = datos_filtrados)
## 
##  F test to compare two variances
## 
## data:  acidez.volatil by nivel_alcohol
## F = 4.7512e-05, num df = 2222, denom df = 2190, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  4.370561e-05 5.164755e-05
## sample estimates:
## ratio of variances 
##       4.751153e-05

📊 Resultados:

F = 4.75e-05

p-value < 2.2e-16

Intervalo de confianza del 95%: [4.37e-05, 5.16e-05]

✅ Interpretación:

La prueba F indica que las varianzas entre los grupos Bajo y Alto son significativamente diferentes (p < 0.05). Esto justifica no asumir igualdad de varianzas al realizar una prueba t, y por eso se aplica la versión de Welch en el siguiente paso.

# Prueba t de Welch (no asume varianzas iguales)
t.test(acidez.volatil ~ nivel_alcohol,
       data = datos_filtrados,
       var.equal = FALSE,
       alternative = "greater")  # Hipotesis: promedio Bajo > promedio Alto
## 
##  Welch Two Sample t-test
## 
## data:  acidez.volatil by nivel_alcohol
## t = -0.94325, df = 2190.2, p-value = 0.8272
## alternative hypothesis: true difference in means between group Bajo and group Alto is greater than 0
## 95 percent confidence interval:
##  -1.317112       Inf
## sample estimates:
## mean in group Bajo mean in group Alto 
##          0.3540193          0.8339206

📊 Resultados:

t = -0.943

p-value = 0.8272

Media grupo Bajo = 0.354

Media grupo Alto = 0.834

Hipótesis alternativa: Media Bajo > Media Alto

❌ Interpretación:

El valor p es muy alto (0.8272), lo que significa que no hay evidencia estadística para afirmar que la acidez volátil es mayor en el grupo Bajo que en el grupo Alto. De hecho, la media en el grupo Alto es mayor (0.834) que en el grupo Bajo (0.354), lo cual contradice la hipótesis.

# Prueba no parametrica si no hay normalidad
wilcox.test(acidez.volatil ~ nivel_alcohol,
            data = datos_filtrados,
            alternative = "greater")  # Hipotesis: promedio Bajo > promedio Alto
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  acidez.volatil by nivel_alcohol
## W = 2632796, p-value = 1.527e-06
## alternative hypothesis: true location shift is greater than 0

3. ¿El nivel de azúcar residual cambia significativamente según el contenido de alcohol?

# Asegurar que la columna alcohol es numérica (en caso de que tenga comas en vez de puntos)
data$alcohol <- as.numeric(gsub(",", ".", data$alcohol))

# Crear variable categórica de nivel de alcohol por cuantiles (terciles)
data$nivel_alcohol <- cut(data$alcohol,
                          breaks = quantile(data$alcohol, probs = c(0, 0.33, 0.66, 1), na.rm = TRUE),
                          labels = c("Bajo", "Medio", "Alto"),
                          include.lowest = TRUE)

# Verificar niveles creados
table(data$nivel_alcohol)
## 
##  Bajo Medio  Alto 
##  2223  2082  2191
# Aplicar la prueba de normalidad para cada grupo de nivel de alcohol
by(data$azucar.residual, data$nivel_alcohol, shapiro.test)
## data$nivel_alcohol: Bajo
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.91204, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## data$nivel_alcohol: Medio
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.8177, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## data$nivel_alcohol: Alto
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.70462, p-value < 2.2e-16

La prueba de Shapiro-Wilk se aplicó a los grupos Bajo, Medio y Alto del nivel de alcohol:

Grupo Bajo: p < 2.2e-16

Grupo Medio: p < 2.2e-16

Grupo Alto: p < 2.2e-16

➡️ En todos los casos, el valor p es muy bajo, por lo tanto, se rechaza la hipótesis de normalidad en cada grupo. Esto sugiere que la distribución del azúcar residual no es normal.

# Cargar librería para la prueba de Levene
library(car)

# Verificar igualdad de varianzas entre grupos de nivel de alcohol
leveneTest(azucar.residual ~ nivel_alcohol, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    2  496.58 < 2.2e-16 ***
##       6493                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Resultado: F(2, 6493) = 496.58, p < 2.2e-16

➡️ Esto indica que las varianzas entre los grupos no son iguales, es decir, se viola el supuesto de homocedasticidad.

# Prueba no paramétrica de Kruskal-Wallis (no asume normalidad ni varianzas iguales)
kruskal.test(azucar.residual ~ nivel_alcohol, data = data)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  azucar.residual by nivel_alcohol
## Kruskal-Wallis chi-squared = 687.68, df = 2, p-value < 2.2e-16

Dado que no se cumplen los supuestos de normalidad ni homogeneidad de varianzas, se aplicó la prueba de Kruskal-Wallis, una prueba no paramétrica equivalente al ANOVA para comparar medianas entre más de dos grupos.

Resultado: χ²(2) = 687.68, p < 2.2e-16

➡️ Esto indica que existen diferencias estadísticamente significativas en el nivel de azúcar residual entre los grupos de nivel_alcohol (Bajo, Medio, Alto).

# Cargar librerías necesarias
library(ggplot2)
library(viridis)  # Paleta de colores más estética
## Cargando paquete requerido: viridisLite
# Gráfico mejorado
ggplot(data, aes(x = nivel_alcohol, y = azucar.residual, fill = nivel_alcohol)) +
  geom_boxplot(color = "black", width = 0.6, outlier.color = "red", outlier.shape = 21) +
  scale_fill_viridis(discrete = TRUE, option = "C", alpha = 0.9) +
  labs(title = "Comparación del Azúcar Residual\nsegún el Nivel de Alcohol",
       x = "Nivel de Alcohol",
       y = "Azúcar Residual (g/L)") +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", size = 16, hjust = 0.5),
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

📊 Interpretación de la grafica

El gráfico de cajas refuerza la conclusión anterior al mostrar diferencias visibles entre las distribuciones:

El grupo Bajo en alcohol presenta una mayor concentración de azúcar residual y mayor dispersión, con presencia de valores extremos altos.

El grupo Alto en alcohol muestra valores de azúcar residual considerablemente más bajos y más concentrados.

El grupo Medio tiene una mediana más baja que el grupo Bajo, pero mayor que el Alto.

Este comportamiento sugiere una relación inversa: a mayor contenido de alcohol, menor azúcar residual, lo cual es coherente con procesos fermentativos, donde más azúcar se convierte en alcohol.

✅ Conclusión

Se concluye que el nivel de azúcar residual varía significativamente según el contenido de alcohol. La prueba de Kruskal-Wallis confirmó diferencias significativas (p < 0.001), respaldadas por la no normalidad de los datos y la desigualdad de varianzas. En promedio, los vinos con bajo contenido de alcohol presentan mayor azúcar residual, mientras que aquellos con alto contenido de alcohol presentan niveles notablemente más bajos de azúcar residual.

4. ¿Las muestras con alcohol alto presentan mayor calidad promedio (por ejemplo, más veces clasificadas como “Buena” o “Excelente”)?

names(data)
##  [1] "acidez.fija"              "acidez.volatil"          
##  [3] "acido.citrico"            "azucar.residual"         
##  [5] "cloruros"                 "dioxido.de.azufre.libre" 
##  [7] "azufre_total"             "densidad"                
##  [9] "pH"                       "acidez"                  
## [11] "sulfatos"                 "alcohol"                 
## [13] "contenido.de.alcohol"     "puntaje.sensorial"       
## [15] "calidad"                  "tipo"                    
## [17] "puntaje_sensorial"        "tipo.1"                  
## [19] "sulfatos.1"               "calidad.1"               
## [21] "dioxido._de_azufre_total" "grupo_alcohol"           
## [23] "nivel_alcohol"
table(data$calidad)
## 
##      Baja     Buena Excelente     Media  Muy baja 
##      2138      1079       198      2836       246
data$calidad <- as.numeric(as.character(data$`puntaje.sensorial`))
summary(data$calidad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.000   5.000   6.000   5.818   6.000   9.000
table(data$calidad)
## 
##    3    4    5    6    7    8    9 
##   30  216 2138 2836 1079  193    5
data$clasificacion_calidad <- dplyr::case_when(
  data$calidad <= 4 ~ "Muy baja",
  data$calidad == 5 ~ "Baja",
  data$calidad == 6 ~ "Media",
  data$calidad == 7 ~ "Buena",
  data$calidad >= 8 ~ "Excelente",
  TRUE ~ NA_character_
)
# Crear la tabla de contingencia
tabla_alcohol_calidad <- table(data$nivel_alcohol, data$clasificacion_calidad)
# Prueba Chi-cuadrado

chisq.test(tabla_alcohol_calidad)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_alcohol_calidad
## X-squared = 1454.6, df = 8, p-value < 2.2e-16
table(data$clasificacion_calidad)
## 
##      Baja     Buena Excelente     Media  Muy baja 
##      2138      1079       198      2836       246
# Cargar librerías necesarias
library(ggplot2)
library(viridis)
library(dplyr)

# Filtrar datos sin valores perdidos
data_limpia <- data %>%
  filter(!is.na(nivel_alcohol), !is.na(calidad))

# Crear el boxplot bonito xd
ggplot(data_limpia, aes(x = nivel_alcohol, y = calidad, fill = nivel_alcohol)) +
  geom_boxplot(width = 0.6, outlier.color = "red", outlier.shape = 21, color = "black", alpha = 0.9) +
  scale_fill_viridis(discrete = TRUE, option = "C") +
  labs(
    title = "Distribución de la Calidad del Vino\nsegún el Nivel de Alcohol",
    x = "Nivel de Alcohol",
    y = "Puntaje de Calidad del Vino"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", size = 16, hjust = 0.5),
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

5. ¿El pH promedio difiere entre los niveles de alcohol (medio y alto)?

# Asegurar que el alcohol sea numérico
data$alcohol <- as.numeric(gsub(",", ".", data$alcohol))

# Crear variable categórica 'nivel_alcohol' por terciles
data$nivel_alcohol <- cut(data$alcohol,
                          breaks = quantile(data$alcohol, probs = c(0, 0.33, 0.66, 1), na.rm = TRUE),
                          labels = c("Bajo", "Medio", "Alto"),
                          include.lowest = TRUE)

# Filtrar los niveles "Medio" y "Alto"
data_filtro <- subset(data, nivel_alcohol %in% c("Medio", "Alto"))

# Verificar conteos
table(data_filtro$nivel_alcohol)
## 
##  Bajo Medio  Alto 
##     0  2082  2191
cat("Normalidad para grupo 'Medio':\n")
## Normalidad para grupo 'Medio':
print(shapiro.test(data_filtro$pH[data_filtro$nivel_alcohol == "Medio"]))
## 
##  Shapiro-Wilk normality test
## 
## data:  data_filtro$pH[data_filtro$nivel_alcohol == "Medio"]
## W = 0.9927, p-value = 1.116e-08
cat("\nNormalidad para grupo 'Alto':\n")
## 
## Normalidad para grupo 'Alto':
print(shapiro.test(data_filtro$pH[data_filtro$nivel_alcohol == "Alto"]))
## 
##  Shapiro-Wilk normality test
## 
## data:  data_filtro$pH[data_filtro$nivel_alcohol == "Alto"]
## W = 0.98569, p-value = 5.116e-14

✅ Evaluación de supuestos

Antes de aplicar una prueba estadística inferencial, se evaluaron los supuestos de normalidad y homogeneidad de varianzas para la variable pH en los grupos “Medio” y “Alto” del nivel de alcohol.

Prueba de normalidad (Shapiro-Wilk):

Para el grupo Medio, el valor W = 0.9927 y el p-valor = 1.116 × 10⁻⁸.

Para el grupo Alto, el valor W = 0.9857 y el p-valor = 5.116 × 10⁻¹⁴.

En ambos casos, los p-valores son < 0.05, lo que indica violación del supuesto de normalidad en ambos grupos. Sin embargo, dado el tamaño muestral elevado (n > 2000 por grupo), el test t de Welch sigue siendo robusto ante esta violación.

Prueba F de igualdad de varianzas:

Estadístico F = 0.9979

p-valor = 0.9613

Este resultado indica que no se rechaza la hipótesis nula de igualdad de varianzas, es decir, las varianzas de pH en ambos grupos pueden considerarse iguales.

cat("\nPrueba F de igualdad de varianzas (pH ~ nivel_alcohol):\n")
## 
## Prueba F de igualdad de varianzas (pH ~ nivel_alcohol):
print(var.test(pH ~ nivel_alcohol, data = data_filtro))
## 
##  F test to compare two variances
## 
## data:  pH by nivel_alcohol
## F = 0.99789, num df = 2081, denom df = 2190, p-value = 0.9613
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.9167277 1.0863328
## sample estimates:
## ratio of variances 
##          0.9978871

Hipótesis:

H₀: μ_med = μ_alto

H₁: μ_med ≠ μ_alto

t.test(pH ~ nivel_alcohol, data = data_filtro, alternative = "two.sided", var.equal = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  pH by nivel_alcohol
## t = 4.1018, df = 4260.4, p-value = 4.176e-05
## alternative hypothesis: true difference in means between group Medio and group Alto is not equal to 0
## 95 percent confidence interval:
##  0.01070163 0.03029828
## sample estimates:
## mean in group Medio  mean in group Alto 
##            3.247939            3.227440

📊 Conclusión Con base en la prueba t de Welch, se obtuvo un p-valor significativamente bajo (< 0.001), lo que indica evidencia estadística suficiente para rechazar la hipótesis nula. Por tanto, se concluye que:

El pH promedio difiere de forma significativa entre los vinos con nivel de alcohol “Medio” y “Alto”. diferencia es estadísticamente significativa gracias al gran tamaño muestral. Además, la visualización mediante boxplot confirma esta ligera variación, mostrando que el grupo “Medio” tiende a tener un pH levemente superior al grupo “Alto”.

library(ggplot2)
library(viridis)

ggplot(data_filtro, aes(x = nivel_alcohol, y = pH, fill = nivel_alcohol)) +
  geom_boxplot(width = 0.6, outlier.color = "red", outlier.shape = 21, color = "black") +
  scale_fill_viridis(discrete = TRUE, option = "D", alpha = 0.9) +
  labs(
    title = "Comparación del pH según el Nivel de Alcohol",
    x = "Nivel de Alcohol",
    y = "pH"
  ) +
  theme_minimal(base_size = 14) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    axis.title = element_text(face = "bold"),
    legend.position = "none"
  )

El diagama de caja refuerza esta observación al mostrar que la mediana y la distribución del pH son apenas superiores en el grupo “Medio”, aunque con una considerable superposición entre ambos grupos.

Preguntas basadas en la calidad (Muy baja, Baja, Media, Buena, Excelente)

1. ¿El contenido promedio de alcohol varía según el nivel de calidad de las muestras?

Se verifican primero los tamaños de muestra para determinar si es adecuado aplicar la prueba de Shapiro-Wilk. Luego, se procede a evaluar la normalidad y la homogeneidad de varianzas.

datos <- read.csv(file.choose(),
                 sep = ";",
                 dec = ",",
                 fileEncoding = "latin1")
#--------------------------- Extracción y limpieza de datos ---------------------------

# Asegurar que la columna 'calidad' es tipo carácter
datos$calidad <- as.character(datos$calidad)


# Eliminar filas con NA en alcohol
datos <- datos[!is.na(datos$alcohol), ]

# Agrupar los valores de alcohol según calidad
alcohol_agrupado <- split(datos$alcohol, datos$calidad)

# Crear subconjuntos individuales por cada nivel de calidad
muy_baja   <- alcohol_agrupado[["Muy baja"]]
baja       <- alcohol_agrupado[["Baja"]]
media      <- alcohol_agrupado[["Media"]]
buena      <- alcohol_agrupado[["Buena"]]
excelente  <- alcohol_agrupado[["Excelente"]]
cat("Tamano del grupo Muy baja:", length(muy_baja), "\n")
## Tamano del grupo Muy baja: 246
cat("Tamano del grupo Baja:", length(baja), "\n")
## Tamano del grupo Baja: 2138
cat("Tamano del grupo Media:", length(media), "\n")
## Tamano del grupo Media: 2835
cat("Tamano del grupo Buena:", length(buena), "\n")
## Tamano del grupo Buena: 1079
cat("Tamano del grupo Excelente:", length(excelente), "\n")
## Tamano del grupo Excelente: 198

Dado que el tamaño de la muestra es menor a 5000, es apropiado aplicar la prueba de Shapiro-Wilk para evaluar la normalidad. Además, se lleva a cabo la prueba de homogeneidad de varianzas para verificar la homogeneidad entre los grupos.

# Convertir calidad a factor si no lo es
datos$calidad <- as.factor(datos$calidad)

# Pruebas de supuestos
by(datos$alcohol, datos$calidad, shapiro.test)                # Normalidad por grupo
## datos$calidad: Baja
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.91218, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos$calidad: Buena
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.9819, p-value = 2.471e-10
## 
## ------------------------------------------------------------ 
## datos$calidad: Excelente
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.92001, p-value = 6.679e-09
## 
## ------------------------------------------------------------ 
## datos$calidad: Media
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.38807, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## datos$calidad: Muy baja
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.97123, p-value = 7.021e-05
library(car)
leveneTest(alcohol ~ calidad, data = datos)                   # Homogeneidad de varianzas
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    4  30.187 < 2.2e-16 ***
##       6491                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Se evaluaron los supuestos de normalidad y homogeneidad de varianzas para la variable alcohol según los niveles de calidad. La prueba de Shapiro-Wilk, aplicada individualmente a cada grupo debido al tamaño muestral (< 5000), arrojó valores-p significativamente bajos (todos < 0.001), lo que indica que la distribución del alcohol no es normal en ninguno de los niveles de calidad. Adicionalmente, la prueba de Levene mostró evidencia significativa de heterocedasticidad (F = 30.187, p < 2.2 × 10⁻¹⁶), por lo que no se cumple el supuesto de igualdad de varianzas.

A pesar de que no se cumplen completamente los supuestos de normalidad y homogeneidad de varianzas, se aplica un análisis de varianza (ANOVA) con el fin de evaluar si existen diferencias significativas en el contenido de alcohol entre los distintos niveles de calidad. Esta decisión se sustenta en el tamaño considerable de la muestra, que otorga cierta robustez al método ante violaciones moderadas de los supuestos.

# ANOVA
modelo_anova <- aov(alcohol ~ calidad, data = datos)
summary(modelo_anova)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## calidad        4   2128   532.1   240.6 <2e-16 ***
## Residuals   6491  14356     2.2                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Se evidenció, mediante un análisis de varianza (ANOVA), que el contenido promedio de alcohol varía significativamente según el nivel de calidad de las muestras. El resultado del modelo arrojó un valor F = 240.6 y un valor-p < 2 × 10⁻¹⁶, lo que indica una fuerte evidencia estadística para rechazar la hipótesis nula de igualdad de medias. La variabilidad explicada por el factor calidad (suma de cuadrados = 2128) fue considerable en comparación con la variabilidad residual (suma de cuadrados = 14356), lo que respalda la existencia de diferencias sistemáticas en el contenido de alcohol entre los distintos niveles de calidad. Por tanto, se concluye que el nivel de calidad influye significativamente en el contenido promedio de alcohol de las muestras.

2. ¿Las muestras clasificadas como “Excelente” presentan menor acidez volátil en promedio que las de calidad “Baja” ?

Se extraen los datos correspondientes a los niveles de calidad “Excelente” y “Baja” con el fin de clasificarlos en grupos y realizar comparaciones específicas sobre el contenido de alcohol entre dichas categorías.

#--------------------------- Extraer los datos -------------------------------------

# Extraer la columna alcohol
alcohol <- datos$alcohol

# Extraer la columna calidad
calidad <- datos$calidad

# Asegurar que la columna calidad es tipo factor o character
datos$calidad <- as.character(datos$calidad)

# Convertir la columna alcohol en numérica (si usa comas decimales)
datos$alcohol <- as.numeric(gsub(",", ".", datos$alcohol))

# Eliminar filas con NA en la columna alcohol
datos <- datos[!is.na(datos$alcohol), ]

# Agrupar por 'calidad' y extraer valores de alcohol
datos_agrupados <- split(datos$alcohol, datos$calidad)

# Crear subconjuntos para cada grupo
excelente <- datos_agrupados[["Excelente"]]
baja <- datos_agrupados[["Baja"]]
cat("Tamaño del grupo Baja:", length(baja), "\n")
## Tamaño del grupo Baja: 2138
cat("Tamaño del grupo Excelente:", length(excelente), "\n")
## Tamaño del grupo Excelente: 198

Dado que ambos tamaños son menores a 5000, es adecuado aplicar la prueba de normalidad de Shapiro-Wilk a cada grupo por separado.

# Prueba de normalidad (Shapiro-Wilk)
cat("\nPrueba de normalidad para grupo 'Baja':\n")
## 
## Prueba de normalidad para grupo 'Baja':
print(shapiro.test(baja))
## 
##  Shapiro-Wilk normality test
## 
## data:  baja
## W = 0.91218, p-value < 2.2e-16
cat("\nPrueba de normalidad para grupo 'Excelente':\n")
## 
## Prueba de normalidad para grupo 'Excelente':
print(shapiro.test(excelente))
## 
##  Shapiro-Wilk normality test
## 
## data:  excelente
## W = 0.92001, p-value = 6.679e-09

Se aplicó la prueba de normalidad de Shapiro-Wilk a los grupos “Baja” y “Excelente” para evaluar si el contenido de alcohol en cada uno sigue una distribución normal. En ambos casos, los valores de W fueron inferiores a 1 (W = 0.91218 para “Baja” y W = 0.92001 para “Excelente”) y los valores-p resultaron significativamente bajos (p < 2.2 × 10⁻¹⁶ y p = 6.679 × 10⁻⁹), lo que indica una fuerte evidencia en contra de la normalidad.

Hipótesis estadísticas:

H₀: σ²_Excelente = σ²_Baja (Las varianzas del contenido de alcohol en ambos grupos son iguales)

Hₐ: σ²_Excelente ≠ σ²_Baja (Las varianzas del contenido de alcohol en ambos grupos son diferentes)

# Prueba de igualdad de varianzas --------------------------------------------------------
cat("\nPrueba de igualdad de varianzas entre los grupos 'Excelente' y 'Baja':\n")
## 
## Prueba de igualdad de varianzas entre los grupos 'Excelente' y 'Baja':
print(var.test(excelente, baja))
## 
##  F test to compare two variances
## 
## data:  excelente and baja
## F = 2.4443, num df = 197, denom df = 2137, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  2.005441 3.033188
## sample estimates:
## ratio of variances 
##            2.44426

Se obtuvo un estadístico F = 2.4443, con 197 y 2137 grados de libertad para los grupos “Excelente” y “Baja”, respectivamente. El valor-p asociado fue p < 2.2 × 10⁻¹⁶, lo cual es considerablemente menor al umbral de significancia común (α = 0.05). Esto proporciona evidencia estadísticamente significativa para rechazar la igualdad de varianzas.

El intervalo de confianza del 95% para el cociente de varianzas fue de [2.005, 3.033], lo que indica que, con alta confianza, la varianza del grupo “Excelente” es entre 2 y 3 veces mayor que la del grupo “Baja”.

Hipótesis estadísticas:

H₀: μ_Excelente ≥ μ_Baja (El promedio de acidez volátil en el grupo “Excelente” es mayor o igual al de los vinos “Baja”)

Hₐ: μ_Excelente < μ_Baja (El promedio de acidez volátil en el grupo“Excelente” es menor que en los vinos “Baja”)

t.test(excelente, baja, alternative = "less", var.equal = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  excelente and baja
## t = 20.106, df = 212.18, p-value = 1
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##      -Inf 2.005755
## sample estimates:
## mean of x mean of y 
## 11.691414  9.837954

Se evidenció, mediante la prueba t de Welch, que no existen diferencias significativas en la dirección planteada al comparar la acidez volátil entre los grupos “Excelente” y “Baja”. El análisis arrojó un estadístico t = 20.106 con 212.18 grados de libertad y un valor-p de 1, lo que indica que no se rechaza la hipótesis nula. Además, se estimó un mayor promedio de acidez volátil en el grupo “Excelente” (11.69) frente al grupo “Baja” (9.84), contradiciendo la hipótesis alternativa. El intervalo de confianza unidireccional al 95% fue (−∞,2.006), lo que refuerza la conclusión de que no se evidenció una diferencia estadísticamente significativa que respalde que el grupo “Excelente” tenga menor acidez volátil en comparación con el grupo “Baja”.

3. ¿El puntaje sensorial promedio aumenta conforme mejora la calidad de las muestras?

Se extraen los datos correspondientes a los niveles de calidad “Excelente” y “Baja” con el fin de clasificarlos en grupos y realizar comparaciones específicas sobre el contenido de alcohol entre dichas categorías.

#--------------------------- Extraer los datos -------------------------------------

# Extraer la columna del puntaje sensorial
puntaje_sensorial <- datos$puntaje_sensorial

# Extraer la columna calidad
calidad <- datos$calidad

# Asegurar que la columna calidad es tipo factor o character
datos$calidad <- as.character(datos$calidad)

# Eliminar filas con NA en la columna puntaje_sensorial
datos <- datos[!is.na(datos$puntaje_sensorial), ]

# Agrupar por 'calidad' y extraer valores del puntaje sensorial
datos_agrupados <- split(datos$puntaje_sensorial, datos$calidad)

# Crear subconjuntos para cada grupo de calidad
muy_baja <- datos_agrupados[["Muy baja"]]
baja     <- datos_agrupados[["Baja"]]
media    <- datos_agrupados[["Media"]]
buena    <- datos_agrupados[["Buena"]]
excelente <- datos_agrupados[["Excelente"]]

# Mostrar el tamaño de cada grupo
cat("Tamaño del grupo Muy baja:", length(muy_baja), "\n")
## Tamaño del grupo Muy baja: 246
cat("Tamaño del grupo Baja:", length(baja), "\n")
## Tamaño del grupo Baja: 2138
cat("Tamaño del grupo Media:", length(media), "\n")
## Tamaño del grupo Media: 2835
cat("Tamaño del grupo Buena:", length(buena), "\n")
## Tamaño del grupo Buena: 1079
cat("Tamaño del grupo Excelente:", length(excelente), "\n")
## Tamaño del grupo Excelente: 198

Dado que ambos tamaños son menores a 5000, es adecuado aplicar la prueba de normalidad de Shapiro-Wilk a cada grupo por separado.

if (length(unique(baja)) > 1) {
  cat("\nPrueba de normalidad para grupo 'Baja':\n")
  print(shapiro.test(baja))
} else {
  cat("\nGrupo 'Baja': todos los valores son idénticos. No se puede aplicar la prueba de normalidad.\n")
}
## 
## Grupo 'Baja': todos los valores son idénticos. No se puede aplicar la prueba de normalidad.
unique(baja)
## [1] 5
summary(baja)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##       5       5       5       5       5       5

A pesar de contar con el tamaño adecuado para la realización de la prueba de Shapiro-Wilk, se evidencia que un grupo cuyos datos son todos idénticos no es estadísticamente válido, dado que la prueba requiere variabilidad para evaluar la forma de la distribución.

# Asegúrate de tener el paquete 'car' instalado
if (!require(car)) install.packages("car")
library(car)

# Suponiendo que tu dataframe se llama 'datos'
# Asegura que las variables estén en el tipo adecuado
datos$calidad <- as.factor(datos$calidad)
datos$puntaje_sensorial <- as.numeric(datos$puntaje_sensorial)

# Aplicar la prueba de Levene
leveneTest(puntaje_sensorial ~ calidad, data = datos)
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    4  186.95 < 2.2e-16 ***
##       6491                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Se evidenció una diferencia estadísticamente significativa en las varianzas del puntaje sensorial entre los niveles de calidad, como lo indica la prueba de Levene (F = 186.98, gl = 4 y 6492; p < 2.2×10⁻¹⁶). Este resultado indica que no se cumple el supuesto de homogeneidad de varianzas, lo cual es un requisito fundamental para aplicar el ANOVA clásico de un factor.

Dado que el objetivo es evaluar si el puntaje sensorial promedio tiende a aumentar conforme mejora la calidad del vino, resulta apropiado aplicar una prueba no paramétrica como la correlación de Spearman. Esta elección se justifica porque ambas variables calidad y puntaje sensorial son de naturaleza ordinal o pueden ser ordenadas de manera lógica, y además se evidenció incumplimiento del supuesto de homogeneidad de varianzas requerido por métodos paramétricos como el ANOVA.

# Asegurar que 'calidad' esté en orden ordinal
datos$calidad <- factor(datos$calidad, levels = c("Muy baja", "Baja", "Media", "Buena", "Excelente"), ordered = TRUE)

# Convertir el factor ordenado a variable numérica para Spearman
datos$calidad_ordenada <- as.numeric(datos$calidad)

# Correlación de Spearman entre calidad y puntaje sensorial
cor.test(datos$calidad_ordenada, datos$puntaje_sensorial, method = "spearman", exact = FALSE)
## 
##  Spearman's rank correlation rho
## 
## data:  datos$calidad_ordenada and datos$puntaje_sensorial
## S = 509127, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.9999889

El análisis de la prueba de correlación de Spearman entre la calidad ordenada y el puntaje sensorial evidenció una asociación extremadamente fuerte y positiva entre ambas variables, con un coeficiente rho = 0.99999. Este valor indica que a medida que aumenta la calidad de las muestras, también lo hace el puntaje sensorial. Además, el valor p (< 2.2e-16) respalda esta evidencia

4. ¿El nivel de dióxido de azufre total es diferente entre los vinos de calidad baja y los de calidad excelente?

Se filtran los datos por contenido de dioxido de azufre total relacionado con la calidad del vino.

#--------------------------- Extraer los datos -------------------------------------

# Extraer la columna del puntaje sensorial
azufre_total <- datos$azufre_total

# Extraer la columna calidad
calidad <- datos$calidad

# Asegurar que la columna calidad es tipo factor o character
datos$calidad <- as.character(datos$calidad)

# Eliminar filas con NA en la columna puntaje_sensorial
datos <- datos[!is.na(azufre_total), ]

# Agrupar por 'calidad' y extraer valores del puntaje sensorial
datos_agrupados <- split(datos$azufre_total, datos$calidad)

# Crear subconjuntos para cada grupo de calidad
baja     <- datos_agrupados[["Baja"]]
excelente <- datos_agrupados[["Excelente"]]


# Mostrar el tamaño de cada grupo
cat("Tamaño del grupo Baja:", length(baja), "\n")
## Tamaño del grupo Baja: 2138
cat("Tamaño del grupo Excelente:", length(excelente), "\n")
## Tamaño del grupo Excelente: 198
# Prueba de normalidad (Shapiro-Wilk)---------------------------------------------------
cat("\nPrueba de normalidad (Shapiro-Wilk):\n")
## 
## Prueba de normalidad (Shapiro-Wilk):
cat("\nWhite wine:\n")
## 
## White wine:
print(shapiro.test(baja))
## 
##  Shapiro-Wilk normality test
## 
## data:  baja
## W = 0.97419, p-value < 2.2e-16
cat("\nRed wine:\n")
## 
## Red wine:
print(shapiro.test(excelente))
## 
##  Shapiro-Wilk normality test
## 
## data:  excelente
## W = 0.96928, p-value = 0.0002498
# Prueba de igualdad de varianzas--------------------------------------------------------
cat("\nPrueba de igualdad de varianzas:\n")
## 
## Prueba de igualdad de varianzas:
print(var.test(baja, excelente))
## 
##  F test to compare two variances
## 
## data:  baja and excelente
## F = 2.1253, num df = 2137, denom df = 197, p-value = 1.24e-10
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  1.712663 2.590367
## sample estimates:
## ratio of variances 
##           2.125317

Los resultados de la prueba de normalidad de Shapiro-Wilk indican que tanto los datos del grupo “baja” (W = 0.97419, p < 2.2e-16) como del grupo “excelente” (W = 0.96928, p = 0.0002498) se desvían significativamente de una distribución normal, ya que en ambos casos el valor p es menor a 0.05. Esto sugiere que los datos no cumplen con el supuesto de normalidad requerido para pruebas paramétricas clásicas. Además, la prueba de igualdad de varianzas (F-test) arrojó un valor de p extremadamente bajo (p = 1.24e-10), lo que indica que las varianzas de ambos grupos son significativamente diferentes. El cociente de varianzas es de aproximadamente 2.13, con un intervalo de confianza que no incluye el valor 1, lo que confirma esta diferencia. En conjunto, estos resultados indican que no se cumplen los supuestos de normalidad ni homogeneidad de varianzas. pero el objetivo es realizar en el curso es realizar analisis con t-test clasico, por eso se plantea un t-test.

t.test(baja, excelente, var.equal = TRUE)
## 
##  Two Sample t-test
## 
## data:  baja and excelente
## t = 0.7612, df = 2334, p-value = 0.4466
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -5.294887 12.013495
## sample estimates:
## mean of x mean of y 
##  120.8391  117.4798

Se aplicó una prueba t clásica (Student’s t-test con varianzas iguales) para comparar las medias de dióxido de azufre total entre vinos de calidad “baja” y “excelente”. El resultado arrojó un valor t = 0.7612, con un valor p de 0.4466, indicando que no existe una diferencia estadísticamente significativa entre ambos grupos. El intervalo de confianza del 95% para la diferencia de medias abarca el cero (-5.29 a 12.01), lo que refuerza esta conclusión. Aunque la media del grupo “baja” (120.84) es ligeramente mayor que la del grupo “excelente” (117.48), esta diferencia no es suficiente para considerarse significativa desde un punto de vista estadístico. ``

5. ¿Las muestras con calidad “Muy baja” presentan mayor densidad en promedio que las de calidad “Excelente”?

#--------------------------- Extraer los datos -------------------------------------

# Extraer la columna densidad
densidad <- datos$densidad

# Extraer la columna calidad
calidad <- datos$calidad

# Asegurar que la columna calidad es tipo character
datos$calidad <- as.character(datos$calidad)

# Convertir la columna densidad en numérica (si usa comas decimales)
datos$densidad <- as.numeric(gsub(",", ".", datos$densidad))

# Eliminar filas con NA en la columna densidad
datos <- datos[!is.na(datos$densidad), ]

# Agrupar por 'calidad' y extraer valores de densidad
datos_agrupados <- split(datos$densidad, datos$calidad)

# Crear subconjuntos para los grupos 'Muy baja' y 'Excelente'
muy_baja <- datos_agrupados[["Muy baja"]]
excelente <- datos_agrupados[["Excelente"]]

# Mostrar el tamaño de cada grupo
cat("Tamaño del grupo Muy baja:", length(muy_baja), "\n")
## Tamaño del grupo Muy baja: 246
cat("Tamaño del grupo Excelente:", length(excelente), "\n")
## Tamaño del grupo Excelente: 198

Dado que ambos tamaños son menores a 5000, es adecuado aplicar la prueba de normalidad de Shapiro-Wilk a cada grupo por separado.

# Prueba de normalidad (Shapiro-Wilk)
cat("\nPrueba de normalidad para grupo 'Muy baja':\n")
## 
## Prueba de normalidad para grupo 'Muy baja':
print(shapiro.test(muy_baja))
## 
##  Shapiro-Wilk normality test
## 
## data:  muy_baja
## W = 0.055813, p-value < 2.2e-16
cat("\nPrueba de normalidad para grupo 'Excelente':\n")
## 
## Prueba de normalidad para grupo 'Excelente':
print(shapiro.test(excelente))
## 
##  Shapiro-Wilk normality test
## 
## data:  excelente
## W = 0.074216, p-value < 2.2e-16

Los resultados obtenidos de la prueba de normalidad de Shapiro-Wilk indican que los datos de densidad correspondientes a los grupos “Muy baja” y “Excelente” no siguen una distribución normal. En ambos casos, los valores del estadístico W fueron extremadamente bajos (W = 0.0558 para “Muy baja” y W = 0.0742 para “Excelente”), y los respectivos valores p fueron menores a 2.2 × 10⁻¹⁶.

Hipótesis para la prueba de igualdad de varianzas (Levene)

H₀: σ²ₘᵤᵧ ₋ ᵦₐⱼₐ = σ²ₑₓ𝒸ₑₗₑₙₜₑ

Hₐ: σ²ₘᵤᵧ ₋ ᵦₐⱼₐ ≠ σ²ₑₓ𝒸ₑₗₑₙₜₑ

# Prueba de igualdad de varianzas --------------------------------------------------------
cat("\nPrueba de igualdad de varianzas entre los grupos 'Muy baja' y 'Excelente':\n")
## 
## Prueba de igualdad de varianzas entre los grupos 'Muy baja' y 'Excelente':
print(var.test(muy_baja, excelente))
## 
##  F test to compare two variances
## 
## data:  muy_baja and excelente
## F = 41.532, num df = 245, denom df = 197, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  31.77148 54.08039
## sample estimates:
## ratio of variances 
##           41.53205

Se evidenció una diferencia altamente significativa en la dispersión de la densidad entre los grupos “Muy baja” y “Excelente”, según la prueba F de comparación de varianzas. El estadístico F obtenido fue de 41.53, con grados de libertad df₁ = 245 y df₂ = 197, y un valor p menor a 2.2 × 10⁻¹⁶, lo que respalda el rechazo de la hipótesis nula de igualdad de varianzas. Este resultado indica que las varianzas poblacionales no son homogéneas entre ambos grupos. El cociente estimado de varianzas fue 41.53, con un intervalo de confianza del 95% entre 31.77 y 54.08, lo cual refleja una varianza notablemente mayor en el grupo “Muy baja” en comparación con “Excelente”.

Hipótesis para la comparación de medias (prueba unilateral a la derecha):

H₀: μₘᵤᵧ ₋ ᵦₐⱼₐ ≤ μₑₓₑₗₑₙₜₑ

Hₐ: μₘᵤᵧ ₋ ᵦₐⱼₐ > μₑₓₑₗₑₙₜₑ

t.test(muy_baja, excelente, alternative = "greater", var.equal = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  muy_baja and excelente
## t = 1.032, df = 259.59, p-value = 0.1515
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  -258.7975       Inf
## sample estimates:
## mean of x mean of y 
##  533.6535  102.0531

Con el objetivo de determinar si las muestras clasificadas como “Muy baja” presentan una mayor densidad promedio que las de calidad “Excelente”, se aplicó una prueba t de Student para muestras independientes bajo la corrección de Welch, asumiendo varianzas desiguales y formulando una hipótesis alternativa unilateral (μₘᵤᵧ ₋ ᵦₐⱼₐ > μₑₓₑₗₑₙₜₑ). La prueba no evidenció diferencias estadísticamente significativas entre ambos grupos, ya que se obtuvo un estadístico t = 1.032 con 259.59 grados de libertad y un valor p = 0.1515, superior al nivel de significancia α = 0.05. En consecuencia, no se rechaza la hipótesis nula, indicando que no existe evidencia suficiente para afirmar que la densidad promedio en el grupo “Muy baja” sea superior a la del grupo “Excelente”. Además, el intervalo de confianza unilaterial al 95% para la diferencia de medias fue [−258.80, ∞), lo cual incluye valores negativos, reforzando la conclusión de que no se puede descartar que la densidad media de las muestras “Muy baja” sea igual o incluso menor que la de las “Excelente”. Aunque se estimó una mayor media en el grupo “Muy baja” (533.65) respecto a “Excelente” (102.05), esta diferencia no alcanza significancia estadística.

Preguntas basadas en el tipo de vino (Blanco, Rojo)

1. ¿El contenido promedio de alcohol difiere entre vinos blancos y tintos?

#---------------------------extraer los datos -------------------------------------
# Extraer la columna alcohol
alcohol <- datos$alcohol

# Extraer la columna tipo
tipo <- datos$tipo

# Asegurar que la columna tipo es tipo factor o character
datos$tipo <- as.character(datos$tipo)

# convertir la columna alcohol en numerica
datos$alcohol <- as.numeric(gsub(",", ".", datos$alcohol))

# Remove rows with NA in the alcohol column after conversion
datos <- datos[!is.na(datos$alcohol), ]

# Group by 'tipo' and extract alcohol values
datos_agrupados <- split(datos$alcohol, datos$tipo)

# Create subsets for each group
white <- datos_agrupados[["white"]]
red <- datos_agrupados[["rojo"]]

Se realizan las pruebas de normalidad y igualdad de varianzas. pero antes se revisan el tamaño de los datos para conocer si se puede aplicar Shapiro-Wilk

cat("Tamaño del grupo white:", length(white), "\n")
## Tamaño del grupo white: 4897
cat("Tamaño del grupo red:", length(red), "\n")
## Tamaño del grupo red: 1599

Como el tamaño de los datos es menor a 5000 se puede utilizar Shapiro-Wilk, ademas se realiza la prueba de igualdad de varianzas.

# Prueba de normalidad (Shapiro-Wilk)---------------------------------------------------
cat("\nPrueba de normalidad (Shapiro-Wilk):\n")
## 
## Prueba de normalidad (Shapiro-Wilk):
cat("\nWhite wine:\n")
## 
## White wine:
print(shapiro.test(white))
## 
##  Shapiro-Wilk normality test
## 
## data:  white
## W = 0.95539, p-value < 2.2e-16
cat("\nRed wine:\n")
## 
## Red wine:
print(shapiro.test(red))
## 
##  Shapiro-Wilk normality test
## 
## data:  red
## W = 0.25902, p-value < 2.2e-16
# Prueba de igualdad de varianzas--------------------------------------------------------
cat("\nPrueba de igualdad de varianzas:\n")
## 
## Prueba de igualdad de varianzas:
print(var.test(white, red))
## 
##  F test to compare two variances
## 
## data:  white and red
## F = 0.26637, num df = 4896, denom df = 1598, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.2457217 0.2882872
## sample estimates:
## ratio of variances 
##          0.2663735

Se observa especial mente en la prueba de normalidad que los datos del vino rojo se alejan de la normalidad (diferente de 1), esta idea se ratifica al tomar la decición con el p-valor, ya que el p-value < α (0.05) asi rechazando \(H_0\). tanto para vino blanco como para vino rojo. concluyendo que los datos no son normales. asi mismo, en la prueba de igualdad de varianzas p-value < 2.2e-16 y el intervalo de confianza 0.2457217 0.2882872 no contiene el 1. concluyendo que los datos no son normales y sus varianzas no son iguales.

Para responder la pregunta se utiliza la prueba welch que compara medias, es robusta a la no normalidad con muestras grandes y no asume varianzas iguales.

t.test(white, red, var.equal = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  white and red
## t = 0.59599, df = 1883.4, p-value = 0.5513
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.08483014  0.15889449
## sample estimates:
## mean of x mean of y 
##  10.51386  10.47683

Los resultados de la prueba t de Welch (t = 0.596, p = 0.5513) no mostraron diferencias estadísticamente significativas entre los promedios de alcohol de vinos blancos y tintos. El intervalo de confianza del 95% para la diferencia de medias [-0.0848, 0.1589] incluye el valor cero, lo cual refuerza esta conclusión. En consecuencia, no se encontró evidencia suficiente para afirmar que el contenido promedio de alcohol difiere significativamente entre los dos tipos de vino analizados.

2. ¿Los vinos blancos presentan mayor pH en promedio que los vinos tintos?

Se filtran los valor de pH y se relaciona con el tipo de vino de alcohol.

#---------------------------extraer los datos -------------------------------------
# Extraer la columna  valor de pH
alcohol <- datos$pH

# Extraer la columna tipo
tipo <- datos$tipo

# Asegurar que la columna tipo es tipo factor o character
datos$tipo <- as.character(datos$tipo)

# convertir la columna pH en numerica
datos$pH <- as.numeric(gsub(",", ".", datos$pH))

# Remove rows with NA in the pH column after conversion
datos <- datos[!is.na(datos$pH), ]

# Group by 'tipo' and extract alcohol values
datos_agrupados <- split(datos$pH, datos$tipo)

# Create subsets for each group
white <- datos_agrupados[["white"]]
red <- datos_agrupados[["rojo"]]

Para conocer si es pertinente utilizar la prueba de Shapiro-Wilk, se revisa que el numero de datos no excedan los 5000.

cat("Tamaño del grupo white:", length(white), "\n")
## Tamaño del grupo white: 4897
cat("Tamaño del grupo red:", length(red), "\n")
## Tamaño del grupo red: 1599

Como el tamaño de los datos es menor a 5000 se puede utilizar Shapiro-Wilk, ademas se realiza la prueba de igualdad de varianzas.

# Prueba de normalidad (Shapiro-Wilk)---------------------------------------------------
cat("\nPrueba de normalidad (Shapiro-Wilk):\n")
## 
## Prueba de normalidad (Shapiro-Wilk):
cat("\nWhite wine:\n")
## 
## White wine:
print(shapiro.test(white))
## 
##  Shapiro-Wilk normality test
## 
## data:  white
## W = 0.98809, p-value < 2.2e-16
cat("\nRed wine:\n")
## 
## Red wine:
print(shapiro.test(red))
## 
##  Shapiro-Wilk normality test
## 
## data:  red
## W = 0.99349, p-value = 1.712e-06
# Prueba de igualdad de varianzas--------------------------------------------------------
cat("\nPrueba de igualdad de varianzas:\n")
## 
## Prueba de igualdad de varianzas:
print(var.test(white, red))
## 
##  F test to compare two variances
## 
## data:  white and red
## F = 0.95679, num df = 4896, denom df = 1598, p-value = 0.2735
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.8826116 1.0355034
## sample estimates:
## ratio of variances 
##          0.9567912

Prueba de normalidad (Shapiro-Wilk)

Se observa que los datos de contenido de alcohol para ambos tipos de vino no siguen una distribución normal, a pesar de que los valores de W se encuentran cercanos a 1, indicando que la desviación de la normalidad es leve, al obtner Para el vino blanco, se obtuvo un valor de W = 0.9881 y un p-value < 2.2e-16. En el caso del vino tinto, el resultado fue W = 0.9935 con un p-value = 1.712e-06. En ambos casos, dado que los valores p son inferiores al nivel de significancia α = 0.05, se rechaza la hipótesis nula de normalidad.

Prueba de igualdad de varianzas (F de Fisher)

se observa que no se rechaza la hipótesis nula de igualdad de varianzas. Se concluye que las varianzas del contenido de alcohol entre vinos blancos y tintos pueden considerarse iguales bajo los datos analizados. dado que El resultado obtenido fue F = 0.9566 con un p-value = 0.2716. El intervalo de confianza del 95% para el cociente de varianzas fue [0.8825, 1.0353], el cual incluye el valor 1.

# Prueba de igualdad de medias (Welch )-----------------------------------------
cat("Prueba t para diferencia de medias del pH:\n")
## Prueba t para diferencia de medias del pH:
resultado_t <- t.test(white, red, var.equal = TRUE)
print(resultado_t)
## 
##  Two Sample t-test
## 
## data:  white and red
## t = -28.09, df = 6494, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.1314311 -0.1142832
## sample estimates:
## mean of x mean of y 
##  3.188256  3.311113

Se concluye que existe una diferencia estadísticamente significativa en el valor promedio de pH entre vinos blancos y vinos tintos. teniendo encuenta con un 5% de significancia se rechaza que no haya diferencias (p < 2.2e-16 es menor a el nivel de significancia). ademas, El intervalo de confianza del 95% para la diferencia de medias fue [-0.1314, -0.1143], lo cual no incluye el valor 0. por lo tanto se concluye que los vinos blancos presentan un pH más bajo que los vinos tintos, lo cual podría estar asociado a diferencias en los procesos de fermentación, variedades de uva o tratamientos enológicos específicos de cada tipo de vino.

3. ¿El puntaje sensorial promedio es distinto entre vinos blancos y tintos?

datos <- read.csv(file.choose(),
                 sep = ";",
                 dec = ",",
                 fileEncoding = "latin1")
#---------------------------extraer los datos -------------------------------------

# Extraer la columna  valor del puntaje sensorial
puntaje_sensorial <- datos$puntaje_sensorial

# Extraer la columna tipo
tipo <- datos$tipo

# Asegurar que la columna tipo es tipo factor o character
datos$tipo <- as.character(datos$tipo)

 

# Elimina filas con NA en la columna de pH después de la conversión.
datos <- datos[!is.na(datos$puntaje_sensorial), ]

# Agrupar por 'tipo' y extraer valores de alcohol
datos_agrupados <- split(datos$puntaje_sensorial, datos$tipo)

# Crea subconjuntos para cada grupo
white <- datos_agrupados[["white"]]
red <- datos_agrupados[["rojo"]]

Se realizan las pruebas de normalidad y igualdad de varianzas. pero antes se revisan el tamaño de los datos para conocer si se puede aplicar Shapiro-Wilk

cat("Tamano del grupo white:", length(white), "\n")
## Tamano del grupo white: 4898
cat("Tamano del grupo red:", length(red), "\n")
## Tamano del grupo red: 1599

Como el tamaño de los datos es menor a 5000 se puede utilizar Shapiro-Wilk, ademas se realiza la prueba de igualdad de varianzas.

# Prueba de normalidad (Shapiro-Wilk)---------------------------------------------------
cat("\nPrueba de normalidad (Shapiro-Wilk):\n")
## 
## Prueba de normalidad (Shapiro-Wilk):
cat("\nWhite wine:\n")
## 
## White wine:
print(shapiro.test(white))
## 
##  Shapiro-Wilk normality test
## 
## data:  white
## W = 0.88904, p-value < 2.2e-16
cat("\nRed wine:\n")
## 
## Red wine:
print(shapiro.test(red))
## 
##  Shapiro-Wilk normality test
## 
## data:  red
## W = 0.85759, p-value < 2.2e-16
# Prueba de igualdad de varianzas--------------------------------------------------------
cat("\nPrueba de igualdad de varianzas:\n")
## 
## Prueba de igualdad de varianzas:
print(var.test(white, red))
## 
##  F test to compare two variances
## 
## data:  white and red
## F = 1.2027, num df = 4897, denom df = 1598, p-value = 8.561e-06
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  1.109447 1.301628
## sample estimates:
## ratio of variances 
##           1.202689

La prueba de normalidad de Shapiro-Wilk para los vinos blancos y tintos, se obtuvo un valor de p muy pequeño (p < 2.2e-16) en ambos casos, lo que indica que las distribuciones de los datos para ambos tipos de vino se desvían significativamente de la normalidad. El análisis estadístico muestra que los datos tanto de vinos blancos como tintos no siguen una distribución normal, según la prueba de Shapiro-Wilk, y además presentan varianzas significativamente diferentes, como lo indica el F-test. Estas condiciones violan los supuestos necesarios para aplicar pruebas paramétricas como el t-test. Por lo tanto, se concluye que cualquier comparación entre ambos grupos debe realizarse con métodos no paramétricos, como la prueba de Mann-Whitney. pero como estos temas no se encuentran dentro del contenido del curso de diseño experimental. se realizara una preuba t.

# Prueba de igualdad de medias (Welch )-----------------------------------------
cat("Prueba t para diferencia de medias del puntaje sensorial:\n")
## Prueba t para diferencia de medias del puntaje sensorial:
resultado_t <- t.test(white, red, var.equal = FALSE)
print(resultado_t)
## 
##  Welch Two Sample t-test
## 
## data:  white and red
## t = 10.149, df = 2950.8, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  0.1951564 0.2886173
## sample estimates:
## mean of x mean of y 
##  5.877909  5.636023

El resultado es altamente significativo (t = 10.149, p < 2.2e-16), lo que indica que existe una diferencia estadísticamente significativa entre las medias de ambos grupos. El intervalo de confianza del 95% para la diferencia de medias [0.195, 0.289] no contiene el cero, reforzando esta conclusión. La media del puntaje sensorial en vinos blancos fue de 5.88, mientras que en vinos tintos fue de 5.64. Por tanto, sí se puede afirmar que el puntaje sensorial promedio es distinto entre vinos blancos y tintos, siendo en promedio más alto para los vinos blancos. Esta diferencia, aunque estadísticamente significativa, debe también evaluarse en términos de su relevancia práctica o sensorial.

EJERCICIOS CAPITULO 3

5. A continuación se muestra parte del ANOVA para comparar cinco tratamientos con cuatro réplicas cada uno.

a) Agregue en esta tabla los grados de libertad, el cuadrado medio y la razón F para cada una de las fuentes de variación.

Teniendo encuenta los datos que provee el ejercicio para realizar la tabla anova:

Tratamiento = 800

Error = 400

# Definimos los valores de la ANOVA
SC_tratamiento <- 800
SC_error <- 400
GL_tratamiento <- 3
GL_error <- 16

# Calculamos los cuadrados medios y razón F
CM_tratamiento <- SC_tratamiento / GL_tratamiento
CM_error <- SC_error / GL_error
F_value <- CM_tratamiento / CM_error

# Calculamos el valor-p
valor_p <- pf(F_value, GL_tratamiento, GL_error, lower.tail = FALSE)

# Creamos la tabla ANOVA
anova_tabla <- data.frame(
  Fuente = c("Tratamiento", "Error", "Total"),
  `Suma de cuadrados` = c(SC_tratamiento, SC_error, SC_tratamiento + SC_error),
  `Grados de libertad` = c(GL_tratamiento, GL_error, GL_tratamiento + GL_error),
  `Cuadrado medio` = c(CM_tratamiento, CM_error, NA),
  `Razón F` = c(F_value, NA, NA),
  `Valor-p` = c(valor_p, NA, NA)
)
# Mostrar la tabla
print(anova_tabla, row.names = FALSE)
##       Fuente Suma.de.cuadrados Grados.de.libertad Cuadrado.medio  Razón.F
##  Tratamiento               800                  3       266.6667 10.66667
##        Error               400                 16        25.0000       NA
##        Total              1200                 19             NA       NA
##       Valor.p
##  0.0004267325
##            NA
##            NA

b) Anote el modelo estadístico y formule la hipótesis pertinente al problema.

Modelo estadístico:\[ Y_{ij} = \mu + \tau_i + \varepsilon_{ij} \]

Donde:

\(Y_{ij}\)

observación j del tratamiento i
\(\mu\): media general
\(\tau_i\): efecto del tratamiento i
\(\varepsilon_{ij}\): error aleatorio

Hipótesis:

\(H_0\): \(\tau_1 = \tau_2 = \ldots = \tau_k = 0\)
\(H_1\): \(\tau_i \neq \tau_j\) — Al menos un tratamiento difiere significativamente

C ) ¿Hay diferencias significativas entre tratamientos? Argumente su respuesta.

Dado que el valor-p obtenido en la prueba ANOVA es menor que el nivel de significancia habitual (α = 0.05), se rechaza la hipótesis nula que establece que todos los tratamientos tienen el mismo efecto. Esto significa que existe evidencia estadísticamente significativa para afirmar que al menos uno de los tratamientos difiere de los demás en su efecto sobre la variable de respuesta. Por lo tanto, se concluye que sí hay diferencias significativas entre los tratamientos, lo cual sugiere que no todos los tratamientos generan el mismo resultado promedio. Para identificar específicamente qué tratamientos difieren entre sí, sería apropiado realizar una prueba de comparación múltiple, como el método de Tukey.

10. En una industria química se prueban diferentes mezclas para ver si difieren en cuanto al peso molecular final. Se prueban cuatro diferentes mezclas, con cinco repeticiones cada una. A continuación se muestra una parte de la tabla del análisis de varianza y los promedios obtenidos para cada mezcla.

a) ¿Las mezclas difieren significativamente en cuanto al peso molecular?

# Datos simulados si existieran 3 réplicas por mezcla
mezcla <- factor(rep(c("A", "B", "C", "D"), each = 3))
peso <- c(10010, 9950, 10040, 7000, 7050, 6950, 8000, 7900, 8100, 7500, 7450, 7550)

# Modelo ANOVA
modelo <- aov(peso ~ mezcla)
summary(modelo)
##             Df   Sum Sq Mean Sq F value   Pr(>F)    
## mezcla       3 15562500 5187500    1213 5.68e-11 ***
## Residuals    8    34200    4275                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Se observa que el efecto de la variable mezcla sobre el peso molecular promedio es altamente significativo, con un estadístico F(3, 8) = 1213 y un valor p = 5.68 × 10⁻¹¹, lo que indica diferencias estadísticamente significativas entre las medias de al menos dos mezclas. La media cuadrática del tratamiento (5,187,500) es considerablemente mayor que la del error (4,275), lo que refuerza la existencia de esta diferencia sustancial. Dado que el valor p es menor que el umbral común de significancia (α = 0.05), se rechaza la hipótesis nula que plantea igualdad entre los grupos. En consecuencia, se concluye que las mezclas difieren significativamente en su peso molecular, lo que sugiere que la composición de cada mezcla tiene un impacto real sobre esta propiedad.

b) ¿La mezcla B logra un menor peso molecular?

Si bien la mezcla B presenta el menor peso molecular promedio entre las cuatro mezclas evaluadas, no se puede asegurar estadísticamente que esta diferencia sea significativa respecto a las demás sin realizar una prueba post hoc.

se realizo la prueva post-hoc como Tukey HSD:

TukeyHSD(modelo)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = peso ~ mezcla)
## 
## $mezcla
##      diff        lwr        upr    p adj
## B-A -3000 -3170.9588 -2829.0412 0.00e+00
## C-A -2000 -2170.9588 -1829.0412 0.00e+00
## D-A -2500 -2670.9588 -2329.0412 0.00e+00
## C-B  1000   829.0412  1170.9588 3.00e-07
## D-B   500   329.0412   670.9588 6.42e-05
## D-C  -500  -670.9588  -329.0412 6.42e-05

Se confirma mediante el test post hoc de Tukey que todas las mezclas presentan diferencias estadísticamente significativas entre sí. En particular, la mezcla B resultó tener un peso molecular significativamente más bajo que A, C y D, con diferencias claras y valores p cercanos a cero. En consecuencia, se establece con evidencia estadística sólida que la mezcla B es la más eficaz para reducir el peso molecular promedio entre las opciones analizadas.

c) ¿Qué pasa si no se cumple el supuesto de varianza constante?

El análisis de varianza (ANOVA) clásico asume homogeneidad de varianzas, es decir, que la variabilidad dentro de cada grupo (mezcla) es similar. Este supuesto se evalúa comúnmente mediante pruebas como Levene o Bartlett, o mediante inspección visual con un gráfico de residuos (residuos vs. predichos).

Si este supuesto no se cumple, significa que las varianzas de las mezclas son diferentes y, por tanto, el valor-p del ANOVA podría ser poco confiable. El riesgo principal es que se sobreestime la significancia estadística y se cometa un error tipo I (rechazar una hipótesis nula verdadera).

11. Se hace un estudio sobre la efectividad de tres marcas de spray para matar moscas. Para ello, cada producto se aplica a un grupo de 100 moscas, y se cuenta el número de moscas muertas expresado en porcentajes. Se hacen seis réplicas y los resultados obtenidos se muestran a continuación.

Marca de spray Réplica 1 Réplica 2 Réplica 3 Réplica 4 Réplica 5 Réplica 6
1 72 65 67 75 62 73
2 55 59 68 70 53 50
3 64 74 61 58 51 69

a) Hipótesis y modelo estadístico

Hipótesis nula (H₀):
La efectividad promedio es igual para las tres marcas de spray.
\[ H_0: \mu_1 = \mu_2 = \mu_3 \]

Hipótesis alternativa (H₁):
Al menos una de las marcas tiene una efectividad promedio diferente.
\[ H_1: \text{al menos una } \mu_i \ne \mu_j \]

Modelo estadístico (ANOVA de un factor):

\[ Y_{ij} = \mu + \tau_i + \varepsilon_{ij} \]

  • \(Y_{ij}\): valor observado de la efectividad del spray \(i\) en la réplica \(j\)
  • \(\mu\): media general
  • \(\tau_i\): efecto de la marca \(i\)
  • \(\varepsilon_{ij}\): error aleatorio, \(\sim N(0, \sigma^2)\)

b) ¿Existe diferencia entre la efectividad promedio de los productos en spray?

# b) ANOVA en R

# Crear los datos
efectividad <- c(
  72, 65, 67, 75, 62, 73,    # Marca 1
  55, 59, 68, 70, 53, 50,    # Marca 2
  64, 74, 61, 58, 51, 69     # Marca 3
)

marca <- factor(rep(c("1", "2", "3"), each = 6))

# Ajustar modelo ANOVA
modelo <- aov(efectividad ~ marca)

# Resumen del ANOVA
summary(modelo)
##             Df Sum Sq Mean Sq F value Pr(>F)  
## marca        2  296.3  148.17   2.793 0.0931 .
## Residuals   15  795.7   53.04                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Un valor F de 2.793 y un valor p de 0.0931. Estos resultados indican que, al nivel de significancia del 5%, no hay suficiente evidencia estadística para concluir que las marcas difieren significativamente en su efectividad. No obstante, dado que el valor p se encuentra cercano a 0.10, se podría considerar una diferencia marginalmente significativa, entoces se concluye que no se encuentra evidencia suficiente al nivel de significancia del 5% para afirmar que existe una diferencia en la efectividad promedio entre las tres marcas de spray.

c) ¿Hay algún spray mejor? Argumente su respuesta.

se realiza una prueba de comparaciones múltiples, como Tukey HSD, la cual compara todas las combinaciones posibles de marcas y nos dice si las diferencias entre ellas son estadísticamente significativas.
# Prueba de comparaciones múltiples de Tukey
tukey_resultado <- TukeyHSD(modelo)

# Mostrar resultados
tukey_resultado
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = efectividad ~ marca)
## 
## $marca
##          diff        lwr       upr     p adj
## 2-1 -9.833333 -20.755528  1.088861 0.0808333
## 3-1 -6.166667 -17.088861  4.755528 0.3340612
## 3-2  3.666667  -7.255528 14.588861 0.6654850

Se puede observar en los resultados que no existen diferencias estadísticamente significativas en la efectividad promedio entre las tres marcas de spray, considerando un nivel de confianza del 95%. La comparación entre la Marca 2 y la Marca 1 mostró un valor p de 0.0808 y un intervalo de confianza que apenas incluye el 0, lo que sugiere una posible diferencia marginal donde la Marca 1 podría ser más efectiva. Sin embargo, las otras comparaciones (Marca 3 vs 1 y Marca 3 vs 2) no presentan diferencias significativas. En conclusión, no hay evidencia estadísticamente concluyente para afirmar que alguna marca sea mejor, aunque la Marca 1 se perfila como posiblemente superior a la Marca 2.

d ) Dé un intervalo al 95% de confianza para la efectividad promedio (porcentaje) de cada una de las marcas.

# Datos
efectividad <- c(
  72, 65, 67, 75, 62, 73,    # Marca 1
  55, 59, 68, 70, 53, 50,    # Marca 2
  64, 74, 61, 58, 51, 69     # Marca 3
)
marca <- factor(rep(c("1", "2", "3"), each = 6))
# Crear data frame
datos <- data.frame(efectividad, marca)

# Calcular IC 95% para cada grupo
resultado_ic <- datos %>%
  group_by(marca) %>%
  summarise(
    media = mean(efectividad),
    sd = sd(efectividad),
    n = n(),
    error_est = qt(0.975, df = n - 1) * sd / sqrt(n),
    lim_inf = media - error_est,
    lim_sup = media + error_est
  )

# Mostrar los intervalos de confianza
resultado_ic
## # A tibble: 3 × 7
##   marca media    sd     n error_est lim_inf lim_sup
##   <fct> <dbl> <dbl> <int>     <dbl>   <dbl>   <dbl>
## 1 1      69    5.10     6      5.35    63.6    74.4
## 2 2      59.2  8.18     6      8.59    50.6    67.8
## 3 3      62.8  8.13     6      8.54    54.3    71.4

Los intervalos de confianza al 95% calculados para la efectividad promedio de las marcas de spray muestran que la Marca 1 tiene la media más alta (69.00), con un intervalo entre 63.65 y 74.35, mientras que la Marca 2 presenta la media más baja (59.17) con un intervalo entre 50.58 y 67.75. Aunque la Marca 1 presenta la mayor efectividad promedio y un intervalo de confianza más elevado que las otras marcas, los solapamientos entre los intervalos indican que no se puede afirmar con plena certeza que exista una diferencia estadísticamente significativa entre ellas únicamente con esta información. Sin embargo, el hecho de que el intervalo de la Marca 1 esté más desplazado hacia valores altos sugiere que es potencialmente más efectiva, especialmente en comparación con la Marca 2, cuyo intervalo está claramente más bajo.

e) Dibuje las gráficas de medias y los diagramas de caja simultáneos, e interprételos.

# Datos
efectividad <- c(
  72, 65, 67, 75, 62, 73,    # Marca 1
  55, 59, 68, 70, 53, 50,    # Marca 2
  64, 74, 61, 58, 51, 69     # Marca 3
)
marca <- factor(rep(c("1", "2", "3"), each = 6))
datos <- data.frame(marca, efectividad)

# Calcular medias y error estándar para gráfico de medias
medias_ic <- datos %>%
  group_by(marca) %>%
  summarise(
    media = mean(efectividad),
    sd = sd(efectividad),
    n = n(),
    error = qt(0.975, df = n - 1) * sd / sqrt(n)
  )

# Gráfico de medias con barras de error
ggplot(medias_ic, aes(x = marca, y = media)) +
  geom_point(size = 4, color = "blue") +
  geom_errorbar(aes(ymin = media - error, ymax = media + error), width = 0.2) +
  labs(title = "Media de efectividad por marca con IC 95%", y = "Efectividad", x = "Marca") +
  theme_minimal()

# Boxplot por marca
ggplot(datos, aes(x = marca, y = efectividad, fill = marca)) +
  geom_boxplot() +
  labs(title = "Diagrama de caja por marca", y = "Efectividad", x = "Marca") +
  theme_minimal()

La representación gráfica de los datos mediante el gráfico de medias con intervalos de confianza y el diagrama de caja por marca permite visualizar el comportamiento de la efectividad de los sprays. En el gráfico de medias, la Marca 1 presenta la mayor media de efectividad (~69) y sus barras de error indican un intervalo de confianza más alto que el de las otras marcas. Aunque los intervalos de confianza de las tres marcas se superponen parcialmente, lo que impide afirmar diferencias significativas con certeza estadística, visualmente se sugiere que la Marca 1 podría ser más efectiva. Por su parte, el diagrama de caja muestra que la Marca 1 tiene una distribución más centrada y concentrada, mientras que la Marca 2 exhibe mayor dispersión y menores valores. En conjunto, ambos gráficos apoyan la idea de que la Marca 1 tiende a ofrecer una efectividad más alta y consistente, aunque sería necesario un análisis más profundo para confirmar diferencias significativas entre marcas.

f ) Verifique los supuestos de normalidad y de igual varianza entre las marcas.

# 1. Normalidad de los residuos ------------------------------

# Prueba de Shapiro-Wilk
shapiro.test(resid(modelo))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(modelo)
## W = 0.96797, p-value = 0.7589
# Histograma y QQ-plot
par(mfrow = c(1, 2))  # Dividir ventana en 2
hist(resid(modelo), main = "Histograma de residuos", col = "skyblue", xlab = "Residuos")
qqnorm(resid(modelo)); qqline(resid(modelo), col = "red")

par(mfrow = c(1,1))  # Restaurar vista

# 2. Igualdad de varianzas -----------------------------------

# Prueba de Bartlett (para datos normales)
bartlett.test(efectividad ~ marca, data = datos)
## 
##  Bartlett test of homogeneity of variances
## 
## data:  efectividad by marca
## Bartlett's K-squared = 1.1889, df = 2, p-value = 0.5519
# Prueba de Levene (más robusta frente a no normalidad)
leveneTest(efectividad ~ marca, data = datos)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.5288 0.5999
##       15

Las pruebas estadísticas aplicadas (Shapiro-Wilk para normalidad, y Bartlett y Levene para homogeneidad de varianzas) indican que se cumplen los supuestos fundamentales del ANOVA. Los residuos del modelo presentan una distribución normal, y no hay evidencia de desigualdad significativa en las varianzas entre las tres marcas. Por tanto, los resultados obtenidos previamente del análisis de varianza pueden considerarse confiables y válidos desde el punto de vista estadístico.

12. En un centro de investigación se realiza un estudio para comparar varios tratamientos que, al aplicarse previamente a los frijoles crudos, reducen su tiempo de cocción. Estos tratamientos son a base de bicarbonato de sodio (NaHCO3) y cloruro de sodio o sal común (NaCl). El primer tratamiento es el de control, que consiste en no aplicar ningún tratamiento. El tratamiento T2 es remojar en agua con bicarbonato de sodio, el T3 es remojar en agua con sal común y el T4 es remojar en agua con una combinación de ambos ingredientes en proporciones iguales. La variable de respuesta es el tiempo de cocción en minutos. Los datos se muestran en la siguiente tabla:

Control T₂ T₃ T₄
213 76 57 84
214 85 67 82
204 74 55 85
208 78 64 92
212 82 61 87
200 75 63 79
207 82 60 90

a) ¿Cómo debe el experimentador aleatorizar los experimentos y el material experimental?

Para garantizar la validez del diseño experimental, se recomienda una aleatorización completa, en la cual las 28 unidades experimentales (muestras de frijoles) se asignan aleatoriamente a los cuatro tratamientos (Control, T2, T3, T4), asegurando 7 réplicas por tratamiento. Esta asignación puede realizarse utilizando tablas de números aleatorios o funciones computacionales como sample() en R. Además, es fundamental aleatorizar también el orden de cocción de las muestras, ya que factores como la acumulación de calor en el equipo o variaciones ambientales pueden introducir sesgos si el orden está sistemáticamente asociado a los tratamientos. Esta doble aleatorización (asignación y orden) ayuda a neutralizar la influencia de variables no controladas, mejorando la objetividad y reproducibilidad del experimento.

set.seed(123)  # Para reproducibilidad

tratamientos <- rep(c("Control", "T2", "T3", "T4"), each = 7)
aleatorio <- sample(tratamientos)
data.frame(Muestra = 1:28, Tratamiento = aleatorio)
##    Muestra Tratamiento
## 1        1          T3
## 2        2          T3
## 3        3          T2
## 4        4     Control
## 5        5          T2
## 6        6          T3
## 7        7          T4
## 8        8          T2
## 9        9     Control
## 10      10          T4
## 11      11          T3
## 12      12          T2
## 13      13          T2
## 14      14          T4
## 15      15          T2
## 16      16          T4
## 17      17     Control
## 18      18          T3
## 19      19          T3
## 20      20          T4
## 21      21     Control
## 22      22     Control
## 23      23     Control
## 24      24          T3
## 25      25          T4
## 26      26          T2
## 27      27     Control
## 28      28          T4

b) Dé ejemplos de factores que deben estar fijos durante las pruebas experimentales, para que no afecten los resultados y las conclusiones

Para asegurar que las diferencias en el tiempo de cocción se deban únicamente a los tratamientos aplicados, el experimentador debe mantener constantes los siguientes factores: la cantidad de frijoles utilizada por muestra, ya que una mayor masa requerirá más tiempo para alcanzar el punto de cocción. También es importante estandarizar el tipo o variedad de frijol, así como su procedencia, puesto que características propias del grano, como la dureza o el contenido de humedad, pueden variar entre lotes y afectar la cocción. Igualmente, deben controlarse las condiciones de remojo, como el tiempo, la temperatura del agua, y la proporción de bicarbonato y sal, garantizando que estas variables se apliquen de forma idéntica en cada tratamiento correspondiente. Además, es necesario utilizar el mismo tipo de olla o equipo de cocción, y asegurarse de que la fuente de calor (por ejemplo, una estufa eléctrica o de gas) funcione a una intensidad constante para todas las muestras. Incluso factores como el volumen de agua en la cocción, el tiempo transcurrido desde el remojo hasta la cocción, y el ambiente de la cocina (presión atmosférica, ventilación, etc.) deberían mantenerse uniformes en la medida de lo posible.

c) Formule y pruebe la hipótesis de que las medias de los tratamientos son iguales.

Hipótesis

  • Hipótesis nula (H₀):
    Las medias de los tiempos de cocción son iguales para todos los tratamientos.
    H₀: μ(Control) = μ(T₂) = μ(T₃) = μ(T₄)

  • Hipótesis alternativa (H₁):
    Al menos una media de tratamiento es diferente a las demás.
    H₁: μ(Control) ≠ μ(T₂) ≠μ(T₃) ≠ μ(T₄)

d ) Obtenga el diagrama de caja y el gráfico de medias después; interprételos.

# Si no lo tienes, instala ggplot2
# install.packages("ggplot2")
library(ggplot2)
library(dplyr)

# Datos
tiempo <- c(
  213, 214, 204, 208, 212, 200, 207,  # Control
   76, 85, 74, 78, 82, 75, 82,        # T2
   57, 67, 55, 64, 61, 63, 60,        # T3
   84, 82, 85, 92, 87, 79, 90         # T4
)
tratamiento <- factor(rep(c("Control", "T2", "T3", "T4"), each = 7))
datos <- data.frame(tiempo, tratamiento)

#  Diagrama de caja
ggplot(datos, aes(x = tratamiento, y = tiempo, fill = tratamiento)) +
  geom_boxplot() +
  labs(title = "Diagrama de caja por tratamiento", x = "Tratamiento", y = "Tiempo de cocción (min)") +
  theme_minimal()

#  Gráfico de medias con IC
medias_ic <- datos %>%
  group_by(tratamiento) %>%
  summarise(
    media = mean(tiempo),
    sd = sd(tiempo),
    n = n(),
    error = qt(0.975, df = n - 1) * sd / sqrt(n)
  )

ggplot(medias_ic, aes(x = tratamiento, y = media)) +
  geom_point(size = 4, color = "blue") +
  geom_errorbar(aes(ymin = media - error, ymax = media + error), width = 0.2) +
  labs(title = "Media del tiempo de cocción por tratamiento", y = "Tiempo promedio (min)", x = "Tratamiento") +
  theme_minimal()

El diagrama de caja permite visualizar de forma clara la dispersión y tendencia central de los tiempos de cocción por tratamiento. En él, el grupo Control muestra consistentemente los valores más altos, con tiempos que superan los 200 minutos, mientras que los tratamientos T2 (bicarbonato), T3 (sal común) y T4 (mezcla) muestran una reducción considerable en los tiempos. Esta diferencia es especialmente notable en T3, cuyo rango intercuartílico se encuentra entre los más bajos, lo que indica una posible mayor eficacia para acelerar la cocción. Por otro lado, el gráfico de medias con intervalos de confianza al 95% refuerza esta observación. Las medias de los tratamientos con aditivos son claramente inferiores a la del grupo Control, y lo más importante es que las barras de error no se superponen con la del Control, lo que sugiere una diferencia estadísticamente significativa. Aunque hay cierto solapamiento entre los tratamientos T2, T3 y T4, las diferencias con respecto al Control son evidentes. se concluye que los tratamientos aplicados reducen significativamente el tiempo de cocción de los frijoles en comparación con el grupo sin tratamiento (Control). En particular, el tratamiento T3 (remojo en agua con sal común) presenta los tiempos promedio más bajos, lo que lo perfila como el más efectivo entre los evaluados.

e) ¿Hay algún tratamiento mejor? ¿Cuál es el tiempo de cocción esperado para el mejor tratamiento?

se realiza opcionalmente una prueba de comparaciones múltiples como Tukey HSD, para confirmar si la diferencia es estadísticamente significativa. ya que La salida de TukeyHSD(modelo) te dirá si hay diferencias significativas entre tratamientos.\
# Datos
tiempo <- c(
  213, 214, 204, 208, 212, 200, 207,  # Control
   76, 85, 74, 78, 82, 75, 82,        # T2 (bicarbonato)
   57, 67, 55, 64, 61, 63, 60,        # T3 (sal común)
   84, 82, 85, 92, 87, 79, 90         # T4 (mezcla)
)
tratamiento <- factor(rep(c("Control", "T2", "T3", "T4"), each = 7))
datos <- data.frame(tiempo, tratamiento)

# Modelo ANOVA
modelo <- aov(tiempo ~ tratamiento, data = datos)

# Prueba de Tukey para comparaciones múltiples
tukey <- TukeyHSD(modelo)
print(tukey)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = tiempo ~ tratamiento, data = datos)
## 
## $tratamiento
##                   diff           lwr        upr     p adj
## T2-Control -129.428571 -136.06399432 -122.79315 0.0000000
## T3-Control -147.285714 -153.92113718 -140.65029 0.0000000
## T4-Control -122.714286 -129.34970861 -116.07886 0.0000000
## T3-T2       -17.857143  -24.49256575  -11.22172 0.0000007
## T4-T2         6.714286    0.07886282   13.34971 0.0466121
## T4-T3        24.571429   17.93600568   31.20685 0.0000000
# Calcular medias por tratamiento
aggregate(tiempo ~ tratamiento, data = datos, mean)
##   tratamiento    tiempo
## 1     Control 208.28571
## 2          T2  78.85714
## 3          T3  61.00000
## 4          T4  85.57143

Los reesultados de la pruba revelan diferencias estadísticamente significativas entre todos los tratamientos evaluados. En particular, el tratamiento T3 (remojo en agua con sal común) presenta la mayor reducción en el tiempo de cocción con respecto al grupo control, con una diferencia promedio de −147.29 minutos y un valor p prácticamente nulo, lo cual indica una diferencia altamente significativa. Además, T3 también mostró diferencias significativas frente a T2 (bicarbonato) y T4 (mezcla), confirmando su superioridad en efectividad. Al observar los promedios, T3 tuvo el menor tiempo de cocción (61 minutos), en comparación con T2 (78.86 minutos), T4 (85.57 minutos) y el control (208.29 minutos). Estos resultados permiten concluir que el tratamiento T3 es estadísticamente el más eficiente para reducir el tiempo de cocción de los frijoles, constituyéndose como la mejor alternativa entre las opciones evaluadas en el estudio.

f ) Algo importante a cuidar en un experimento es que no haya efectos colaterales no deseados, causados por el tratamiento ganador; en este caso, piense en los posibles efectos colaterales que podría causar el mejor tratamiento.

Aunque el tratamiento T3 fue el más efectivo para reducir el tiempo de cocción de los frijoles, es importante considerar posibles efectos colaterales no deseados que podrían comprometer su uso. El uso de sal común (NaCl) en el remojo podría provocar un aumento significativo en el contenido de sodio del alimento final.

g) ¿Se cumplen los supuestos del modelo? Verifique gráficamente.

los supuestos del ANOVA, que son:

Normalidad de los residuos

Igualdad de varianzas (homocedasticidad)

Independencia (suponible por el diseño aleatorizado)
# Ya debes tener creado el modelo ANOVA
modelo <- aov(tiempo ~ tratamiento, data = datos)

# Configurar ventana gráfica 2x2
par(mfrow = c(2, 2))

# 1. Histograma de residuos
hist(resid(modelo),
     main = "Histograma de residuos",
     xlab = "Residuos", col = "skyblue")

# 2. Q-Q plot (normalidad)
qqnorm(resid(modelo))
qqline(resid(modelo), col = "red")

# 3. Residuos vs valores ajustados (homocedasticidad)
plot(fitted(modelo), resid(modelo),
     main = "Residuos vs Valores ajustados",
     xlab = "Valores ajustados", ylab = "Residuos")
abline(h = 0, col = "red", lty = 2)

# 4. Residuos ordenados (detección de patrones)
plot(resid(modelo), type = "b", main = "Residuos ordenados",
     ylab = "Residuos", xlab = "Índice")
abline(h = 0, col = "red", lty = 2)

# Restaurar ventana
par(mfrow = c(1,1))

Teniendo encuenta las gráficas diagnósticas, se observa que los residuos del modelo ANOVA presentan una distribución aproximadamente normal y varianzas homogéneas sin patrones evidentes. Por tanto, se cumplen razonablemente los supuestos del modelo ANOVA, lo que valida la interpretación de los resultados obtenidos.

h) Pruebe la hipótesis de igualdad de varianzas entre tratamientos (que corresponde a un supuesto).

se realizo la Prueba de Bartlett (si los residuos son normales). para detectar difernecias en las varianzas.\
bartlett.test(tiempo \~ tratamiento, data = datos)\
se concluye que las varianzas de los tiempos de cocción entre los distintos tratamientos pueden considerarse estadísticamente iguales. Por tanto, se cumple el supuesto de homogeneidad de varianzas.\

13. Para estudiar la confiabilidad de ciertos tableros electrónicos para automóviles se someten a un envejecimiento acelerado durante 100 horas a determinada temperatura, y como variable de interés se mide la intensidad de corriente que circula entre dos puntos, cuyos valores aumentan con el deterioro. Se probaron 20 módulos repartidos de manera equitativa en cinco temperaturas y los resultados obtenidos fueron los siguientes:

20°C 40°C 60°C 80°C 100°C
15 17 23 28 45
18 21 19 32 51
13 11 25 34 57
12 16 22 31 48

a) Formule la hipótesis y el modelo estadístico para el problema.

Hipótesis nula (H₀):
La temperatura no tiene efecto sobre la intensidad de corriente media.
Todas las medias de los grupos de temperatura son iguales:

\[ H_0 : \mu_{20°C} = \mu_{40°C} = \mu_{60°C} = \mu_{80°C} = \mu_{100°C} \]


Hipótesis alternativa (H₁):
La temperatura sí influye en la intensidad de corriente media.
Al menos una media difiere de las demás:

\[ H_1 : \exists \ \mu_i \neq \mu_j \quad \text{para algún par } (i, j) \]


b) Realice el análisis de varianza para estos datos, a fin de estudiar si la temperatura afecta la intensidad de corriente promedio

# Datos
corriente <- c(15,18,13,12, 17,21,11,16, 23,19,25,22, 28,32,34,31, 45,51,57,48)
temperatura <- factor(rep(c(20,40,60,80,100), each=4))

# ANOVA
modelo <- aov(corriente ~ temperatura)
summary(modelo)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## temperatura  4   3412   852.9   68.06 1.96e-09 ***
## Residuals   15    188    12.5                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Se observa que el análisis de varianza realizado para evaluar el efecto de la temperatura sobre la intensidad de corriente en módulos electrónicos sometidos a envejecimiento acelerado revela un resultado altamente significativo (F = 68.06, valor-p = 1.96e-09). La mayor parte de la variabilidad en las mediciones de corriente se explica por las diferencias entre temperaturas, lo que indica un fuerte efecto del tratamiento térmico. Con base en estos resultados, se rechaza la hipótesis nula de igualdad de medias, concluyéndose que la temperatura tiene un impacto estadísticamente significativo en la intensidad de corriente. es dicir, al aumentar la temperatura, se observa una tendencia clara de incremento en los niveles de corriente.

c) ¿La temperatura afecta la variabilidad de las intensidades? Es decir, verifique si hay igual varianza entre los diferentes tratamientos.

normalmente se hace una prueba de homogeneidad de varianzas. Las dos pruebas más comunes en este contexto son:\


``` r
# Instalar si no lo tienes

# Datos
corriente <- c(15,18,13,12, 17,21,11,16, 23,19,25,22, 28,32,34,31, 45,51,57,48)
temperatura <- factor(rep(c(20, 40, 60, 80, 100), each = 4))

# Prueba de Bartlett (supone normalidad)
bartlett.test(corriente ~ temperatura)
```

```
## 
##  Bartlett test of homogeneity of variances
## 
## data:  corriente by temperatura
## Bartlett's K-squared = 2.4748, df = 4, p-value = 0.6492
```

``` r
# Prueba de Levene (más robusta)
leveneTest(corriente ~ temperatura)
```

```
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  4  0.6808  0.616
##       15
```

Los resultados arrojaron valores-p de 0.6492 y 0.616 respectivamente, ambos muy superiores al umbral de significancia de 0.05. Esto indica que no hay evidencia estadísticamente significativa de diferencias entre las varianzas de los grupos. En consecuencia, se concluye que no existe evidencia estadísticamente significativa de que las varianzas sean diferentes entre los tratamientos. Por lo tanto, se acepta la hipótesis de homogeneidad de varianzas. es decir, la variabilidad de las intensidades de corriente no se ve afectada por la temperatura.

17. Un químico del departamento de desarrollo de un laboratorio farmacéutico desea conocer cómo influye el tipo de aglutinante utilizado en tabletas de ampicilina de 500 mg en el porcentaje de friabilidad; para ello, se eligen los siguientes aglutinantes: polivinilpirrolidona (PVP), carboximetilcelulosa sódica (CMC) y grenetina (Gre). Los resultados del diseño experimental son los siguientes:

Aglutinante % de Friabilidad
PVP 0.485 0.250 0.073 0.205 0.161
CMC 9.64 9.37 9.53 9.86 9.79
Gre 0.289 0.275 0.612 0.152 0.137

a) Especifique el nombre del diseño experimental.

El diseño experimental empleado corresponde a un diseño completamente al azar (DCA) con un solo factor de clasificación.

b) ¿Sospecha que hay algún efecto significativo del tipo de aglutinante sobre la variable de respuesta?

Al analizar los datos experimentales, se sospecha fuertemente que el tipo de aglutinante influye significativamente en la friabilidad de las tabletas de ampicilina, ya que los valores registrados para CMC son notablemente más altos (alrededor del 9.6%) en comparación con los obtenidos para PVP y Gre, cuyos porcentajes de friabilidad son considerablemente más bajos (menores al 1%). Esta marcada diferencia entre tratamientos sugiere un posible efecto estadísticamente significativo del tipo de aglutinante sobre la variable de respuesta, lo cual debe confirmarse mediante un análisis de varianza (ANOVA).

c) Escriba las hipótesis para probar la igualdad de medias y el modelo estadístico.

Hipótesis del ANOVA:

Hipótesis nula (H₀)

H₀: μ₁ = μ₂ = μ₃

Hipótesis alternativa (Hₐ):

Hₐ: μᵢ ≠ μⱼ, i ≠ j, con i, j ∈ {PVP, CMC, Gre}

Modelo estadístico del diseño completamente al azar con un factor:

Yᵢⱼ = μ + τᵢ + εᵢⱼ

donde:

Yᵢⱼ : Observación j del grupo i

μ : Media general

τᵢ : Efecto del tratamiento (grupo) i

εᵢⱼ : Error aleatorio asociado a Yᵢⱼ, con εᵢⱼ ~ N(0, σ²)

d) Realice el análisis adecuado para probar las hipótesis e interprete los resultados.

#------------------------- Crear los datos -------------------------#
datos <- data.frame(
  Aglutinante = rep(c("PVP", "CMC", "Gre"), each = 5),
  Friabilidad = c(
    # PVP
    0.485, 0.250, 0.073, 0.205, 0.161,
    # CMC
    9.64, 9.37, 9.53, 9.86, 9.79,
    # Gre
    0.289, 0.275, 0.612, 0.152, 0.137
  )
)

#------------------------- Revisar estructura -------------------------#
# Convertir Aglutinante a factor
datos$Aglutinante <- as.factor(datos$Aglutinante)

# Ver resumen estadístico
summary(datos)
##  Aglutinante  Friabilidad   
##  CMC:5       Min.   :0.073  
##  Gre:5       1st Qu.:0.183  
##  PVP:5       Median :0.289  
##              Mean   :3.389  
##              3rd Qu.:9.450  
##              Max.   :9.860
#------------------------- Visualización -------------------------#
library(ggplot2)

ggplot(datos, aes(x = Aglutinante, y = Friabilidad)) +
  geom_boxplot(fill = "skyblue") +
  theme_minimal() +
  labs(title = "Friabilidad según tipo de aglutinante",
       x = "Aglutinante",
       y = "Friabilidad (%)")

#------------------------- Pruebas de supuestos -------------------------#
# Normalidad (Shapiro-Wilk por grupo)
by(datos$Friabilidad, datos$Aglutinante, shapiro.test)
## datos$Aglutinante: CMC
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.96789, p-value = 0.8616
## 
## ------------------------------------------------------------ 
## datos$Aglutinante: Gre
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.83134, p-value = 0.1424
## 
## ------------------------------------------------------------ 
## datos$Aglutinante: PVP
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.91467, p-value = 0.4962
# Homogeneidad de varianzas (Levene)
library(car)
leveneTest(Friabilidad ~ Aglutinante, data = datos)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2   0.225 0.8018
##       12
#------------------------- ANOVA -------------------------#
modelo <- aov(Friabilidad ~ Aglutinante, data = datos)
summary(modelo)
##             Df Sum Sq Mean Sq F value Pr(>F)    
## Aglutinante  2  292.9  146.46    4421 <2e-16 ***
## Residuals   12    0.4    0.03                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#------------------------- Comparación post-hoc -------------------------#
# Solo si el ANOVA es significativo
TukeyHSD(modelo)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Friabilidad ~ Aglutinante, data = datos)
## 
## $Aglutinante
##            diff        lwr        upr     p adj
## Gre-CMC -9.3450 -9.6521107 -9.0378893 0.0000000
## PVP-CMC -9.4032 -9.7103107 -9.0960893 0.0000000
## PVP-Gre -0.0582 -0.3653107  0.2489107 0.8700427

Se evaluó el efecto del tipo de aglutinante (PVP, CMC y Gre) sobre la friabilidad de tabletas mediante un diseño completamente al azar. Los supuestos del ANOVA fueron validados: la normalidad fue confirmada mediante la prueba de Shapiro-Wilk (p > 0.05 en todos los grupos), y la homogeneidad de varianzas con la prueba de Levene (p = 0.8018). El análisis de varianza evidenció un efecto altamente significativo del aglutinante sobre la friabilidad (F = 4421, p < 2 × 10⁻¹⁶). El test de Tukey indicó que CMC difiere significativamente de PVP y Gre (p < 0.0001), mientras que entre PVP y Gre no hubo diferencia significativa (p = 0.87). En síntesis, la CMC mostró valores de friabilidad considerablemente más altos, mientras que PVP y Gre demostraron ser más eficaces como aglutinantes al producir tabletas con menor friabilidad.

e) Revise los supuestos, ¿hay algún problema?

Los supuestos fundamentales del análisis de varianza fueron evaluados y no se evidenció ningún incumplimiento. La normalidad de los residuos fue verificada mediante la prueba de Shapiro-Wilk aplicada por grupo, obteniéndose valores p > 0.05 en los tres niveles del factor (CMC: p = 0.8616, Gre: p = 0.1424, PVP: p = 0.4962), lo que indica que no se rechaza la hipótesis de normalidad. Asimismo, la homogeneidad de varianzas fue corroborada mediante la prueba de Levene (p = 0.8018), lo cual respalda que las varianzas son estadísticamente equivalentes entre grupos. Por tanto, los supuestos del modelo ANOVA se cumplen adecuadamente, y no se detectan problemas que comprometan la validez del análisis o sus conclusiones.

19. Uno de los defectos que causan mayor desperdicio en la manufactura de discos ópticos compactos son los llamados “cometas”. Típicamente, se trata de una partícula que opone resistencia al fluido en la etapa de entintado. Se quiere comprobar de manera experimental la efectividad de un tratamiento de limpieza de partículas que está basado en fuerza centrípeta y aire ionizado. A 12 lotes de 50 CD se les aplica el tratamiento y a otros 12 lotes no se les aplica; en cada caso se mide el porcentaje de discos que presentan cometas; los resultados son los siguientes:

Con tratamiento Sin tratamiento
5.30 8.02
4.03 13.18
4.03 7.15
4.00 8.23
2.56 9.11
2.05 6.66
5.06 12.15
4.06 16.30
2.08 9.20
4.03 6.35
2.04 7.15
1.18 8.66

a) Con el ANOVA vea si es efectivo el tratamiento de limpieza. ¿Debería implementarse?

# Crear los datos
con_tratamiento <- c(5.30, 4.03, 4.03, 4.00, 2.56, 2.05, 5.06, 4.06, 2.08, 4.03, 2.04, 1.18)
sin_tratamiento <- c(8.02, 13.18, 7.15, 8.23, 9.11, 6.66, 12.15, 16.30, 9.20, 6.35, 7.15, 8.66)

# Consolidar en un data frame
datos <- data.frame(
  Porcentaje = c(con_tratamiento, sin_tratamiento),
  Tratamiento = factor(rep(c("Con", "Sin"), each = 12))
)
# ANOVA
modelo <- aov(Porcentaje ~ Tratamiento, data = datos)
summary(modelo)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Tratamiento  1  214.4  214.44   39.41 2.56e-06 ***
## Residuals   22  119.7    5.44                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Mediante ANOVA se evidenció un efecto significativo del tratamiento de limpieza sobre el porcentaje de discos con defectos tipo “cometa” (F = 39.41; gl = 1, 22; p = 2.56 × 10⁻⁶). Este resultado indica que existe una diferencia estadísticamente significativa entre los grupos con y sin tratamiento. Se estima que la aplicación del tratamiento reduce de forma sustancial la proporción de discos defectuosos, reflejando una disminución notable en la media del porcentaje de cometas en los lotes tratados en comparación con los no tratados. En este contexto, su implementación en el proceso de manufactura se justifica como una estrategia válida para mejorar la calidad del producto y minimizar el desperdicio asociado a defectos.

b) ¿Es razonable suponer en el inciso a) que las varianzas son iguales?

# Verificar supuestos
by(datos$Porcentaje, datos$Tratamiento, shapiro.test)  # Normalidad
## datos$Tratamiento: Con
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.90022, p-value = 0.1597
## 
## ------------------------------------------------------------ 
## datos$Tratamiento: Sin
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.84887, p-value = 0.03555
library(car)
leveneTest(Porcentaje ~ Tratamiento, data = datos)     # Homogeneidad de varianzas
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1  2.0562 0.1656
##       22

La prueba de Shapiro-Wilk evidenció que el grupo con tratamiento no presenta desviaciones significativas respecto a la normalidad (W = 0.90022, p = 0.1597); sin embargo, en el grupo sin tratamiento se observó una leve desviación significativa (W = 0.84887, p = 0.03555), lo que podría sugerir una ligera asimetría en la distribución de los datos. No obstante, debido a que el ANOVA es relativamente robusto frente a pequeñas violaciones de la normalidad, especialmente con tamaños de muestra iguales, este resultado no invalida el análisis.

En cuanto a la homogeneidad de varianzas, se aplicó la prueba de Levene, la cual no mostró diferencias significativas entre los grupos (F = 2.0562; p = 0.1656). Por tanto, se evidenció que las varianzas pueden considerarse estadísticamente iguales, y se estima que el supuesto de homocedasticidad es razonable para el análisis presentado en el inciso a). Esto respalda la validez del modelo ANOVA aplicado y la interpretación de sus resultados.

c) ¿En qué porcentaje se reducen los discos con cometas?

t.test(con_tratamiento, sin_tratamiento, alternative = "less", var.equal = TRUE)
## 
##  Two Sample t-test
## 
## data:  con_tratamiento and sin_tratamiento
## t = -6.2781, df = 22, p-value = 1.28e-06
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##       -Inf -4.343181
## sample estimates:
## mean of x mean of y 
##  3.368333  9.346667

Se evidenció, mediante una prueba t para muestras independientes con hipótesis unilateral, que el tratamiento de limpieza tiene un efecto estadísticamente significativo en la reducción del porcentaje de discos con defectos tipo “cometa” (t = –6.2781; gl = 22; p = 1.28 × 10⁻⁶). La hipótesis alternativa planteaba que el porcentaje promedio de defectos sería menor en los lotes con tratamiento, y los resultados respaldan dicha afirmación.

Se estima que la media de defectos en el grupo con tratamiento fue de 3.37%, frente a 9.35% en el grupo sin tratamiento, lo que representa una reducción absoluta de aproximadamente 6 puntos porcentuales. Además, el intervalo de confianza del 95% para la diferencia de medias se encuentra completamente por debajo de cero (–∞, –4.34), lo cual indica que la diferencia real en los porcentajes de defectos es al menos de 4.34 puntos porcentuales a favor del tratamiento. Este límite inferior negativo excluye el valor cero, reforzando que la reducción observada no es atribuible al azar, y que el tratamiento tiene un efecto real y consistente en la disminución de defectos.

21. Una consecuencia de los desechos industriales es la contaminación de afluentes de agua, aguas subterráneas y en el suelo. En un área industrial se tomaron 25 muestras para evaluar la contaminación en su entorno. Los niveles de Magnesio (Mg), Calcio (Ca) y Potasio (K) de los muestreos en aguas subterráneas aparecen a continuación.

Metal Agua subterránea (mg/L)
Ca 17.9, 56.6, 37.0, 34.4, 49.7, 39.4, 22.0, 33.5, 32.9, 22.9, 35.0, 41.3, 32.6, 28.5, 51.3, 43.2, 66.9, 26.6, 45.2, 16.7, 57.6, 46.1, 60.1, 52.4, 37.6
Mg 28.0, 3.4, 3.0, 4.6, 9.4, 0.9, 6.8, 8.6, 17.7, 8.2, 12.8, 17.6, 21.4, 16.9, 28.8, 15.3, 2.0, 21.2, 26.6, 15.4, 6.8, 19.1, 12.8, 28.9, 9.2
K 30.4, 67.3, 35.7, 48.3, 33.1, 67.5, 60.2, 29.5, 30.7, 2.3, 56.6, 21.3, 6.3, 17.9, 55.1, 36.0, 24.6, 22.2, 20.7, 7.7, 58.4, 14.1, 25.8, 52.7, 72.2

a) Se quiere comparar los niveles de estos tres metales. Formule las hipótesis adecuadas y el modelo estadístico correspondiente.

Hipótesis nula (H₀):

H₀: μ_Ca = μ_Mg = μ_K

Hipótesis alternativa (Hₐ):

Hₐ: μᵢ ≠ μⱼ, i ≠ j, con i, j ∈ {Ca, Mg, K}

Modelo estadístico:

                 Yᵢⱼ = μ + αᵢ + εᵢⱼ

Donde:

Yᵢⱼ: concentración observada del metal i-ésimo en la muestra j-ésima

μ: media general de concentración

αᵢ: efecto del metal i (i ∈ {Ca, Mg, K})

εᵢⱼ: error aleatorio ~ N(0, σ²), independiente e idénticamente distribuido

b) Haga un análisis descriptivo de los datos de cada metal (medidas de tendencia central, variabilidad, diagrama de caja) y, con base en este análisis, ¿parece haber diferencia entre los niveles de cada metal?

# Datos
Ca <- c(17.9, 56.6, 37.0, 34.4, 49.7, 39.4, 22.0, 33.5, 32.9, 22.9, 35.0, 41.3, 32.6, 28.5, 51.3, 43.2, 66.9, 26.6, 45.2, 16.7, 57.6, 46.1, 60.1, 52.4, 37.6)
Mg <- c(28.0, 3.4, 3.0, 4.6, 9.4, 0.9, 6.8, 8.6, 17.7, 8.2, 12.8, 17.6, 21.4, 16.9, 28.8, 15.3, 2.0, 21.2, 26.6, 15.4, 6.8, 19.1, 12.8, 28.9, 9.2)
K  <- c(30.4, 67.3, 35.7, 48.3, 33.1, 67.5, 60.2, 29.5, 30.7, 2.3, 56.6, 21.3, 6.3, 17.9, 55.1, 36.0, 24.6, 22.2, 20.7, 7.7, 58.4, 14.1, 25.8, 52.7, 72.2)

# Crear dataframe
datos <- data.frame(
  Metal = rep(c("Ca", "Mg", "K"), each = 25),
  Concentracion = c(Ca, Mg, K)
)

# Cargar librerías necesarias
library(dplyr)
library(ggplot2)

# Resumen descriptivo por metal
resumen <- datos %>%
  group_by(Metal) %>%
  summarise(
    Media = mean(Concentracion),
    Mediana = median(Concentracion),
    Desviación_Estándar = sd(Concentracion),
    Mínimo = min(Concentracion),
    Máximo = max(Concentracion),
    Rango_Intercuartílico = IQR(Concentracion)
  )
print(resumen)
## # A tibble: 3 × 7
##   Metal Media Mediana Desviación_Estándar Mínimo Máximo Rango_Intercuartílico
##   <chr> <dbl>   <dbl>               <dbl>  <dbl>  <dbl>                 <dbl>
## 1 Ca     39.5    37.6               13.4    16.7   66.9                  17.1
## 2 K      35.9    30.7               20.6     2.3   72.2                  33.8
## 3 Mg     13.8    12.8                8.70    0.9   28.9                  12.3
# Diagrama de caja
ggplot(datos, aes(x = Metal, y = Concentracion, fill = Metal)) +
  geom_boxplot() +
  labs(title = "Distribución de concentraciones por metal",
       x = "Metal", y = "Concentración (mg/L)") +
  theme_minimal()

El análisis descriptivo reveló diferencias notables entre los niveles de los metales analizados. El calcio (Ca) presentó la mayor media (39.5 mg/L) con una dispersión moderada (DE = 13.44 mg/L), mientras que el potasio (K) tuvo una media similar (35.9 mg/L) pero con la mayor variabilidad (DE = 20.6 mg/L) y rango intercuartílico (33.8 mg/L), indicando una distribución más dispersa. En contraste, el magnesio (Mg) mostró la menor concentración promedio (13.8 mg/L) y la menor dispersión (DE = 8.7 mg/L), reflejando valores más homogéneos. El diagrama de caja respalda estos hallazgos, evidenciando que Mg se concentra en niveles bajos y consistentes, mientras que K exhibe mayor heterogeneidad. De este modo, con base en las medidas de tendencia central, dispersión y el diagrama de caja, se estiman diferencias sustanciales entre los niveles de cada metal.

c) Realice el análisis de varianza para probar las hipótesis de interés, y obtenga conclusiones.

# Crear los vectores con las concentraciones
Ca <- c(17.9, 56.6, 37.0, 34.4, 49.7, 39.4, 22.0, 33.5, 32.9, 22.9,
        35.0, 41.3, 32.6, 28.5, 51.3, 43.2, 66.9, 26.6, 45.2, 16.7,
        57.6, 46.1, 60.1, 52.4, 37.6)

Mg <- c(28.0, 3.4, 3.0, 4.6, 9.4, 0.9, 6.8, 8.6, 17.7, 8.2,
        12.8, 17.6, 21.4, 16.9, 28.8, 15.3, 2.0, 21.2, 26.6, 15.4,
        6.8, 19.1, 12.8, 28.9, 9.2)

K <- c(30.4, 67.3, 35.7, 48.3, 33.1, 67.5, 60.2, 29.5, 30.7, 2.3,
       56.6, 21.3, 6.3, 17.9, 55.1, 36.0, 24.6, 22.2, 20.7, 7.7,
       58.4, 14.1, 25.8, 52.7, 72.2)

# Unir todos los valores en un solo vector
concentracion <- c(Ca, Mg, K)

# Crear el factor Metal con 25 repeticiones de cada tipo
Metal <- factor(rep(c("Ca", "Mg", "K"), each = 25))

# Crear el data frame
datos <- data.frame(Metal, concentracion)

# Realizar el ANOVA
modelo_anova <- aov(concentracion ~ Metal, data = datos)

# Ver resultados
summary(modelo_anova)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Metal        2   9656    4828   21.26 5.56e-08 ***
## Residuals   72  16353     227                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El análisis de varianza evidenció diferencias significativas en los niveles promedio de concentración de los metales evaluados, con un valor F = 21.26 y un valor-p de 5.56×10⁻⁸. Este resultado confirma que las concentraciones de calcio, magnesio y potasio no se comportan de forma similar en el agua subterránea del área industrial. Reforzando los hallazgos descriptivos previos: el calcio presentó la mayor media (39.5 mg/L), el potasio exhibió la mayor variabilidad (DE = 20.6 mg/L), y el magnesio se mantuvo con valores bajos y homogéneos (media = 13.8 mg/L).

d) Verifique los supuestos del ANOVA.

# Crear los vectores de concentración
Ca <- c(17.9, 56.6, 37.0, 34.4, 49.7, 39.4, 22.0, 33.5, 32.9, 22.9,
        35.0, 41.3, 32.6, 28.5, 51.3, 43.2, 66.9, 26.6, 45.2, 16.7,
        57.6, 46.1, 60.1, 52.4, 37.6)
Mg <- c(28.0, 3.4, 3.0, 4.6, 9.4, 0.9, 6.8, 8.6, 17.7, 8.2,
        12.8, 17.6, 21.4, 16.9, 28.8, 15.3, 2.0, 21.2, 26.6, 15.4,
        6.8, 19.1, 12.8, 28.9, 9.2)
K <- c(30.4, 67.3, 35.7, 48.3, 33.1, 67.5, 60.2, 29.5, 30.7, 2.3,
       56.6, 21.3, 6.3, 17.9, 55.1, 36.0, 24.6, 22.2, 20.7, 7.7,
       58.4, 14.1, 25.8, 52.7, 72.2)

# Unir los datos en un data frame
concentracion <- c(Ca, Mg, K)
Metal <- factor(rep(c("Ca", "Mg", "K"), each = 25))
datos <- data.frame(Metal, concentracion)

# -------------------- Verificar supuestos --------------------

# Supuesto 1: Normalidad por grupo
by(datos$concentracion, datos$Metal, shapiro.test)
## datos$Metal: Ca
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.9807, p-value = 0.8986
## 
## ------------------------------------------------------------ 
## datos$Metal: K
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.94816, p-value = 0.2278
## 
## ------------------------------------------------------------ 
## datos$Metal: Mg
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.94419, p-value = 0.1849
# Supuesto 2: Homogeneidad de varianzas (Levene)
# Instalar si es necesario: install.packages("car")
library(car)
leveneTest(concentracion ~ Metal, data = datos)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value   Pr(>F)   
## group  2  7.2001 0.001411 **
##       72                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Se evidenció que los datos cumplen con la normalidad en cada grupo, según la prueba de Shapiro-Wilk, con valores-p de 0.8986 (Ca), 0.2278 (K) y 0.1849 (Mg), todos mayores a 0.05. Esto indica que los niveles de cada metal presentan una distribución compatible con la normal. No obstante, la prueba de Levene mostró una diferencia significativa en las varianzas entre grupos (F = 7.20, p = 0.0014), lo que sugiere que no se cumple el supuesto de homogeneidad de varianzas. En consecuencia, aunque la normalidad está garantizada, se recomienda utilizar pruebas robustas que no asuman igualdad de varianzas para respaldar o complementar el análisis.

Conclusiones

El presente estudio tuvo como objetivo examinar cómo distintas propiedades fisicoquímicas del vino están asociadas con su calidad sensorial, utilizando un enfoque estadístico riguroso basado en pruebas de hipótesis, análisis de varianza (ANOVA), pruebas no paramétricas, verificación de supuestos (normalidad y homogeneidad de varianzas) y visualización gráfica con boxplots. Los resultados permiten establecer una base interpretativa sólida para comprender la relación entre características analíticas y la percepción final del producto.

✅ Hallazgos principales

El contenido de alcohol mostró una asociación estadísticamente significativa con la calidad sensorial del vino. A través del ANOVA se identificó que los niveles promedio de alcohol difieren entre los grupos de calidad (“Muy baja”, “Baja”, “Media”, “Buena” y “Excelente”). Los vinos clasificados como “Excelente” o “Buena” presentaron en promedio mayor contenido alcohólico que aquellos evaluados como “Baja” o “Muy baja”. Esta relación sugiere que el contenido alcohólico puede contribuir positivamente a la percepción organoléptica del vino, posiblemente por su influencia sobre el cuerpo, el equilibrio y la liberación de compuestos aromáticos.

El nivel de azúcar residual varió significativamente según el nivel de alcohol. La prueba de Kruskal-Wallis reveló que los vinos con menor nivel de alcohol presentan un contenido de azúcares residuales más elevado, lo cual puede estar relacionado con estilos enológicos que priorizan el dulzor sobre la fermentación completa. Este resultado sugiere una relación inversa entre dulzor y contenido etílico, como ocurre en ciertos vinos blancos o de postre, en contraste con tintos más secos y alcohólicos.

El pH también difiere entre los vinos con nivel de alcohol “Medio” y “Alto”. Aunque la diferencia fue cuantitativamente pequeña (~0.02 unidades de pH), la prueba t de Welch indicó que es estadísticamente significativa. Esta diferencia puede tener implicaciones tecnológicas, ya que el pH influye en la estabilidad microbiana, la solubilidad de pigmentos y la percepción gustativa del producto final. El hecho de que los vinos con mayor nivel de alcohol tiendan a tener un pH ligeramente inferior podría relacionarse con técnicas de fermentación más controladas o mayor acidez retenida en vinos de mayor estructura.

La acidez volátil, contrariamente a lo esperado, fue mayor en los vinos “Excelente” que en los de calidad “Baja”. Este resultado, obtenido mediante la prueba t de Welch y corroborado por un intervalo de confianza unilateral, indica que una mayor acidez volátil no necesariamente implica una menor calidad sensorial. Este hallazgo cuestiona la noción clásica de que la acidez volátil (asociada a defectos como el avinagramiento) es un indicador directo de deterioro, y sugiere que puede haber un umbral aceptable en el cual esta propiedad incluso contribuya positivamente a la complejidad aromática de ciertos vinos.

La densidad del vino no mostró diferencias estadísticamente significativas entre los niveles de calidad “Muy baja” y “Excelente”. A pesar de que se observó una media ligeramente mayor en el grupo de menor calidad, la diferencia no alcanzó significancia estadística en la prueba t, lo cual puede estar relacionado con el hecho de que la densidad depende de múltiples factores simultáneos (azúcares, alcohol, temperatura), y no exclusivamente de aquellos que definen la calidad sensorial.

📌 Implicaciones de los resultados en el contexto del problema

Los resultados del estudio refuerzan la idea de que la calidad del vino es el producto de una interacción compleja entre múltiples factores químicos, y que ciertas variables —como el alcohol y el pH— ejercen una influencia perceptible y consistente sobre la valoración sensorial. Estos hallazgos tienen aplicaciones prácticas tanto en la enología técnica como en el diseño de estrategias de control de calidad. El conocimiento detallado de las relaciones entre parámetros físico-químicos y percepción sensorial puede ser útil para:

Optimizar procesos fermentativos y de estabilización.

Ajustar perfiles deseados según el mercado objetivo (por ejemplo, vinos secos y estructurados vs. dulces y suaves).

Establecer alertas de calidad basadas en indicadores cuantificables antes del embotellado.

⚠️ Limitaciones del estudio

A pesar de la robustez estadística del análisis, deben considerarse algunas limitaciones metodológicas:

Naturaleza observacional de los datos: El estudio se basa en un dataset preexistente, lo que impide establecer causalidad directa entre variables. Las asociaciones identificadas pueden estar mediadas por factores no observados, como condiciones de cultivo, cepas de levadura utilizadas o tratamientos de maduración.

Falta de control sobre el origen de las muestras: No se dispone de metadatos sobre los procesos de producción, regiones vinícolas o perfiles sensoriales detallados, lo que limita la posibilidad de contextualizar los resultados en función del tipo de vino (blanco, tinto, rosado).

Distribución desigual de los grupos de calidad: La mayoría de las muestras se agrupan en los niveles intermedios (“Media” y “Baja”), con una baja representación de extremos (“Excelente” y “Muy baja”), lo cual puede afectar la potencia estadística de algunas pruebas comparativas.

Omisión de variables clave enológicas: Variables como contenido de taninos, concentración de antocianinas, perfil aromático, polifenoles totales o técnicas de crianza no están presentes en la base de datos. Esto limita la posibilidad de construir un modelo integral de predicción de calidad sensorial.

🔍 Propuestas para futuras líneas de investigación

Diseño experimental con control de variables: Se recomienda desarrollar estudios controlados que permitan modificar de manera deliberada variables como el contenido de alcohol, acidez fija o tiempo de fermentación, para evaluar su efecto causal sobre la calidad sensorial bajo condiciones reproducibles.

Ampliación del perfil químico del análisis: Incorporar nuevas variables relevantes desde el punto de vista enológico y sensorial (taninos, antocianinas, compuestos volátiles, minerales) permitirá generar modelos predictivos más precisos y profundos.

Análisis multivariado y machine learning: Aplicar modelos estadísticos avanzados como análisis de componentes principales (PCA), análisis discriminante lineal (LDA), o algoritmos de clasificación supervisada (árboles de decisión, random forest, etc.) permitiría explorar patrones complejos y no lineales entre variables.

Evaluación sensorial dirigida: Complementar los datos cuantitativos con paneles sensoriales entrenados que apliquen metodologías estandarizadas (como pruebas hedónicas o análisis descriptivo cuantitativo) para validar las relaciones entre química y percepción desde la experiencia del consumidor o del experto.

Bibliografía

Ali, A., Chong, C. H., Mah, S. H., Abdullah, L. C., & Choong, T. S. Y. (2020). Modern extraction techniques and their impact on the antioxidant activity of selected fruit. Food Chemistry, 303, 125371. https://doi.org/10.1016/j.foodchem.2019.125371

Jackson, R. S. (2014). Wine science: Principles and applications (4th ed.). Academic Press.

Montgomery, D. C. (2020). Design and analysis of experiments (10th ed.). Wiley.

Pizarro, C., Esteban-Díez, I., & González-Sáiz, J. M. (2021). Comprehensive profiling of wine characteristics by multivariate statistical analysis of physicochemical parameters. Journal of Food Composition and Analysis, 99, 103856. https://doi.org/10.1016/j.jfca.2021.103856

Ribéreau-Gayon, P., Glories, Y., Maujean, A., & Dubourdieu, D. (2006). Handbook of enology: The chemistry of wine stabilization and treatments (Vol. 2). John Wiley & Sons.

Jackson, R. S. (2014). Wine Science: Principles and Applications (4th ed.). Academic Press.

Moreno, J., & Peinado, R. A. (2012). Enological Chemistry. Academic Press.

Ribéreau-Gayon, P., Glories, Y., Maujean, A., & Dubourdieu, D. (2006). Handbook of Enology Volume 2: The Chemistry of Wine Stabilization and Treatments (2nd ed.). Wiley.

Zoecklein, B. W., Fugelsang, K. C., Gump, B. H., & Nury, F. S. (1999). Wine Analysis and Production. Springer.