Con el objetivo de poder determinar si existe o no una significancia estadística para la diferencia entre el Rendimiento del Optimizador de la Zafra 2023-2024 y el de la Zafra 2024-2025 se realizan una pruebas de hipótesis para medias / medianas.

library(dplyr)
library(ggplot2)
library(ggpubr)
dataset <- read.csv(file = 'C:/Users/sbarrios/OneDrive - Universidad Galileo/Data Science/R/Proyectos/Pantaleon/Optimizador PrO NI/Data/Backtesting Hypothesis Testing 24-25.csv')
dataset

Funciones de Densidad: Rendimiento Industrial Optimizador

df1 <- data.frame(yield = dataset$Actual_Yield_2024,zafra=rep('2024', sum(!is.na(dataset$Actual_Yield_2024))))
df2 <- data.frame(yield = dataset$Actual_Yield_2025,zafra=rep('2025', sum(!is.na(dataset$Actual_Yield_2024))))


df_yield <- data.frame("Zafra" = c("2024","2025"), 
                      "Media" = c(mean(df1$yield, na.rm=TRUE),mean(df2$yield, na.rm=TRUE)),
                      "Mediana" = c(median(df1$yield, na.rm=TRUE),median(df2$yield, na.rm=TRUE)),
                      "Desv. Estándar" = c(sd(df1$yield, na.rm=TRUE),sd(df2$yield, na.rm=TRUE))
                      )

df_yield

ggplot() + 
  geom_density(data = df1, aes(x = yield,fill=zafra),alpha=0.7) + 
  geom_density(data = df2, aes(x = yield,fill=zafra),alpha=0.7)

  ggtitle("Yield Distributions")
$title
[1] "Yield Distributions"

attr(,"class")
[1] "labels"

Prueba de Normalidad de Yield Benefits

Se conduce una prueba Shapiro-Wilk para los beneficios de rendimiento de la zafra 2024 y 2025 con el objetivo de verificar la asunción de normalidad. El test Shapiro-Wilk considera como Hipótesis Nula \(H_0\) que los datos son normalmente distribuidos.

# Shapiro-Wilk normality test for Yield Benefits 2024
with(dataset, shapiro.test(dataset$Actual_Yield_2024))

    Shapiro-Wilk normality test

data:  dataset$Actual_Yield_2024
W = 0.99279, p-value = 0.0002557

A un nivel de significancia del 5% rechazamos la hipótesis nula de normalidad y concluimos que los datos no están normalmente distribuidos.

# Shapiro-Wilk normality test for Yield Benefits 2025
with(dataset, shapiro.test(dataset$Actual_Yield_2025[!is.na(dataset$Actual_Yield_2025)]))

    Shapiro-Wilk normality test

data:  dataset$Actual_Yield_2025[!is.na(dataset$Actual_Yield_2025)]
W = 0.98889, p-value = 0.007819

A un nivel de significancia del 5% rechazamos la hipótesis nula de normalidad y concluimos que los datos no están normalmente distribuidos.

Prueba Wilcoxon

Debido a que ambas muestras no cumplen el requisito de ser normalmente distribuidas, se elige la prueba Wilcoxon de Dos Muestras No Pareadas como una alternativa no-paramétrica a la prueba t-Test de Dos Muestras No Pareadas, la cual es útil para comparar dos grupos independientes de muestras cuando no están normalmente distribuidas.

\(H_0: Gap2024 - Gap2025 \geq 0\)

\(H_1: Gap2024 - Gap2025 < 0\)

x <- dataset$Actual_Yield_2024
y <- dataset$Actual_Yield_2025[!is.na(dataset$Actual_Yield_2025)]

res_Wilcox <- wilcox.test(x, y, alternative = "less", mu = 0.0, conf.level = 0.95)
res_Wilcox

    Wilcoxon rank sum test with continuity correction

data:  x and y
W = 100828, p-value < 2.2e-16
alternative hypothesis: true location shift is less than 0
res_Wilcox$p.value
[1] 6.876732e-25

A un nivel de confianza del 95%, con un p-value de 6.876732e-25 rechazamos la hipótesis nula \(H_0: Gap2024 - Gap2025 \geq 0.0\) y existe evidencia estadística suficiente para concluir que \(H_1: Gap2024 - Gap2025 < 0.0\), es decir, el Rendimiento para la zafra 2025 es mayor al de la zafra 2024.

Prueba t-Test de Dos Muestras No Pareadas Varianzas Desiguales

Se muestra como ejercicio la prueba t-Test de Dos Muestras No Pareadas, la cual es útil para comparar dos grupos independientes de muestras cuando se asume que están normalmente distribuidas.

