El proyecto será desarrollado en RStudio utilizando un archivo en formato R Markdown. El objetivo de este proyecto es aplicar los conceptos aprendidos durante las clases de Diseño de Experimentos.


PLANTEAMIENTO DEL PROBLEMA

En el análisis enológico, las características fisicoquímicas del vino —como el contenido de alcohol, el pH, la acidez volátil y el azúcar residual— son determinantes en su clasificación y calidad sensorial. Sin embargo, no siempre es evidente si estas variables difieren de forma significativa entre tipos de vino (blanco o tinto), niveles de acidez percibida o escalas de calidad.

Ante la necesidad de fundamentar decisiones técnicas con base en evidencia estadística, se plantea como problema central determinar si existen diferencias significativas entre grupos categóricos de vino en función de sus propiedades medibles, utilizando herramientas estadísticas aplicadas en R.


OBJETIVO GENERAL

Analizar estadísticamente las diferencias en las propiedades fisicoquímicas y sensoriales del vino en función de su tipo, nivel de acidez y calidad sensorial, utilizando herramientas de codificación en R.


OBJETIVOS ESPECIFICOS

-Evaluar si el contenido de alcohol varía según el tipo de vino y el nivel de acidez.

-Comparar el pH promedio entre vinos con diferentes niveles de acidez y tipo.

-Determinar si existen diferencias en la acidez volátil y el ácido cítrico entre vinos de distintas calidades.

-Examinar la relación entre el contenido de azúcar residual y la acidez percibida.

-Aplicar pruebas no paramétricas (Wilcoxon, Kruskal-Wallis) y de correlación (Spearman) para identificar relaciones estadísticas entre las variables.


ANTECEDENTES

El vino es una bebida fermentada cuya calidad depende de múltiples características fisicoquímicas como la acidez, el contenido de alcohol, el pH, el azúcar residual y compuestos como los sulfatos o el dióxido de azufre. El análisis estadístico de estos parámetros permite identificar diferencias significativas entre tipos de vino (blanco y tinto), así como entre diferentes niveles de calidad y acidez.

Este proyecto busca aplicar herramientas estadísticas en R para evaluar cómo varían ciertas propiedades del vino en función de variables categóricas clave, como tipo, calidad y acidez percibida. La metodología empleada se basa en pruebas de hipótesis, pruebas no paramétricas y análisis descriptivos para dar soporte a decisiones basadas en datos en el contexto enológico.


DESARROLLO DEL PROYECTO

Para realizar este proyecto iniciamos con la Preparación de Datos: Cargamos librerias y preparamos los datos necesarios para el análisis.


library(data.table)
## Warning: package 'data.table' was built under R version 4.2.3
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
## 
##     between, first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
library(writexl)
## Warning: package 'writexl' was built under R version 4.2.3
library(car)
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.2.3
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
list.files("../datos")
## [1] "datos.Rproj"     "winequality.csv"

Llamamos nuestra base de datos (Anteriormente guardada)

data <- read.csv("../datos/winequality.csv",
                 sep = ";",
                 dec = ",",# símbolo se usa como separador decimal
                 fileEncoding = "latin1") 
data <- read.csv("../datos/winequality.csv",
                 sep = ";",
                 dec = ",",# símbolo se usa como separador decimal
                 fileEncoding = "latin1") 

Conocemos el resumen de datos organizados, con variables y factores del diseño planteado en la base de datos

str(data)
## 'data.frame':    6497 obs. of  16 variables:
##  $ acidez.fija            : num  7 6.3 8.1 7.2 7.2 8.1 6.2 7 6.3 8.1 ...
##  $ acidez.volátil         : num  0.27 0.3 0.28 0.23 0.23 0.28 0.32 0.27 0.3 0.22 ...
##  $ X.ácido.cítrico        : num  0.36 0.34 0.4 0.32 0.32 0.4 0.16 0.36 0.34 0.43 ...
##  $ azúcar.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 ...
##  $ dióxido.de.azufre.libre: num  45 14 30 47 47 30 30 45 14 28 ...
##  $ dióxido.de.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 ácido" "Ácido" "Ácido" "Muy ácido" ...
##  $ 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" ...

Obtenemos el resumen de datos como Mínimo, máximo, media, y cuartiles de la variable ácidez

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

Llamamos las librerias necesarias para poder obtener las Medias e IC por grupo

library(dplyr)
library(knitr)
## Warning: package 'knitr' was built under R version 4.2.3

Creamos 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)
  )
}

Calculamos los 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
data <- read.csv("../datos/winequality.csv",
                 sep = ";",
                 dec = ",",# símbolo se usa como separador decimal
                 fileEncoding = "latin1") # especifica la codificación de caracteres del archivo

Filtramos solo los datos con acidez “Ácido” o “Muy ácido”

data_filtrada <- subset(data, acidez %in% c("Ácido", "Muy ácido"))

table(data_filtrada$acidez)
## 
##     Ácido Muy ácido 
##      2483      3230
t.test(alcohol ~ acidez, data = data_filtrada)
## 
##  Welch Two Sample t-test
## 
## data:  alcohol by acidez
## t = 5.4132, df = 5458.2, p-value = 6.454e-08
## alternative hypothesis: true difference in means between group Ácido and group Muy ácido is not equal to 0
## 95 percent confidence interval:
##  0.1428806 0.3051256
## sample estimates:
##     mean in group Ácido mean in group Muy ácido 
##                10.60566                10.38166

Realizamos la prueba de Normalidad para conocer si los datos proceden de una distribución normalcon Shapiro Wilks

by(data_filtrada$alcohol, data_filtrada$acidez, shapiro.test)
## data_filtrada$acidez: Ácido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.95802, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## data_filtrada$acidez: Muy ácido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.43265, p-value < 2.2e-16

Grupo: Ácido W = 0.95802

p-value < 2.2e-16

Grupo: Muy ácido W = 0.43265

p-value < 2.2e-16


Interpretación:

¿Qué significa el p-value? La hipótesis nula (H₀) de la prueba de Shapiro-Wilk es:

“Los datos siguen una distribución normal.”

Si p < 0.05, se rechaza H₀, es decir, los datos NO son normales.

Conclusión: En ambos grupos (“Ácido” y “Muy ácido”), el p-value es menor a 0.05, así que los datos no siguen una distribución normal.

0.1 Además, el valor W en “Muy ácido” (0.43) es mucho más bajo que el de “Ácido” (0.95), lo que sugiere que la desviación de la normalidad es más grave en “Muy ácido”.

Realizamos la prueba de t para así obtener los estimados de Ácidez

t.test(alcohol ~ acidez, data = data_filtrada)
## 
##  Welch Two Sample t-test
## 
## data:  alcohol by acidez
## t = 5.4132, df = 5458.2, p-value = 6.454e-08
## alternative hypothesis: true difference in means between group Ácido and group Muy ácido is not equal to 0
## 95 percent confidence interval:
##  0.1428806 0.3051256
## sample estimates:
##     mean in group Ácido mean in group Muy ácido 
##                10.60566                10.38166

Con estos Datos podemos empezar a Responder


1 PREGUNTAS BASADAS LA VARIABLE ACIDEZ (Muy ácido, Ácido, Medio, Bajo en acidez)


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

Iniciamos planteando nuestras Hipótesis

H₀ (nula): El contenido promedio de alcohol es igual entre los grupos “Ácido” y “Muy ácido”.

H₁ (alternativa): El contenido promedio de alcohol es diferente entre ambos grupos.

p-value = 6.454e-08

→ Es mucho menor que 0.05, por lo tanto, rechazamos H₀. Esto indica que sí existe una diferencia estadísticamente significativa en el contenido promedio de alcohol entre los dos niveles de acidez.


