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("[1896-1990]", "[1990-2019]", "[2019-2027]")
)
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), "%")
)
fila_total <- data.frame(
Época = "Total",
ni = sum(tabla_epocas$ni),
`hi (%)` = "100%",
check.names = FALSE
)
tabla_epocas <- rbind(tabla_epocas, fila_total)
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") %>%
row_spec(nrow(tabla_epocas), bold = TRUE, background = "#f2f2f2")| Época | ni | hi (%) |
|---|---|---|
| [1896-1990] | 536 | 27.53% |
| [1990-2019] | 1266 | 65.02% |
| [2019-2027] | 145 | 7.45% |
| Total | 1947 | 100% |
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("[1896-1990]", "[1990-2019]", "[2019-2027]")
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.
CÁLCULO DE LOS PARÁMETROS DEL MODELO BINOMIAl
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)
freq_obs_tabla <- freq_obs_tabla[freq_obs_tabla$x_Index != 0, ]
rownames(freq_obs_tabla) <- NULL
print(freq_obs_tabla[, c("x_Index", "Media", "Prob_Binomial")])## x_Index Media Prob_Binomial
## 1 1 0.75 0.1406
## 2 2 0.75 0.4219
## 3 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 (%) | 50 % |
| Chi-Cuadrado Calculado (X²) | 2.7139 |
| Valor Crítico en Tabla (vc) gl = 1 α = 0.05 | 3.8415 |
| Resultado de Validación | ESTADO DEL MODELO: APRUEBA |
Calculadora de probabilidad binomial con los datos de tu modelo
Probabilidad de exactamente 2 éxitos
–
n_trials <- total_grupos * n_param
z_critico <- qnorm(0.975)
error_est <- z_critico * sqrt(p_mle * (1 - p_mle) / n_trials)
li_p <- round(p_mle - error_est, 4)
ls_p <- round(p_mle + error_est, 4)
tabla_ic <- data.frame(
`Métrica` = c(
"Proporción estimada (p_mle)",
"Tamaño de muestra (n)",
"Nivel de confianza",
"Límite inferior (LI)",
"Límite superior (LS)"
),
`Valor` = c(
round(p_mle, 4),
n_trials,
"95%",
li_p,
ls_p
),
check.names = FALSE
)
kable(tabla_ic, align = "c", caption = "Intervalo de Confianza del 95% para la proporción de éxito (p)") %>%
kable_styling(bootstrap_options = c("striped", "bordered"),
full_width = FALSE, position = "center") %>%
row_spec(0, bold = TRUE, background = "#d9d9d9") %>%
row_spec(nrow(tabla_ic), bold = TRUE)| Métrica | Valor |
|---|---|
| Proporción estimada (p_mle) | 0.75 |
| Tamaño de muestra (n) | 48 |
| Nivel de confianza | 95% |
| Límite inferior (LI) | 0.6275 |
| Límite superior (LS) | 0.8725 |
cat("\n\nCon un 95% de confianza, la verdadera proporción de yacimientos que iniciaron producción en la época de mayor auge se encuentra entre", li_p, "y", ls_p, ".\n")##
##
## Con un 95% de confianza, la verdadera proporción de yacimientos que iniciaron producción en la época de mayor auge se encuentra entre 0.6275 y 0.8725 .
El comportamiento de la variable “Año de Inicio de Producción” se explica con un modelo Binomial de parametros n=3 y p=0.75. Podemos afrimar con un 95% de confinza que la media aritmetica real de la variable Año de Inicio de Producción se encuentra entre [0.6275 ; 0.8725] y una desviación estandar de 0.75.