Con el objetivo de poder determinar si existe o no una significancia estadística para la diferencia entre el GAP Optimizado - Real 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: Delta de Rendimiento Optimizado - Real

df1 <- data.frame(delta_yield = dataset$Final_Yield_Benefit_2024,zafra=rep('2024', sum(!is.na(dataset$Final_Yield_Benefit_2024))))
df2 <- data.frame(delta_yield = dataset$Final_Yield_Benefit_2025,zafra=rep('2025', sum(!is.na(dataset$Final_Yield_Benefit_2024))))


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

df_delta_yield

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

  ggtitle("Delta Yield Distributions")
$title
[1] "Delta 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$Final_Yield_Benefit_2024))

    Shapiro-Wilk normality test

data:  dataset$Final_Yield_Benefit_2024
W = 0.92472, p-value < 2.2e-16

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$Final_Yield_Benefit_2025[!is.na(dataset$Final_Yield_Benefit_2025)]))

    Shapiro-Wilk normality test

data:  dataset$Final_Yield_Benefit_2025[!is.na(dataset$Final_Yield_Benefit_2025)]
W = 0.89396, p-value = 4.283e-15

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 \leq 0.709\)

\(H_1: Gap2024 - Gap2025 > 0.709\)

x <- dataset$Final_Yield_Benefit_2024
y <- dataset$Final_Yield_Benefit_2025[!is.na(dataset$Final_Yield_Benefit_2025)]

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

    Wilcoxon rank sum test with continuity correction

data:  x and y
W = 169435, p-value = 0.04997
alternative hypothesis: true location shift is greater than 0.709
res_Wilcox$p.value
[1] 0.04997176

A un nivel de confianza del 95%, con un p-value de 0.04997176 rechazamos la hipótesis nula \(H_0: Gap2024 - Gap2025 \leq 0.709\) y existe evidencia estadística suficiente para concluir que \(H_1: Gap2024 - Gap2025 > 0.709\), es decir, el GAP de Rendimiento para la zafra 2025 se redujo al menos en 0.709% comparado con 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 \leq 0.66\)

\(H_1: Gap2024 - Gap2025 > 0.66\)

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

    Welch Two Sample t-test

data:  x and y
t = 1.6897, df = 700.82, p-value = 0.04577
alternative hypothesis: true difference in means is greater than 0.66
95 percent confidence interval:
 0.6614042       Inf
sample estimates:
mean of x mean of y 
 4.007120  3.291508 
res_tTest$p.value
[1] 0.0457656

A un nivel de confianza del 95%, con un p-value de 0.0457656 rechazamos la hipótesis nula \(H_0: Gap2024 - Gap2025 \leq 0.66\) y existe evidencia estadística suficiente para concluir que \(H_1: Gap2024 - Gap2025 > 0.66\), por lo que el GAP de Rendimiento para la zafra 2025 se redujo al menos en 0.66% comparado con 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$Final_Yield_Benefit_2024))),rep('2025', sum(!is.na(dataset$Final_Yield_Benefit_2024)))),
                            Yield_Gap = c(dataset$Final_Yield_Benefit_2024,dataset$Final_Yield_Benefit_2025))
dataset_anova <- dataset_anova[!is.na(dataset_anova$Yield_Gap),]
dataset_anova$Zafra <- factor(dataset_anova$Zafra)
one.way <- aov(Yield_Gap ~ Zafra, data = dataset_anova)
summary(one.way)
              Df Sum Sq Mean Sq F value Pr(>F)    
Zafra          1  131.0  131.04   448.2 <2e-16 ***
Residuals   1248  364.9    0.29                   
---
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 GAP de Rendimiento Optimizado, y por lo tanto se concluye que las medias son diferentes.

ggplot(data = dataset_anova, aes(x = Zafra, y = Yield_Gap)) + geom_boxplot() + geom_jitter(aes(color = Zafra)) + ggtitle("Box Plot Gap Rendimiento Optimizado vs. Real")