DIFERENCIA DE MEDIAS

Grupo “Ácido”: 10.61%

Grupo “Muy ácido”: 10.38%

→ Aunque la diferencia es pequeña en magnitud (~0.22%), es estadísticamente significativa.


Intervalo de confianza (95%)

[0.1429, 0.3051] → Este intervalo no contiene el 0, lo que respalda la significancia del resultado


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

Primero realizamos la Hipótesis del ANOVA:

H₀ (nula): El promedio de pH es igual entre todos los niveles de acidez categórica.

H₁ (alternativa): Al menos un grupo tiene un pH promedio diferente.

Para responder esta pregunta llamamos el anova de la variable pH de ácidez

anova_pH <- aov(pH ~ acidez, data = data)
summary(anova_pH)
##               Df Sum Sq Mean Sq F value Pr(>F)    
## acidez         3 134.72   44.91    8777 <2e-16 ***
## Residuals   6493  33.22    0.01                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

p-value < 2e-16 → extremadamente significativo


Esto indica que sí existen diferencias estadísticamente significativas en el pH promedio entre los niveles de acidez.

El F value de 8777 es muy alto, lo que respalda una fuerte diferencia entre grupos.


Podemos realizar también la prueba de Tukey HSD compara todas las combinaciones posibles de grupos y estima:

diff: la diferencia entre medias

lwr: límite inferior del intervalo de confianza (95%)

upr: límite superior del intervalo de confianza (95%)

Si el intervalo no incluye el 0, la diferencia es estadísticamente significativa.

TukeyHSD(anova_pH)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = pH ~ acidez, data = data)
## 
## $acidez
##                                diff        lwr        upr p adj
## Bajo en acidez-Ácido      0.4000213  0.3804034  0.4196392     0
## Medio-Ácido               0.1839396  0.1760430  0.1918362     0
## Muy ácido-Ácido          -0.2040136 -0.2089193 -0.1991079     0
## Medio-Bajo en acidez     -0.2160817 -0.2365757 -0.1955877     0
## Muy ácido-Bajo en acidez -0.6040349 -0.6235724 -0.5844974     0
## Muy ácido-Medio          -0.3879532 -0.3956480 -0.3802584     0

“Muy ácido - Ácido” = -0.204

Interpretación: El grupo “Muy ácido” tiene un pH promedio menor que el grupo “Ácido” por 0.204 unidades.

El intervalo [-0.209, -0.199] no incluye 0, así que la diferencia es estadísticamente significativa.

“Bajo en acidez - Ácido” = +0.400 El grupo “Bajo en acidez” tiene un pH promedio 0.400 unidades mayor que “Ácido”.

También significativa, ya que el intervalo no incluye 0.

“Muy ácido - Bajo en acidez” = -0.604 Las muestras “Muy ácidas” tienen un pH mucho menor que las de “Bajo en acidez”.

Esta es la mayor diferencia observada.


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

Variable a comparar: azúcar.residual (numérica)

Grupos comparados: “Ácido” vs “Muy ácido” (columna acidez)

Distribución: No normal según Shapiro-Wilk (muestras > 5000 y W muy bajo)

Nos Aseguramos que la variable azúcar residual esté como numérica

data_filtrada <- subset(data, acidez %in% c("Ácido", "Muy ácido"))
data_filtrada$azucar <- data_filtrada$`azúcar.residual`

Ejecutamos la prueba no paramétrica unilateral

Usamos alternative = “less” porque la hipótesis es: “Ácido tiene menos azúcar residual que Muy ácido”.

wilcox.test(azucar ~ acidez, data = data_filtrada, alternative = "less")
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  azucar by acidez
## W = 3180995, p-value < 2.2e-16
## alternative hypothesis: true location shift is less than 0

Interpretación:

Hipótesis nula (H₀): No hay diferencia en azúcar residual entre “Ácido” y “Muy ácido”.

Hipótesis alternativa (H₁): El grupo “Ácido” tiene menos azúcar residual que “Muy ácido” (por alternative = “less”).

p-value < 2.2e-16: Muy inferior a 0.05 → se rechaza la hipótesis nula.

La prueba respalda que el nivel de azúcar residual es significativamente mayor en el grupo “Muy ácido”.


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

wilcox.test(`acidez.volátil` ~ acidez, data = data_filtrada)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  acidez.volátil by acidez
## W = 4615303, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

Interpretación paso a paso:

Se está comparando la variable acidez volátil entre los grupos “Ácido” y “Muy ácido”.

La hipótesis nula (H₀):

No hay diferencia en la mediana de acidez volátil entre los dos grupos.

La hipótesis alternativa (H₁):

Las medianas no son iguales (two-sided test).

El p-value < 2.2e-16 → es muchísimo menor que 0.05, por lo tanto:

Rechazamos la hipótesis nula, Es decir existe una diferencia estadísticamente significativa entre ambos grupos en cuanto a acidez volátil.


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

Verificamos primero homogeneidad de Varianzas

library(car)
leveneTest(densidad ~ acidez, data = data)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
## Levene's Test for Homogeneity of Variance (center = median)
##         Df F value    Pr(>F)    
## group    3  5.6116 0.0007717 ***
##       6493                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Realizamos el Anova para densidad y ácidez

anova_model <- aov(densidad ~ acidez, data = data)
summary(anova_model)
##               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

El valor p = 0.000772 es mucho menor que 0.05, por lo que:

Se rechaza la hipótesis nula.

Hay diferencias estadísticamente significativas en la densidad promedio entre al menos dos niveles de acidez.


1.6 6. Elabora un gráfico de cajas y bigotes para cada nivel de acidez.(Interpretelo)

boxplot(pH ~ acidez, data = data,
        col = "lightgreen",
        main = "Comparación de pH según nivel de acidez",
        ylab = "pH", xlab = "Nivel de acidez")

Con este diagrama de cajas donde comparamos cada nivel de ácidez con el pH podemos identificar que:

Los Valores de Bajo en ácidez contienen altos valores de pH Los valores de Muy ácido contienen los mas bajos niveles de pH Lo que se puede interpretar como que a Mayor ácidez, menor pH Y a mayor pH Menor ácidez, y los quartiles de Medio y Ácido, los dos Niveles medios de ácidez, cuentan con unos niveles medios de pH también.


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

Primero realizamos las Hipótesis:

Hipótesis nula (H₀): No hay diferencia en la concentración de ácido cítrico entre ambos grupos.

Hipótesis alternativa (H₁): Hay una diferencia significativa en la concentración entre los grupos.

Realizamos la prueba Wilcoxon (no paramétrica) ya que no hay Normalidad en los datos, anteriormente verificado con la prueba de Shapiro Wilks

wilcox.test(`X.ácido.cítrico` ~ acidez, data = data_filtrada)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  X.ácido.cítrico by acidez
## W = 3167298, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

El p-value < 2.2e-16 indica una diferencia altamente significativa.

Interpretación:

La prueba de Wilcoxon con corrección por continuidad mostró una diferencia estadísticamente significativa en la concentración de ácido cítrico entre las muestras clasificadas como “Ácidas” y “Muy ácidas” (W = 3,167,298, p < 0.001). Esto indica que el nivel de acidez categórica influye significativamente en la concentración promedio de ácido cítrico en las muestras analizadas.


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

Planteamos las Hipótesis

La hipótesis nula (H₀): No hay diferencia en la distribución de acidez fija entre los grupos.

La hipótesis alternativa (H₁): Al menos un grupo difiere

Verificamos la variable “Contenido de alcohol”

table(data$`contenido.de.alcohol`)
## 
##  Alto  Bajo Medio 
##   882  2828  2787

Como tenemos más de dos Niveles aplicamos Anova de normalidad y homosteceidad

