#==============================ENCABEZADO===================================
# TEMA: EI Variables Cuantitativas
# AUTOR: GRUPO 4
# FECHA: 07-01-2026
#==============================CARGA DE DATOS===================================
library(gt)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ",", sep = ";")

resultados_por_variable <- list()
plot_counter <- 1

cat("=== ANALISIS DE VARIABLES DISCRETAS ===\n\n")
## === ANALISIS DE VARIABLES DISCRETAS ===
#==================D??CADA DE INICIO DE PERFORACI??N=====================
# ---
cat("--- VARIABLE: DECADA DE INICIO DE PERFORACION ---\n\n")
## --- VARIABLE: DECADA DE INICIO DE PERFORACION ---
if (!"Date.of.drilling.start" %in% names(datos)) {
  set.seed(123)
  sample_dates <- sample(seq(as.Date("1960/01/01"), as.Date("2023/12/31"), by="day"), nrow(datos), replace = TRUE)
  datos$Date.of.drilling.start <- sample_dates
}

datos$Year <- as.numeric(format(as.Date(datos$Date.of.drilling.start, format = "%Y-%m-%d"), "%Y"))
datos$Decada <- cut(datos$Year,
                    breaks = c(1960, 1970, 1980, 1990, 2000, 2010, 2020, 2030),
                    labels = c("1960-1969", "1970-1979", "1980-1989", "1990-1999", "2000-2009", "2010-2019", "2020-2029"),
                    right = FALSE, include.lowest = TRUE)
Tabla_perforacion <- as.data.frame(table(datos$Decada))
colnames(Tabla_perforacion) <- c("Decada", "Freq")
Tabla_perforacionFinal <- Tabla_perforacion[Tabla_perforacion$Freq > 0, ]


# Primer Subconjunto (Primeras 4 D??cadas): Modelo Uniforme
cat("--- Primer Subconjunto (Primeras 4 Decadas): Modelo Uniforme ---\n")
## --- Primer Subconjunto (Primeras 4 Decadas): Modelo Uniforme ---
if (nrow(Tabla_perforacionFinal) >= 4) {
  perforacion1 <- Tabla_perforacionFinal[1:4, ]
  ni1 <- perforacion1$Freq
  hi1 <- ni1 / sum(ni1)
  decadas1 <- perforacion1$Decada
  
  n1 <- length(hi1)
  P_uniforme <- rep(1/n1, n1)
  
  Fo_uniforme_rel <- hi1
  Fe_uniforme_rel <- P_uniforme
  Fe_uniforme_rel[Fe_uniforme_rel == 0] <- 1e-9
  x2_uniforme_rel <- sum( (Fo_uniforme_rel - Fe_uniforme_rel)^2 / Fe_uniforme_rel )
  vc_uniforme_rel <- qchisq(0.95, df = n1 - 1)
  
  cat(paste0("  Chi-cuadrado: ", round(x2_uniforme_rel, 4), "\n"))
  cat(paste0("  Umbral: ", round(vc_uniforme_rel, 4), "\n"))
  cat(paste0("  Modelo aceptado?: ", x2_uniforme_rel < vc_uniforme_rel, "\n\n"))
  
  par(mar = c(5, 5, 4, 2) + 0.1)
  barplot(rbind(hi1, P_uniforme),
          beside = TRUE,
          col = c("skyblue", "orange"),
          names.arg = decadas1,
          main = paste0("GRAFICA ", plot_counter, ": DISTRIBUCION DE PROBABILIDAD (Decada de Perforacion - Uniforme)"),
          ylab = "PROBABILIDAD",
          xlab = "Decada")
  legend("topright", legend = c("Observado", "Uniforme"), fill = c("skyblue", "orange"), cex = 0.8)
  plot_counter <- plot_counter + 1
  
  plot(Fo_uniforme_rel, Fe_uniforme_rel,
       main = paste0("GRAFICA ", plot_counter, ": Fo vs Fe (Uniforme) - Primeras 4 Decadas"),
       xlab = "Frecuencia Observada (relativa)",
       ylab = "Frecuencia Esperada (Uniforme)",
       pch = 19, col = "blue")
  abline(lm(Fe_uniforme_rel ~ Fo_uniforme_rel), col = "red", lwd = 2)
  plot_counter <- plot_counter + 1
  
  res_df_decada_uniforme <- data.frame(
    Variable = "Decada de Inicio de Perforacion",
    Subconjunto.Grupo = "Primeras 4 Decadas",
    Modelo.de.Probabilidad = "Uniforme",
    Parametros.Ejemplo.de.Calculo = "P(Decada) = 1/4",
    Correlacion.Pearson = "N/A",
    Chi.cuadrado = round(x2_uniforme_rel, 4),
    Umbral.de.Aceptacion = round(vc_uniforme_rel, 4),
    Modelo.Aceptado = x2_uniforme_rel < vc_uniforme_rel
  )
  resultados_por_variable[["Decada_Uniforme"]] <- res_df_decada_uniforme
  cat("\n--- Tabla de Resultados (Decada de Inicio - Uniforme) ---\n")
  print(res_df_decada_uniforme, row.names = FALSE)
  cat("\n")
  
  cat("Pregunta de probabilidad para Decada de Inicio (Nominal):\n")
  cat("??Cual es la probabilidad de que una perforacion seleccionada al azar haya iniciado en la decada '1970-1979'?\n")
  prob_1970_1979 <- hi1[decadas1 == "1970-1979"] * 100
  cat(paste0("Respuesta: la probabilidad es ", round(prob_1970_1979, 2), "%\n\n"))
} else {
  cat("Advertencia: No hay suficientes decadas en Tabla_perforacionFinal para el analisis de las primeras 4 decadas. Saltando el analisis.\n\n")
}
##   Chi-cuadrado: 5e-04
##   Umbral: 7.8147
##   Modelo aceptado?: TRUE

