ANÁLISIS ESTADÍSTICO

1. CARGA DE LIBRERÍAS Y DATOS

                      #==============================ENCABEZADO========================
                      # TEMA: MODELOS PROBABILISTICOS- PRODUCCION TOTAL DE GAS
                      # AUTOR: GRUPO 3
                      # FECHA: 03-2026
                      #================================================================
library(dplyr)
library(knitr)
library(gt)

setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ",", sep = ";")

2. TABLA DE DISTRIBUCIÓN DE CANTIDAD

options(scipen = 999) #permmite trabajar sin notacion cientifica
produccion_gas <- as.numeric(datos$Total.gas.production.by.2023)
produccion_gas <- na.omit(produccion_gas)
produccion_gas <- produccion_gas[produccion_gas > 0] 

# BOXPLOT 
par(oma = c(1, 1, 1, 1))
boxplot(produccion_gas, 
        horizontal = TRUE, 
        col = "skyblue",
        main = "Gráfica Nº1: Distribución de cantidad de la Producción 
        de Gas en pozos de gas natural en Nuevo México",
        xlab = "Producción de Gas")
box(which = "outer", col = "black")

# Extrae datos del Boxplot (sin graficar) para definir los límites de corte de outliers
caja <- boxplot(produccion_gas, plot = FALSE)
limite_sup <- caja$stats[5]
limite_inf <- caja$stats[1]

gas_outliers <- produccion_gas[produccion_gas < limite_inf | produccion_gas > limite_sup]
gas_sin_outliers <- produccion_gas[produccion_gas >= limite_inf & produccion_gas <= limite_sup]

DATOS CON VALORES ATÍPICOS

length(produccion_gas)
## [1] 12561

DATOS SIN VALORES ATIPICOS

length(gas_sin_outliers)
## [1] 11480
histograma_gas <- hist(gas_sin_outliers, plot = FALSE)
ni_gas <- histograma_gas$counts
hi_gas <- ni_gas / sum(ni_gas) * 100

intervalos_gas <- paste0("[", round(histograma_gas$breaks[-length(histograma_gas$breaks)], 2),
                         ", ", round(histograma_gas$breaks[-1], 2), ")")

tabla_base <- data.frame(Intervalo = intervalos_gas, ni = ni_gas, hi = round(hi_gas, 2))
fila_total <- data.frame(Intervalo = "TOTAL", ni = sum(tabla_base$ni), hi = round(sum(tabla_base$hi)))
tabla_final_c <- rbind(tabla_base, fila_total)
Tabla N°1. Distribución de frecuencias de producción de gas en los pozos de gas natural en Nuevo Mexico
Intervalo ni hi (%)
[0, 200000) 1031 8.98
[200000, 400000) 1445 12.59
[400000, 600000) 1349 11.75
[600000, 800000) 1280 11.15
[800000, 1000000) 1163 10.13
[1000000, 1200000) 986 8.59
[1200000, 1400000) 805 7.01
[1400000, 1600000) 595 5.18
[1600000, 1800000) 491 4.28
[1800000, 2000000) 396 3.45
[2000000, 2200000) 334 2.91
[2200000, 2400000) 263 2.29
[2400000, 2600000) 260 2.26
[2600000, 2800000) 234 2.04
[2800000, 3000000) 159 1.39
[3000000, 3200000) 168 1.46
[3200000, 3400000) 139 1.21
[3400000, 3600000) 122 1.06
[3600000, 3800000) 106 0.92
[3800000, 4000000) 107 0.93
[4000000, 4200000) 47 0.41
TOTAL 11480 100.00
Las unidades de Produccion de Gas se expresan en: pies cúbicos

3. GRÁFICA DE DISTRIBUCIÓN DE CANTIDAD

par(oma = c(1, 1, 1, 1))
h_temp <- hist(gas_sin_outliers, plot = FALSE)

