Patient_Admission_Data_3_ <- read_excel("Patient_Admission_Data (3).xlsx")
x <- na.omit(Patient_Admission_Data_3_$Number_Of_Days)
if(length(x) == 0){
  stop("Error: No numeric data found in Number_Of_Days column")
}
n <- length(x)  # sample size


fit_gumbel <- fgev(x, shape = 0)
loc_gumbel <- fit_gumbel$estimate["loc"]
scale_gumbel <- fit_gumbel$estimate["scale"]
k_gumbel <- 2  # loc + scale


fit_gev <- fgev(x)  # shape estimated freely
loc_gev <- fit_gev$estimate["loc"]
scale_gev <- fit_gev$estimate["scale"]
shape_gev <- fit_gev$estimate["shape"]
k_gev <- length(fit_gev$estimate)  # loc + scale + shape


dev.new(width = 10, height = 6)
hist(x,
     probability = TRUE,
     col = "lightgray",
     border = "white",
     main = "Histogram with Gumbel and General EVD Densities",
     xlab = "Number of Days",
     ylab = "Density")

x_range <- seq(min(x), max(x), length.out = 500)

# Densities
density_gumbel <- dgev(x_range, loc = loc_gumbel, scale = scale_gumbel, shape = 0)
density_gev    <- dgev(x_range, loc = loc_gev, scale = scale_gev, shape = shape_gev)

# Add curves
lines(x_range, density_gumbel, col = "blue", lwd = 2)
lines(x_range, density_gev, col = "red", lwd = 2, lty = 2)

legend("topright",
       legend = c("Gumbel (shape=0)", "General EVD"),
       col = c("blue", "red"),
       lwd = 2,
       lty = c(1,2))


dev.new(width = 6, height = 6)
p <- ppoints(n)
q_gumbel <- qgev(p, loc = loc_gumbel, scale = scale_gumbel, shape = 0)
q_gev    <- qgev(p, loc = loc_gev, scale = scale_gev, shape = shape_gev)

plot(q_gumbel, sort(x), main = "Q-Q Plot Comparison", xlab = "Theoretical Quantiles", ylab = "Sample Quantiles", col="blue", pch=16)
points(q_gev, sort(x), col="red", pch=17)
abline(0,1,col="black", lwd=2)
legend("topleft", legend=c("Gumbel","General EVD"), col=c("blue","red"), pch=c(16,17))


AIC_gumbel <- AIC(fit_gumbel)
BIC_gumbel <- AIC_gumbel + (k_gumbel*log(n) - 2*k_gumbel)

AIC_gev <- AIC(fit_gev)
BIC_gev <- AIC_gev + (k_gev*log(n) - 2*k_gev)

cat("MODEL COMPARISON RESULTS\n")
## MODEL COMPARISON RESULTS
cat(sprintf("Gumbel (shape=0)     : AIC = %.2f, BIC = %.2f\n", AIC_gumbel, BIC_gumbel))
## Gumbel (shape=0)     : AIC = 1849.37, BIC = 1855.11
cat(sprintf("General EVD (shape~) : AIC = %.2f, BIC = %.2f\n", AIC_gev, BIC_gev))
## General EVD (shape~) : AIC = 1850.38, BIC = 1858.98