#==============================ENCABEZADO===================================
# TEMA: EI Variables Continua - ENERGIA DEL GAS 
# AUTOR: GRUPO 4
# FECHA: 08-02-2026


# --- PASO 0: CARGA Y CONFIGURACI??N ---
# Establecemos la ruta de la carpeta donde se encuentra el archivo tablap.csv.
setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ".", sep = ";") 

# --- PASO 0.1: LIMPIEZA DE DATOS ---
# Se limpian caracteres no num??ricos y se eliminan valores nulos (NA).
ene_raw <- as.numeric(gsub("[^0-9.]", "", as.character(datos$Energy.of.gas)))
ene_raw <- na.omit(ene_raw)

# --- PASO 3: FILTRADO (SUBSET) ---
# Se filtran outliers usando el criterio de Boxplot (Bigotes superiores e inferiores).
# Esto asegura que el modelo se ajuste al comportamiento real del yacimiento y no a errores.
caja_ene <- boxplot(ene_raw, plot = FALSE)
ene_v <- ene_raw[ene_raw >= caja_ene$stats[1] & ene_raw <= caja_ene$stats[5]]
n <- length(ene_v)

# --- PASO 4 Y 5: TABLA DE FRECUENCIAS ---
# Se calcula el n??mero de clases 'k' mediante la Regla de Sturges.
k <- round(1 + 3.322 * log10(n))
h_p <- hist(ene_v, breaks = k, plot = FALSE)

# Se construye la tabla de 9 columnas para el an??lisis descriptivo profundo.
# hi (frecuencia relativa) es vital para comparar los datos con el modelo te??rico.
li <- h_p$breaks[-length(h_p$breaks)]; ls <- h_p$breaks[-1]
ni <- h_p$counts; hi <- ni / n
TDF_9_COL <- data.frame(LI=li, LS=ls, Xi=(li+ls)/2, ni=ni, hi=round(hi,4), 
                        Ni=cumsum(ni), Hi=round(cumsum(hi),4), 
                        Ni_desc=n-cumsum(ni)+ni, Hi_desc=round(1-cumsum(hi)+hi,4))

cat("\n>>> PASO 5: TABLA DE FRECUENCIAS (9 COLUMNAS) <<<\n")
## 
## >>> PASO 5: TABLA DE FRECUENCIAS (9 COLUMNAS) <<<
print(TDF_9_COL)
##        LI      LS       Xi   ni     hi    Ni     Hi Ni_desc Hi_desc
## 1 0.0e+00 5.0e+08 2.50e+08 2880 0.2509  2880 0.2509   11480  1.0000
## 2 5.0e+08 1.0e+09 7.50e+08 2993 0.2607  5873 0.5116    8600  0.7491
## 3 1.0e+09 1.5e+09 1.25e+09 2131 0.1856  8004 0.6972    5607  0.4884
## 4 1.5e+09 2.0e+09 1.75e+09 1241 0.1081  9245 0.8053    3476  0.3028
## 5 2.0e+09 2.5e+09 2.25e+09  764 0.0666 10009 0.8719    2235  0.1947
## 6 2.5e+09 3.0e+09 2.75e+09  586 0.0510 10595 0.9229    1471  0.1281
## 7 3.0e+09 3.5e+09 3.25e+09  384 0.0334 10979 0.9564     885  0.0771
## 8 3.5e+09 4.0e+09 3.75e+09  295 0.0257 11274 0.9821     501  0.0436
## 9 4.0e+09 4.5e+09 4.25e+09  206 0.0179 11480 1.0000     206  0.0179
# --- PASO 6 Y 7: ESTIMACI??N Y MODELADO ---
# Se calculan los par??metros mu (media log) y sigma (desv log) de la Log-Normal.
meanlog_ene <- mean(log(ene_v))
sdlog_ene <- sd(log(ene_v))