## 
## --- Tabla de Resultados (Decada de Inicio - Uniforme) ---
##                         Variable  Subconjunto.Grupo Modelo.de.Probabilidad
##  Decada de Inicio de Perforacion Primeras 4 Decadas               Uniforme
##  Parametros.Ejemplo.de.Calculo Correlacion.Pearson Chi.cuadrado
##                P(Decada) = 1/4                 N/A        5e-04
##  Umbral.de.Aceptacion Modelo.Aceptado
##                7.8147            TRUE
## 
## Pregunta de probabilidad para Decada de Inicio (Nominal):
## ??Cual es la probabilidad de que una perforacion seleccionada al azar haya iniciado en la decada '1970-1979'?
## Respuesta: la probabilidad es 24.91%
# Segundo Subconjunto (Ultimas 4 D??cadas): Modelo Binomial
cat("--- Segundo Subconjunto (Ultimas 4 Decadas): Modelo Binomial ---\n")
## --- Segundo Subconjunto (Ultimas 4 Decadas): Modelo Binomial ---
# Se modific?? la condici??n para asegurar que haya al menos 4 d??cadas para el analisis binomial
# y se usa tail() para seleccionar las ultimas 4 d??cadas disponibles.
if (nrow(Tabla_perforacionFinal) >= 4) {
  perforacion2 <- tail(Tabla_perforacionFinal, 4) # Seleccionar las ultimas 4 d??cadas
  ni2 <- perforacion2$Freq
  hi2 <- ni2 / sum(ni2)
  decadas2 <- perforacion2$Decada
  
  X2_binomial_vals <- 0:(length(hi2)-1)
  n_trials_binomial <- max(X2_binomial_vals)
  
  media_obs_bin <- sum(X2_binomial_vals * hi2)
  p_bin <- media_obs_bin / n_trials_binomial
  p_bin <- max(0.001, min(0.999, p_bin))
  
  P_binomial <- dbinom(X2_binomial_vals, size = n_trials_binomial, prob = p_bin)
  P_binomial <- P_binomial / sum(P_binomial)
  
  Correlacion_bin <- cor(hi2, P_binomial, use = "complete.obs") * 100
  
  Fo_bin_rel <- hi2
  Fe_bin_rel <- P_binomial
  Fe_bin_rel[Fe_bin_rel == 0] <- 1e-9
  
  x2_bin_rel <- sum( (Fo_bin_rel - Fe_bin_rel)^2 / Fe_bin_rel )
  vc_bin_rel <- qchisq(0.95, df = length(X2_binomial_vals) - 1)
  
  cat(paste0("  Pearson %: ", round(Correlacion_bin, 2), "\n"))
  cat(paste0("  Chi-cuadrado: ", round(x2_bin_rel, 4), "\n"))
  cat(paste0("  Umbral: ", round(vc_bin_rel, 4), "\n"))
  cat(paste0("  Modelo aceptado?: ", x2_bin_rel < vc_bin_rel, "\n\n"))
  
  par(mar = c(5, 5, 4, 2) + 0.1)
  barplot(rbind(hi2, P_binomial),
          beside = TRUE,
          col = c("skyblue", "darkgreen"),
          names.arg = decadas2,
          main = paste0("GRAFICA ", plot_counter, ": DISTRIBUCION DE PROBABILIDAD (Decada de Perforacion - Binomial)"),
          ylab = "PROBABILIDAD",
          xlab = "Decada")
  legend("topright", legend = c("Observado", "Binomial"), fill = c("skyblue", "darkgreen"), cex = 0.8)
  plot_counter <- plot_counter + 1
  
  plot(Fo_bin_rel, Fe_bin_rel,
       main = paste0("GRAFICA ", plot_counter, ": Fo vs Fe (Binomial) - Ultimas 4 Decadas"),
       xlab = "Frecuencia Observada (relativa)",
       ylab = "Frecuencia Esperada (Binomial)",
       pch = 19, col = "darkgreen")
  abline(lm(Fe_bin_rel ~ Fo_bin_rel), col = "red", lwd = 2)
  plot_counter <- plot_counter + 1
  
  res_df_decada_binomial <- data.frame(
    Variable = "Decada de Inicio de Perforacion",
    Subconjunto.Grupo = "Ultimas 4 Decadas",
    Modelo.de.Probabilidad = "Binomial",
    Parametros.Ejemplo.de.Calculo = paste0("P(X=k) = dbinom(k, size=", n_trials_binomial, ", prob=", round(p_bin, 4), ")"),
    Correlacion.Pearson = paste0(round(Correlacion_bin, 2), "%"),
    Chi.cuadrado = round(x2_bin_rel, 4),
    Umbral.de.Aceptacion = round(vc_bin_rel, 4),
    Modelo.Aceptado = x2_bin_rel < vc_bin_rel
  )
  resultados_por_variable[["Decada_Binomial"]] <- res_df_decada_binomial
  cat("\n--- Tabla de Resultados (Decada de Inicio - Binomial) ---\n")
  print(res_df_decada_binomial, row.names = FALSE)
  cat("\n")
  
  cat("Pregunta de probabilidad para Decada de Inicio (Nominal):\n")
  cat("??Cual es la probabilidad de que una perforacion seleccionada al azar haya iniciado en la decada '2020-2029' segun el modelo binomial?\n")
  target_decade_binomial <- "2020-2029"
  if (target_decade_binomial %in% decadas2) {
    prob_2020_2023_binomial <- P_binomial[decadas2 == target_decade_binomial] * 100
    cat(paste0("Respuesta: la probabilidad es ", round(prob_2020_2023_binomial, 2), "%\n\n"))
  } else {
    cat("Respuesta: la decada '2020-2029' no se encontro en los datos utilizados para el modelo binomial. Probabilidad: 0.00%\n\n")
  }
} else {
  cat("Advertencia: No hay suficientes decadas en Tabla_perforacionFinal para el analisis de las ultimas 4 decadas. Saltando el analisis.\n\n")
}
##   Pearson %: 83.54
##   Chi-cuadrado: 0.095
##   Umbral: 7.8147
##   Modelo aceptado?: TRUE