anova_model <- aov(acidez.fija ~ contenido.de.alcohol, data = data)
summary(anova_model)
##                        Df Sum Sq Mean Sq F value Pr(>F)    
## contenido.de.alcohol    2    191   95.48    57.8 <2e-16 ***
## Residuals            6494  10727    1.65                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Como no se cumple normalidad Usamos Kruskal-Wallis

kruskal.test(acidez.fija ~ contenido.de.alcohol, data = data)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  acidez.fija by contenido.de.alcohol
## Kruskal-Wallis chi-squared = 158.6, df = 2, p-value < 2.2e-16

El p-value < 0.001 → se rechaza H₀ → hay diferencias significativas.

La prueba no paramétrica de Kruskal-Wallis indicó diferencias estadísticamente significativas en la acidez fija entre los niveles de contenido de alcohol (χ² = 158.6, gl = 2, p < 0.001).

Esto sugiere que el contenido de alcohol influye en la acidez fija promedio de las muestras.


1.9 9.¿El contenido de sulfatos difiere entre niveles de acidez?

Planteamos las Hipótesis

La hipótesis nula (H₀): No hay diferencia en la distribución de sulfatos entre los niveles de acidez.

La hipótesis alternativa (H₁): Al menos un grupo presenta diferencias.

Como hay muchos datos (> 5000 por grupo), usamos directamente prueba no paramétrica, también probamos normalidad para saber que prueba utilizar.

by(data$sulfatos, data$acidez, shapiro.test)
## data$acidez: Ácido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.94896, p-value < 2.2e-16
## 
## ------------------------------------------------------------ 
## data$acidez: Bajo en acidez
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.97784, p-value = 0.123
## 
## ------------------------------------------------------------ 
## data$acidez: Medio
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.97575, p-value = 2.636e-09
## 
## ------------------------------------------------------------ 
## data$acidez: Muy ácido
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.82061, p-value < 2.2e-16
kruskal.test(sulfatos ~ acidez, data = data)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  sulfatos by acidez
## Kruskal-Wallis chi-squared = 387.15, df = 3, p-value < 2.2e-16

Con un p-value < 0.001, se rechaza H₀, lo que significa que sí hay diferencias significativas.

La prueba no paramétrica de Kruskal-Wallis mostró diferencias estadísticamente significativas en el contenido de sulfatos entre los distintos niveles de acidez categórica (χ² = 387.15, gl = 3, p < 0.001).

Esto indica que el nivel de acidez influye significativamente en la concentración de sulfatos en las muestras analizadas.


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

Planteamos las Hipótesis:

Hipótesis nula (H₀): El pH tiene la misma distribución (y mediana) en ambos grupos (“Ácido” y “Muy ácido”).

Hipótesis alternativa (H₁): El pH difiere entre los dos grupos.

Como no hay normalidad en los datos Usamos Wilcoxon rank-sum test (no paramétrica)

wilcox.test(pH ~ acidez, data = data_filtrada)
## 
##  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

El p-value < 0.001 → se rechaza H₀, lo que indica que hay una diferencia estadísticamente significativa

La prueba de Wilcoxon con corrección por continuidad mostró una diferencia estadísticamente significativa en el pH entre las muestras clasificadas como “Ácidas” y “Muy ácidas” (W = 8,020,090, p < 0.001).

Esto indica que el pH promedio difiere significativamente entre estos dos niveles de acidez categórica.


2 PREGUNTAS BASADAS EN EL CONTENIDO DE ALCOHOL (Bajo, Medio, Alto)


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

Primero filtramos los datos que queremos comparar

data_filtrada <- subset(data, contenido.de.alcohol %in% c("Bajo", "Alto"))

Ya que no hay normalidad o los datos son ordinales/discretos: Usamos Wilcoxon (no paramétrica)

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

Se comparó el puntaje sensorial entre los vinos con bajo y alto contenido de alcohol.

Dado que el p-value < 0.001, se rechaza la hipótesis nula, lo que indica una diferencia estadísticamente significativa entre los dos grupos.

La prueba no paramétrica de Wilcoxon con corrección por continuidad mostró una diferencia estadísticamente significativa en el puntaje sensorial entre los vinos con bajo y alto contenido de alcohol (W = 2,079,098, p < 0.001).

Esto indica que el contenido de alcohol influye en la valoración sensorial promedio de los vinos.


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

Hipótesis nula (H₀): Las muestras con bajo y alto contenido de alcohol tienen la misma acidez volátil en distribución.

Hipótesis alternativa (H₁): Las muestras con bajo contenido de alcohol tienen mayor acidez volátil (es decir, las de alto contenido tendrían menos).


Filtramos primero los datos a comparar

data_filtrada <- subset(data, contenido.de.alcohol %in% c("Bajo", "Alto"))
wilcox.test(acidez.volátil ~ contenido.de.alcohol, 
            data = data_filtrada, 
            alternative = "greater")
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  acidez.volátil by contenido.de.alcohol
## W = 1281675, p-value = 0.1068
## alternative hypothesis: true location shift is greater than 0

El p-value = 0.1068 es mayor que 0.05, por lo tanto, no se rechaza la hipótesis nula.

La prueba de Wilcoxon unilateral no mostró diferencias estadísticamente significativas en la acidez volátil entre los vinos con bajo y alto contenido de alcohol (W = 1,281,675, p = 0.107).

Por tanto, no se puede afirmar con evidencia estadística que las muestras con alto contenido de alcohol presenten menor acidez volátil promedio que las de bajo contenido.


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

table(data$`contenido.de.alcohol`)
## 
##  Alto  Bajo Medio 
##   882  2828  2787
kruskal.test(azúcar.residual ~ contenido.de.alcohol, data = data)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  azúcar.residual by contenido.de.alcohol
## Kruskal-Wallis chi-squared = 530.47, df = 2, p-value < 2.2e-16

Se compararon los niveles de azúcar residual entre tres grupos de contenido de alcohol.

El p-value < 0.001, lo que indica una diferencia estadísticamente significativa en al menos un par de grupos.

La prueba no paramétrica de Kruskal-Wallis indicó que el nivel de azúcar residual varía significativamente entre los distintos niveles de contenido de alcohol (χ² = 530.47, gl = 2, p < 0.001).

Esto sugiere que el contenido de alcohol influye en la concentración promedio de azúcar residual en las muestras analizadas.


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

Verificamos los niveles de calidad

table(data$calidad)
## 
##      Baja     Buena Excelente     Media  Muy baja 
##      2138      1079       198      2836       246

Filtramos solo las categorías de interés

data$alta_calidad <- data$calidad %in% c("Buena", "Excelente")
table(data$alta_calidad, data$contenido.de.alcohol)
##        
##         Alto Bajo Medio
##   FALSE  434 2649  2137
##   TRUE   448  179   650
prop.table(table(data$alta_calidad, data$contenido.de.alcohol), 2)
##        
##               Alto       Bajo      Medio
##   FALSE 0.49206349 0.93670438 0.76677431
##   TRUE  0.50793651 0.06329562 0.23322569

Solo el 6.3% de los vinos con bajo contenido de alcohol son de alta calidad.

En cambio, más del 50% de los vinos con alto contenido de alcohol son considerados de alta calidad.

Esto indica una asociación clara entre mayor contenido de alcohol y mejor calidad sensorial.

De acuerdo con la distribución de frecuencias, las muestras con alto contenido de alcohol presentan una proporción significativamente mayor de vinos de alta calidad (50.8%) en comparación con los de contenido medio (23.3%) o bajo (6.3%). Esto sugiere que existe una asociación positiva entre el contenido de alcohol y la calidad sensorial del vino.


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

Hipótesis nula (H₀): No hay diferencia en la distribución (mediana) del pH entre vinos con contenido de alcohol bajo y alto.