# Grafica Nro. 1: Visualizaci??n del ajuste del modelo sobre los datos filtrados.
hist(ene_v, freq = FALSE, breaks = k, col = "lightblue",
     main = "Grafica Nro. 1: Densidad y Modelo Log-Normal (Energ??a)",
     xlab = "Energy of Gas", ylab = "Densidad", las = 1)
curve(dlnorm(x, meanlog_ene, sdlog_ene), col = "red", lwd = 2, add = TRUE)

# --- PASO 7.5: EXPLICACI??N DE INDICADORES DE INFERENCIA ---
# Interpretaci??n para el informe:
# 1. mu/sigma: Par??metros t??cnicos que definen la curva en escala logar??tmica.
# 2. Media Escala Original: Es el valor promedio real (ej: 1.35e+09 = 1,350 millones).
# 3. IC 95% Inferior/Superior: El rango de seguridad donde estimamos que se encuentra
#    la verdadera media de energ??a de todos los pozos analizados.

media_original <- exp(meanlog_ene + (sdlog_ene^2)/2)
error_std <- qnorm(0.975) * sdlog_ene / sqrt(n)
# Ajustamos los l??mites para que representen la media en la escala original.
LI_ci <- exp(meanlog_ene - error_std + (sdlog_ene^2)/2)
LS_ci <- exp(meanlog_ene + error_std + (sdlog_ene^2)/2)

cat("\n>>> PASO 7.5: RESUMEN DE PAR??METROS E INFERENCIA <<<\n")
## 
## >>> PASO 7.5: RESUMEN DE PAR??METROS E INFERENCIA <<<
resumen_inf <- data.frame(
  Indicador = c("Media Logar??tmica (mu)", "Desv. Est. Logar??tmica (sigma)", 
                "Media Escala Original", "IC 95% Inferior", "IC 95% Superior"),
  Valor = c(meanlog_ene, sdlog_ene, media_original, LI_ci, LS_ci)
)
print(resumen_inf, row.names = FALSE)
##                        Indicador        Valor
##          Media Logar??tmica (mu) 2.058183e+01
##  Desv. Est. Logar??tmica (sigma) 9.454061e-01
##            Media Escala Original 1.357247e+09
##                  IC 95% Inferior 1.333976e+09
##                  IC 95% Superior 1.380923e+09
# --- PASO 8: VEREDICTO FINAL ---
# Comparamos la frecuencia observada (hi) contra la probabilidad te??rica (Pi).
FO_rel <- hi
Pi <- plnorm(ls, meanlog_ene, sdlog_ene) - plnorm(li, meanlog_ene, sdlog_ene)
Pi[Pi <= 0] <- 1e-9

# X2 (Chi-Cuadrado): Valida si el modelo Log-Normal es representativo (P-valor alto).
x2_valor <- sum((FO_rel - Pi)^2 / Pi)
vc_chi <- qchisq(0.999, length(FO_rel) - 3)
r_pearson <- cor(FO_rel, Pi)

cat("\n>>> PASO 8: TABLA VEREDICTO FINAL <<<\n")
## 
## >>> PASO 8: TABLA VEREDICTO FINAL <<<
tabla_veredicto <- data.frame(
  Prueba = c("Coeficiente de Pearson (r)", "Prueba Chi-Cuadrado (X2)"),
  Valor_Obtenido = c(round(r_pearson, 4), round(x2_valor, 6)),
  Criterio_Referencia = c("r >= 0.90", paste("X2 <", round(vc_chi, 2))),
  Resultado = c(ifelse(r_pearson >= 0.90, "APROBADO", "REPROBADO"),
                ifelse(x2_valor < vc_chi, "APROBADO", "REPROBADO"))
)
print(tabla_veredicto, row.names = FALSE)
##                      Prueba Valor_Obtenido Criterio_Referencia Resultado
##  Coeficiente de Pearson (r)       0.991800           r >= 0.90  APROBADO
##    Prueba Chi-Cuadrado (X2)       0.028522          X2 < 22.46  APROBADO