## 
## --- Tabla de Resultados (Decada de Inicio - Binomial) ---
##                         Variable Subconjunto.Grupo Modelo.de.Probabilidad
##  Decada de Inicio de Perforacion Ultimas 4 Decadas               Binomial
##            Parametros.Ejemplo.de.Calculo Correlacion.Pearson Chi.cuadrado
##  P(X=k) = dbinom(k, size=3, prob=0.4118)              83.54%        0.095
##  Umbral.de.Aceptacion Modelo.Aceptado
##                7.8147            TRUE
## 
## Pregunta de probabilidad para Decada de Inicio (Nominal):
## ??Cual es la probabilidad de que una perforacion seleccionada al azar haya iniciado en la decada '2020-2029' segun el modelo binomial?
## Respuesta: la probabilidad es 6.98%
#==============================VIDA UTIL============================
# ---
## VARIABLE: VIDA ??TIL
# ---
cat("\n--- VARIABLE: VIDA UTIL ---\n\n")
## 
## --- VARIABLE: VIDA UTIL ---
v_util <- datos$Estimated.lifetime
TDFv_util <- table(v_util)
df_v_util <- as.data.frame(TDFv_util)
colnames(df_v_util) <- c("Vida_util", "Freq")
df_v_util$Vida_util <- as.numeric(as.character(df_v_util$Vida_util))