LS0tDQp0aXRsZTogIlByTyBOaWNhcmFndWEgR0FQIEh5cG90aGVzaXMgVGVzdGluZyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCkNvbiBlbCBvYmpldGl2byBkZSBwb2RlciBkZXRlcm1pbmFyIHNpIGV4aXN0ZSBvIG5vIHVuYSBzaWduaWZpY2FuY2lhIGVzdGFkw61zdGljYSBwYXJhIGxhIGRpZmVyZW5jaWEgZW50cmUgZWwgKkdBUCBPcHRpbWl6YWRvIC0gUmVhbCogZGUgbGEgWmFmcmEgMjAyMy0yMDI0IHkgZWwgZGUgbGEgWmFmcmEgMjAyNC0yMDI1IHNlIHJlYWxpemFuIHVuYSBwcnVlYmFzIGRlIGhpcMOzdGVzaXMgcGFyYSBtZWRpYXMgLyBtZWRpYW5hcy4NCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnZ3B1YnIpDQpgYGANCg0KYGBge3J9DQpkYXRhc2V0IDwtIHJlYWQuY3N2KGZpbGUgPSAnQzovVXNlcnMvc2JhcnJpb3MvT25lRHJpdmUgLSBVbml2ZXJzaWRhZCBHYWxpbGVvL0RhdGEgU2NpZW5jZS9SL1Byb3llY3Rvcy9QYW50YWxlb24vT3B0aW1pemFkb3IgUHJPIE5JL0RhdGEvQmFja3Rlc3RpbmcgSHlwb3RoZXNpcyBUZXN0aW5nIDI0LTI1LmNzdicpDQpkYXRhc2V0DQpgYGANCg0KIyMjIEZ1bmNpb25lcyBkZSBEZW5zaWRhZDogRGVsdGEgZGUgUmVuZGltaWVudG8gT3B0aW1pemFkbyAtIFJlYWwNCg0KYGBge3J9DQpkZjEgPC0gZGF0YS5mcmFtZShkZWx0YV95aWVsZCA9IGRhdGFzZXQkRmluYWxfWWllbGRfQmVuZWZpdF8yMDI0LHphZnJhPXJlcCgnMjAyNCcsIHN1bSghaXMubmEoZGF0YXNldCRGaW5hbF9ZaWVsZF9CZW5lZml0XzIwMjQpKSkpDQpkZjIgPC0gZGF0YS5mcmFtZShkZWx0YV95aWVsZCA9IGRhdGFzZXQkRmluYWxfWWllbGRfQmVuZWZpdF8yMDI1LHphZnJhPXJlcCgnMjAyNScsIHN1bSghaXMubmEoZGF0YXNldCRGaW5hbF9ZaWVsZF9CZW5lZml0XzIwMjQpKSkpDQoNCg0KZGZfZGVsdGFfeWllbGQgPC0gZGF0YS5mcmFtZSgiWmFmcmEiID0gYygiMjAyNCIsIjIwMjUiKSwgDQogICAgICAgICAgICAgICAgICAgICAgIk1lZGlhIiA9IGMobWVhbihkZjEkZGVsdGFfeWllbGQsIG5hLnJtPVRSVUUpLG1lYW4oZGYyJGRlbHRhX3lpZWxkLCBuYS5ybT1UUlVFKSksDQogICAgICAgICAgICAgICAgICAgICAgIk1lZGlhbmEiID0gYyhtZWRpYW4oZGYxJGRlbHRhX3lpZWxkLCBuYS5ybT1UUlVFKSxtZWRpYW4oZGYyJGRlbHRhX3lpZWxkLCBuYS5ybT1UUlVFKSksDQogICAgICAgICAgICAgICAgICAgICAgIkRlc3YuIEVzdMOhbmRhciIgPSBjKHNkKGRmMSRkZWx0YV95aWVsZCwgbmEucm09VFJVRSksc2QoZGYyJGRlbHRhX3lpZWxkLCBuYS5ybT1UUlVFKSkNCiAgICAgICAgICAgICAgICAgICAgICApDQoNCmRmX2RlbHRhX3lpZWxkDQoNCmdncGxvdCgpICsgDQogIGdlb21fZGVuc2l0eShkYXRhID0gZGYxLCBhZXMoeCA9IGRlbHRhX3lpZWxkLGZpbGw9emFmcmEpLGFscGhhPTAuNykgKyANCiAgZ2VvbV9kZW5zaXR5KGRhdGEgPSBkZjIsIGFlcyh4ID0gZGVsdGFfeWllbGQsZmlsbD16YWZyYSksYWxwaGE9MC43KQ0KICBnZ3RpdGxlKCJEZWx0YSBZaWVsZCBEaXN0cmlidXRpb25zIikNCmBgYA0KDQojIyMgUHJ1ZWJhIGRlIE5vcm1hbGlkYWQgZGUgWWllbGQgQmVuZWZpdHMNCg0KU2UgY29uZHVjZSB1bmEgcHJ1ZWJhICpTaGFwaXJvLVdpbGsqIHBhcmEgbG9zIGJlbmVmaWNpb3MgZGUgcmVuZGltaWVudG8gZGUgbGEgemFmcmEgMjAyNCB5IDIwMjUgY29uIGVsIG9iamV0aXZvIGRlIHZlcmlmaWNhciBsYSBhc3VuY2nDs24gZGUgKm5vcm1hbGlkYWQqLg0KRWwgdGVzdCAqU2hhcGlyby1XaWxrKiBjb25zaWRlcmEgY29tbyBIaXDDs3Rlc2lzIE51bGEgJEhfMCQgcXVlIGxvcyBkYXRvcyBzb24gbm9ybWFsbWVudGUgZGlzdHJpYnVpZG9zLg0KDQpgYGB7cn0NCiMgU2hhcGlyby1XaWxrIG5vcm1hbGl0eSB0ZXN0IGZvciBZaWVsZCBCZW5lZml0cyAyMDI0DQp3aXRoKGRhdGFzZXQsIHNoYXBpcm8udGVzdChkYXRhc2V0JEZpbmFsX1lpZWxkX0JlbmVmaXRfMjAyNCkpDQpgYGANCkEgdW4gbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSBkZWwgNSUgcmVjaGF6YW1vcyBsYSBoaXDDs3Rlc2lzIG51bGEgZGUgbm9ybWFsaWRhZCB5IGNvbmNsdWltb3MgcXVlIGxvcyBkYXRvcyAqKm5vIGVzdMOhbiBub3JtYWxtZW50ZSBkaXN0cmlidWlkb3MqKi4NCg0KYGBge3J9DQojIFNoYXBpcm8tV2lsayBub3JtYWxpdHkgdGVzdCBmb3IgWWllbGQgQmVuZWZpdHMgMjAyNQ0Kd2l0aChkYXRhc2V0LCBzaGFwaXJvLnRlc3QoZGF0YXNldCRGaW5hbF9ZaWVsZF9CZW5lZml0XzIwMjVbIWlzLm5hKGRhdGFzZXQkRmluYWxfWWllbGRfQmVuZWZpdF8yMDI1KV0pKQ0KYGBgDQpBIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgZGVsIDUlIHJlY2hhemFtb3MgbGEgaGlww7N0ZXNpcyBudWxhIGRlIG5vcm1hbGlkYWQgeSBjb25jbHVpbW9zIHF1ZSBsb3MgZGF0b3MgKipubyBlc3TDoW4gbm9ybWFsbWVudGUgZGlzdHJpYnVpZG9zKiouDQoNCg0KDQojIyMgUHJ1ZWJhIFdpbGNveG9uDQoNCkRlYmlkbyBhIHF1ZSBhbWJhcyBtdWVzdHJhcyBubyBjdW1wbGVuIGVsIHJlcXVpc2l0byBkZSBzZXIgbm9ybWFsbWVudGUgZGlzdHJpYnVpZGFzLCBzZSBlbGlnZSBsYSBwcnVlYmEgKipXaWxjb3hvbiBkZSBEb3MgTXVlc3RyYXMgTm8gUGFyZWFkYXMqKiBjb21vIHVuYSBhbHRlcm5hdGl2YSBuby1wYXJhbcOpdHJpY2EgYSBsYSBwcnVlYmEgKip0LVRlc3QgZGUgRG9zIE11ZXN0cmFzIE5vIFBhcmVhZGFzKiosIGxhIGN1YWwgZXMgw7p0aWwgcGFyYSBjb21wYXJhciBkb3MgZ3J1cG9zIGluZGVwZW5kaWVudGVzIGRlIG11ZXN0cmFzIGN1YW5kbyAqKm5vIGVzdMOhbiBub3JtYWxtZW50ZSBkaXN0cmlidWlkYXMqKi4NCg0KJEhfMDogR2FwMjAyNCAtIEdhcDIwMjUgXGxlcSAwLjcwOSQNCg0KJEhfMTogR2FwMjAyNCAtIEdhcDIwMjUgPiAwLjcwOSQNCg0KYGBge3J9DQp4IDwtIGRhdGFzZXQkRmluYWxfWWllbGRfQmVuZWZpdF8yMDI0DQp5IDwtIGRhdGFzZXQkRmluYWxfWWllbGRfQmVuZWZpdF8yMDI1WyFpcy5uYShkYXRhc2V0JEZpbmFsX1lpZWxkX0JlbmVmaXRfMjAyNSldDQoNCnJlc19XaWxjb3ggPC0gd2lsY294LnRlc3QoeCwgeSwgYWx0ZXJuYXRpdmUgPSAiZ3JlYXRlciIsIG11ID0gMC43MDksIGNvbmYubGV2ZWwgPSAwLjk1KQ0KcmVzX1dpbGNveA0KYGBgDQpgYGB7cn0NCnJlc19XaWxjb3gkcC52YWx1ZQ0KYGBgDQpBIHVuIG5pdmVsIGRlIGNvbmZpYW56YSBkZWwgOTUlLCBjb24gdW4gKipwLXZhbHVlIGRlIDAuMDQ5OTcxNzYgcmVjaGF6YW1vcyBsYSBoaXDDs3Rlc2lzIG51bGEgJEhfMDogR2FwMjAyNCAtIEdhcDIwMjUgXGxlcSAwLjcwOSQqKiB5IGV4aXN0ZSBldmlkZW5jaWEgZXN0YWTDrXN0aWNhIHN1ZmljaWVudGUgcGFyYSBjb25jbHVpciBxdWUgKiokSF8xOiBHYXAyMDI0IC0gR2FwMjAyNSA+IDAuNzA5JCoqLCBlcyBkZWNpciwgZWwgR0FQIGRlIFJlbmRpbWllbnRvIHBhcmEgbGEgemFmcmEgMjAyNSAqKnNlIHJlZHVqbyBhbCBtZW5vcyBlbiAwLjcwOSUqKiBjb21wYXJhZG8gY29uIGxhIHphZnJhIDIwMjQuDQoNCg0KIyMjIFBydWViYSB0LVRlc3QgZGUgRG9zIE11ZXN0cmFzIE5vIFBhcmVhZGFzIFZhcmlhbnphcyBEZXNpZ3VhbGVzDQoNClNlIG11ZXN0cmEgY29tbyBlamVyY2ljaW8gbGEgcHJ1ZWJhICoqdC1UZXN0IGRlIERvcyBNdWVzdHJhcyBObyBQYXJlYWRhcyoqLCBsYSBjdWFsIGVzIMO6dGlsIHBhcmEgY29tcGFyYXIgZG9zIGdydXBvcyBpbmRlcGVuZGllbnRlcyBkZSBtdWVzdHJhcyBjdWFuZG8gc2UgYXN1bWUgcXVlIGVzdMOhbiBub3JtYWxtZW50ZSBkaXN0cmlidWlkYXMuDQoNCiRIXzA6IEdhcDIwMjQgLSBHYXAyMDI1IFxsZXEgMC42NiQNCg0KJEhfMTogR2FwMjAyNCAtIEdhcDIwMjUgPiAwLjY2JA0KDQpgYGB7cn0NCnJlc190VGVzdCA8LSB0LnRlc3QoeCwgeSwgYWx0ZXJuYXRpdmUgPSAnZ3JlYXRlcicsIG11ID0gMC42NiwgdmFyLmVxdWFsID0gRkFMU0UpDQpyZXNfdFRlc3QNCmBgYA0KYGBge3J9DQpyZXNfdFRlc3QkcC52YWx1ZQ0KYGBgDQpBIHVuIG5pdmVsIGRlIGNvbmZpYW56YSBkZWwgOTUlLCBjb24gdW4gKipwLXZhbHVlIGRlIDAuMDQ1NzY1NiByZWNoYXphbW9zIGxhIGhpcMOzdGVzaXMgbnVsYSAkSF8wOiBHYXAyMDI0IC0gR2FwMjAyNSBcbGVxIDAuNjYkKiogeSBleGlzdGUgZXZpZGVuY2lhIGVzdGFkw61zdGljYSBzdWZpY2llbnRlIHBhcmEgY29uY2x1aXIgcXVlICoqJEhfMTogR2FwMjAyNCAtIEdhcDIwMjUgPiAwLjY2JCoqLCBwb3IgbG8gcXVlIGVsIEdBUCBkZSBSZW5kaW1pZW50byBwYXJhIGxhIHphZnJhIDIwMjUgKipzZSByZWR1am8gYWwgbWVub3MgZW4gMC42NiUqKiBjb21wYXJhZG8gY29uIGxhIHphZnJhIDIwMjQuDQoNCg0KIyMjIFBydWViYSBBTk9WQSBwYXJhIERvcyBNdWVzdHJhcyAoVW4gZmFjdG9yKQ0KDQpTZSByZWFsaXphIHVuYSBwcnVlYmEgQU5PVkEgY29uIGxhcyBkb3MgbXVlc3RyYXMsIGVxdWl2YWxlbnRlIGEgcHJ1ZWJhIHQtU3R1ZGVudCwgcGFyYSB1biBzb2xvIGZhY3RvciAoWmFmcmEpLg0KYGBge3J9DQpkYXRhc2V0X2Fub3ZhIDwtIGRhdGEuZnJhbWUoWmFmcmEgPSBjKHJlcCgnMjAyNCcsIHN1bSghaXMubmEoZGF0YXNldCRGaW5hbF9ZaWVsZF9CZW5lZml0XzIwMjQpKSkscmVwKCcyMDI1Jywgc3VtKCFpcy5uYShkYXRhc2V0JEZpbmFsX1lpZWxkX0JlbmVmaXRfMjAyNCkpKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWWllbGRfR2FwID0gYyhkYXRhc2V0JEZpbmFsX1lpZWxkX0JlbmVmaXRfMjAyNCxkYXRhc2V0JEZpbmFsX1lpZWxkX0JlbmVmaXRfMjAyNSkpDQpkYXRhc2V0X2Fub3ZhIDwtIGRhdGFzZXRfYW5vdmFbIWlzLm5hKGRhdGFzZXRfYW5vdmEkWWllbGRfR2FwKSxdDQpkYXRhc2V0X2Fub3ZhJFphZnJhIDwtIGZhY3RvcihkYXRhc2V0X2Fub3ZhJFphZnJhKQ0Kb25lLndheSA8LSBhb3YoWWllbGRfR2FwIH4gWmFmcmEsIGRhdGEgPSBkYXRhc2V0X2Fub3ZhKQ0Kc3VtbWFyeShvbmUud2F5KQ0KYGBgDQpDb24gdW4gKipwLXZhbHVlIDwgMi4wZS0xNioqIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhIGRlIG1lZGlhcyBpZ3VhbGVzIHkgZWwgZmFjdG9yICoqWmFmcmEqKiB0aWVuZSB1biBpbXBhY3RvIHNpZ25pZmljYXRpdm8gZW4gZWwgR0FQIGRlIFJlbmRpbWllbnRvIE9wdGltaXphZG8sIHkgcG9yIGxvIHRhbnRvIHNlIGNvbmNsdXllIHF1ZSAqKmxhcyBtZWRpYXMgc29uIGRpZmVyZW50ZXMqKi4gDQoNCg0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IGRhdGFzZXRfYW5vdmEsIGFlcyh4ID0gWmFmcmEsIHkgPSBZaWVsZF9HYXApKSArIGdlb21fYm94cGxvdCgpICsgZ2VvbV9qaXR0ZXIoYWVzKGNvbG9yID0gWmFmcmEpKSArIGdndGl0bGUoIkJveCBQbG90IEdhcCBSZW5kaW1pZW50byBPcHRpbWl6YWRvIHZzLiBSZWFsIikNCmBgYA0KDQoNCg==