#==============================ENCABEZADO===================
# TEMA: MODELOS PROBABILISTICOS- DISTANCIA ESTIMADA
# 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 Distance.estimation (Distancia Estimada) con el nombre de distance
Convierte los datos de producción de gas en valores numéricos, elimina los vacíos o valores na y filtra para conservar únicamente las cifras mayores a cero.
distance <- as.numeric(datos$Distance.estimation)
distance <- na.omit(distance)
distance <- distance[distance > 0]
Boxplot: Nos permite demostrar la presencia de valores atípicos
par(oma = c(1, 1, 1, 1))
boxplot(distance,
horizontal = TRUE,
col = "skyblue",
main = "Gráfica Nº1: Distribución de cantidad de la Distancia Estimada",
xlab = "Distancia Estimada (ft)")
box(which = "outer", col = "black")
El código calcula los límites estadísticos de un diagrama de caja para separar y aislar los valores atípicos
caja <- boxplot(distance, plot = FALSE)
limite_sup <- caja$stats[5]
limite_inf <- caja$stats[1]
distance_outliers <- distance[distance < limite_inf | distance > limite_sup]
distance_sin_outliers <- distance[distance >= limite_inf & distance <= limite_sup]
TABLA ORIGINAL
histograma_dist <- hist(distance_sin_outliers, plot = FALSE)
ni_f <- histograma_dist$counts
hi_f <- ni_f / sum(ni_f) * 100
intervalos_dist <- paste0("[", round(histograma_dist$breaks[-length(histograma_dist$breaks)], 2),
", ", round(histograma_dist$breaks[-1], 2), ")")
tabla_base <- data.frame(Intervalo = intervalos_dist, ni_f = ni_f, hi_f = round(hi_f, 2))
fila_total <- data.frame(Intervalo = "TOTAL", ni_f = sum(tabla_base$ni_f), hi_f = round(sum(tabla_base$hi_f)))
TDFlat_t <- rbind(tabla_base, fila_total)
| Tabla Nº1: Distribución de cantidad de la Distancia Estimada de los pozos de gas natural | ||
| Intervalo | ni | hi (%) |
|---|---|---|
| [0, 10) | 307 | 2.60 |
| [10, 20) | 714 | 6.05 |
| [20, 30) | 1052 | 8.92 |
| [30, 40) | 1073 | 9.10 |
| [40, 50) | 1232 | 10.45 |
| [50, 60) | 1292 | 10.96 |
| [60, 70) | 1170 | 9.92 |
| [70, 80) | 1225 | 10.39 |
| [80, 90) | 972 | 8.24 |
| [90, 100) | 713 | 6.05 |
| [100, 110) | 571 | 4.84 |
| [110, 120) | 362 | 3.07 |
| [120, 130) | 201 | 1.70 |
| [130, 140) | 221 | 1.87 |
| [140, 150) | 214 | 1.81 |
| [150, 160) | 213 | 1.81 |
| [160, 170) | 192 | 1.63 |
| [170, 180) | 69 | 0.59 |
| TOTAL | 11793 | 100.00 |
| Tabla 1 de 4 | ||
GRÁFICA ORIGINAL
Debido a la similitud de las barras se ha decidido separar en dos modelos, el primer modelo asociamos con el modelo de probabilidad Normal (0 a 120 ft) y el segundo con un modelo de probabilidad lognormal (120 a 180 ft)
par(oma = c(1, 1, 1, 1))
h_temp <- hist(distance_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 Distancia\nEstimada de los pozos de gas natural",
xlab = "Distancia Estimada (ft)",
ylab = "Porcentaje (%)",
col = "indianred1")
box(which = "outer", col = "black")
CONJETURA DE MODELO 1
PARÁMETRO MEDIA ARITMETICA (MU)
par(oma = c(1, 1, 1, 1))
distance_1 <- distance_sin_outliers[distance_sin_outliers <= 120]
u_1 <- mean(distance_1)
u_1
## [1] 58.28981
PARÁMETRO DESVIACIÓN ESTÁNDAR (SIGMA)
sigma_1 <- sd(distance_1)
sigma_1
## [1] 28.31541
n1 <- length(distance_1)
Debido a la similitud de las barras asociamos con el modelo de probabilidad Normal
hist_conteos <- hist(distance_1, breaks = 6, plot = FALSE)
histograma_m1 <- hist(distance_1,
freq = FALSE,
breaks = 6,
main = "Gráfica Nº3: Comparación de la realidad con el modelo de\nprobabilidad normal",
xlab = "Distancia Estimada (ft)",
ylab = "Densidad de probabilidad",
col = "lightgray",
border = "black")
box(which = "outer", col = "black")
x_seq <- seq(min(distance_1), max(distance_1), 0.01)
lines(x_seq, dnorm(x_seq, u_1, sigma_1), col = "blue", lwd = 2)
CONJETURA DE MODELO 2
PARÁMETRO MEDIA ARITMETICA (MU)
par(oma = c(1, 1, 1, 1))
distance_2 <- distance_sin_outliers[distance_sin_outliers > 120]
log_distance_2 <- log(distance_2)
mu_log <- mean(log_distance_2)
mu_log
## [1] 4.982246
PARÁMETRO DESVIACIÓN ESTÁNDAR (SIGMA)
sigma_log <- sd(log_distance_2)
sigma_log
## [1] 0.1046892
n2 <- length(distance_2)
hist_conteos_m2 <- hist(distance_2, breaks = 5, plot = FALSE)
histograma_m2 <- hist(distance_2,
freq = FALSE,
breaks = 5,
main = "Gráfica Nº3: Comparación de la realidad con el modelo de\nprobabilidad lognormal",
xlab = "Distancia Estimada (ft)",
ylab = "Densidad de probabilidad",
col = "lightgray",
border = "black")
box(which = "outer", col = "black")
x2 <- seq(min(distance_2), max(distance_2), 0.01)
lines(x2, dlnorm(x2, meanlog = mu_log, sdlog = sigma_log), col = "blue", lwd = 2)
MODELO NORMAL (0 a 120 ft)
FRECUENCIAS OBSERVADAS
Fo_1 <- hist_conteos$counts
Fo_1 <- (Fo_1 / n1) * 100
Fo_1
## [1] 9.557240 19.891416 23.626322 22.418796 15.772723 8.733502
FRECUENCIAS ESPERADAS
Fe_1 <- P1 * 100
Fe_1
## [1] 6.837924 17.101593 26.491868 25.429744 15.125396 5.571642
plot(Fo_1, Fe_1,
xlim = c(0, max(Fo_1)),
ylim = c(0, max(Fo_1)),
main = "Gráfica Nº4: Correlación de frecuencias en el modelo normal\nde la Distancia Estimada",
xlab = "Frecuencia observada (%)",
ylab = "Frecuencia esperada (%)",
col = "blue3", pch = 19)
lines(c(0, max(Fo_1)), c(0, max(Fo_1)), col = "red", lwd = 2)
box(which = "outer", col = "black")
TEST DE PEARSON
Correlacion_1 <- cor(Fo_1, Fe_1) * 100
Correlacion_1
## [1] 98.09319
TEST DE CHI-CUADRADO
x2_1 <- sum((Fe_1 - Fo_1)^2 / Fe_1)
x2_1
## [1] 4.025027
UMBRAL DE ACEPTACIÓN
grados_libertad_1 <- length(Fo_1) - 1
umbral_aceptacion_1 <- qchisq(0.9999, grados_libertad_1)
umbral_aceptacion_1
## [1] 25.74483
tabla_resumen_1 <- data.frame(
Variable = "Distancia T1 (Normal)",
Pearson = round(Correlacion_1, 2),
Chi = round(x2_1, 2),
Umbral = round(umbral_aceptacion_1, 2)
)
| Tabla Nº2: Resumen del test de bondad de ajuste al modelo normal | |||
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de aceptacion |
|---|---|---|---|
| Distancia T1 (Normal) | 98.09 | 4.03 | 25.74 |
| Tabla 2 de 4 | |||
MODELO LOG-NORMAL (120 a 180 ft)
FRECUENCIAS OBSERVADAS
Fo_2 <- hist_conteos_m2$counts
Fo_2 <- (Fo_2 / n2) * 100
Fo_2
## [1] 18.108108 19.909910 19.279279 19.189189 17.297297 6.216216
FRECUENCIAS ESPERADAS
Fe_2 <- P2 * 100
Fe_2
## [1] 10.517673 21.246655 25.780854 20.576402 11.614066 4.915092
plot(Fo_2, Fe_2,
xlim = c(0, max(Fo_2) + 5),
ylim = c(0, max(Fe_2) + 5),
main = "Gráfica Nº4: Correlación de frecuencias en el modelo lognormal\nde la Distancia Estimada",
xlab = "Frecuencia observada (%)",
ylab = "Frecuencia esperada (%)",
col = "blue3",
pch = 19)
abline(a = 0, b = 1, col = "red", lwd = 2, lty = 2)
box(which = "outer", col = "black")
TEST DE PEARSON
Correlacion_2 <- cor(Fo_2, Fe_2) * 100
Correlacion_2
## [1] 77.00834
TEST DE CHI-CUADRADO
x2_2 <- sum((Fe_2 - Fo_2)^2 / Fe_2)
x2_2
## [1] 10.4206
UMBRAL DE ACEPTACIÓN
grados_libertad_2 <- length(Fo_2) - 1
umbral_aceptacion_2 <- qchisq(0.9999, grados_libertad_2)
umbral_aceptacion_2
## [1] 25.74483
tabla_resumen_2 <- data.frame(
Variable = "Distancia T2 (Lognormal)",
Pearson = round(Correlacion_2, 2),
Chi = round(x2_2, 2),
Umbral = round(umbral_aceptacion_2, 2)
)
| Tabla Nº3: Resumen del test de bondad de ajuste al modelo lognormal | |||
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de aceptación |
|---|---|---|---|
| Distancia T2 (Lognormal) | 77.01 | 10.42 | 25.74 |
| Tabla 3 de 4 | |||
MODELO NORMAL
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 Normal
distance_completo <- as.numeric(datos$Distance.estimation)
distance_completo <- na.omit(distance_completo)
distance_completo <- distance_completo[distance_completo > 0]
n_completo <- length(distance_completo)
PARÁMETRO MEDIA ARITMÉTICA (MU)
u_1 <- mean(distance_completo)
u_1
## [1] 74.86054
PARÁMETRO DESVIACIÓN ESTÁNDAR (SIGMA)
sigma_1 <- sd(distance_completo)
sigma_1
## [1] 48.80406
par(oma = c(1, 1, 1, 1))
plot.new()
plot.window(xlim = c(0, 100), ylim = c(0, 100))
rect(2, 20, 98, 80, border = "#2A9D8F", col = "#F0F9F8", lwd = 3)
text(52, 55, "¿Cuál es la probabilidad de que la Distancia\nEstimada se encuentre entre 10 y 50\n ft?", cex = 1.2, font = 2, col = "#1D3557")
box(which = "outer", col = "black")
probabilidad_Gas <- pnorm(50, mean = u_1, sd = sigma_1) -
pnorm(10, mean = u_1, sd = sigma_1)
LA PROBABILIDAD ES DE:
probabilidad_Gas * 100
## [1] 21.33135
par(oma = c(1, 1, 1, 1))
plot.new()
plot.window(xlim = c(0, 100), ylim = c(0, 100))
rect(2, 20, 98, 80, border = "#2A9D8F", col = "#F0F9F8", lwd = 3)
text(52, 55, "¿De 30 nuevas mediciones cuántas tendrían\nuna Distancia de entre 10 y 50 ft?", cex = 1.2, font = 2, col = "#1D3557")
box(which = "outer", col = "black")
CANTIDAD ESPERADA DE UNA MUESTRA DE 30 ES:
valor_esperado_dist <- 30 * probabilidad_Gas
valor_esperado_dist
## [1] 6.399406
MODELO LOG-NORMAL
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
n2 <- length(distance_2)
n2
## [1] 1110
PARÁMETRO MEDIA ARITMÉTICA (MU)
mu_log
## [1] 4.982246
PARÁMETRO DESVIACIÓN ESTÁNDAR (SIGMA)
sigma_log
## [1] 0.1046892
par(oma = c(1, 1, 1, 1))
plot.new()
plot.window(xlim = c(0, 100), ylim = c(0, 100))
rect(2, 20, 98, 80, border = "#2A9D8F", col = "#F0F9F8", lwd = 3)
text(52, 55, "¿Cuál es la probabilidad de que la Distancia\nEstimada se encuentre entre 140 y 180\n ft?", cex = 1.2, font = 2, col = "#1D3557")
box(which = "outer", col = "black")
LA PROBABILIDAD ES DE:
Probabilidad_2 <- (plnorm(180, meanlog = mu_log, sdlog = sigma_log) - plnorm(140, meanlog = mu_log, sdlog = sigma_log)) * 100
Probabilidad_2
## [1] 62.88641
par(oma = c(1, 1, 1, 1))
plot.new()
plot.window(xlim = c(0, 100), ylim = c(0, 100))
rect(2, 20, 98, 80, border = "#2A9D8F", col = "#F0F9F8", lwd = 3)
text(52, 55, "¿De 30 nuevas mediciones cuántas tendrían\nuna Distancia de entre 140 y 180 fts?", cex = 1.2, font = 2, col = "#1D3557")
box(which = "outer", col = "black")
CANTIDAD ESPERADA DE UNA MUESTRA DE 30 ES:
valor_esperado_dist2 <- (Probabilidad_2 / 100) * 30
valor_esperado_dist2
## [1] 18.86592
MEDIA ARITMÉTICA MUESTRAL
media_original <- mean(distance_completo)
media_original
## [1] 74.86054
PARÁMETRO DESVIACIÓN ESTÁNDAR (SIGMA)
sigma_original <- sd(distance_completo)
sigma_original
## [1] 48.80406
ERROR ESTÁNDAR
e <- sigma_original / sqrt(length(distance_completo))
e
## [1] 0.4354556
LÍMITE INFERIOR
li <- media_original - 2 * e
li
## [1] 73.98963
LÍMITE SUPERIOR
ls <- media_original + 2 * e
ls
## [1] 75.73145
| Tabla Nº4. Media Poblacional mediante Intervalos de Confianza | ||
| Variable | Intervalo de Confianza (95%) | Error Estándar de la Media (e) |
|---|---|---|
| Distancia Estimada | 73.99 < μ < 75.73 | 0.4355 |
| Tabla 4 de 4 | ||
La variable Distancia Estimada se explica a través de dos modelos: el Modelo 1 (Normal) con parámetros de una media aritmética de 58.29 y una desviación estándar de 28.32, y el Modelo 2 (Log-normal), cuyos parámetros en su escala logarítmica son una media de 4.98 y una desviación estándar de 0.10.
Mediante el teorema de límite central, sabemos que la media aritmética poblacional de la distancia estimada se encuentra entre 73.99 y 75.73 con un 95% de confianza.
De esta manera logramos calcular probabilidades como por ejemplo, que al seleccionar aleatoriamente cualquier distancia, la probabilidad de encontrarse entre 10 y 50 ft es de 21.33%, y la probabilidad de situarse entre 140 ft y 180 ft es de 62.89%.