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. SELECCIÓN DE VARIABLE

Asignamos nuestra variable Total.gas.production.by.2023 (Producción Total de Gas) con el nombre de produccion_gas

produccion_gas <- as.numeric(datos$Total.gas.production.by.2023)
produccion_gas <- na.omit(produccion_gas)
produccion_gas <- produccion_gas[produccion_gas > 0]

3. TABLA DE DISTRIBUCIÓN DE CANTIDAD

Calcula los límites estadísticos superior e inferior mediante un diagrama de caja, separando por un lado los valores atípicos detectados fuera de ese rango y, por otro, conservando únicamente los datos limpios que se encuentran dentro de los límites establecidos.

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]
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")

## [1] 10852

DATOS AL APLICAR FILTRO

length(gas_sin_outliers)
## [1] 9934
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 México
Intervalo ni hi (%)
[0, 200000) 1173 11.81
[200000, 400000) 1094 11.01
[400000, 600000) 1152 11.60
[600000, 800000) 1113 11.20
[800000, 1000000) 983 9.90
[1000000, 1200000) 828 8.34
[1200000, 1400000) 683 6.88
[1400000, 1600000) 512 5.15
[1600000, 1800000) 408 4.11
[1800000, 2000000) 343 3.45
[2000000, 2200000) 287 2.89
[2200000, 2400000) 223 2.24
[2400000, 2600000) 222 2.23
[2600000, 2800000) 200 2.01
[2800000, 3000000) 132 1.33
[3000000, 3200000) 139 1.40
[3200000, 3400000) 123 1.24
[3400000, 3600000) 109 1.10
[3600000, 3800000) 95 0.96
[3800000, 4000000) 85 0.86
[4000000, 4200000) 30 0.30
TOTAL 9934 100.00
Tabla 1 de 3

4. GRÁFICA DE DISTRIBUCIÓN DE CANTIDAD

Debido a la similitud de las barras asociamos con el modelo de probabilidad Log-Normal a partir de la segunda barra

par(oma = c(1, 1, 1, 1))
h_temp <- hist(gas_sin_outliers, plot = FALSE)
h_temp$counts <- (h_temp$counts / sum(h_temp$counts)) * 100

plot(h_temp, 
     main = "Gráfica Nº2. Distribución de cantidad de la producción \n de gas en pozos de gas natural en Nuevo México",
     xlab = "Produccion de Gas (ft^3)", 
     ylab = "Porcentaje (%)", 
     col = "indianred1")

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

5. CONJETURA DEL MODELO

PARÁMETRO MEDIA ARITMETICA (MU)

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

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

sd_log   <- sd(log(gas_sin_outliers))
sd_log
## [1] 0.9754259
par(oma = c(1, 1, 1, 1))

histograma <- hist(gas_sin_outliers, freq = FALSE,
                   main = "Gráfica Nº2. Comparación de la realidad con el modelo\nde la producción de gas de los pozos de gas natural de\nNuevo México",
                   xlab = "Producción de Gas (ft^3)", ylab = "Densidad de probabilidad", col = "indianred1")
box(which = "outer", col = "black")

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)

6. TESTS DE APROBACIÓN

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

FRECUENCIAS OBSERVADAS

Fo_perc <- (Fo / n) * 100
Fo_perc
##  [1] 11.8079324 11.0126837 11.5965371 11.2039460  9.8953090  8.3350111
##  [7]  6.8753775  5.1540165  4.1071069  3.4527884  2.8890678  2.2448158
## [13]  2.2347493  2.0132877  1.3287699  1.3992350  1.2381719  1.0972418
## [19]  0.9563117  0.8556473  0.3019932

FRECUENCIAS ESPERADAS

Fe_perc <- (Fe / n) * 100
Fe_perc
##  [1]  8.3445473 16.7456755 14.8083539 11.6551702  9.0005783  6.9771393
##  [7]  5.4638343  4.3289033  3.4694291  2.8108502  2.3001150  1.8994396
## [13]  1.5816910  1.3271690  1.1213993  0.9536203  0.8157390  0.7016026
## [19]  0.6064856  0.5267236  0.4594497
# 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)

lines(c(0, max(Fo_perc)), c(0, max(Fo_perc)), col = "red", lwd = 2)
box(which = "outer", col = "black")

TEST DE PEARSON

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

TEST DE CHI-CUADRADO

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

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 93.71 7.24 28.87
Tabla 2 de 3

7. CÁLCULO DE PROBABILIDADES

Se recalculan los parámetros utilizando un subconjunto filtrado del dataset, excluyendo valores menores o iguales a cero, debido a la restricción matemática del modelo Log-Normal en el cálculo de logaritmos

# 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]

n_completo <- length(produccion_gas_completo)
n_completo
## [1] 10852

PARÁMETRO MEDIA ARITMETICA (MU)

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

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

sd_log_completo <- sd(log(produccion_gas_completo))
sd_log_completo
## [1] 1.121374
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 ft^3?", 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)

LA PROBABILIDAD ES DE:

probabilidad_Gas * 100
## [1] 93.36836

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 ft^3?", cex = 1.2, font = 2, col = "#1D3557")
box(which = "outer", col = "black")

nuevas_mediciones <- 300
valor_esperado_gas <- nuevas_mediciones * probabilidad_Gas

Cantidad esperada de una muestra de 300:

valor_esperado_gas
## [1] 280.1051

8. INTERVALOS DE CONFIANZA

Media Aritmética Muestral

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

Desviación Estándar

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

Error Estándar

n_completo_gas <- length(produccion_gas_completo)

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

Limites del Intervalo Limite Inferior

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

Limite Superior

ls <- media_original + 2 * e
ls
## [1] 1789359
Tabla Nº3. Media Poblacional mediante Intervalos de Confianza
Variable Intervalo de Confianza (95%) Error Estándar de la Media (e)
Producción Total Gas 1683585.47<μ<1789358.611683585.47 < \mu < 1789358.61 26443.28
Tabla 3 de 3

9. CONCLUSIÓN

La variable producción total de gas se explica a través del modelo log-normal con parámetros σ=1.12 y μ= 13.7

Mediante el teorema del límite central, sabemos que la media aritmética poblacional de la producción de gas se encuentra entre 1,707,579.03 y 1,803,030.48 con un 95% de confianza.

De esta manera logramos calcular probabilidades como por ejemplo, que al seleccionar aleatoriamente cualquier área donde la producción 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.