Este análisis utiliza la herramientas estadístca ANOVA para determinar si existe un efecto significativo de la temperatura en el rendimiento de un proceso químico.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(readxl)
library(readr)
library(dplyr)
library(car)
## Cargando paquete requerido: carData
## 
## Adjuntando el paquete: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some

Cálculos Iniciales

Hago una simulación de la tabla para el análisis de la varianza.

rendimientos <- data.frame(
  Temperatura = factor(rep(c("50°C", "60°C", "70°C"), each = 5)),
  Rendimiento = c(34, 24, 36, 39, 32, 30, 31, 34, 23, 27, 28, 28, 23, 30, 31)
)
resumen <- rendimientos %>%
  group_by(Temperatura) %>%
  summarise(
    Tamaño = n(),
    Suma = sum(Rendimiento),
    Media = mean(Rendimiento)
  )
total_N <- nrow(rendimientos) 
total_T <- sum(rendimientos$Rendimiento) 
global_mean <- mean(rendimientos$Rendimiento) 

resumen <- resumen %>%
  bind_rows(
    data.frame(
      Temperatura = "Total",
      Tamaño = total_N,
      Suma = total_T,
      Media = global_mean
    )
  )
resumen
## # A tibble: 4 × 4
##   Temperatura Tamaño  Suma Media
##   <chr>        <int> <dbl> <dbl>
## 1 50°C             5   165    33
## 2 60°C             5   145    29
## 3 70°C             5   140    28
## 4 Total           15   450    30

Planteamiento de las Hipótesis

Hipótesis Nula (Ho):
Las medias de rendimiento son iguales para todas las temperaturas.
Ho = u(50°c)=u(60°c)=u(70°c)

Hipótesis Alternativa (H1): Al menos un par de las medias son diferentes.

Verificación de supuestos

1. Normalidad Se utiliza el test de Shapiro-Wilk para verificar la normalidad de los datos en cada grupo.

normality_tests <- rendimientos %>%
  group_by(Temperatura) %>%
  summarise(p_value = shapiro.test(Rendimiento)$p.value)

normality_tests
## # A tibble: 3 × 2
##   Temperatura p_value
##   <fct>         <dbl>
## 1 50°C          0.625
## 2 60°C          0.927
## 3 70°C          0.334

Como en los tres tratamientos el p-valor es mayor a 0.05, no se rechaza la hipótesis de normalidad. Entonces, se puede deducir que los datos están normalmente distribuidos.

2. Homocedasticidad
Se utiliza la prueba de Levene para verificar la igualdad de varianzas entre los grupos.

leveneTest(Rendimiento ~ Temperatura, data = rendimientos)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.4485 0.6488
##       12

Como el p-valor (0.6488) es mayor que el nivel de significancia (𝛼=0.05), no se rechaza la hipótesis nula de igualdad de varianzas. Esto significa que se cumple el supuesto de homocedasticidad, lo cual valida el uso del ANOVA.

Análisis de Varianza (ANOVA)

anova_result <- aov(Rendimiento ~ Temperatura, data = rendimientos)
summary(anova_result)
##             Df Sum Sq Mean Sq F value Pr(>F)
## Temperatura  2     70   35.00    1.78   0.21
## Residuals   12    236   19.67

Boxplot de los Rendimientos por Temperatura

ggplot(rendimientos, aes(x = Temperatura, y = Rendimiento, fill = Temperatura)) +
  geom_boxplot() +
  labs(title = "Rendimientos por Temperatura", x = "Temperatura", y = "Rendimiento") +
  theme_minimal()

Comentarios: La mediana es más alta para la temperatura de 50°C y disminuye para las temperaturas de 60°C y 70°C. Esto sugiere que los rendimientos tienden a ser mayores a 50°C. La temperatura de 60°C parece tener un rango un poco más amplio en comparación con los otros dos.

Distribución F y Región de Rechazo

# Parámetros de la distribución F
df1 <- 2  
df2 <- 12 
alpha <- 0.05
F_critical <- qf(1 - alpha, df1, df2)

F_observed <- summary(anova_result)[[1]][["F value"]][1]

curve(df(x, df1, df2), from = 0, to = 5, col = "blue", lwd = 2,
      ylab = "Densidad", xlab = "F", main = "Distribución F con Región de Rechazo")
abline(v = F_critical, col = "red", lwd = 2, lty = 2) # Valor crítico
abline(v = F_observed, col = "green", lwd = 2, lty = 2) # Estadístico F observado
legend("topright", legend = c("Región de rechazo", "F observado"), col = c("red", "green"), lty = 2, bty = "n")

Con base en el análisis realizado, se concluye que el estadístico F observado (F=1.78) no se encuentra dentro de la región de rechazo, definida por F>3.89 para un nivel de significancia de α=0.05. Esto implica que no hay suficiente evidencia estadística para rechazar la hipótesis nula (H_o), la cual establece que las medias de los rendimientos no difieren significativamente entre las tres temperaturas (50°C, 60°C y 70°C). Adicionalmente, los supuestos de normalidad (evaluados con Shapiro-Wilk) y homocedasticidad (verificados con Levene) fueron cumplidos, validando la aplicabilidad del ANOVA en este contexto. Por lo tanto, se concluye que la temperatura no tiene un efecto significativo sobre el rendimiento promedio del proceso químico evaluado.