Se cargan las librerías necesarias y el dataset Global Oil and Gas Extraction Tracker (GOGET), que contiene registros de unidades de extracción de petróleo y gas a nivel mundial.
library(readxl)
library(dplyr)
library(gt)
library(ggplot2)
library(scales)
library(forcats)
library(stringr)
setwd("C:/Users/ronny/Downloads/Dataset")
datos <- read_excel("dataset_mundial_petro.xlsx") %>%
mutate(`Fuel type` = trimws(`Fuel type`)) %>%
filter(!is.na(`Fuel type`), `Fuel type` != "NA", `Fuel type` != "",
!is.na(`Unit type`), `Unit type` != "NA")
cat("Registros válidos:", nrow(datos), "\n")## Registros válidos: 8334
## Variables: 32
Se extrae la variable Tipo de Combustible
(Fuel type). La variable es cualitativa nominal,
con cuatro categorías definidas en el dataset. El análisis inferencial
se basa en modelos de probabilidad discreta aplicados a las frecuencias
relativas de cada tipo de combustible.
## Variable analizada: Tipo de Combustible (Fuel type)
## Total de observaciones (n): 8334
## Categorías identificadas: gas, gas and condensate, oil, oil and gas
Se calcula la distribución de frecuencias absolutas (nᵢ), relativas porcentuales (hᵢ%) y la probabilidad estimada (Pᵢ), equivalente a la frecuencia relativa en proporción. Esta columna Pᵢ sirve como base para el ajuste de modelos de probabilidad.
tabla_freq <- datos %>%
count(`Fuel type`, name = "ni") %>%
arrange(desc(ni)) %>%
mutate(
hi_pct = ni / n * 100,
Pi = ni / n,
i = row_number()
) %>%
rename(`Tipo de Combustible` = `Fuel type`) %>%
select(i, `Tipo de Combustible`, ni, hi_pct, Pi)
k <- nrow(tabla_freq)
cat("── Análisis por Tipo de Combustible ──\n")## ── Análisis por Tipo de Combustible ──
## Número de categorías (k) : 4
cat("Tipo más frecuente :", tabla_freq$`Tipo de Combustible`[1],
"—", tabla_freq$ni[1], "registros\n")## Tipo más frecuente : oil and gas — 5833 registros
cat("Tipo menos frecuente :", tabla_freq$`Tipo de Combustible`[k],
"—", tabla_freq$ni[k], "registro(s)\n")## Tipo menos frecuente : gas and condensate — 31 registro(s)
## Verificación — Σnᵢ : 8334 (debe ser 8334 )
## Verificación — ΣPᵢ : 1 (debe ser 1)
tabla_freq %>%
gt() %>%
tab_header(
title = md("**Tabla N. 1**"),
subtitle = md("Distribución de frecuencias por tipo de combustible — yacimientos de petróleo y gas")
) %>%
cols_label(
i = md("**N°**"),
`Tipo de Combustible` = md("**Tipo de Combustible**"),
ni = md("**nᵢ**"),
hi_pct = md("**hᵢ (%)**"),
Pi = md("**Pᵢ**")
) %>%
fmt_number(columns = ni, decimals = 0, use_seps = TRUE) %>%
fmt_number(columns = hi_pct, decimals = 2) %>%
fmt_number(columns = Pi, decimals = 4) %>%
grand_summary_rows(
columns = c(ni, hi_pct, Pi),
fns = list(label = "Total", fn = "sum"),
fmt = list(
~ fmt_number(., columns = ni, decimals = 0, use_seps = TRUE),
~ fmt_number(., columns = hi_pct, decimals = 2),
~ fmt_number(., columns = Pi, decimals = 4)
)
) %>%
tab_source_note("Autor: Grupo 5") %>%
tab_options(
table.width = pct(75),
table.font.size = px(13),
table.font.names = "Arial",
heading.title.font.size = px(15),
heading.subtitle.font.size = px(12),
heading.align = "center",
heading.background.color = "#AAAAAA",
column_labels.font.weight = "bold",
column_labels.background.color = "#FFFFFF",
column_labels.border.top.color = "#AAAAAA",
column_labels.border.bottom.color = "#AAAAAA",
table.border.top.color = "#AAAAAA",
table.border.bottom.color = "#AAAAAA"
) %>%
tab_style(
style = cell_text(color = "white", weight = "bold"),
locations = cells_title(groups = c("title", "subtitle"))
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = list(cells_column_labels(), cells_grand_summary())
)| Tabla N. 1 | |||||
| Distribución de frecuencias por tipo de combustible — yacimientos de petróleo y gas | |||||
| N° | Tipo de Combustible | nᵢ | hᵢ (%) | Pᵢ | |
|---|---|---|---|---|---|
| 1 | oil and gas | 5,833 | 69.99 | 0.6999 | |
| 2 | gas | 1,237 | 14.84 | 0.1484 | |
| 3 | oil | 1,233 | 14.79 | 0.1479 | |
| 4 | gas and condensate | 31 | 0.37 | 0.0037 | |
| Total | — | — | 8,334 | 100.00 | 1.0000 |
| Autor: Grupo 5 | |||||
colores_comb <- c(
"oil and gas" = "#1A5276",
"gas" = "#1E8449",
"oil" = "#C0392B",
"gas and condensate" = "#D68910"
)
pie_label <- paste0("n = ", format(n, big.mark = ","),
" | Fuente: Global Energy Monitor — GOGET 2023")
tema_base <- theme_minimal(base_size = 12) +
theme(
legend.position = "none",
plot.title = element_text(face = "bold", size = 13),
plot.caption = element_text(color = "#888888", size = 9, hjust = 0),
axis.title = element_text(face = "bold", size = 11),
axis.text.x = element_text(face = "bold", angle = 20, hjust = 1),
panel.grid.major.x = element_blank(),
panel.grid.major.y = element_line(color = "#EEEEEE"),
panel.grid.minor = element_blank(),
plot.background = element_rect(fill = "white", color = NA)
)
comb_graf <- tabla_freq %>%
mutate(`Tipo de Combustible` = fct_reorder(`Tipo de Combustible`, ni))
ggplot(comb_graf, aes(x = `Tipo de Combustible`, y = ni, fill = `Tipo de Combustible`)) +
geom_col(width = 0.55, color = "white") +
geom_text(aes(label = format(ni, big.mark = ",")),
vjust = -0.4, size = 3.5, fontface = "bold") +
scale_fill_manual(values = colores_comb) +
scale_x_discrete(labels = function(x) str_wrap(x, width = 12)) +
scale_y_continuous(labels = label_comma(),
expand = expansion(mult = c(0, 0.12))) +
labs(title = "Gráfica N. 1: Distribución de yacimientos por tipo de combustible",
x = "Tipo de Combustible", y = "Frecuencia Absoluta (nᵢ)",
caption = pie_label) +
tema_baseggplot(comb_graf, aes(x = `Tipo de Combustible`, y = Pi, fill = `Tipo de Combustible`)) +
geom_col(width = 0.55, color = "white") +
geom_text(aes(label = paste0(round(Pi * 100, 2), "%")),
vjust = -0.4, size = 3.5, fontface = "bold") +
scale_fill_manual(values = colores_comb) +
scale_x_discrete(labels = function(x) str_wrap(x, width = 12)) +
scale_y_continuous(labels = percent_format(accuracy = 0.1),
expand = expansion(mult = c(0, 0.12))) +
labs(title = "Gráfica N. 2: Distribución de probabilidad (Pᵢ) por tipo de combustible",
x = "Tipo de Combustible", y = "Probabilidad estimada (Pᵢ)",
caption = pie_label) +
tema_baseSe seleccionan las tres categorías con mayor concentración de yacimientos (Combustibles Dominantes) para ajustar un Modelo Geométrico. La premisa es que la probabilidad de encontrar un yacimiento del tipo más explotado disminuye conforme la diversificación energética avanza, concentrando la mayor frecuencia en la primera categoría.
# ── Agrupación: Combustibles Dominantes (top 3 por frecuencia) ───────────────
top3 <- tabla_freq %>%
slice(1:3) %>%
mutate(valor = row_number() - 1) # X = 0, 1, 2 (Geométrica corrida a 0)
# Parámetro p del modelo geométrico: P(X=0) = p => p = Pi del más frecuente
p_geo <- top3$Pi[1]
# Frecuencias esperadas bajo modelo Geométrico: P(X=k) = p*(1-p)^k normalizado
top3 <- top3 %>%
mutate(
Pi_esp = p_geo * (1 - p_geo)^valor,
# Renormalizar sobre las 3 categorías
Pi_esp = Pi_esp / sum(Pi_esp),
ni_esp = Pi_esp * sum(ni)
)
cat("── Modelo Geométrico — Combustibles Dominantes ──\n")## ── Modelo Geométrico — Combustibles Dominantes ──
## Parámetro estimado p : 0.6999
## # A tibble: 3 × 5
## `Tipo de Combustible` valor ni Pi Pi_esp
## <chr> <dbl> <int> <dbl> <dbl>
## 1 oil and gas 0 5833 0.700 0.719
## 2 gas 1 1237 0.148 0.216
## 3 oil 2 1233 0.148 0.0648
r_geo <- cor(top3$Pi, top3$Pi_esp)
r_geo_pct <- round(r_geo * 100, 2)
cat("Test de Pearson (r) :", round(r_geo, 4), "\n")## Test de Pearson (r) : 0.9756
## Correlación (%) : 97.56 %
ggplot(top3, aes(x = Pi, y = Pi_esp)) +
geom_point(color = "#1A5276", size = 4) +
geom_smooth(method = "lm", se = FALSE, color = "red", linewidth = 0.8) +
labs(
title = "Gráfica N. 3: Correlación del Modelo Observado y Esperado\n(Combustibles Dominantes — Geométrico)",
x = "Frecuencia Observada",
y = "Frecuencia Esperada",
caption = pie_label
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold", size = 12, hjust = 0.5),
plot.background = element_rect(fill = "white", color = NA))chi_geo <- sum((top3$ni - top3$ni_esp)^2 / top3$ni_esp)
gl_geo <- nrow(top3) - 1 - 1 # k - 1 - parámetros estimados
umbral_geo <- qchisq(0.95, df = gl_geo)
resultado_geo <- chi_geo <= umbral_geo
cat("Chi-cuadrado calculado:", round(chi_geo, 4), "\n")## Chi-cuadrado calculado: 1073.65
## Umbral de aceptación (α=0.05, gl= 1 ): 3.8415
## Resultado (Chi ≤ Umbral): FALSE
data.frame(
Variable = "Combustibles Dominantes",
Modelo = "Geométrico",
`Test Pearson (%)` = r_geo_pct,
`Chi Cuadrado` = round(chi_geo, 4),
`Umbral Aceptación` = round(umbral_geo, 4),
Resultado = resultado_geo,
check.names = FALSE
) %>%
gt() %>%
tab_header(
title = md("**Tabla N. 2 — Resumen del Test de Bondad al Modelo Geométrico**")
) %>%
tab_source_note("Autor: Grupo 5") %>%
tab_options(
table.width = pct(85),
table.font.size = px(13),
table.font.names = "Arial",
heading.align = "center",
heading.title.font.size = px(14),
heading.background.color = "#AAAAAA",
column_labels.font.weight = "bold",
column_labels.background.color = "#FFFFFF",
column_labels.border.top.color = "#AAAAAA",
column_labels.border.bottom.color = "#AAAAAA",
table.border.top.color = "#AAAAAA",
table.border.bottom.color = "#AAAAAA"
) %>%
tab_style(
style = cell_text(color = "white", weight = "bold"),
locations = cells_title(groups = "title")
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
)| Tabla N. 2 — Resumen del Test de Bondad al Modelo Geométrico | |||||
| Variable | Modelo | Test Pearson (%) | Chi Cuadrado | Umbral Aceptación | Resultado |
|---|---|---|---|---|---|
| Combustibles Dominantes | Geométrico | 97.56 | 1073.65 | 3.8415 | FALSE |
| Autor: Grupo 5 | |||||
top3_long <- rbind(
data.frame(`Tipo de Combustible` = top3$`Tipo de Combustible`, Tipo = "Observado", Proporcion = top3$Pi, check.names = FALSE),
data.frame(`Tipo de Combustible` = top3$`Tipo de Combustible`, Tipo = "Esperado", Proporcion = top3$Pi_esp, check.names = FALSE)
)
ggplot(top3_long, aes(x = `Tipo de Combustible`, y = Proporcion, fill = Tipo)) +
geom_col(position = "dodge", width = 0.6, color = "white") +
geom_text(aes(label = round(Proporcion, 3)),
position = position_dodge(width = 0.6),
vjust = -0.4, size = 3.2, fontface = "bold") +
scale_fill_manual(values = c("Observado" = "#AED6F1", "Esperado" = "#1A5276")) +
scale_x_discrete(labels = function(x) str_wrap(x, width = 14)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
labs(
title = "Gráfica N. 4: Comparado de lo Observado frente a lo Esperado (Geométrico)",
x = "Tipo de Combustible",
y = "Porcentaje (%)",
fill = NULL,
caption = pie_label
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 12, hjust = 0.5),
legend.position = "top",
plot.background = element_rect(fill = "white", color = NA)
)# ¿Cuál es la probabilidad de que un yacimiento seleccionado al azar pertenezca
# al tipo de combustible más frecuente dentro del bloque de Combustibles Dominantes?
prob_geo <- top3$Pi_esp[1]
cat(sprintf("La probabilidad estimada para el tipo '%s' es de: %.2f%%\n",
top3$`Tipo de Combustible`[1], prob_geo * 100))## La probabilidad estimada para el tipo 'oil and gas' es de: 71.93%
Se seleccionan las tres categorías con menor frecuencia (Combustibles Emergentes) para ajustar un Modelo Binomial. Se define como “éxito” que un yacimiento pertenezca al tipo de combustible menos frecuente dentro del grupo, y se modela el número de éxitos en n ensayos independientes.
Nota: dado que el dataset solo contiene 4 categorías en total, el bloque de Combustibles Emergentes agrupa las 3 categorías de menor frecuencia, solapándose parcialmente con el bloque anterior. Esto es coherente con el análisis cuando el número de categorías es reducido.
# ── Agrupación: Combustibles Emergentes (últimas 3 categorías) ───────────────
bottom3 <- tabla_freq %>%
arrange(ni) %>%
slice(1:3) %>%
arrange(desc(ni)) %>%
mutate(valor = row_number() - 1)
# Parámetro p del modelo binomial: probabilidad de "éxito" (tipo base)
p_bin <- bottom3$Pi[nrow(bottom3)] # Pi del menos frecuente
n_bin <- nrow(bottom3) # número de categorías como tamaño n
# Frecuencias esperadas bajo Binomial: P(X=k) = C(n,k)*p^k*(1-p)^(n-k)
bottom3 <- bottom3 %>%
mutate(
Pi_esp = choose(n_bin, valor) * p_bin^valor * (1 - p_bin)^(n_bin - valor),
Pi_esp = Pi_esp / sum(Pi_esp),
ni_esp = Pi_esp * sum(ni)
)
cat("── Modelo Binomial — Combustibles Emergentes ──\n")## ── Modelo Binomial — Combustibles Emergentes ──
## Parámetro estimado p : 0.0037
## Tamaño n de ensayos : 3
## # A tibble: 3 × 5
## `Tipo de Combustible` valor ni Pi Pi_esp
## <chr> <dbl> <int> <dbl> <dbl>
## 1 gas 0 1237 0.148 0.989
## 2 oil 1 1233 0.148 0.0111
## 3 gas and condensate 2 31 0.00372 0.0000414
r_bin <- cor(bottom3$Pi, bottom3$Pi_esp)
r_bin_pct <- round(r_bin * 100, 2)
cat("Test de Pearson (r) :", round(r_bin, 4), "\n")## Test de Pearson (r) : 0.5109
## Correlación (%) : 51.09 %
ggplot(bottom3, aes(x = Pi, y = Pi_esp)) +
geom_point(color = "#1E8449", size = 4) +
geom_smooth(method = "lm", se = FALSE, color = "red", linewidth = 0.8) +
labs(
title = "Gráfica N. 5: Correlación del Modelo Observado y Esperado\n(Combustibles Emergentes — Binomial)",
x = "Frecuencia Observada",
y = "Frecuencia Esperada",
caption = pie_label
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold", size = 12, hjust = 0.5),
plot.background = element_rect(fill = "white", color = NA))chi_bin <- sum((bottom3$ni - bottom3$ni_esp)^2 / bottom3$ni_esp)
gl_bin <- nrow(bottom3) - 1 - 1
umbral_bin <- qchisq(0.95, df = gl_bin)
resultado_bin <- chi_bin <= umbral_bin
cat("Chi-cuadrado calculado:", round(chi_bin, 4), "\n")## Chi-cuadrado calculado: 62290.03
## Umbral de aceptación (α=0.05, gl= 1 ): 3.8415
## Resultado (Chi ≤ Umbral): FALSE
data.frame(
Variable = "Combustibles Emergentes",
Modelo = "Binomial",
`Test Pearson (%)` = r_bin_pct,
`Chi Cuadrado` = round(chi_bin, 4),
`Umbral Aceptación` = round(umbral_bin, 4),
Resultado = resultado_bin,
check.names = FALSE
) %>%
gt() %>%
tab_header(
title = md("**Tabla N. 3 — Resumen del Test de Bondad al Modelo Binomial**")
) %>%
tab_source_note("Autor: Grupo 5") %>%
tab_options(
table.width = pct(85),
table.font.size = px(13),
table.font.names = "Arial",
heading.align = "center",
heading.title.font.size = px(14),
heading.background.color = "#AAAAAA",
column_labels.font.weight = "bold",
column_labels.background.color = "#FFFFFF",
column_labels.border.top.color = "#AAAAAA",
column_labels.border.bottom.color = "#AAAAAA",
table.border.top.color = "#AAAAAA",
table.border.bottom.color = "#AAAAAA"
) %>%
tab_style(
style = cell_text(color = "white", weight = "bold"),
locations = cells_title(groups = "title")
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_column_labels()
)| Tabla N. 3 — Resumen del Test de Bondad al Modelo Binomial | |||||
| Variable | Modelo | Test Pearson (%) | Chi Cuadrado | Umbral Aceptación | Resultado |
|---|---|---|---|---|---|
| Combustibles Emergentes | Binomial | 51.09 | 62290.03 | 3.8415 | FALSE |
| Autor: Grupo 5 | |||||
bottom3_long <- rbind(
data.frame(`Tipo de Combustible` = bottom3$`Tipo de Combustible`, Tipo = "Observado", Proporcion = bottom3$Pi, check.names = FALSE),
data.frame(`Tipo de Combustible` = bottom3$`Tipo de Combustible`, Tipo = "Esperado", Proporcion = bottom3$Pi_esp, check.names = FALSE)
)
ggplot(bottom3_long, aes(x = `Tipo de Combustible`, y = Proporcion, fill = Tipo)) +
geom_col(position = "dodge", width = 0.6, color = "white") +
geom_text(aes(label = round(Proporcion, 3)),
position = position_dodge(width = 0.6),
vjust = -0.4, size = 3.2, fontface = "bold") +
scale_fill_manual(values = c("Observado" = "#A9DFBF", "Esperado" = "#1E8449")) +
scale_x_discrete(labels = function(x) str_wrap(x, width = 14)) +
scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
labs(
title = "Gráfica N. 6: Comparado de lo Observado frente a lo Esperado (Binomial)",
x = "Tipo de Combustible",
y = "Porcentaje (%)",
fill = NULL,
caption = pie_label
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 12, hjust = 0.5),
legend.position = "top",
plot.background = element_rect(fill = "white", color = NA)
)# ¿Cuál es la probabilidad de que un nuevo yacimiento pertenezca
# al tipo de combustible base (menos frecuente) dentro del bloque de Combustibles Emergentes?
prob_bin <- bottom3$Pi_esp[nrow(bottom3)]
cat(sprintf("La probabilidad estimada para el tipo '%s' es de: %.2f%%\n",
bottom3$`Tipo de Combustible`[nrow(bottom3)], prob_bin * 100))## La probabilidad estimada para el tipo 'gas and condensate' es de: 0.00%