Hipótesis alternativa (H₁): El pH sí difiere entre ambos grupos.

COMPARAMOS PROMEDIOS

aggregate(pH ~ contenido.de.alcohol, data = data_filtrada, mean)
##   contenido.de.alcohol       pH
## 1                 Alto 3.230510
## 2                 Bajo 3.194919

El pH promedio de los vinos con alto contenido de alcohol (3.23) es ligeramente mayor que el de los vinos con bajo contenido (3.19).

La diferencia numérica es pequeña (≈ 0.0356 unidades de pH), pero podría ser estadísticamente significativa dependiendo del resultado de la prueba.

wilcox.test(pH ~ contenido.de.alcohol, data = data_filtrada)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  pH by contenido.de.alcohol
## W = 1395384, p-value = 9.369e-08
## alternative hypothesis: true location shift is not equal to 0

Como el p-value < 0.001, se rechaza H₀.

La prueba no paramétrica de Wilcoxon mostró una diferencia estadísticamente significativa en el pH entre los vinos con bajo y alto contenido de alcohol (W = 1,395,384, p < 0.001).

Específicamente, los vinos con alto contenido de alcohol presentan un pH promedio ligeramente mayor que los de bajo contenido.


3 PREGUNTAS BASADAS EN LA CALIDAD (Muy baja, Baja, Media, Buena, Excelente)


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

Hipótesis nula (H₀): El contenido de alcohol es igual en todos los niveles de calidad.

Hipótesis alternativa (H₁): Al menos un grupo de calidad difiere en su contenido de alcohol.

modelo <- aov(alcohol ~ calidad, data = data)
summary(modelo)
##               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
## 1 observation deleted due to missingness

VERIFICAMOS HOMOGENEIDAD DE VARIANZAS

library(car)
leveneTest(alcohol ~ calidad, data = data)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
## 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
aggregate(alcohol ~ calidad, data = data, mean)
##     calidad   alcohol
## 1      Baja  9.837954
## 2     Buena 11.386006
## 3 Excelente 11.691414
## 4     Media 10.617119
## 5  Muy baja 10.184350
kruskal.test(alcohol ~ calidad, data = data)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  alcohol by calidad
## Kruskal-Wallis chi-squared = 1396.8, df = 4, p-value < 2.2e-16

El p-value < 0.001, por lo tanto, se rechaza la hipótesis nula.

La prueba de Kruskal-Wallis mostró diferencias estadísticamente significativas en el contenido de alcohol entre los diferentes niveles de calidad del vino (χ² = 1396.8, gl = 4, p < 0.001).

Esto indica que el contenido promedio de alcohol varía significativamente según la calidad sensorial asignada a las muestras.


3.2 13¿Las muestras clasificadas como “Excelente” presentan menor ácidez volátil en promedio que las de calidad “Baja” ?

Hipótesis nula (H₀): No hay diferencia en la acidez volátil entre vinos “Excelente” y “Baja”.

Hipótesis alternativa (H₁): Las muestras “Excelente” tienen menor acidez volátil que las “Baja”.

data_dos_grupos <- subset(data, calidad %in% c("Excelente", "Baja"))
wilcox.test(acidez.volátil ~ calidad,
            data = data_dos_grupos,
            alternative = "less")
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  acidez.volátil by calidad
## W = 283215, p-value = 1
## alternative hypothesis: true location shift is less than 0
aggregate(acidez.volátil ~ calidad, data = data_dos_grupos, mean)
##     calidad acidez.volátil
## 1      Baja      1.8217633
## 2 Excelente      0.2911869

El p-value = 1, muy por encima de 0.05, por lo tanto no se rechaza la hipótesis nula.

La prueba de Wilcoxon no encontró evidencia estadística suficiente para afirmar que las muestras clasificadas como “Excelente” presentan menor acidez volátil en comparación con las de calidad “Baja” (W = 283215, p = 1).


3.3 14¿El puntaje sensorial promedio aumenta conforme mejora la calidad de las muestras?

data$calidad_num <- as.numeric(factor(data$calidad, 
                                      levels = c("Mala", "Media", "Buena", "Excelente"), 
                                      ordered = TRUE))
cor.test(data$puntaje.sensorial, data$calidad_num, method = "spearman")
## Warning in cor.test.default(data$puntaje.sensorial, data$calidad_num, method =
## "spearman"): Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  data$puntaje.sensorial and data$calidad_num
## S = 73037, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.9999937

rho ≈ 1.00 → Existe una correlación positiva casi perfecta entre la calidad y el puntaje sensorial. El p-valor < 0.001 indica que la correlación es estadísticamente significativa.

Esto confirma que a mayor calidad, mayor puntaje sensorial, de forma prácticamente lineal.

Conclusión: El análisis de correlación de Spearman mostró una relación positiva y estadísticamente significativa entre la calidad del vino y su puntaje sensorial (ρ = 0.9999, p < 0.001). Esto indica que el puntaje sensorial promedio aumenta de manera casi perfecta conforme mejora la calidad de las muestras, lo cual es consistente con la lógica del sistema de clasificación utilizado.


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

Hipótesis nula (H₀): No hay diferencia en el nivel de dióxido de azufre total entre vinos de calidad “Baja” y “Excelente”.

Hipótesis alternativa (H₁): Existe una diferencia en el nivel de dióxido de azufre total entre los dos grupos.

data_comparacion <- subset(data, calidad %in% c("Baja", "Excelente"))
wilcox.test(dióxido.de.azufre.total ~ calidad, data = data_comparacion)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  dióxido.de.azufre.total by calidad
## W = 224930, p-value = 0.144
## alternative hypothesis: true location shift is not equal to 0
aggregate(dióxido.de.azufre.total ~ calidad, data = data_comparacion, mean)
##     calidad dióxido.de.azufre.total
## 1      Baja                120.8391
## 2 Excelente                117.4798

El p-value = 0.144, que es mayor que 0.05, por lo tanto no se rechaza la hipótesis nula.

La prueba de Wilcoxon no encontró evidencia estadísticamente significativa de una diferencia en el nivel de dióxido de azufre total entre los vinos de calidad “Baja” y “Excelente” (W = 224930, p = 0.144).

Esto sugiere que, con base en los datos disponibles, la calidad sensorial no está asociada a diferencias en el contenido de dióxido de azufre total.


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

Hipótesis nula (H₀): No hay diferencia en la densidad entre vinos de calidad “Muy baja” y “Excelente”.

Hipótesis alternativa (H₁): Los vinos de calidad “Muy baja” tienen mayor densidad que los “Excelente”

PRIMERO FILTRAMOS LOS DATOS

data_densidad <- subset(data, calidad %in% c("Muy baja", "Excelente"))
wilcox.test(densidad ~ calidad, data = data_densidad, alternative = "greater")
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  densidad by calidad
## W = 12073, p-value = 1
## alternative hypothesis: true location shift is greater than 0
aggregate(densidad ~ calidad, data = data_densidad, mean)
##     calidad densidad
## 1 Excelente 102.0531
## 2  Muy baja 533.6535

El p-value = 1, muy superior a 0.05, por lo tanto no se rechaza H₀.

La prueba de Wilcoxon no encontró evidencia estadísticamente significativa de que las muestras con calidad “Muy baja” presenten mayor densidad en promedio que las de calidad “Excelente” (W = 12073, p = 1).

Esto indica que, según los datos analizados, no hay una diferencia clara en la densidad entre vinos de muy baja y excelente calidad.


4 PREGUNTAS BASADAS EN EL TIPO DE VINO (Blanco, Rojo)


4.1 17¿El contenido promedio de alcohol difiere entre vinos blancos y tintos?