# GRUPO 1: Vida ??til 25 y 50 (Bernoulli)
cat("--- GRUPO 1: Vida util 25 y 50 (Bernoulli) ---\n")
## --- GRUPO 1: Vida util 25 y 50 (Bernoulli) ---
grupo1 <- df_v_util[df_v_util$Vida_util %in% c(25, 50), ]

if (nrow(grupo1) < 2 || sum(grupo1$Freq) == 0) {
  cat("Advertencia: No hay suficientes datos para el modelo Bernoulli (Vida util 25 y 50). Saltando el analisis.\n\n")
  res_df_vida_util_bernoulli <- data.frame(
    Variable = "Vida Util",
    Subconjunto.Grupo = "25 y 50 anios",
    Modelo.de.Probabilidad = "Bernoulli",
    Parametros.Ejemplo.de.Calculo = "N/A (Datos insuficientes)",
    Correlacion.Pearson = "N/A",
    Chi.cuadrado = "N/A",
    Umbral.de.Aceptacion = "N/A",
    Modelo.Aceptado = "No se pudo analizar"
  )
  resultados_por_variable[["VidaUtil_Bernoulli"]] <- res_df_vida_util_bernoulli
  cat("\n--- Tabla de Resultados (Vida Util - Bernoulli) ---\n")
  print(res_df_vida_util_bernoulli, row.names = FALSE)
  cat("\n")
} else {
  ni1 <- grupo1$Freq
  hi1 <- ni1 / sum(ni1)
  valores1 <- grupo1$Vida_util
  
  if (50 %in% valores1) {
    p_bern <- hi1[valores1 == 50]
  } else {
    p_bern <- 0
  }
  
  P_bern <- c(1 - p_bern, p_bern)
  # Ensure P_bern matches length of hi1 and is ordered correctly for correlation and chi-square test
  # It's better to create P_bern for the specific `valores1` in the `grupo1`
  P_bern_model <- numeric(length(valores1))
  if (25 %in% valores1) P_bern_model[valores1 == 25] <- (1 - p_bern)
  if (50 %in% valores1) P_bern_model[valores1 == 50] <- p_bern
  
  cor_bern <- cor(hi1, P_bern_model) * 100
  x2_bern <- sum((hi1 - P_bern_model)^2 / P_bern_model)
  vc_bern <- qchisq(0.95, df = length(hi1) - 1)
  
  cat(paste0("  Pearson (%): ", round(cor_bern, 2), "\n"))
  cat(paste0("  Chi-cuadrado: ", round(x2_bern, 4), "\n"))
  cat(paste0("  Umbral: ", round(vc_bern, 4), "\n"))
  cat(paste0("  ??Modelo aceptado?: ", x2_bern < vc_bern, "\n\n"))
  
  par(mar = c(5, 5, 4, 2) + 0.1) # Set margins for plotting
  barplot(rbind(hi1, P_bern_model),
          beside = TRUE,
          col = c("skyblue", "orange"),
          names.arg = valores1,
          main = paste0("GRAFICA ", plot_counter, ": DISTRIBUCION DE PROBABILIDAD (Vida util: 25 y 50 - Bernoulli)"),
          ylab = "PROBABILIDAD",
          xlab = "Vida util (anios)")
  legend("topright", legend = c("Observado", "Bernoulli"), fill = c("skyblue", "orange"), cex = 0.8)
  plot_counter <- plot_counter + 1
  # 
  
  plot(hi1, P_bern_model,
       main = paste0("GRAFICA ", plot_counter, ": Fo vs Fe (Bernoulli) - Vida util 25 y 50"),
       xlab = "Frecuencia Observada (relativa)",
       ylab = "Esperada (Bernoulli)",
       pch = 19, col = "blue")
  abline(lm(P_bern_model ~ hi1), col = "red", lwd = 2)
  plot_counter <- plot_counter + 1
  # 
  
  res_df_vida_util_bernoulli <- data.frame(
    Variable = "Vida Util",
    Subconjunto.Grupo = "25 y 50 anios",
    Modelo.de.Probabilidad = "Bernoulli",
    Parametros.Ejemplo.de.Calculo = paste0("P(X=50) = ", round(p_bern, 4)),
    Correlacion.Pearson = paste0(round(cor_bern, 2), "%"),
    Chi.cuadrado = round(x2_bern, 4),
    Umbral.de.Aceptacion = round(vc_bern, 4),
    Modelo.Aceptado = x2_bern < vc_bern
  )
  resultados_por_variable[["VidaUtil_Bernoulli"]] <- res_df_vida_util_bernoulli
  cat("\n--- Tabla de Resultados (Vida Util - Bernoulli) ---\n")
  print(res_df_vida_util_bernoulli, row.names = FALSE)
  cat("\n")
  
  cat("Pregunta de probabilidad para Vida Util (Bernoulli):\n")
  cat("??Cual es la probabilidad de que una perforacion tenga una vida util de 50 anios?\n")
  prob_vida_util_50 <- p_bern * 100
  cat(paste0("Respuesta: la probabilidad es ", round(prob_vida_util_50, 2), "%\n\n"))
}
##   Pearson (%): 100
##   Chi-cuadrado: 0
##   Umbral: 3.8415
##   ??Modelo aceptado?: TRUE