\(H_0: Gap2024 - Gap2025 \geq 0.0\)

\(H_1: Gap2024 - Gap2025 < 0.0\)

res_tTest <- t.test(x, y, alternative = 'less', mu = 0.0, var.equal = FALSE)
res_tTest

    Welch Two Sample t-test

data:  x and y
t = -10.739, df = 579.87, p-value < 2.2e-16
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
       -Inf -0.9080002
sample estimates:
mean of x mean of y 
 85.78265  86.85518 
res_tTest$p.value
[1] 5.802156e-25

A un nivel de confianza del 95%, con un p-value de 5.802156e-25 rechazamos la hipótesis nula \(H_0: Gap2024 - Gap2025 \geq 0.0\) y existe evidencia estadística suficiente para concluir que \(H_1: Gap2024 - Gap2025 < 0.0\), por lo que el Rendimiento para la zafra 2025 es mayor al de la zafra 2024.

Prueba ANOVA para Dos Muestras (Un factor)

Se realiza una prueba ANOVA con las dos muestras, equivalente a prueba t-Student, para un solo factor (Zafra).

dataset_anova <- data.frame(Zafra = c(rep('2024', sum(!is.na(dataset$Actual_Yield_2024))),rep('2025', sum(!is.na(dataset$Actual_Yield_2024)))),
                            Yield = c(dataset$Actual_Yield_2024,dataset$Actual_Yield_2025))
dataset_anova <- dataset_anova[!is.na(dataset_anova$Yield),]
dataset_anova$Zafra <- factor(dataset_anova$Zafra)
one.way <- aov(Yield ~ Zafra, data = dataset_anova)
summary(one.way)
              Df Sum Sq Mean Sq F value Pr(>F)    
Zafra          1  294.4  294.36   131.7 <2e-16 ***
Residuals   1248 2790.5    2.24                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Con un p-value < 2.0e-16 se rechaza la hipótesis nula de medias iguales y el factor Zafra tiene un impacto significativo en el Rendimiento del Optimizador, y por lo tanto se concluye que las medias son diferentes.

ggplot(data = dataset_anova, aes(x = Zafra, y = Yield)) + geom_boxplot() + geom_jitter(aes(color = Zafra)) + ggtitle("Box Plot Rendimiento Optimizador Real")