Hipótesis nula (H₀): No hay diferencia en el contenido de alcohol entre vinos blancos y tintos.

Hipótesis alternativa (H₁): Existe una diferencia en el contenido de alcohol entre ambos tipos.

VERIFICACIÓN DE GRUPOS

table(data$tipo)
## 
##  rojo white 
##  1599  4898
wilcox.test(alcohol ~ tipo, data = data)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  alcohol by tipo
## W = 3831978, p-value = 0.2013
## alternative hypothesis: true location shift is not equal to 0

El p-value = 0.2013, es decir, mayor que 0.05, por lo tanto no se rechaza H₀.

Conclusión: La prueba de Wilcoxon no encontró diferencias estadísticamente significativas en el contenido promedio de alcohol entre los vinos blancos y tintos (W = 3,831,978, p = 0.2013).

Por tanto, no se puede afirmar que el tipo de vino influya significativamente en el nivel de alcohol de las muestras evaluadas.


4.2 18¿Los vinos blancos presentan mayor pH en promedio que los vinos tintos?

Hipótesis nula (H₀): El pH promedio de los vinos blancos no es mayor que el de los vinos tintos.

Hipótesis alternativa (H₁): El pH promedio de los vinos blancos es mayor que el de los tintos.

aggregate(pH ~ tipo, data = data, mean)
##    tipo       pH
## 1  rojo 3.311113
## 2 white 3.188267
wilcox.test(pH ~ tipo, data = data, alternative = "greater")
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  pH by tipo
## W = 5681840, p-value < 2.2e-16
## alternative hypothesis: true location shift is greater than 0

El p-value < 0.001, por lo tanto, se rechaza H₀.

Conclusión: La prueba de Wilcoxon unilateral mostró que los vinos blancos presentan un pH promedio significativamente mayor que los vinos tintos (W = 5,681,840, p < 0.001).

Esto sugiere que, en promedio, los vinos blancos son menos ácidos que los tintos, lo cual es consistente con las características enológicas conocidas.


4.3 19¿El puntaje sensorial promedio es distinto entre vinos blancos y tintos?

FORMULAMOS NUESTRAS HIPÓTESIS

Hipótesis nula (H₀): No hay diferencia en el puntaje sensorial entre vinos blancos y tintos.

Hipótesis alternativa (H₁): Hay una diferencia en el puntaje sensorial entre ambos tipos.

aggregate(puntaje.sensorial ~ tipo, data = data, mean)
##    tipo puntaje.sensorial
## 1  rojo          5.636023
## 2 white          5.877909
wilcox.test(puntaje.sensorial ~ tipo, data = data)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  puntaje.sensorial by tipo
## W = 3311514, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

El p-valor es menor a 0.001, por lo tanto, se rechaza la hipótesis nula.


5 CONCLUSIONES FINALES:

-La prueba de Wilcoxon indicó que el puntaje sensorial promedio difiere significativamente entre vinos blancos y tintos (W = 3,311,514, p < 0.001). Esto sugiere que el tipo de vino influye en la percepción sensorial.

-El contenido promedio de alcohol presentó diferencias estadísticamente significativas entre niveles de acidez y calidades específicas, pero no varió significativamente entre vinos blancos y tintos.

-El pH promedio fue significativamente mayor en los vinos blancos, lo que indica una acidez más baja en comparación con los tintos.

-Las muestras con mayor calidad sensorial tendieron a tener menor acidez volátil y menor densidad, aunque algunas comparaciones no resultaron significativas.

-Se encontró una correlación casi perfecta (ρ = 0.999) entre el puntaje sensorial y el nivel de calidad, lo que valida la escala de evaluación sensorial.

-El uso de pruebas no paramétricas permitió realizar comparaciones válidas incluso en ausencia de normalidad en los datos.

-Las herramientas estadísticas aplicadas en R resultaron efectivas para evaluar diferencias y relaciones entre variables enológicas claves.


6 BIBLIOGRAFÍA

-Jackson, R. S. (2008). Wine Science: Principles and Applications. Academic Press.

-Martínez, M. C. (2015). Enología: Fundamentos Científicos y Tecnológicos. Ediciones Mundi-Prensa.

-R Core Team (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. URL: https://www.R-project.org/

-Wickham, H. et al. (2019). Welcome to the tidyverse. Journal of Open Source Software, 4(43), 1686.

-González, A., & Cuervo, R. (2011). Aplicación de técnicas estadísticas en el análisis de vinos. Revista de Ciencia y Tecnología de Alimentos, 9(1), 25–32.


7 EJERCICIOS DEL LIBRO, TRABAJADO EN EL CURSO DE DISEÑO EXPERIMENTAL

ANÁLISIS Y DISEÑO DE EXPERIMENTOS

AUTORES: Humberto Gutierrez Pulido - Román de la Vara Salazar 3 Edición


7.1 Ejercicio 3

Empezamos definiendo variables, cargando los datos dados , identificando grados de libertad e identificando los valores estadisticos como los cuadrados medios y el P-Valor para saber así si se Rechaza la Ho o No.Teniendo en cuenta el nivel de significancia de 0.05.

# Definición de variables
SC_trat <- 800
SC_error <- 400
SC_total <- SC_trat + SC_error

k <- 5               # Número de tratamientos
n <- 4               # Réplicas por tratamiento
N <- k * n           # Total de observaciones

# Grados de libertad
gl_trat <- k - 1           # 4
gl_error <- N - k          # 15
gl_total <- N - 1          # 19

# Cuadrados medios
CM_trat <- SC_trat / gl_trat    # 800 / 4 = 200
CM_error <- SC_error / gl_error # 400 / 15 ≈ 26.67

# Estadístico F
F <- CM_trat / CM_error         # ≈ 200 / 26.67 ≈ 7.5

# Valor-p usando función F (no exacto, se puede usar pf en R o DISTR.F en Excel)
p_value <- pf(F, df1 = gl_trat, df2 = gl_error, lower.tail = FALSE)

# Mostrar la tabla ANOVA
anova_table <- data.frame(
  Fuente = c("Tratamiento", "Error", "Total"),
  `Suma de cuadrados` = c(SC_trat, SC_error, SC_total),
  `Grados de libertad` = c(gl_trat, gl_error, gl_total),
  `Cuadrado medio` = c(CM_trat, CM_error, NA),
  `Razón F` = c(F, NA, NA),
  `Valor-p` = c(p_value, NA, NA)
)

print(anova_table, row.names = FALSE)
##       Fuente Suma.de.cuadrados Grados.de.libertad Cuadrado.medio Razón.F
##  Tratamiento               800                  4      200.00000     7.5
##        Error               400                 15       26.66667      NA
##        Total              1200                 19             NA      NA
##      Valor.p
##  0.001583951
##           NA
##           NA

Si el valor-p < 0.05, rechazamos H₀. En este caso:

F = 7.5

Valor-p ≈ 0.0014

Conclusión:

Existe una diferencia estadísticamente significativa entre al menos dos tratamientos (p < 0.05). Por lo tanto, los tratamientos no tienen el mismo efecto.


7.2 EJERCICIO 10

Empezamos definiendo variables, cargando los datos dados , Simulamos datos con desviación estándar de 300 para ilustrar, para saber así si se Rechaza la Ho o No.Teniendo en cuenta el nivel de significancia de 0.05.

# Simulación de datos
set.seed(123)  # Reproducibilidad

mezcla <- rep(c("A", "B", "C", "D"), each = 5)

# Simulamos datos con desviación estándar de 300 para ilustrar
peso <- c(
  rnorm(5, mean = 10000, sd = 300),
  rnorm(5, mean = 7000, sd = 300),
  rnorm(5, mean = 8000, sd = 300),
  rnorm(5, mean = 7500, sd = 300)
)

data <- data.frame(mezcla, peso)

# ANOVA
modelo <- aov(peso ~ mezcla, data = data)
summary(modelo)
##             Df   Sum Sq Mean Sq F value   Pr(>F)    
## mezcla       3 26885113 8961704   90.29 3.05e-10 ***
## Residuals   16  1588109   99257                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Comparaciones múltiples (Tukey)
TukeyHSD(modelo)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = peso ~ mezcla, data = data)
## 
## $mezcla
##           diff         lwr         upr     p adj
## B-A -3071.3668 -3641.44058 -2501.29296 0.0000000
## C-A -1965.7006 -2535.77436 -1395.62675 0.0000002
## D-A -2525.2684 -3095.34223 -1955.19462 0.0000000
## C-B  1105.6662   535.59241  1675.74002 0.0002332
## D-B   546.0983   -23.97546  1116.17215 0.0628544
## D-C  -559.5679 -1129.64167    10.50594 0.0552989
  1. ¿Las mezclas difieren de manera significativa en cuanto a su peso molecular?