## 
## --- Tabla de Resultados (Vida Util - Bernoulli) ---
##   Variable Subconjunto.Grupo Modelo.de.Probabilidad
##  Vida Util     25 y 50 anios              Bernoulli
##  Parametros.Ejemplo.de.Calculo Correlacion.Pearson Chi.cuadrado
##               P(X=50) = 0.9829                100%            0
##  Umbral.de.Aceptacion Modelo.Aceptado
##                3.8415            TRUE
## 
## Pregunta de probabilidad para Vida Util (Bernoulli):
## ??Cual es la probabilidad de que una perforacion tenga una vida util de 50 anios?
## Respuesta: la probabilidad es 98.29%
# GRUPO 2: Vida util 51 a 60 (Uniforme)
cat("--- GRUPO 2: Vida util 51 a 60 (Uniforme) ---\n")
## --- GRUPO 2: Vida util 51 a 60 (Uniforme) ---
grupo2 <- df_v_util[df_v_util$Vida_util >= 51 & df_v_util$Vida_util <= 60, ]

if (nrow(grupo2) == 0 || sum(grupo2$Freq) == 0) {
  cat("Advertencia: No hay datos para el modelo Uniforme (Vida util 51 a 60). Saltando el analisis.\n\n")
  res_df_vida_util_uniforme <- data.frame(
    Variable = "Vida Util",
    Subconjunto.Grupo = "51 a 60 anios",
    Modelo.de.Probabilidad = "Uniforme",
    Parametros.Ejemplo.de.Calculo = "N/A (Datos insuficientes)",
    Correlacion.Pearson = "N/A",
    Chi.cuadrado = "N/A",
    Umbral.de.Aceptacion = "N/A",
    Modelo.Aceptado = "No se pudo analizar"
  )
  resultados_por_variable[["VidaUtil_Uniforme"]] <- res_df_vida_util_uniforme
  cat("\n--- Tabla de Resultados (Vida Util - Uniforme) ---\n")
  print(res_df_vida_util_uniforme, row.names = FALSE)
  cat("\n")
} else {
  ni2 <- grupo2$Freq
  hi2 <- ni2 / sum(ni2)
  valores2 <- grupo2$Vida_util
  
  n2 <- length(hi2)
  P_uniforme_vu <- rep(1/n2, n2)
  
  cor_uniforme <- cor(hi2, P_uniforme_vu) * 100
  x2_uniforme <- sum((hi2 - P_uniforme_vu)^2 / P_uniforme_vu)
  vc_uniforme <- qchisq(0.95, df = n2 - 1)
  
  cat(paste0("  Pearson (%): ", round(cor_uniforme, 2), "\n"))
  cat(paste0("  Chi-cuadrado: ", round(x2_uniforme, 4), "\n"))
  cat(paste0("  Umbral: ", round(vc_uniforme, 4), "\n"))
  cat(paste0("  ??Modelo aceptado?: ", x2_uniforme < vc_uniforme, "\n\n"))
  
  par(mar = c(5, 5, 4, 2) + 0.1) # Set margins for plotting
  barplot(rbind(hi2, P_uniforme_vu),
          beside = TRUE,
          col = c("skyblue", "purple"),
          names.arg = valores2,
          main = paste0("GRAFICA ", plot_counter, ": DISTRIBUCION DE PROBABILIDAD (Vida util: 51 a 60 - Uniforme)"),
          ylab = "PROBABILIDAD",
          xlab = "Vida util (anios)")
  legend("topright", legend = c("Observado", "Uniforme"), fill = c("skyblue", "purple"), cex = 0.8)
  plot_counter <- plot_counter + 1
  # 
  
  plot(hi2, P_uniforme_vu,
       main = paste0("GRAFICA ", plot_counter, ": Fo vs Fe (Uniforme) - Vida util 51 a 60"),
       xlab = "Frecuencia Observada (relativa)",
       ylab = "Esperada (Uniforme)",
       pch = 19, col = "purple")
  abline(lm(P_uniforme_vu ~ hi2), col = "red", lwd = 2)
  plot_counter <- plot_counter + 1
  # 
  
  res_df_vida_util_uniforme <- data.frame(
    Variable = "Vida util",
    Subconjunto.Grupo = "51 a 60 anios",
    Modelo.de.Probabilidad = "Uniforme",
    Parametros.Ejemplo.de.Calculo = paste0("P(Vida Util) = 1/", n2),
    Correlacion.Pearson = paste0(round(cor_uniforme, 2), "%"),
    Chi.cuadrado = round(x2_uniforme, 4),
    Umbral.de.Aceptacion = round(vc_uniforme, 4),
    Modelo.Aceptado = x2_uniforme < vc_uniforme
  )
  resultados_por_variable[["VidaUtil_Uniforme"]] <- res_df_vida_util_uniforme
  cat("\n--- Tabla de Resultados (Vida Util - Uniforme) ---\n")
  print(res_df_vida_util_uniforme, row.names = FALSE)
  cat("\n")
  
  cat("Pregunta de probabilidad para Vida Util (Uniforme):\n")
  cat("??Cual es la probabilidad de que una perforacion tenga una vida util de 55 anios, dentro del rango de 51 a 60 anios?\n")
  prob_vida_util_55_uniforme <- P_uniforme_vu[valores2 == 55] * 100
  if (length(prob_vida_util_55_uniforme) == 0) prob_vida_util_55_uniforme <- 0
  cat(paste0("Respuesta: la probabilidad es ", round(prob_vida_util_55_uniforme, 2), "%\n\n"))
}
## Warning in cor(hi2, P_uniforme_vu): La desviación estándar es cero
##   Pearson (%): NA
##   Chi-cuadrado: 0.0644
##   Umbral: 16.919
##   ??Modelo aceptado?: TRUE

