#==============================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 = ";")
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]
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 | ||
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")
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)
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 | |||
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
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 | 26443.28 | |
| Tabla 3 de 3 | ||
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.