# Convertimos las frecuencias absolutas a porcentajes en el eje Y
h_temp$counts <- (h_temp$counts / sum(h_temp$counts)) * 100

plot(h_temp, 
     main = "Grafica Nº2. Distribucion de cantidad de la produccion \n de gas en pozos de gas natural en Nuevo Mexico",
     xlab = "Produccion de Gas", 
     ylab = "Porcentaje (%)", 
     col = "indianred1")

box(which = "outer", col = "black")

4. CONJETURA DEL MODELO

PARÁMETRO MEDIA ARITMETICA (MU)

medialog <- mean(log(gas_sin_outliers)) 
medialog
## [1] 13.59292

PARÁMETRO DESVIACIÓN ESTÁNDAR (SIGMA)

sd_log   <- sd(log(gas_sin_outliers))
sd_log
## [1] 0.9454061
# CONFIGURACIÓN GRÁFICA GENERAL
par(oma = c(1, 1, 1, 1))

# DIBUJAMOS EL HISTOGRAMA DIRECTAMENTE AQUÍ
histograma <- hist(gas_sin_outliers, freq = FALSE,
                   main = "Grafica Nº2. Comparacion de la realidad con el modelo\nde la produccion de gas de los pozos de gas natural de\nNuevo Mexico",
                   xlab = "Produccion de Gas", ylab = "Densidad de probabilidad", col = "indianred1")
box(which = "outer", col = "black")

# LA CURVA SE AÑADE DE FORMA NATURAL AL HISTOGRAMA DE ARRIBA
x_seq <- seq(min(gas_sin_outliers), max(gas_sin_outliers), length.out = 1000) 
curve(dlnorm(x, meanlog = medialog, sdlog = sd_log), add = TRUE, col = "black", lwd = 3)

n <- length(gas_sin_outliers)
Fo <- histograma$counts
h  <- length(Fo) 

P <- c(0) 
for (i in 1:h) {
  P[i] <- plnorm(histograma$breaks[i+1], medialog, sd_log) - plnorm(histograma$breaks[i], medialog, sd_log)
}
Fe <- P * n

# Conversión a porcentajes
Fo_perc <- (Fo / n) * 100
Fo_perc
##  [1]  8.9808362 12.5871080 11.7508711 11.1498258 10.1306620  8.5888502
##  [7]  7.0121951  5.1829268  4.2770035  3.4494774  2.9094077  2.2909408
## [13]  2.2648084  2.0383275  1.3850174  1.4634146  1.2108014  1.0627178
## [19]  0.9233449  0.9320557  0.4094077
Fe_perc <- (Fe / n) * 100
Fe_perc
##  [1]  7.1196800 16.0350251 14.8680880 11.9537686  9.3301459  7.2713574
##  [7]  5.7074415  4.5239597  3.6230166  2.9306712  2.3930438  1.9711757
## [13]  1.6368053  1.3692698  1.1533143  0.9775596  0.8334296  0.7143957
## [19]  0.6154405  0.5326726  0.4630483
# Gráfica de Correlación
plot(Fo_perc, Fe_perc, 
     xlim = c(0, max(Fo_perc)), 
     ylim = c(0, max(Fe_perc)),
     main = "Gráfica Nº3: Correlación de frecuencias \nen el modelo log-normal de la produccion de gas",
     xlab = "Frecuencia Observada(%)",
     ylab = "Frecuencia esperada(%)",
     col = "blue3", pch = 19)

# Línea de identidad perfecta (X = Y)
lines(c(0, max(Fo_perc)), c(0, max(Fo_perc)), col = "red", lwd = 2)
box(which = "outer", col = "black")

5. TESTS DE APROBACIÓN

TEST DE PEARSON

Correlacion <- cor(Fo_perc, Fe_perc) * 100
Correlacion
## [1] 97.20808

TEST DE CHI-CUADRADO

Fe_perc[Fe_perc == 0] <- 1e-9
x2 <- sum((Fe_perc - Fo_perc)^2 / Fe_perc)
x2
## [1] 4.666674