## 
## --- Tabla de Resultados (Vida Util - Uniforme) ---
##   Variable Subconjunto.Grupo Modelo.de.Probabilidad
##  Vida util     51 a 60 anios               Uniforme
##  Parametros.Ejemplo.de.Calculo Correlacion.Pearson Chi.cuadrado
##            P(Vida Util) = 1/10                 NA%       0.0644
##  Umbral.de.Aceptacion Modelo.Aceptado
##                16.919            TRUE
## 
## Pregunta de probabilidad para Vida Util (Uniforme):
## ??Cual es la probabilidad de que una perforacion tenga una vida util de 55 anios, dentro del rango de 51 a 60 anios?
## Respuesta: la probabilidad es 10%
# GRUPO 3: Vida util mayor a 60 anios - Modelo Poisson
cat("--- GRUPO 3: Vida util mayor a 60 anios (Poisson) ---\n")
## --- GRUPO 3: Vida util mayor a 60 anios (Poisson) ---
grupo3 <- df_v_util[df_v_util$Vida_util > 60, ]

if (nrow(grupo3) == 0 || sum(grupo3$Freq) == 0) {
  cat("Advertencia: No hay datos para el modelo Poisson (Vida util > 60). Saltando el analisis.\n\n")
  res_df_vida_util_poisson <- data.frame(
    Variable = "Vida Util",
    Subconjunto.Grupo = "Mayor a 60 anios",
    Modelo.de.Probabilidad = "Poisson",
    Parametros.Ejemplo.de.Calculo = "N/A (Datos insuficientes)",
    Correlacion.Pearson = "N/A",
    Chi.cuadrado = "N/A",
    Umbral.de.Aceptacion = "N/A",
    Modelo.Aceptado = "No se pudo analizar"
  )
  resultados_por_variable[["VidaUtil_Poisson"]] <- res_df_vida_util_poisson
  cat("\n--- Tabla de Resultados (Vida Util - Poisson) ---\n")
  print(res_df_vida_util_poisson, row.names = FALSE)
  cat("\n")
} else {
  ni3 <- grupo3$Freq
  hi3 <- ni3 / sum(ni3)
  valores3 <- grupo3$Vida_util
  
  # Ensure values are non-negative integers for Poisson. If not, this warning will trigger.
  if (!all(valores3 >= 0 & floor(valores3) == valores3)) {
    cat("Advertencia: Los valores de 'Vida util > 60 anios' no son enteros no negativos, lo cual puede afectar el modelo Poisson. Saltando el analisis.\n\n")
    res_df_vida_util_poisson <- data.frame(
      Variable = "Vida Util",
      Subconjunto.Grupo = "Mayor a 60 anios",
      Modelo.de.Probabilidad = "Poisson",
      Parametros.Ejemplo.de.Calculo = "N/A (Valores no aptos para Poisson)",
      Correlacion.Pearson = "N/A",
      Chi.cuadrado = "N/A",
      Umbral.de.Aceptacion = "N/A",
      Modelo.Aceptado = "No se pudo analizar"
    )
    resultados_por_variable[["VidaUtil_Poisson"]] <- res_df_vida_util_poisson
    cat("\n--- Tabla de Resultados (Vida Util - Poisson) ---\n")
    print(res_df_vida_util_poisson, row.names = FALSE)
    cat("\n")
  } else {
    lambda3 <- sum(valores3 * hi3) # Estimate lambda from observed mean
    
    P_poisson <- dpois(valores3, lambda = lambda3)
    P_poisson_norm <- P_poisson / sum(P_poisson) # Normalize to sum to 1
    P_poisson_norm[P_poisson_norm == 0] <- 1e-9 # Prevent division by zero
    
    par(mar = c(5, 5, 4, 2) + 0.1) # Set margins for plotting
    barplot(rbind(hi3, P_poisson_norm),
            beside = TRUE,
            col = c("skyblue", "orange"),
            names.arg = valores3,
            main = paste0("GRAFICA ", plot_counter, ": DISTRIBUCION DE PROBABILIDAD (Vida util > 60 anios - Poisson)"),
            ylab = "PROBABILIDAD",
            xlab = "Vida util (anios)")
    legend("topright", legend = c("Observado", "Poisson"), fill = c("skyblue", "orange"), cex = 0.8)
    plot_counter <- plot_counter + 1
    # 
    
    correlacion_poisson <- cor(hi3, P_poisson_norm) * 100
    
    x2_poisson <- sum((hi3 - P_poisson_norm)^2 / P_poisson_norm)
    vc_poisson <- qchisq(0.95, df = length(hi3) - 1)
    
    cat(paste0("  Lambda estimado: ", round(lambda3, 2), "\n"))
    cat(paste0("  Correlacion (Pearson %): ", round(correlacion_poisson, 2), "\n"))
    cat(paste0("  Chi-cuadrado: ", round(x2_poisson, 4), "\n"))
    cat(paste0("  Umbral de aceptacion: ", round(vc_poisson, 4), "\n"))
    cat(paste0("  ??Modelo aceptado?: ", x2_poisson < vc_poisson, "\n\n"))
    
    res_df_vida_util_poisson <- data.frame(
      Variable = "Vida Util",
      Subconjunto.Grupo = "Mayor a 60 anios",
      Modelo.de.Probabilidad = "Poisson",
      Parametros.Ejemplo.de.Calculo = paste0("P(X=k) = dpois(k, lambda=", round(lambda3, 2), ")"),
      Correlacion.Pearson = paste0(round(correlacion_poisson, 2), "%"),
      Chi.cuadrado = round(x2_poisson, 4),
      Umbral.de.Aceptacion = round(vc_poisson, 4),
      Modelo.Aceptado = x2_poisson < vc_poisson
    )
    resultados_por_variable[["VidaUtil_Poisson"]] <- res_df_vida_util_poisson
    cat("\n--- Tabla de Resultados (Vida Util - Poisson) ---\n")
    print(res_df_vida_util_poisson, row.names = FALSE)
    cat("\n")
    
    cat("Pregunta de probabilidad para Vida Util (Poisson):\n")
    cat("??Cual es la probabilidad de que una perforacion tenga una vida util de 62 anios, segun el modelo Poisson?\n")
    prob_vida_util_62_poisson <- dpois(62, lambda = lambda3) * 100
    cat(paste0("Respuesta: la probabilidad es ", round(prob_vida_util_62_poisson, 2), "%\n\n"))
  }
}

##   Lambda estimado: 66.21
##   Correlacion (Pearson %): 85.68
##   Chi-cuadrado: 0.0848
##   Umbral de aceptacion: 21.0261
##   ??Modelo aceptado?: TRUE
## 
## 
## --- Tabla de Resultados (Vida Util - Poisson) ---
##   Variable Subconjunto.Grupo Modelo.de.Probabilidad
##  Vida Util  Mayor a 60 anios                Poisson
##    Parametros.Ejemplo.de.Calculo Correlacion.Pearson Chi.cuadrado
##  P(X=k) = dpois(k, lambda=66.21)              85.68%       0.0848
##  Umbral.de.Aceptacion Modelo.Aceptado
##               21.0261            TRUE
## 
## Pregunta de probabilidad para Vida Util (Poisson):
## ??Cual es la probabilidad de que una perforacion tenga una vida util de 62 anios, segun el modelo Poisson?
## Respuesta: la probabilidad es 4.41%