Samuel David Acevedo Estevez
Luis Antonio Calderón Salamanca
Anderson Favier Mojica
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.
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.
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.
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
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.
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.
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.
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.
## [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 archivoSe muestra la estructura del conjunto de datos con la función str() para explorar las variables disponibles, sus nombres y sus tipos de datos
## '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:
## 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
# 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
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:
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”.
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.
# 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"
## [1] 5713
## 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.
## 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
## 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
## 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
📌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”.
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.
# 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
## 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
##
## 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
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
Al comparar los niveles de azúcar residual entre los vinos clasificados como “Ácido” y “Muy Ácido”, se observa una diferencia notable:
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:
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.
###"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
✅ 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
Los valores-p son extremadamente bajos, por lo que se rechaza la hipótesis de normalidad.
No se puede asumir que los datos sigan una distribución normal. Se requerirá una prueba no paramétrica.
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 0.1079 0.7426
## 5711
F = 0.108, p = 0.743
Como p > 0.05, no se rechaza la hipótesis nula.
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
##
## 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):
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
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.
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")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
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.
## [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()## 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
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
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.
## 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
##
## Kruskal-Wallis rank sum test
##
## data: densidad by acidez
## Kruskal-Wallis chi-squared = 7.7805, df = 3, p-value = 0.05077
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”.
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")El gráfico de cajas permite visualizar diferencias en la mediana y dispersión de la densidad entre los grupos. Se observa que:
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.
## 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 datos desde carpeta "../datos/"
data <- read.csv("../datos/winequality.csv", sep = ";", dec = ",", fileEncoding = "latin1")## 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
## [1] Muy Acido Acido Medio Bajo en acidez
## Levels: Acido Bajo en acidez Medio Muy Acido
Se identifican los siguientes niveles de acidez:
## 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
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
## 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
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).
## 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
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).
##
## Kruskal-Wallis rank sum test
##
## data: densidad by acidez
## Kruskal-Wallis chi-squared = 7.7805, df = 3, p-value = 0.05077
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.
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.
## 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)##
## Alto Bajo
## 3320 3176
## 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
## 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
Se aplicó la prueba de Shapiro-Wilk a los grupos “Ácido” y “Muy Ácido”:
Se aplicó la prueba de Levene para verificar si las varianzas de pH eran iguales entre los grupos:
❌ 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):
✅ 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
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”.
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.
# ¿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
Se evaluó si los datos de sulfatos siguen una distribución normal en cada nivel de acidez:
❌ Se observa que la mayoría de los grupos no presentan normalidad, especialmente “Ácido” y “Muy Ácido”. }
## 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
## 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
##
## Kruskal-Wallis rank sum test
##
## data: sulfatos by acidez
## Kruskal-Wallis chi-squared = 387.15, df = 3, p-value < 2.2e-16
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.
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")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
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.
# 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)## 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
Grupo Ácido: W = 0.94706, p-value < 2.2e-16
Grupo Muy Ácido: W = 0.9329, p-value < 2.2e-16
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.
## 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
F = 239.88, p < 2.2e-16
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
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.
##
## 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
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
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.
# 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)##
## Bajo Medio Alto
## 2223 2082 2191
# 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.
##
## 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.
## [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"))##
## 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
F = 4.75e-05
p-value < 2.2e-16
Intervalo de confianza del 95%: [4.37e-05, 5.16e-05]
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
F = 4.75e-05
p-value < 2.2e-16
Intervalo de confianza del 95%: [4.37e-05, 5.16e-05]
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
t = -0.943
p-value = 0.8272
Media grupo Bajo = 0.354
Media grupo Alto = 0.834
Hipótesis alternativa: Media Bajo > Media Alto
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
# 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).
## 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.
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.
## [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"
##
## Baja Buena Excelente Media Muy baja
## 2138 1079 198 2836 246
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.000 5.000 6.000 5.818 6.000 9.000
##
## 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)##
## Pearson's Chi-squared test
##
## data: tabla_alcohol_calidad
## X-squared = 1454.6, df = 8, p-value < 2.2e-16
##
## 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"
)# 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
## Normalidad para grupo 'Medio':
##
## Shapiro-Wilk normality test
##
## data: data_filtro$pH[data_filtro$nivel_alcohol == "Medio"]
## W = 0.9927, p-value = 1.116e-08
##
## Normalidad para grupo '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.
##
## Prueba F de igualdad de varianzas (pH ~ nivel_alcohol):
##
## 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
##
## 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.
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.
#--------------------------- 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"]]## Tamano del grupo Muy baja: 246
## Tamano del grupo Baja: 2138
## Tamano del grupo Media: 2835
## Tamano del grupo Buena: 1079
## 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
## 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.
## 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.
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"]]## Tamaño del grupo Baja: 2138
## 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 para grupo 'Baja':
##
## Shapiro-Wilk normality test
##
## data: baja
## W = 0.91218, p-value < 2.2e-16
##
## Prueba de normalidad para grupo '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':
##
## 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”)
##
## 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”.
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
## Tamaño del grupo Baja: 2138
## Tamaño del grupo Media: 2835
## Tamaño del grupo Buena: 1079
## 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.
## [1] 5
## 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
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
## Tamaño del grupo Excelente: 198
# Prueba de normalidad (Shapiro-Wilk)---------------------------------------------------
cat("\nPrueba de normalidad (Shapiro-Wilk):\n")##
## Prueba de normalidad (Shapiro-Wilk):
##
## White wine:
##
## Shapiro-Wilk normality test
##
## data: baja
## W = 0.97419, p-value < 2.2e-16
##
## Red wine:
##
## 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:
##
## 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.
##
## 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. ``
#--------------------------- 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
## 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 para grupo 'Muy baja':
##
## Shapiro-Wilk normality test
##
## data: muy_baja
## W = 0.055813, p-value < 2.2e-16
##
## Prueba de normalidad para grupo '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':
##
## 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ₐ: μₘᵤᵧ ₋ ᵦₐⱼₐ > μₑₓₑₗₑₙₜₑ
##
## 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.
#---------------------------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
## Tamaño del grupo white: 4897
## 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):
##
## White wine:
##
## Shapiro-Wilk normality test
##
## data: white
## W = 0.95539, p-value < 2.2e-16
##
## Red wine:
##
## 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:
##
## 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.
##
## 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.
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.
## Tamaño del grupo white: 4897
## 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):
##
## White wine:
##
## Shapiro-Wilk normality test
##
## data: white
## W = 0.98809, p-value < 2.2e-16
##
## Red wine:
##
## 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:
##
## 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:
##
## 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.
#---------------------------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
## Tamano del grupo white: 4898
## 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):
##
## White wine:
##
## Shapiro-Wilk normality test
##
## data: white
## W = 0.88904, p-value < 2.2e-16
##
## Red wine:
##
## 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:
##
## 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:
##
## 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.
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
Modelo estadístico:\[ Y_{ij} = \mu + \tau_i + \varepsilon_{ij} \]
Donde:
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
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.
# 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.
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:
## 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.
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).
| 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 |
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} \]
# 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.
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.
# 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.
# 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.
# 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.
| 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 |
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
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.
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₄)
# 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.
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
## 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.
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.
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)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.
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.\
| 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 |
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) \]
# 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.
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.
| 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 |
El diseño experimental empleado corresponde a un diseño completamente al azar (DCA) con un solo factor de clasificación.
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).
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, σ²)
#------------------------- 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.
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.
| 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 |
# 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.
## 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
## 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.
##
## 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.
| 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 |
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
# 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.
# 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).
# 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.
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.
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.