UMBRAL DE ACEPTACION

grados_libertad <- length(Fo) - 1 - 2 

umbral_aceptacion <- qchisq(0.95, grados_libertad)
umbral_aceptacion
## [1] 28.8693
x2 < umbral_aceptacion 
## [1] TRUE
# Creación de la tabla resumen
tabla_resumen <- data.frame(Variable = "Produccion Total Gas", 
                            Pearson = round(Correlacion, 2), 
                            Chi = round(x2, 2), 
                            Umbral = round(umbral_aceptacion, 2))
Tabla N°2. Resumen de test de bondad al modelo de probabilidad
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptacion
Produccion Total Gas 97.21 4.67 28.87

6. CÁLCULO DE PROBABILIDADES

# Aquí ya trabajamos con todo nuestro dataset para el cálculo de los parámetros
produccion_gas_completo <- as.numeric(datos$Total.gas.production.by.2023)
produccion_gas_completo <- na.omit(produccion_gas_completo)
produccion_gas_completo <- produccion_gas_completo[produccion_gas_completo > 0]

RECALCULAMOS VALORES

#Aqui ya trabajamos con todo nuestro dataset para el calculo de los parámetros
n_completo <- length(produccion_gas_completo)
n_completo
## [1] 12561

PARÁMETRO MEDIA ARITMETICA (MU)

# Calculamos mu con todos los datos globales
medialog_completo <- mean(log(produccion_gas_completo))
medialog_completo
## [1] 13.77795

PARÁMETRO DESVIACIÓN ESTÁNDAR (SIGMA)

sd_log_completo <- sd(log(produccion_gas_completo))
sd_log_completo
## [1] 1.095632
par(oma = c(1, 1, 1, 1))
plot.new()
plot.window(xlim = c(0, 100), ylim = c(0, 100))

# Tarjeta de presentación de la pregunta
rect(2, 20, 98, 80, border = "#2A9D8F", col = "#F0F9F8", lwd = 3)

text(52, 55, "¿Cuál es la probabilidad de que la producción\n total de gas se encuentre entre 0 y 5,000,000\nde unidades?", cex = 1.2, font = 2, col = "#1D3557")
box(which = "outer", col = "black")

# USAMOS LOS PARÁMETROS COMPLETOS RECALCULADOS
probabilidad_Gas <- plnorm(5000000, meanlog = medialog_completo, sdlog = sd_log_completo) - 
                    plnorm(0, meanlog = medialog_completo, sdlog = sd_log_completo)

PROBABILIDAD:

probabilidad_Gas * 100
## [1] 93.36117
# Rango para la curva usando el dataset completo
x <- seq(min(produccion_gas_completo), max(produccion_gas_completo), length.out = 1000)

# Curva log-normal con parámetros del dataset completo
plot(x, dlnorm(x, meanlog = medialog_completo, sdlog = sd_log_completo),
     col = "skyblue3", lwd = 2, type = "l",
     main = "Grafica Nº5: Calculo de probabilidades de la\nproduccion total de gas en los pozos de gas natural de Nuevo Mexico", 
     ylab = "Densidad de probabilidad",
     xlab = "Produccion de Gas")
box(which = "outer", col = "black")

# Área de probabilidad (Rango de 0 a 5,000,000)
x_area <- seq(0, 5000000, length.out = 500)
y_area <- dlnorm(x_area, meanlog = medialog_completo, sdlog = sd_log_completo)

# Línea del área
lines(x_area, y_area, col = "red", lwd = 2)

# Área sombreada
polygon(c(x_area, rev(x_area)),
        c(y_area, rep(0, length(y_area))),
        col = rgb(1, 0, 0, 0.5),
        border = NA)

# Leyenda
legend("topright",
       legend = c("Modelo Log-normal", "Área de Probabilidad"),
       col = c("skyblue3", "red"),
       lwd = 2,
       cex = 0.9)