Sí, el valor-p del ANOVA es 0.01, lo que indica que al menos una de las mezclas tiene un peso molecular promedio significativamente diferente.

  1. ¿Se puede asegurar que con la mezcla B se logra un menor peso molecular?

Sí, parcialmente. La mezcla B tiene el menor promedio (7000) y además:

B-A, B-C y B-D tienen comparaciones relevantes:

B-A: Diferencia significativa (p < 0.00001) → B es significativamente menor que A

B-C: Diferencia significativa (p ≈ 0.0002) → B es significativamente menor que C

B-D: p = 0.0628 → No es significativamente diferente de D al 5%, aunque sí cerca.

Conclusión: Podemos asegurar que B logra un menor peso molecular promedio comparado con A y C, pero no con D (aunque la diferencia es cercana a ser significativa).


Se realiza una prueba de igualdad de Varianzas para conocer como se comportan entre sí.

library(car)
leveneTest(peso ~ mezcla, data = data)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  3  0.6536 0.5922
##       16

El valor p = 0.5922 es mayor a 0.05, por lo tanto:

No se rechaza la hipótesis nula de igualdad de varianzas.


7.3 EJERCICIO 11

Empezamos cargando los datos para poder así comenzar a analizar el diseño y sus comportamientos

# Datos por marca
marca <- factor(rep(1:3, each = 6))
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
)

data <- data.frame(marca, efectividad)

REALIZAMOS LAS HIPÓTESIS A EVALUAR

H₀: No hay diferencia en la efectividad promedio entre las marcas de spray.

H₁: Al menos una marca difiere en efectividad promedio.

modelo <- aov(efectividad ~ marca, data = data)
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

Valor F = 2.793

p-value = 0.0931

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

Es decir, no hay evidencia suficiente para afirmar que existen diferencias significativas en la efectividad promedio entre las marcas.


# install.packages("ggplot2")
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
library(dplyr)

# Calcular media y error estándar por marca
resumen <- data %>%
  group_by(marca) %>%
  summarise(
    media = mean(efectividad),
    sd = sd(efectividad),
    n = n(),
    se = sd / sqrt(n)  # Error estándar
  )

# Gráfico de medias con barras de error
ggplot(resumen, aes(x = factor(marca), y = media)) +
  geom_col(fill = "skyblue") +
  geom_errorbar(aes(ymin = media - se, ymax = media + se), width = 0.2) +
  labs(
    title = "Gráfico de medias con error estándar",
    x = "Marca de Spray",
    y = "Efectividad Promedio (%)"
  ) +
  theme_minimal()

Cada barra representa la media de efectividad por marca.

Podemos analizar que el spray uno tiene valores de efectividad más altos que los spray 2 y 3.

Las líneas verticales son barras de error que muestran la variabilidad entre los spray (± error estándar).

VERIFICACIÓN DE NORMALIDAD

# Verifica normalidad en cada grupo (marca)
by(data$efectividad, data$marca, shapiro.test)
## data$marca: 1
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.9385, p-value = 0.6471
## 
## ------------------------------------------------------------ 
## data$marca: 2
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.90662, p-value = 0.4145
## 
## ------------------------------------------------------------ 
## data$marca: 3
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.99474, p-value = 0.9975

p-valor < 0.05, para el grupo 1, no sigue distribución normal el p-valor > 0.05, la normalidad se cumple para el grupo 2. Como p-valor < 0.05, para el grupo 3, no sigue distribución normal.


Realizamos prueba de igualdad de Varianzas para conocer su comportamiento entre si

# Levene Test para igualdad de varianzas entre marcas
leveneTest(efectividad ~ marca, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.5288 0.5999
##       15

Como p > 0.05, se cumple la igualdad de varianzas (homocedasticidad).


7.4 EJERCICIO 12

Para comenzar a desarrollar el ejercicio, importamos los datos

# Datos de los tiempos de cocción (en minutos)
control <- c(213, 214, 204, 208, 212, 200, 207)
t2 <- c(76, 85, 74, 78, 82, 75, 82)
t3 <- c(57, 67, 55, 64, 61, 63, 63)
t4 <- c(84, 82, 85, 92, 87, 79, 90)

# Crear un data frame largo
tiempo <- c(control, t2, t3, t4)
tratamiento <- factor(rep(c("Control", "T2", "T3", "T4"), each = 7))
data <- data.frame(tiempo, tratamiento)
modelo <- aov(tiempo ~ tratamiento, data = data)
summary(modelo)
##             Df Sum Sq Mean Sq F value Pr(>F)    
## tratamiento  3  95041   31680    1559 <2e-16 ***
## Residuals   24    488      20                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Realizamos un Gráfico de cajas y medias, para asi poder analizar de una manera visual

boxplot(tiempo ~ tratamiento, data = data, col = "lightblue", main = "Diagrama de caja - Tiempo de cocción", ylab = "Tiempo (min)")

# Gráfico de medias con error estándar
library(ggplot2)
ggplot(data, aes(x = tratamiento, y = tiempo)) +
  stat_summary(fun = mean, geom = "point", size = 3, color = "red") +
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2) +
  labs(title = "Medias con Error Estándar", x = "Tratamiento", y = "Tiempo (min)")

Se evidencia que el tratamiento 4 tiene valores más altos que los otros 3 tratamientos teniendo en cuenta el control respecto al tiempo.

