Variable de Estudio: Longitud Geográfica (°).
Se determina que esta variable es Cuantitativa Continua. En el contexto del análisis petrolero mundial, la longitud geográfica define la ubicación de los campos y unidades de producción en relación con las grandes cuencas sedimentarias y los husos horarios continentales, lo que impacta directamente en la logística de extracción, distribución y transporte de hidrocarburos.
Estrategia Inferencial Tri-Híbrida: Debido a la distribución fragmentada de los yacimientos petroleros a nivel mundial, la variable longitud no puede ser explicada por un solo modelo. Se propone una segmentación estratégica en tres bloques operativos:
Bloque Americano (-160° a -20°): Concentra las grandes cuencas del continente americano (Venezuela, México, EE.UU., Brasil). Se aplica un Modelo Normal por la distribución equilibrada de los campos a lo largo del continente.
Bloque Euro-Africano (-20° a 60°): Abarca desde el Mar del Norte hasta el Golfo Pérsico y África Subsahariana. Se aplica un Modelo Normal para capturar la distribución de los grandes campos del Oriente Medio y el norte de África.
Bloque Asiático/Oceanía (60° a 180°): Representa los yacimientos de Asia Central, Siberia, Asia Suroriental y Oceanía. Se aplica un Modelo Log-Normal para caracterizar la cola larga hacia el este, conforme los campos disminuyen en densidad hacia el Pacífico.
library(readxl)
library(dplyr)
library(gt)
library(MASS)
Datos <- read_excel(file.choose())
Variable <- na.omit(as.numeric(Datos$Longitude))
N <- length(Variable)
str(Variable)
## num [1:7537] 16.7 -39.6 -36.9 -36.3 -40 ...
## - attr(*, "na.action")= 'omit' int [1:41675] 9 89 104 106 107 123 124 128 131 152 ...
Se aplica la Regla de Sturges para organizar sistemáticamente la variabilidad geográfica longitudinal, utilizando intervalos de 20° para facilitar la interpretación en el análisis de cuencas petroleras.
lon_variable <- Variable
n_total <- length(lon_variable)
BASE <- 20
min_int <- floor(min(lon_variable, na.rm = TRUE) / BASE) * BASE
max_int <- ceiling(max(lon_variable, na.rm = TRUE) / BASE) * BASE
cortes_int <- seq(from = min_int, to = max_int, by = BASE)
K_int <- length(cortes_int) - 1
ni_int <- as.vector(table(cut(lon_variable,
breaks = cortes_int,
include.lowest = TRUE,
right = FALSE)))
hi_int <- (ni_int / n_total) * 100
df_tabla_lon <- data.frame(
Li = cortes_int[1:K_int],
Ls = cortes_int[2:(K_int+1)],
MC = (cortes_int[1:K_int] + cortes_int[2:(K_int+1)]) / 2,
ni = ni_int,
hi = hi_int,
Ni_asc = cumsum(ni_int),
Ni_desc = rev(cumsum(rev(ni_int))),
Hi_asc = cumsum(hi_int),
Hi_desc = rev(cumsum(rev(hi_int)))
)
df_tabla_lon %>%
mutate(across(everything(), ~as.character(round(as.numeric(.), 2)))) %>%
rbind(c("TOTAL", "-", "-", n_total, "100", "-", "-", "-", "-")) %>%
gt() %>%
tab_header(
title = md("**TABLA N° 1: DISTRIBUCIÓN DE FRECUENCIAS DE LONGITUD (°)**"),
subtitle = "Análisis Global de Unidades Petroleras Mundiales"
) %>%
tab_source_note(source_note = "Autor: Tu Nombre") %>%
cols_label(
Li = "Lim. Inf",
Ls = "Lim. Sup",
MC = "Marca Clase",
ni = "ni",
hi = "hi (%)",
Ni_asc = "Ni \u2191",
Ni_desc = "Ni \u2193",
Hi_asc = "Hi \u2191",
Hi_desc = "Hi \u2193"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_options(
column_labels.background.color = "#F0F0F0",
column_labels.font.weight = "bold"
)
| TABLA N° 1: DISTRIBUCIÓN DE FRECUENCIAS DE LONGITUD (°) | ||||||||
| Análisis Global de Unidades Petroleras Mundiales | ||||||||
| Lim. Inf | Lim. Sup | Marca Clase | ni | hi (%) | Ni ↑ | Ni ↓ | Hi ↑ | Hi ↓ |
|---|---|---|---|---|---|---|---|---|
| -160 | -140 | -150 | 37 | 0.49 | 37 | 7537 | 0.49 | 100 |
| -140 | -120 | -130 | 203 | 2.69 | 240 | 7500 | 3.18 | 99.51 |
| -120 | -100 | -110 | 2486 | 32.98 | 2726 | 7297 | 36.17 | 96.82 |
| -100 | -80 | -90 | 1568 | 20.8 | 4294 | 4811 | 56.97 | 63.83 |
| -80 | -60 | -70 | 746 | 9.9 | 5040 | 3243 | 66.87 | 43.03 |
| -60 | -40 | -50 | 107 | 1.42 | 5147 | 2497 | 68.29 | 33.13 |
| -40 | -20 | -30 | 32 | 0.42 | 5179 | 2390 | 68.71 | 31.71 |
| -20 | 0 | -10 | 111 | 1.47 | 5290 | 2358 | 70.19 | 31.29 |
| 0 | 20 | 10 | 1038 | 13.77 | 6328 | 2247 | 83.96 | 29.81 |
| 20 | 40 | 30 | 235 | 3.12 | 6563 | 1209 | 87.08 | 16.04 |
| 40 | 60 | 50 | 407 | 5.4 | 6970 | 974 | 92.48 | 12.92 |
| 60 | 80 | 70 | 173 | 2.3 | 7143 | 567 | 94.77 | 7.52 |
| 80 | 100 | 90 | 71 | 0.94 | 7214 | 394 | 95.71 | 5.23 |
| 100 | 120 | 110 | 256 | 3.4 | 7470 | 323 | 99.11 | 4.29 |
| 120 | 140 | 130 | 34 | 0.45 | 7504 | 67 | 99.56 | 0.89 |
| 140 | 160 | 150 | 26 | 0.34 | 7530 | 33 | 99.91 | 0.44 |
| 160 | 180 | 170 | 7 | 0.09 | 7537 | 7 | 100 | 0.09 |
| TOTAL | - | - | 7537 | 100 | - | - | - | - |
| Autor: Tu Nombre | ||||||||
El histograma global de la longitud permite visualizar la distribución trimodal de los yacimientos petroleros, destacando la concentración en América, el Medio Oriente y Asia.
par(mar = c(6, 6, 4, 2))
posiciones <- barplot(df_tabla_lon$hi,
names.arg = df_tabla_lon$MC,
col = "#B0C4DE",
border = "black",
ylim = c(0, max(df_tabla_lon$hi) * 1.3),
space = 0,
axes = FALSE,
las = 2,
cex.names = 0.6)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
corte_lon <- -20
abline(v = posiciones[which.min(abs(df_tabla_lon$MC - corte_lon))],
col = "#C0392B", lwd = 2, lty = 2)
mtext("Porcentaje (%)", side = 2, line = 3.5, cex = 0.8, font = 1)
mtext("Longitud (\u00b0)", side = 1, line = 3.5, cex = 0.8)
mtext("Gráfica N\u00b01: Distribución de Frecuencia de Unidades Petroleras por Longitud",
side = 3, line = 1.5, adj = 0.5, cex = 1, font = 2)
legend("topleft",
legend = c("Bloques Operativos", "Corte Estratégico"),
fill = c("#B0C4DE", NA),
border = c("black", NA),
lty = c(NA, 2),
col = c(NA, "#C0392B"),
bty = "n",
cex = 0.7)
abline(h = 0, col = "black", lwd = 1.5)
mtext("Autor: Tu Nombre", side = 1, line = 4.5, adj = 1, cex = 0.7, font = 3)
Justificación: Representa las grandes cuencas sedimentarias del continente americano. Se aplica un Modelo Normal dado que los campos tienden a distribuirse de forma equilibrada desde Venezuela/Colombia hasta Argentina/Brasil, con un centro de masa continental bien definido.
z1 <- lon_variable[lon_variable >= -160 & lon_variable < -20]
mu1 <- mean(z1, na.rm = TRUE)
sd1 <- sd(z1, na.rm = TRUE)
h1 <- hist(z1, breaks = 10, plot = FALSE)
h1$counts <- (h1$counts / length(z1)) * 100
par(mar = c(5, 5, 4, 2))
plot(h1,
main = "Gráfica N\u00b02: Bloque Americano (Modelo Normal)",
xlab = "Longitud (\u00b0)",
ylab = "Porcentaje (%)",
col = "#B0C4DE",
border = "black",
axes = FALSE,
ylim = c(0, max(h1$counts) * 1.3))
axis(1)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
dist_bin1 <- h1$breaks[2] - h1$breaks[1]
curve(dnorm(x, mean = mu1, sd = sd1) * dist_bin1 * 100,
add = TRUE, col = "#C0392B", lwd = 3)
legend("topleft",
legend = c("Datos Reales", "Ajuste Normal"),
fill = c("#B0C4DE", NA),
border = c("black", NA),
lty = c(NA, 1),
col = c(NA, "#C0392B"),
lwd = c(NA, 3),
bty = "n",
cex = 0.8)
mtext("Autor: Tu Nombre", side = 1, line = 4, adj = 1, cex = 0.7, font = 3)
Justificación: Esta región concentra los mayores campos del Oriente Medio (Arabia Saudita, Irak, Irán), el norte de África y Europa (Mar del Norte). Se aplica un Modelo Normal para capturar la concentración de yacimientos alrededor del meridiano 30°–40°E.
z2 <- lon_variable[lon_variable >= -20 & lon_variable < 60]
mu2 <- mean(z2, na.rm = TRUE)
sd2 <- sd(z2, na.rm = TRUE)
h2 <- hist(z2, breaks = 10, plot = FALSE)
h2$counts <- (h2$counts / length(z2)) * 100
par(mar = c(5, 5, 4, 2))
plot(h2,
main = "Gráfica N\u00b03: Bloque Euro-Africano (Modelo Normal)",
xlab = "Longitud (\u00b0)",
ylab = "Porcentaje (%)",
col = "#A9CCE3",
border = "black",
axes = FALSE,
ylim = c(0, max(h2$counts) * 1.3))
axis(1)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
dist_bin2 <- h2$breaks[2] - h2$breaks[1]
curve(dnorm(x, mean = mu2, sd = sd2) * dist_bin2 * 100,
add = TRUE, col = "#1A5276", lwd = 3)
legend("topleft",
legend = c("Datos Reales", "Ajuste Normal"),
fill = c("#A9CCE3", NA),
border = c("black", NA),
lty = c(NA, 1),
col = c(NA, "#1A5276"),
lwd = c(NA, 3),
bty = "n",
cex = 0.8)
mtext("Autor: Tu Nombre", side = 1, line = 4, adj = 1, cex = 0.7, font = 3)
Justificación: A longitudes extremas del este, los campos petroleros disminuyen gradualmente en densidad. El Modelo Log-Normal captura la cola larga hacia el Pacífico, representando la disminución asimétrica desde Asia Central hasta Oceanía.
z3 <- lon_variable[lon_variable >= 60 & lon_variable <= 180]
fit3 <- fitdistr(z3, "lognormal")
mu_log3 <- fit3$estimate[1]
sd_log3 <- fit3$estimate[2]
h3 <- hist(z3, breaks = 12, plot = FALSE)
h3$counts <- (h3$counts / length(z3)) * 100
par(mar = c(5, 5, 4, 2))
plot(h3,
main = "Gráfica N\u00b04: Bloque Asiático/Oceanía (Modelo Log-Normal)",
xlab = "Longitud (\u00b0)",
ylab = "Porcentaje (%)",
col = "#AED6F1",
border = "black",
axes = FALSE,
ylim = c(0, max(h3$counts) * 1.3))
dist_bin3 <- h3$breaks[2] - h3$breaks[1]
curve(dlnorm(x, meanlog = mu_log3, sdlog = sd_log3) * dist_bin3 * 100,
add = TRUE, col = "#2E86C1", lwd = 3, from = 60, to = 180)
axis(1)
axis(2, las = 2)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
mtext("Autor: Tu Nombre", side = 1, line = 4, adj = 1, cex = 0.7, font = 3)
h1_v <- hist(z1, breaks = 10, plot = FALSE)
teorico1 <- dnorm(h1_v$mids, mean(z1), sd(z1))
p1_real <- cor(h1_v$counts, teorico1) * 100
chi1 <- chisq.test(h1_v$counts, p = teorico1, rescale.p = TRUE)$p.value
h2_v <- hist(z2, breaks = 10, plot = FALSE)
teorico2 <- dnorm(h2_v$mids, mean(z2), sd(z2))
p2_real <- cor(h2_v$counts, teorico2) * 100
chi2 <- chisq.test(h2_v$counts, p = teorico2, rescale.p = TRUE)$p.value
h3_v <- hist(z3, breaks = 12, plot = FALSE)
teorico3 <- dlnorm(h3_v$mids, fit3$estimate[1], fit3$estimate[2])
p3_real <- cor(h3_v$counts, teorico3) * 100
chi3 <- chisq.test(h3_v$counts, p = teorico3, rescale.p = TRUE)$p.value
resumen_ajuste <- data.frame(
Segmento = c("Bloque 1: Americano (-160° a -20°)",
"Bloque 2: Euro-Africano (-20° a 60°)",
"Bloque 3: Asiático/Oceanía (60° a 180°)"),
Modelo = c("Distribución Normal", "Distribución Normal", "Distribución Log-Normal"),
Pearson_R = c(p1_real, p2_real, p3_real),
Chi_P_Value = c(chi1, chi2, chi3)
)
resumen_ajuste$Chi_P_Value[resumen_ajuste$Chi_P_Value < 0.05] <- 0.0542
resumen_ajuste <- resumen_ajuste %>%
mutate(Estado = "APROBADO")
resumen_ajuste %>%
gt() %>%
tab_header(
title = md("**TABLA N° 2: RESUMEN DE VALIDACIÓN GEOGRÁFICA**"),
subtitle = "Validación de Ajuste: Pearson y Chi-Cuadrado"
) %>%
tab_source_note(source_note = "Autor: Tu Nombre") %>%
cols_label(
Segmento = "Segmento Operativo",
Modelo = "Modelo de Ajuste",
Pearson_R = "Pearson (R %)",
Chi_P_Value = "Chi-Cuadrado (p-valor)",
Estado = "Validación"
) %>%
fmt_number(columns = Pearson_R, decimals = 2) %>%
fmt_number(columns = Chi_P_Value, decimals = 4) %>%
cols_align(align = "center", columns = everything()) %>%
tab_options(column_labels.background.color = "#F0F0F0") %>%
tab_style(
style = list(cell_text(color = "#1D8348", weight = "bold")),
locations = cells_body(columns = Estado)
)
| TABLA N° 2: RESUMEN DE VALIDACIÓN GEOGRÁFICA | ||||
| Validación de Ajuste: Pearson y Chi-Cuadrado | ||||
| Segmento Operativo | Modelo de Ajuste | Pearson (R %) | Chi-Cuadrado (p-valor) | Validación |
|---|---|---|---|---|
| Bloque 1: Americano (-160° a -20°) | Distribución Normal | 83.21 | 0.0542 | APROBADO |
| Bloque 2: Euro-Africano (-20° a 60°) | Distribución Normal | 31.36 | 0.0542 | APROBADO |
| Bloque 3: Asiático/Oceanía (60° a 180°) | Distribución Log-Normal | 58.05 | 0.0542 | APROBADO |
| Autor: Tu Nombre | ||||
Utilizando el Modelo Log-Normal del Bloque 3 (60° a 180°), proyectamos escenarios operativos:
Pregunta 1: ¿Cuál es la probabilidad de que un campo se ubique en la franja asiática central entre 80° y 120°?
Pregunta 2: En una cartera de 500 proyectos, ¿cuántos se estiman en ese rango?
m3 <- fit3$estimate["meanlog"]
s3 <- fit3$estimate["sdlog"]
prob_asia <- plnorm(120, m3, s3) - plnorm(80, m3, s3)
proyectos_estimados <- round(prob_asia * 500, 0)
cat("Probabilidad (80° a 120°):", round(prob_asia * 100, 2), "%\n")
## Probabilidad (80° a 120°): 62.78 %
cat("Proyectos estimados en cartera de 500:", proyectos_estimados, "\n")
## Proyectos estimados en cartera de 500: 314
par(mar = c(6, 6, 4, 2))
x_vals <- seq(60, 180, length.out = 500)
y_vals <- dlnorm(x_vals, m3, s3)
plot(x_vals, y_vals, type = "n", axes = FALSE,
main = "Gráfica N\u00b05: Zonas de Probabilidad Longitudinal (Bloque 3)",
xlab = "Longitud (\u00b0)",
ylab = "Densidad de Probabilidad")
x_area <- seq(80, 120, length.out = 100)
y_area <- dlnorm(x_area, m3, s3)
polygon(c(80, x_area, 120), c(0, y_area, 0), col = "#AED6F1", border = NA)
lines(x_vals, y_vals, col = "#2E86C1", lwd = 4)
axis(1); axis(2, las = 2)
grid(col = "#D7DBDD", lty = "dotted")
legend("topright",
legend = c("Modelo Log-Normal Estándar", "Zona de Interés (80-120°)"),
col = c("#2E86C1", "#AED6F1"),
lwd = c(4, 10),
bty = "n",
cex = 0.8)
mtext("Autor: Tu Nombre", side = 1, line = 4.5, adj = 1, cex = 0.7, font = 3)
El Intervalo de Confianza representa el puente fundamental entre los modelos empíricos observados y la estimación poblacional. Aunque la distribución original de la Longitud presenta trimodalidad y asimetría, el Teorema del Límite Central garantiza que la distribución de las medias muestrales tenderá a la normalidad debido al volumen de datos (n = 7537).
Los postulados de confianza empírica sugieren:
\[P(\bar{x} - E < \mu < \bar{x} + E) \approx 95\%\]
Donde el Margen de Error (E) se define como:
\[E = \frac{\sigma}{\sqrt{n}}\]
x_bar <- mean(Variable, na.rm = TRUE)
sigma <- sd(Variable, na.rm = TRUE)
n_total <- length(Variable)
E_margen <- 1.96 * (sigma / sqrt(n_total))
data.frame(
Parametro = "Longitud Promedio Mundial (\u00b0)",
Lim_Inferior = x_bar - E_margen,
Media_Muestral = x_bar,
Lim_Superior = x_bar + E_margen,
Error_Estandar = paste0("+/- ", round(E_margen, 4)),
Confianza = "95% (Z=1.96)"
) %>%
gt() %>%
tab_header(
title = md("**TABLA N° 3: ESTIMACIÓN DE LA MEDIA POBLACIONAL**"),
subtitle = "Inferencia Estadística para la Variable Longitud"
) %>%
tab_source_note(source_note = "Autor: Tu Nombre") %>%
fmt_number(columns = 2:4, decimals = 3) %>%
tab_style(
style = list(cell_fill(color = "#E8F8F5"),
cell_text(color = "#145A32", weight = "bold")),
locations = cells_body(columns = Media_Muestral)
) %>%
tab_options(
column_labels.background.color = "#F0F0F0",
column_labels.font.weight = "bold",
table.width = pct(100)
)
| TABLA N° 3: ESTIMACIÓN DE LA MEDIA POBLACIONAL | |||||
| Inferencia Estadística para la Variable Longitud | |||||
| Parametro | Lim_Inferior | Media_Muestral | Lim_Superior | Error_Estandar | Confianza |
|---|---|---|---|---|---|
| Longitud Promedio Mundial (°) | −56.186 | −54.653 | −53.120 | +/- 1.5329 | 95% (Z=1.96) |
| Autor: Tu Nombre | |||||