texto_prob <- paste0("Probabilidad = ", round(probabilidad_Gas * 100, 2), " %")

text(x = max(x) * 0.7,
     y = max(dlnorm(x, medialog_completo, sd_log_completo)) * 0.7,
     labels = texto_prob,
     col = "black",
     cex = 0.9,
     font = 2)

par(oma = c(1, 1, 1, 1))
plot.new()
plot.window(xlim = c(0, 100), ylim = c(0, 100))

# Tu tarjeta de presentación nativa adaptada a la Producción de Gas
rect(2, 20, 98, 80, border = "#2A9D8F", col = "#F0F9F8", lwd = 3)

text(52, 55, "¿De 300 nuevas mediciones cuántas tendrían\nuna producción total de gas de entre 0 y\n5,000,000 de unidades?", cex = 1.2, font = 2, col = "#1D3557")
box(which = "outer", col = "black")

nuevas_mediciones <- 300
valor_esperado_gas <- nuevas_mediciones * probabilidad_Gas

Cantidad esperada en una muestra de 300:

valor_esperado_gas
## [1] 280.0835

7. INTERVALOS DE CONFIANZA

Media Aritmética Muestral

media_original <- exp(medialog_completo + (sd_log_completo^2)/2)
media_original
## [1] 1755305

Desviación Estándar

sigma_original <- sqrt((exp(sd_log_completo^2) - 1) * exp(2 * medialog_completo + sd_log_completo^2))
sigma_original
## [1] 2674451

Error Estándar

n_completo_gas <- length(produccion_gas_completo)

e <- sigma_original / sqrt(n_completo_gas)
e
## [1] 23862.86

Limites del Intervalo Limite Inferior

li <- media_original - 2 * e
li
## [1] 1707579

Limite Superior

ls <- media_original + 2 * e
ls
## [1] 1803030
expresion_intervalo <- sprintf("$%.2f < \\mu < %.2f$", li, ls)

# CORRECCIÓN: Se añade el operador pipe %>% antes de gt() que faltaba en tu código original
data.frame(
  Variable = "Producción Total Gas",
  Estimacion = expresion_intervalo,
  Error_Estandar = round(e, 4)
) %>% 
  gt() %>%
  tab_header(
    title = md("**Tabla Nº4. Media Poblacional mediante Intervalos de Confianza**")
  ) %>%
  cols_label(
    Variable = "Variable",
    Estimacion = "Intervalo de Confianza (95%)",
    Error_Estandar = "Error Estándar de la Media (e)"
  ) %>%
  fmt_markdown(columns = Estimacion) %>%
  cols_align(align = "center") %>%
  tab_options(
    table.background.color = "#FBFCFC",
    heading.background.color = "#F4F6F7",
    column_labels.font.weight = "bold"
  ) %>%
  tab_source_note(
    source_note = md("**Tabla 4 de 4**")
  )
Tabla Nº4. Media Poblacional mediante Intervalos de Confianza
Variable Intervalo de Confianza (95%) Error Estándar de la Media (e)
Producción Total Gas 1707579.03<μ<1803030.481707579.03 < \mu < 1803030.48 23862.86
Tabla 4 de 4

8. CONCLUSIÓN

La variable produccion total de gas se explica a traves del modelo log-normal siendo la media aritmetica de 1755305 y una desviacion estandar de 2674451. De esta manera logramos calcular probabilidades como por ejemplo, que al seleccionar aleatoriamente cualquier area donde la produccion se encuentre entre 0 y 5,000,000 es de 93.36 %. Asimismo, ante 300 nuevas mediciones, se espera que aproximadamente 280 pozos registren una producción comprendida en dicho rango.

Mediante el teorema de limite central, sabemos que la media aritmetica poblacional de la produccion de gas se encuentra entre 1,707,579.03 y 1,803,030.48 con un 95% de confianza.