PRUEBA DE NORMALIDAD
r by(data$tiempo, data$tratamiento, shapiro.test)
## data$tratamiento: Control ## ## Shapiro-Wilk normality test ## ## data: dd[x, ] ## W = 0.93869, p-value = 0.6269 ## ## ------------------------------------------------------------ ## data$tratamiento: T2 ## ## Shapiro-Wilk normality test ## ## data: dd[x, ] ## W = 0.92004, p-value = 0.4697 ## ## ------------------------------------------------------------ ## data$tratamiento: T3 ## ## Shapiro-Wilk normality test ## ## data: dd[x, ] ## W = 0.94131, p-value = 0.6506 ## ## ------------------------------------------------------------ ## data$tratamiento: T4 ## ## Shapiro-Wilk normality test ## ## data: dd[x, ] ## W = 0.98474, p-value = 0.9793 Los datos no proceden de una distribución normal para el grupo de datos 2 , el resto de grupos 1,3,4 tienen una distribución normal ya que su P-Valor es mayor que 0.05
PRUEBA DE HOMOGENEIDAD DE VARIANZAS
r leveneTest(tiempo ~ tratamiento, data = data)
## Levene's Test for Homogeneity of Variance (center = median) ## Df F value Pr(>F) ## group 3 0.1631 0.9201 ## 24 Como P-Valor es mayor que 0.05 se dice que las varianzas son homogeneas.
PRUEBA DE COMPARACIONES MÚLTIPLES
r TukeyHSD(modelo)
## Tukey multiple comparisons of means ## 95% family-wise confidence level ## ## Fit: aov(formula = tiempo ~ tratamiento, data = data) ## ## $tratamiento ## diff lwr upr p adj ## T2-Control -129.428571 -136.07568671 -122.78146 0.0000000 ## T3-Control -146.857143 -153.50425813 -140.21003 0.0000000 ## T4-Control -122.714286 -129.36140099 -116.06717 0.0000000 ## T3-T2 -17.428571 -24.07568671 -10.78146 0.0000010 ## T4-T2 6.714286 0.06717044 13.36140 0.0471059 ## T4-T3 24.142857 17.49574187 30.78997 0.0000000 Intervalo de confianza del 95 % por tratamiento
r tapply(data$tiempo, data$tratamiento, function(x) t.test(x)$conf.int)
## $Control ## [1] 203.5484 213.0231 ## attr(,"conf.level") ## [1] 0.95 ## ## $T2 ## [1] 74.99087 82.72342 ## attr(,"conf.level") ## [1] 0.95 ## ## $T3 ## [1] 57.58342 65.27372 ## attr(,"conf.level") ## [1] 0.95 ## ## $T4 ## [1] 81.40595 89.73690 ## attr(,"conf.level") ## [1] 0.95
r aggregate(tiempo ~ tratamiento, data, mean)
## tratamiento tiempo ## 1 Control 208.28571 ## 2 T2 78.85714 ## 3 T3 61.42857 ## 4 T4 85.57143
Podemos evidenciar que el tratamiento control tiene valores más altos en cuanto a la comparación de tiempo con los otros tratamientos.

7.5 EJERCICIO 15

Para iniciar, cargamos nuestros datos y comenzamos importando nuestro análisis de Varianzas

# Datos de dureza para cada % de almidón
almidon_2 <- c(4.3, 5.2, 4.8, 4.5)
almidon_5 <- c(6.5, 7.3, 6.9, 6.1)
almidon_10 <- c(9.0, 7.8, 8.5, 8.1)

# Vector combinado y tratamiento como factor
dureza <- c(almidon_2, almidon_5, almidon_10)
almidon <- factor(rep(c("2%", "5%", "10%"), each = 4))

# Crear data frame
data <- data.frame(dureza, almidon)
modelo <- aov(dureza ~ almidon, data = data)
summary(modelo)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## almidon      2  26.73   13.36    58.1 7.16e-06 ***
## Residuals    9   2.07    0.23                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

GRÁFICA DE CAJAS Y MEDIAS

boxplot(dureza ~ almidon, data = data, main = "Dureza según % de almidón",
        col = c("skyblue", "lightgreen", "salmon"), ylab = "Dureza")

En este gráfico podemos analizar que los valores de Dureza más altos los tiene el 10% de almidón y los más bajos el 2% de almidón.

ggplot(data, aes(x = almidon, y = dureza)) +
  stat_summary(fun = mean, geom = "point", size = 3, color = "red") +
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2) +
  labs(title = "Media de dureza por % de almidón", x = "% de almidón", y = "Dureza")

La gráfica de medias nos ayuda a identifical que la media más baja, según la dureza son del 2% de almidón y los cuartiles de los tres porcentajes de algodón difieren demasiado.


PRUEBA DE NORMALIDAD

by(data$dureza, data$almidon, shapiro.test)
## data$almidon: 10%
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.98065, p-value = 0.9058
## 
## ------------------------------------------------------------ 
## data$almidon: 2%
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.97133, p-value = 0.8497
## 
## ------------------------------------------------------------ 
## data$almidon: 5%
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.99291, p-value = 0.9719

Ya que p-Valor es mayor a 0.05 No se rechaza la Ho, Es decir hay sufucuente evidencia estadistica significativa para decir que los datos proceden de una distribución normal.

PRUEBA DE HOMOGENEIDAD DE VARIANZAS

leveneTest(dureza ~ almidon, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.2667 0.7718
##        9

Ya que P-Valor es mayor que 0.05 No se Rechaza la Ho, Es decir las varianzas no tienen una diferencia significativa, es decir se comportan de manera similar en este diseño.

PRUEBA DE TUKEY

TukeyHSD(modelo)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = dureza ~ almidon, data = data)
## 
## $almidon
##         diff       lwr        upr     p adj
## 2%-10% -3.65 -4.596815 -2.7031848 0.0000052
## 5%-10% -1.65 -2.596815 -0.7031848 0.0022940
## 5%-2%   2.00  1.053185  2.9468152 0.0006016
aggregate(dureza ~ almidon, data = data, mean)
##   almidon dureza
## 1     10%   8.35
## 2      2%   4.70
## 3      5%   6.70

Si se desea maximizar la dureza, se recomienda el 10% de almidón con mayor media y diferencia significativa (posiblemente el 10%).


7.6 EJERCICIO 17

Comenzamos importando datos

# Datos por tratamiento
PVP <- c(0.485, 0.250, 0.073, 0.205, 0.161)
CMC <- c(9.64, 9.37, 9.53, 9.86, 9.79)
Gre <- c(0.289, 0.275, 0.612, 0.152, 0.137)

# Vector y factor de aglutinantes
friabilidad <- c(PVP, CMC, Gre)
aglutinante <- factor(rep(c("PVP", "CMC", "Gre"), each = 5))

# Data frame
data <- data.frame(friabilidad, aglutinante)
modelo <- aov(friabilidad ~ aglutinante, data = data)
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

Realizamos nuestras Hipótesis a probar

H₀ (nula): Las medias de friabilidad son iguales entre aglutinantes.

H₁ (alternativa): Al menos una media difiere.

PRUEBA DE NORMALIDAD

by(data$friabilidad, data$aglutinante, shapiro.test)
## data$aglutinante: CMC
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.96789, p-value = 0.8616
## 
## ------------------------------------------------------------ 
## data$aglutinante: Gre
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.83134, p-value = 0.1424
## 
## ------------------------------------------------------------ 
## data$aglutinante: PVP
## 
##  Shapiro-Wilk normality test
## 
## data:  dd[x, ]
## W = 0.91467, p-value = 0.4962

7.7 Como los P-valor de los 3 tipos de aglutinante son mayores a 0.05 No se Rechaza la Ho, es decir los datos se distribuyen de manera normal en el diseño.

PRUEBA DE HOMOGENEIDAD DE VARIANZAS

leveneTest(friabilidad ~ aglutinante, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2   0.225 0.8018
##       12

Como el p-valor = 0.8018 > 0.05, no se rechaza la hipótesis nula, lo cual indica que se cumple el supuesto de homogeneidad de varianzas entre los grupos.

TukeyHSD(modelo)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = friabilidad ~ aglutinante, data = data)
## 
## $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
boxplot(friabilidad ~ aglutinante, data = data,
        main = "Porcentaje de friabilidad según aglutinante",
        col = c("lightblue", "lightgreen", "pink"),
        ylab = "% Friabilidad")

En la grafica de cajas se evidencia que los cuartiles del aglutinante CMC Y en si sus valores difieren demasiado,comportandose de manera atípica dentro del diseño, mientras que los datos del aglutinante Gre y PvP son similires respecto a la variable de friabilidad.

GRÁFICA DE MEDIAS

ggplot(data, aes(x = aglutinante, y = friabilidad)) +
  stat_summary(fun = mean, geom = "point", size = 3, color = "red") +
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2) +
  labs(title = "Media de friabilidad por aglutinante", x = "Aglutinante", y = "Friabilidad")