LS0tDQp0aXRsZTogIlByTyBOaWNhcmFndWEgWWllbGQgSHlwb3RoZXNpcyBUZXN0aW5nIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KQ29uIGVsIG9iamV0aXZvIGRlIHBvZGVyIGRldGVybWluYXIgc2kgZXhpc3RlIG8gbm8gdW5hIHNpZ25pZmljYW5jaWEgZXN0YWTDrXN0aWNhIHBhcmEgbGEgZGlmZXJlbmNpYSBlbnRyZSBlbCAqUmVuZGltaWVudG8gZGVsIE9wdGltaXphZG9yKiBkZSBsYSBaYWZyYSAyMDIzLTIwMjQgeSBlbCBkZSBsYSBaYWZyYSAyMDI0LTIwMjUgc2UgcmVhbGl6YW4gdW5hIHBydWViYXMgZGUgaGlww7N0ZXNpcyBwYXJhIG1lZGlhcyAvIG1lZGlhbmFzLiANCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3B1YnIpDQpgYGANCg0KYGBge3J9DQpkYXRhc2V0IDwtIHJlYWQuY3N2KGZpbGUgPSAnQzovVXNlcnMvc2JhcnJpb3MvT25lRHJpdmUgLSBVbml2ZXJzaWRhZCBHYWxpbGVvL0RhdGEgU2NpZW5jZS9SL1Byb3llY3Rvcy9QYW50YWxlb24vT3B0aW1pemFkb3IgUHJPIE5JL0RhdGEvQmFja3Rlc3RpbmcgSHlwb3RoZXNpcyBUZXN0aW5nIDI0LTI1LmNzdicpDQpkYXRhc2V0DQpgYGANCg0KDQojIyMgRnVuY2lvbmVzIGRlIERlbnNpZGFkOiBSZW5kaW1pZW50byBJbmR1c3RyaWFsIE9wdGltaXphZG9yDQoNCmBgYHtyfQ0KZGYxIDwtIGRhdGEuZnJhbWUoeWllbGQgPSBkYXRhc2V0JEFjdHVhbF9ZaWVsZF8yMDI0LHphZnJhPXJlcCgnMjAyNCcsIHN1bSghaXMubmEoZGF0YXNldCRBY3R1YWxfWWllbGRfMjAyNCkpKSkNCmRmMiA8LSBkYXRhLmZyYW1lKHlpZWxkID0gZGF0YXNldCRBY3R1YWxfWWllbGRfMjAyNSx6YWZyYT1yZXAoJzIwMjUnLCBzdW0oIWlzLm5hKGRhdGFzZXQkQWN0dWFsX1lpZWxkXzIwMjQpKSkpDQoNCg0KZGZfeWllbGQgPC0gZGF0YS5mcmFtZSgiWmFmcmEiID0gYygiMjAyNCIsIjIwMjUiKSwgDQogICAgICAgICAgICAgICAgICAgICAgIk1lZGlhIiA9IGMobWVhbihkZjEkeWllbGQsIG5hLnJtPVRSVUUpLG1lYW4oZGYyJHlpZWxkLCBuYS5ybT1UUlVFKSksDQogICAgICAgICAgICAgICAgICAgICAgIk1lZGlhbmEiID0gYyhtZWRpYW4oZGYxJHlpZWxkLCBuYS5ybT1UUlVFKSxtZWRpYW4oZGYyJHlpZWxkLCBuYS5ybT1UUlVFKSksDQogICAgICAgICAgICAgICAgICAgICAgIkRlc3YuIEVzdMOhbmRhciIgPSBjKHNkKGRmMSR5aWVsZCwgbmEucm09VFJVRSksc2QoZGYyJHlpZWxkLCBuYS5ybT1UUlVFKSkNCiAgICAgICAgICAgICAgICAgICAgICApDQoNCmRmX3lpZWxkDQoNCmdncGxvdCgpICsgDQogIGdlb21fZGVuc2l0eShkYXRhID0gZGYxLCBhZXMoeCA9IHlpZWxkLGZpbGw9emFmcmEpLGFscGhhPTAuNykgKyANCiAgZ2VvbV9kZW5zaXR5KGRhdGEgPSBkZjIsIGFlcyh4ID0geWllbGQsZmlsbD16YWZyYSksYWxwaGE9MC43KQ0KICBnZ3RpdGxlKCJZaWVsZCBEaXN0cmlidXRpb25zIikNCmBgYA0KDQojIyMgUHJ1ZWJhIGRlIE5vcm1hbGlkYWQgZGUgWWllbGQgQmVuZWZpdHMNCg0KU2UgY29uZHVjZSB1bmEgcHJ1ZWJhICpTaGFwaXJvLVdpbGsqIHBhcmEgbG9zIGJlbmVmaWNpb3MgZGUgcmVuZGltaWVudG8gZGUgbGEgemFmcmEgMjAyNCB5IDIwMjUgY29uIGVsIG9iamV0aXZvIGRlIHZlcmlmaWNhciBsYSBhc3VuY2nDs24gZGUgKm5vcm1hbGlkYWQqLg0KRWwgdGVzdCAqU2hhcGlyby1XaWxrKiBjb25zaWRlcmEgY29tbyBIaXDDs3Rlc2lzIE51bGEgJEhfMCQgcXVlIGxvcyBkYXRvcyBzb24gbm9ybWFsbWVudGUgZGlzdHJpYnVpZG9zLg0KDQpgYGB7cn0NCiMgU2hhcGlyby1XaWxrIG5vcm1hbGl0eSB0ZXN0IGZvciBZaWVsZCBCZW5lZml0cyAyMDI0DQp3aXRoKGRhdGFzZXQsIHNoYXBpcm8udGVzdChkYXRhc2V0JEFjdHVhbF9ZaWVsZF8yMDI0KSkNCmBgYA0KQSB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIGRlbCA1JSByZWNoYXphbW9zIGxhIGhpcMOzdGVzaXMgbnVsYSBkZSBub3JtYWxpZGFkIHkgY29uY2x1aW1vcyBxdWUgbG9zIGRhdG9zICoqbm8gZXN0w6FuIG5vcm1hbG1lbnRlIGRpc3RyaWJ1aWRvcyoqLg0KDQpgYGB7cn0NCiMgU2hhcGlyby1XaWxrIG5vcm1hbGl0eSB0ZXN0IGZvciBZaWVsZCBCZW5lZml0cyAyMDI1DQp3aXRoKGRhdGFzZXQsIHNoYXBpcm8udGVzdChkYXRhc2V0JEFjdHVhbF9ZaWVsZF8yMDI1WyFpcy5uYShkYXRhc2V0JEFjdHVhbF9ZaWVsZF8yMDI1KV0pKQ0KYGBgDQpBIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgZGVsIDUlIHJlY2hhemFtb3MgbGEgaGlww7N0ZXNpcyBudWxhIGRlIG5vcm1hbGlkYWQgeSBjb25jbHVpbW9zIHF1ZSBsb3MgZGF0b3MgKipubyBlc3TDoW4gbm9ybWFsbWVudGUgZGlzdHJpYnVpZG9zKiouDQoNCg0KIyMjIFBydWViYSBXaWxjb3hvbg0KDQpEZWJpZG8gYSBxdWUgYW1iYXMgbXVlc3RyYXMgbm8gY3VtcGxlbiBlbCByZXF1aXNpdG8gZGUgc2VyIG5vcm1hbG1lbnRlIGRpc3RyaWJ1aWRhcywgc2UgZWxpZ2UgbGEgcHJ1ZWJhICoqV2lsY294b24gZGUgRG9zIE11ZXN0cmFzIE5vIFBhcmVhZGFzKiogY29tbyB1bmEgYWx0ZXJuYXRpdmEgbm8tcGFyYW3DqXRyaWNhIGEgbGEgcHJ1ZWJhICoqdC1UZXN0IGRlIERvcyBNdWVzdHJhcyBObyBQYXJlYWRhcyoqLCBsYSBjdWFsIGVzIMO6dGlsIHBhcmEgY29tcGFyYXIgZG9zIGdydXBvcyBpbmRlcGVuZGllbnRlcyBkZSBtdWVzdHJhcyBjdWFuZG8gKipubyBlc3TDoW4gbm9ybWFsbWVudGUgZGlzdHJpYnVpZGFzKiouDQoNCiRIXzA6IEdhcDIwMjQgLSBHYXAyMDI1IFxnZXEgMCQNCg0KJEhfMTogR2FwMjAyNCAtIEdhcDIwMjUgPCAwJA0KDQoNCmBgYHtyfQ0KeCA8LSBkYXRhc2V0JEFjdHVhbF9ZaWVsZF8yMDI0DQp5IDwtIGRhdGFzZXQkQWN0dWFsX1lpZWxkXzIwMjVbIWlzLm5hKGRhdGFzZXQkQWN0dWFsX1lpZWxkXzIwMjUpXQ0KDQpyZXNfV2lsY294IDwtIHdpbGNveC50ZXN0KHgsIHksIGFsdGVybmF0aXZlID0gImxlc3MiLCBtdSA9IDAuMCwgY29uZi5sZXZlbCA9IDAuOTUpDQpyZXNfV2lsY294DQpgYGANCmBgYHtyfQ0KcmVzX1dpbGNveCRwLnZhbHVlDQpgYGANCkEgdW4gbml2ZWwgZGUgY29uZmlhbnphIGRlbCA5NSUsIGNvbiB1biAqKnAtdmFsdWUgZGUgNi44NzY3MzJlLTI1IHJlY2hhemFtb3MgbGEgaGlww7N0ZXNpcyBudWxhICRIXzA6IEdhcDIwMjQgLSBHYXAyMDI1IFxnZXEgMC4wJCoqIHkgZXhpc3RlIGV2aWRlbmNpYSBlc3RhZMOtc3RpY2Egc3VmaWNpZW50ZSBwYXJhIGNvbmNsdWlyIHF1ZSAqKiRIXzE6IEdhcDIwMjQgLSBHYXAyMDI1IDwgMC4wJCoqLCBlcyBkZWNpciwgZWwgUmVuZGltaWVudG8gcGFyYSBsYSB6YWZyYSAyMDI1IGVzIG1heW9yIGFsIGRlIGxhIHphZnJhIDIwMjQuDQoNCg0KIyMjIFBydWViYSB0LVRlc3QgZGUgRG9zIE11ZXN0cmFzIE5vIFBhcmVhZGFzIFZhcmlhbnphcyBEZXNpZ3VhbGVzDQoNClNlIG11ZXN0cmEgY29tbyBlamVyY2ljaW8gbGEgcHJ1ZWJhICoqdC1UZXN0IGRlIERvcyBNdWVzdHJhcyBObyBQYXJlYWRhcyoqLCBsYSBjdWFsIGVzIMO6dGlsIHBhcmEgY29tcGFyYXIgZG9zIGdydXBvcyBpbmRlcGVuZGllbnRlcyBkZSBtdWVzdHJhcyBjdWFuZG8gc2UgYXN1bWUgcXVlIGVzdMOhbiBub3JtYWxtZW50ZSBkaXN0cmlidWlkYXMuDQoNCiRIXzA6IEdhcDIwMjQgLSBHYXAyMDI1IFxnZXEgMC4wJA0KDQokSF8xOiBHYXAyMDI0IC0gR2FwMjAyNSA8IDAuMCQNCg0KYGBge3J9DQpyZXNfdFRlc3QgPC0gdC50ZXN0KHgsIHksIGFsdGVybmF0aXZlID0gJ2xlc3MnLCBtdSA9IDAuMCwgdmFyLmVxdWFsID0gRkFMU0UpDQpyZXNfdFRlc3QNCmBgYA0KYGBge3J9DQpyZXNfdFRlc3QkcC52YWx1ZQ0KYGBgDQpBIHVuIG5pdmVsIGRlIGNvbmZpYW56YSBkZWwgOTUlLCBjb24gdW4gKipwLXZhbHVlIGRlIDUuODAyMTU2ZS0yNSByZWNoYXphbW9zIGxhIGhpcMOzdGVzaXMgbnVsYSAkSF8wOiBHYXAyMDI0IC0gR2FwMjAyNSBcZ2VxIDAuMCQqKiB5IGV4aXN0ZSBldmlkZW5jaWEgZXN0YWTDrXN0aWNhIHN1ZmljaWVudGUgcGFyYSBjb25jbHVpciBxdWUgKiokSF8xOiBHYXAyMDI0IC0gR2FwMjAyNSA8IDAuMCQqKiwgcG9yIGxvIHF1ZSBlbCBSZW5kaW1pZW50byBwYXJhIGxhIHphZnJhIDIwMjUgZXMgbWF5b3IgYWwgZGUgbGEgemFmcmEgMjAyNC4NCg0KDQojIyMgUHJ1ZWJhIEFOT1ZBIHBhcmEgRG9zIE11ZXN0cmFzIChVbiBmYWN0b3IpDQoNClNlIHJlYWxpemEgdW5hIHBydWViYSBBTk9WQSBjb24gbGFzIGRvcyBtdWVzdHJhcywgZXF1aXZhbGVudGUgYSBwcnVlYmEgdC1TdHVkZW50LCBwYXJhIHVuIHNvbG8gZmFjdG9yIChaYWZyYSkuDQpgYGB7cn0NCmRhdGFzZXRfYW5vdmEgPC0gZGF0YS5mcmFtZShaYWZyYSA9IGMocmVwKCcyMDI0Jywgc3VtKCFpcy5uYShkYXRhc2V0JEFjdHVhbF9ZaWVsZF8yMDI0KSkpLHJlcCgnMjAyNScsIHN1bSghaXMubmEoZGF0YXNldCRBY3R1YWxfWWllbGRfMjAyNCkpKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWWllbGQgPSBjKGRhdGFzZXQkQWN0dWFsX1lpZWxkXzIwMjQsZGF0YXNldCRBY3R1YWxfWWllbGRfMjAyNSkpDQpkYXRhc2V0X2Fub3ZhIDwtIGRhdGFzZXRfYW5vdmFbIWlzLm5hKGRhdGFzZXRfYW5vdmEkWWllbGQpLF0NCmRhdGFzZXRfYW5vdmEkWmFmcmEgPC0gZmFjdG9yKGRhdGFzZXRfYW5vdmEkWmFmcmEpDQpvbmUud2F5IDwtIGFvdihZaWVsZCB+IFphZnJhLCBkYXRhID0gZGF0YXNldF9hbm92YSkNCnN1bW1hcnkob25lLndheSkNCmBgYA0KDQpDb24gdW4gKipwLXZhbHVlIDwgMi4wZS0xNioqIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhIGRlIG1lZGlhcyBpZ3VhbGVzIHkgZWwgZmFjdG9yICoqWmFmcmEqKiB0aWVuZSB1biBpbXBhY3RvIHNpZ25pZmljYXRpdm8gZW4gZWwgUmVuZGltaWVudG8gZGVsIE9wdGltaXphZG9yLCB5IHBvciBsbyB0YW50byBzZSBjb25jbHV5ZSBxdWUgKipsYXMgbWVkaWFzIHNvbiBkaWZlcmVudGVzKiouIA0KDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBkYXRhc2V0X2Fub3ZhLCBhZXMoeCA9IFphZnJhLCB5ID0gWWllbGQpKSArIGdlb21fYm94cGxvdCgpICsgZ2VvbV9qaXR0ZXIoYWVzKGNvbG9yID0gWmFmcmEpKSArIGdndGl0bGUoIkJveCBQbG90IFJlbmRpbWllbnRvIE9wdGltaXphZG9yIFJlYWwiKQ0KYGBgDQo=