Para el procesamiento del año de inicio de producción de los yacimientos mundiales de hidrocarburos, se cargan las librerías necesarias. dplyr gestiona la manipulación de los registros productivos, readxl permite la lectura del dataset en formato Excel, mientras que knitr, kableExtra y e1071 estructuran los resultados y calculan los indicadores estadísticos.
Se carga el dataset mundial de extracción de petróleo y gas, conformado por 49,212 registros de campos, yacimientos y plantas extractivas distribuidas en distintos países. Para este análisis se trabaja con la variable que registra el año de inicio de operación comercial de cada unidad productiva.
datos <- read_excel("dataset_mundial_petro.xlsx")
cat("Dimensiones del dataset:", nrow(datos), "filas y", ncol(datos), "columnas\n")## Dimensiones del dataset: 49212 filas y 32 columnas
Se extrae la variable Production Start Year, que indica el año en que cada yacimiento de petróleo o gas inició formalmente su actividad extractiva comercial. Tras eliminar valores ausentes se obtienen 1,947 registros válidos que abarcan desde 1896 hasta 2027.
production_year <- as.numeric(datos$`Production start year`)
production_year <- production_year[!is.na(production_year)]
cat("Total de registros válidos:", length(production_year), "\n")## Total de registros válidos: 1947
## Primeros 10 valores: 1951 2009 1969 1979 1987 1998 1981 2005 1985 2002
Se construye la tabla de frecuencias agrupando los inicios de producción por épocas, incluyendo frecuencia absoluta y relativa, para visualizar la evolución histórica de la actividad extractiva mundial de hidrocarburos.
epoca_tabla <- cut(
production_year,
breaks = c(-Inf, 1989, 2019, Inf),
labels = c("Pre-1990", "1990-2019", "Post-2019")
)
tabla_epocas <- as.data.frame(table(epoca_tabla))
colnames(tabla_epocas) <- c("Época", "ni")
tabla_epocas <- tabla_epocas %>%
mutate(
`hi (%)` = paste0(round(ni / sum(ni) * 100, 2), "%")
)
kable(tabla_epocas, align = "c", caption = "Tabla de Frecuencias por Época — Production Start Year") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "bordered"),
full_width = FALSE,
position = "center") %>%
row_spec(0, bold = TRUE, background = "#d9d9d9", color = "black")| Época | ni | hi (%) |
|---|---|---|
| Pre-1990 | 536 | 27.53% |
| 1990-2019 | 1266 | 65.02% |
| Post-2019 | 145 | 7.45% |
Se observa que los inicios de producción se concentran en la era moderna (1990–2019), reflejando fielmente el comportamiento de la variable discreta en su conjunto. La probabilidad de éxito se define como la proporción de yacimientos que iniciaron producción en dicha época de boom productivo.
epocas <- c("Pre-1990", "1990-2019", "Post-2019")
frec_epocas <- c(
sum(production_year < 1990),
sum(production_year >= 1990 & production_year <= 2019),
sum(production_year > 2019)
)
p_exito <- frec_epocas[2] / length(production_year)
prob_epocas <- frec_epocas / length(production_year)
df_epocas <- data.frame(Epoca = epocas, Probabilidad = prob_epocas)
ggplot(df_epocas, aes(x = Epoca, y = Probabilidad)) +
geom_bar(stat = "identity", fill = "#add8e6", color = "#2980b9", width = 0.5) +
labs(
title = "Gráfica No 1: Distribución por época de inicio de producción",
x = "Época",
y = "Probabilidad",
caption = "Fuente: Dataset Mundial de Petróleo y Gas"
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold", hjust = 0.5))Al observar el diagrama de barras, se aprecia que la época 1990–2019 concentra la mayor proporción de inicios de producción, con frecuencias menores en las épocas anteriores y posteriores. Con base en esta distribución visual, se conjetura que la variable Production Start Year puede modelarse mediante una distribución Binomial, donde el éxito representa que un yacimiento haya iniciado producción durante dicha época de boom productivo.
Alineación del cálculo probabilístico matemático discreto sobre los índices naturales asignados por R en su orden de procesamiento. Se define el experimento: en grupos de n=3 yacimientos seleccionados al azar, X representa el número de yacimientos que iniciaron producción en la época de mayor auge productivo (1990–2019), con probabilidad de éxito p estimada por máxima verosimilitud.
set.seed(123)
n_param <- 3
muestra <- sample(production_year, size = 50, replace = FALSE)
x_grupos <- sapply(seq(1, 48, by = 3), function(i) {
sum(muestra[i:(i+2)] >= 1990 & muestra[i:(i+2)] <= 2019)
})
freq_obs_tabla <- as.data.frame(table(factor(x_grupos, levels = 0:3)))
colnames(freq_obs_tabla) <- c("x_Index", "Freq_Obs")
freq_obs_tabla$x_Index <- as.numeric(as.character(freq_obs_tabla$x_Index))
total_grupos <- sum(freq_obs_tabla$Freq_Obs)
x_bar <- sum(freq_obs_tabla$x_Index * freq_obs_tabla$Freq_Obs) / total_grupos
p_mle <- x_bar / n_param
freq_obs_tabla$Media <- round(p_mle, 4)
freq_obs_tabla$Prob_Binomial <- round(dbinom(freq_obs_tabla$x_Index, n_param, p_mle), 4)
print(freq_obs_tabla[, c("x_Index", "Media", "Prob_Binomial")])## x_Index Media Prob_Binomial
## 1 0 0.75 0.0156
## 2 1 0.75 0.1406
## 3 2 0.75 0.4219
## 4 3 0.75 0.4219
El siguiente gráfico compara las frecuencias relativas observadas en la muestra con las probabilidades teóricas del modelo Binomial ajustado, permitiendo evaluar visualmente qué tan bien se ajusta el modelo a los datos reales de inicio de producción.
esp_frec <- freq_obs_tabla$Prob_Binomial * total_grupos
obs_frec <- freq_obs_tabla$Freq_Obs
df_comparacion <- data.frame(
x = rep(freq_obs_tabla$x_Index, 2),
Frecuencia = c(obs_frec / total_grupos, freq_obs_tabla$Prob_Binomial),
Tipo = rep(c("Realidad", "Modelo Binomial"), each = nrow(freq_obs_tabla))
)
ggplot(df_comparacion, aes(x = factor(x), y = Frecuencia, fill = Tipo)) +
geom_bar(stat = "identity", position = "dodge", alpha = 0.85) +
scale_fill_manual(values = c("Modelo Binomial" = "#1a5276", "Realidad" = "#add8e6")) +
labs(
title = "Gráfica No 2: Relación entre el modelo binomial y la realidad",
x = "Número de éxitos (x)",
y = "Probabilidad (y)",
fill = "",
caption = "Fuente: Dataset Mundial de Petróleo y Gas"
) +
theme_minimal(base_size = 12) +
theme(plot.title = element_text(face = "bold", hjust = 0.5))Se aplica la prueba Chi Cuadrado para evaluar si la distribución de los años de inicio de producción se ajusta al modelo Binomial propuesto. La correlación de Pearson mide la similitud entre las frecuencias observadas y esperadas, mientras que el estadístico Chi Cuadrado determina formalmente si el modelo es aceptado o rechazado.
obs_vec <- obs_frec
esp_vec <- freq_obs_tabla$Prob_Binomial * total_grupos
pearson_r <- round(cor(obs_vec, esp_vec) * 100, 2)
chi2_calc <- round(sum((obs_vec - esp_vec)^2 / esp_vec), 4)
gl <- nrow(freq_obs_tabla) - 1 - 1
vc <- round(qchisq(0.95, df = gl), 4)
resultado <- ifelse(chi2_calc < vc, "ESTADO DEL MODELO: APRUEBA", "ESTADO DEL MODELO: NO APRUEBA")
color_res <- ifelse(chi2_calc < vc, "#27ae60", "#e74c3c")
tabla_bondad <- data.frame(
`Métrica de Evaluación` = c(
"Correlación de Pearson (%)",
"Chi-Cuadrado Calculado (X²)",
paste0("Valor Crítico en Tabla (vc) gl = ", gl, " α = 0.05"),
"Resultado de Validación"
),
`Resultado Obtenido` = c(
paste0(pearson_r, " %"),
chi2_calc,
vc,
resultado
),
check.names = FALSE
)
kable(tabla_bondad, align = "c", caption = "CUADRO N°2\nIndicadores de Ajuste Estadístico de la Prueba de Bondad") %>%
kable_styling(bootstrap_options = c("striped", "bordered"),
full_width = FALSE, position = "center") %>%
row_spec(0, bold = TRUE, background = "#d9d9d9") %>%
row_spec(nrow(tabla_bondad), bold = TRUE, color = color_res)| Métrica de Evaluación | Resultado Obtenido |
|---|---|
| Correlación de Pearson (%) | 80.93 % |
| Chi-Cuadrado Calculado (X²) | 2.9635 |
| Valor Crítico en Tabla (vc) gl = 2 α = 0.05 | 5.9915 |
| Resultado de Validación | ESTADO DEL MODELO: APRUEBA |
PREGUNTA N 1: ¿Cuál es la probabilidad de que exactamente 2 de 3 yacimientos seleccionados al azar hayan iniciado producción en la época de mayor auge (1990–2019)?
PREGUNTA N 2: ¿Cuál es la probabilidad acumulada de que al menos 1 de 3 yacimientos pertenezca a la época de boom productivo?
p1 <- round(dbinom(2, n_param, p_mle) * 100, 2)
cat("Probabilidad de exactamente 2 éxitos en n=3:", p1, "%\n")## Probabilidad de exactamente 2 éxitos en n=3: 42.19 %
p2 <- round((1 - dbinom(0, n_param, p_mle)) * 100, 2)
cat("Probabilidad de al menos 1 éxito en n=3:", p2, "%\n")## Probabilidad de al menos 1 éxito en n=3: 98.44 %
Se construye el intervalo de confianza para la media poblacional (μ) del año de inicio de producción, con un nivel de confianza del 95%, utilizando la distribución t de Student dado el tamaño de la muestra.
nivel_confianza <- 0.95
n <- length(production_year)
media <- mean(production_year)
desv_est <- sd(production_year)
error_estandar <- desv_est / sqrt(n)
alfa <- 1 - nivel_confianza
t_critico <- qt(1 - alfa/2, df = n - 1)
li <- round(media - t_critico * error_estandar, 0)
ls <- round(media + t_critico * error_estandar, 0)
tabla_ic <- data.frame(
`Nivel de confianza` = paste0(nivel_confianza * 100, "%"),
`Intervalo de confianza de μ` = paste0(li, " < μ < ", ls),
`Desviación estándar` = round(desv_est, 2),
check.names = FALSE
)
kable(tabla_ic, align = "c",
caption = "Tabla N°2: Intervalo de confianza del año de inicio de producción de los yacimientos mundiales con un nivel de confianza del 95%") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "bordered"),
full_width = FALSE, position = "center") %>%
row_spec(0, bold = TRUE, background = "#2c3e50", color = "white") %>%
footnote(
footnote_as_chunk = TRUE,
title_format = c("italic", "bold")
)| Nivel de confianza | Intervalo de confianza de μ | Desviación estándar |
|---|---|---|
| 95% | 1997 < μ < 1999 | 19.39 |
La variable Año de Inicio de Produccion presenta un comportamiento que ha sido modelado con éxito mediante una Distribución Binomial, donde el éxito representa el inicio de producción durante la época de mayor auge productivo (1990–2019). Con una desviacion estandar de 19.39 años y con un 95% de confianza, lo que permite establecer previsiones productivas sólidas (μ = 1998 ± 1).