Podemos analizar que las medias de los Aglutinantes Gre y PVP son similares, es decir los datos de dichas variables respecto a la friabilidad son cercanos entre si, mientras que los del aglutinante CMC difieren demasiado, siendo estos superiores en el porcentaje de friabilidad.


7.8 EJERCICIO 19

Luego de cargar los datos con los que trabajaremos comenzamos organizándolos en nuestro análisis de varianzas

# Datos
tratamiento <- c(5.30, 4.03, 4.03, 4.00, 2.56, 2.05, 5.06, 4.06, 2.08, 4.09, 2.03, 1.18)
sin_tratamiento <- c(8.02, 13.18, 7.15, 8.23, 9.11, 6.66, 12.15, 16.3, 9.20, 6.35, 7.15, 8.66)

# Crear dataframe
grupo <- c(rep("Tratado", length(tratamiento)), rep("No_tratado", length(sin_tratamiento)))
cometas <- c(tratamiento, sin_tratamiento)
data <- data.frame(grupo = factor(grupo), cometas)

REALIZAMOS TABLA ANOVA PARA CONOCER EL COMPORTAMIENTO DE LOS DATOS EN EL DISEÑO

anova_model <- aov(cometas ~ grupo, data = data)
summary(anova_model)
##             Df Sum Sq Mean Sq F value  Pr(>F)    
## grupo        1  214.1  214.14   39.32 2.6e-06 ***
## Residuals   22  119.8    5.45                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

HOMOGENEIDAD DE VARIANZAS

leveneTest(cometas ~ grupo, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1  2.0362 0.1676
##       22

Como P-Valor es mayor a 0.05 No se Rechaza la Ho, es decir las varianzas se comportan de manera similar, son homogeneas.


PODEMOS HALLAR TAMBIÉN EL PORCENTAJE DE REDUCCIÓN

media_tratado <- mean(tratamiento)
media_no_tratado <- mean(sin_tratamiento)
reduccion <- (media_no_tratado - media_tratado) / media_no_tratado * 100
reduccion
## [1] 63.91762
t.test(tratamiento, sin_tratamiento, var.equal = TRUE)  # Si las varianzas son iguales
## 
##  Two Sample t-test
## 
## data:  tratamiento and sin_tratamiento
## t = -6.2709, df = 22, p-value = 2.602e-06
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -7.949917 -3.998416
## sample estimates:
## mean of x mean of y 
##  3.372500  9.346667
#Normalidad de residuos
plot(anova_model, which = 2)  # QQ Plot

shapiro.test(residuals(anova_model))  # Test de normalidad
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(anova_model)
## W = 0.89969, p-value = 0.0212

Como los puntos siguen aproximadamente la línea diagonal, los residuos son normalmente distribuidos.


PRUEBA DE HOMOCEDASTICIDAD VISUAL

# Homocedasticidad visual
plot(anova_model, which = 1)  # Residuals vs Fitted

Se evidencia que los residuos están distribuidos aleatoriamente alrededor de la línea horizontal en 0, con una dispersión constante → varianza homogénea.

leveneTest(cometas ~ grupo, data = data)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1  2.0362 0.1676
##       22

p > 0.05 → No se rechaza la igualdad de varianzas (se cumple el supuesto).


##EJERCICIO 21

Comenzamos cargando los datos para poder iniciar a trabajar

# Crear los vectores para cada metal
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.6, 8.6, 17.7, 12.2, 8.7, 17.4, 16.7, 21.4, 16.9, 28.8, 15.3, 2.0, 21.2, 26.6, 15.4, 17.5, 20.3, 14.6, 12.6, 25.2)
K  <- c(30.4, 67.3, 35.7, 48.3, 33.1, 45.3, 29.6, 30.2, 35.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, 7.2, 52.7, 72.2, 33.3)

# Crear el dataframe en formato largo
metal <- rep(c("Ca", "Mg", "K"), each = 25)
valor <- c(Ca, Mg, K)
data <- data.frame(metal, valor)

Realizamos el resumen de datos análiticos como La media, mediana, sd, los mínimos y máximos.

library(dplyr)

data %>% 
  group_by(metal) %>%
  summarise(
    media = mean(valor),
    mediana = median(valor),
    sd = sd(valor),
    min = min(valor),
    max = max(valor),
    n = n()
  )
## # A tibble: 3 × 7
##   metal media mediana    sd   min   max     n
##   <chr> <dbl>   <dbl> <dbl> <dbl> <dbl> <int>
## 1 Ca     39.5    37.6 13.4   16.7  66.9    25
## 2 K      33.2    30.4 18.0    6.3  72.2    25
## 3 Mg     14.7    15.4  8.21   0.6  28.8    25

REALIZAMOS GRÁFICA DE MEDIAS VISUAL para así poder analizar más fácil el comportamiento de los metales en agua subterránea.

boxplot(valor ~ metal, data = data,
        main = "Distribución de metales en agua subterránea",
        ylab = "mg/L", col = c("skyblue", "salmon", "palegreen"))

# Gráfico de medias
library(ggplot2)
ggplot(data, aes(x = metal, y = valor, fill = metal)) +
  stat_summary(fun = mean, geom = "bar") +
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2) +
  labs(title = "Media de concentración por metal", y = "mg/L") +
  theme_minimal()

En la gráfica podemos evidenciar que el metal Ca tiene valores más altos de mg/L a comparación de Mg con los menores datos.


REALIZAMOS ANOVA

Esto para evaluar si existen diferencias significativas en las medias de más de dos grupos.

Interpretación general:

Si el valor-p < 0.05, se rechaza la hipótesis nula, lo que indica que al menos un grupo tiene una media diferente.

Si el valor-p ≥ 0.05, no hay evidencia suficiente para afirmar que existen diferencias entre los grupos

anova_model <- aov(valor ~ metal, data = data)
summary(anova_model)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## metal        2   8297    4148   21.72 4.17e-08 ***
## Residuals   72  13754     191                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Con un valor-p (> 0.05), no se detectan diferencias estadísticamente significativas en la efectividad promedio de las marcas de spray.

Aunque marca 1 parece tener mayor media, esta diferencia no es estadísticamente significativa.


REALIZAMOS PRUEBA DE COMPARACIONES MÚLTIPLES TUKEY para conocer qué grupos difieren entre sí.

TukeyHSD(anova_model)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = valor ~ metal, data = data)
## 
## $metal
##          diff       lwr        upr     p adj
## K-Ca   -6.256 -15.61144   3.099436 0.2521103
## Mg-Ca -24.772 -34.12744 -15.416564 0.0000001
## Mg-K  -18.516 -27.87144  -9.160564 0.0000314

La mezcla D tiene un promedio significativamente menor al de la mezcla A, con un valor-p ajustado menor a 0.001.

Si el intervalo de confianza (lwr-upr) no contiene el cero, hay diferencia significativa.

REALIZAMOS VERIFICACIÓN DE SUPUESTOS

Prueba de Normalidad Evalúando si los residuos o grupos siguen una distribución normal

# QQ plot
plot(anova_model, which = 2)

# Prueba de Shapiro-Wilk (normalidad de residuos)
shapiro.test(residuals(anova_model))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(anova_model)
## W = 0.98342, p-value = 0.4335

Podemos evidenciar en la gráfica que los quartiles se distribuyen de manera normal y Como el valor-p > 0.05, se acepta la normalidad.

Si fuese menor a 0.05, indicarías que los datos no son normales, lo que afecta la validez de ANOVA.


REALIZAMOS PRUEBA DE LEVENE para conocer como se comportan las Varianzas entre los grupos para saber si son iguales

leveneTest(valor ~ metal, data = data)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value  Pr(>F)  
## group  2  4.5668 0.01358 *
##       72                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Valor-p < 0.05: NO se cumple el supuesto de homogeneidad de varianzas.