Variable Original: Production Start Year


1 Cargar Librerías

Para el procesamiento del año de inicio de producción de los yacimientos mundiales de hidrocarburos, se cargan las librerías necesarias.

library(dplyr)
library(ggplot2)
library(knitr)
library(kableExtra)
library(readxl)
library(e1071)

2 Carga de Datos

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.

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

3 Selección de variable aleatoria

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
cat("Primeros 10 valores:", head(production_year, 10), "\n")
## Primeros 10 valores: 1951 2009 1969 1979 1987 1998 1981 2005 1985 2002

4 Tabla de Distribución de Frecuencias

Se construye la tabla de frecuencias agrupando los inicios de producción en seis períodos, ordenados del más antiguo al más reciente.

periodo <- cut(
  production_year,
  breaks = c(-Inf, 1949, 1974, 1994, 2009, 2019, Inf),
  labels = c(
    "[1896-1949]",
    "[1950-1974]",
    "[1975-1994]",
    "[1995-2009]",
    "[2010-2019]",
    "[2020-2027]"
  )
)

tabla_periodos <- as.data.frame(table(periodo))
colnames(tabla_periodos) <- c("Periodo", "ni")

# Orden ascendente natural (más antiguo → más reciente)
rownames(tabla_periodos) <- NULL
tabla_periodos$Periodo <- factor(tabla_periodos$Periodo, levels = tabla_periodos$Periodo)

tabla_periodos <- tabla_periodos %>%
  mutate(`hi (%)` = round(ni / sum(ni) * 100, 2))

tabla_mostrar <- tabla_periodos
tabla_mostrar$`hi (%)` <- paste0(tabla_mostrar$`hi (%)`, "%")

fila_total <- data.frame(
  Periodo = "Total",
  ni = sum(tabla_periodos$ni),
  `hi (%)` = "100%",
  check.names = FALSE
)

tabla_mostrar <- rbind(tabla_mostrar, fila_total)

kable(tabla_mostrar, align = "c", caption = "Tabla de Frecuencias por Período (orden antiguo → reciente) — 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_mostrar), bold = TRUE, background = "#f2f2f2")
Tabla de Frecuencias por Período (orden antiguo → reciente) — Production Start Year
Periodo ni hi (%)
[1896-1949] 31 1.59%
[1950-1974] 243 12.48%
[1975-1994] 411 21.11%
[1995-2009] 622 31.95%
[2010-2019] 495 25.42%
[2020-2027] 145 7.45%
Total 1947 100%

5 Gráfica de Distribución de Frecuencia

df_periodos <- data.frame(
  Periodo = tabla_periodos$Periodo,
  Porcentaje = tabla_periodos$`hi (%)`
)

ggplot(df_periodos, aes(x = Periodo, y = Porcentaje)) +
  geom_bar(stat = "identity", fill = "#add8e6", color = "#2980b9", width = 0.6) +
  scale_y_continuous(breaks = seq(0, 40, by = 10)) +
  labs(
    title = "Gráfica No 1: Distribución por período de inicio de producción",
    x = "Año de Inicio de Producción",
    y = "Porcentaje",
    caption = "Fuente: Dataset Mundial de Petróleo y Gas"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    axis.text.x = element_text(angle = 20, hjust = 1)
  )


6 Conjetura

El decaimiento sostenido de la frecuencia sugiere una distribución Geométrica,

7 Parámetros

CÁLCULO DEL PARÁMETRO DEL MODELO GEOMÉTRICO

# x = 5 corresponde al período más antiguo (primera fila), x = 0 al más reciente (última fila)
x_mapped <- 5:0
p_s_data <- tabla_periodos$`hi (%)` / 100

# Esperanza matemática (media) de la variable mapeada
media_x <- sum(x_mapped * p_s_data)

# Parámetro del modelo geométrico: p = 1 / (1 + E[X])
prob_geom <- 1 / (1 + media_x)

cat("Media =", round(media_x, 4), "\n")
## Media = 2.1052
cat("Parámetro del modelo geométrico (p) =", round(prob_geom, 4), "\n")
## Parámetro del modelo geométrico (p) = 0.322

8 Sobreposición de la realidad con el modelo

El siguiente gráfico compara las frecuencias relativas observadas por período con las probabilidades teóricas del modelo Geométrico ajustado, permitiendo evaluar visualmente qué tan bien se ajusta el modelo a los datos reales de inicio de producción.

esperada_normal <- dgeom(0:4, prob = prob_geom)
esperada_cola   <- 1 - pgeom(4, prob = prob_geom)
hi_modelo <- c(esperada_cola, rev(esperada_normal)) * 100   # antiguo → reciente, igual que la tabla

df_comparacion <- data.frame(
  Periodo = rep(tabla_periodos$Periodo, 2),
  Porcentaje = c(tabla_periodos$`hi (%)`, hi_modelo),    # ambas series en porcentaje
  Tipo = rep(c("Realidad", "Modelo Geométrico"), each = nrow(tabla_periodos))
)
df_comparacion$Periodo <- factor(df_comparacion$Periodo, levels = tabla_periodos$Periodo)

ggplot(df_comparacion, aes(x = Periodo, y = Porcentaje, fill = Tipo)) +
  geom_bar(stat = "identity", position = "dodge",
           color = "#2980b9", width = 0.6, alpha = 0.9) +
  scale_y_continuous(breaks = seq(0, 40, by = 10)) +
  scale_fill_manual(values = c("Realidad" = "#add8e6", "Modelo Geométrico" = "#1a5276")) +
  labs(
    title = "Gráfica No 2: Relación entre el modelo geométrico y la realidad",
    x = "Año de Inicio de Producción",
    y = "Porcentaje",
    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),
    axis.text.x = element_text(angle = 20, hjust = 1)
  )


9 Test de Bondad

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 Geométrico propuesto.

ni_vec <- tabla_periodos$ni
N_total <- sum(ni_vec)
P_teorica <- c(esperada_cola, rev(esperada_normal))

fe_pearson <- N_total * P_teorica
pearson_r  <- round(cor(ni_vec, fe_pearson) * 100, 2)

fo <- ni_vec / N_total
fe <- P_teorica
chi2_calc <- round(sum((fo - fe)^2 / fe), 4)
gl        <- length(ni_vec) - 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)
CUADRO N°2 Indicadores de Ajuste Estadístico de la Prueba de Bondad
Métrica de Evaluación Resultado Obtenido
Correlación de Pearson (%) -15.1 %
Chi-Cuadrado Calculado (X²) 0.6775
Valor Crítico en Tabla (vc) gl = 5 α = 0.05 11.0705
Resultado de Validación ESTADO DEL MODELO: APRUEBA

10 Cálculo de probabilidades

prob_fuera_reciente <- 1 - dgeom(0, prob = prob_geom)

cat(
  "Probabilidad de que un yacimiento haya iniciado producción antes del período 2020-2027:",
  round(prob_fuera_reciente * 100, 2),
  "%\n"
)
## Probabilidad de que un yacimiento haya iniciado producción antes del período 2020-2027: 67.8 %

11 Intervalo de confianza

media_anio <- mean(production_year)
sd_anio    <- sd(production_year)
n_anio     <- length(production_year)

z_critico <- qnorm(0.975)
error_est <- z_critico * sd_anio / sqrt(n_anio)

li_anio <- round(media_anio - error_est, 0)
ls_anio <- round(media_anio + error_est, 0)

tabla_ic <- data.frame(
  `Métrica` = c(
    "Media estimada del año de inicio",
    "Desviación estándar",
    "Tamaño de muestra (n)",
    "Nivel de confianza",
    "Límite inferior (LI)",
    "Límite superior (LS)"
  ),
  `Valor` = c(
    round(media_anio, 2),
    round(sd_anio, 2),
    n_anio,
    "95%",
    li_anio,
    ls_anio
  ),
  check.names = FALSE
)

kable(tabla_ic, align = "c", caption = "Intervalo de Confianza del 95% para la media del año de inicio de producción") %>%
  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)
Intervalo de Confianza del 95% para la media del año de inicio de producción
Métrica Valor
Media estimada del año de inicio 1997.75
Desviación estándar 19.39
Tamaño de muestra (n) 1947
Nivel de confianza 95%
Límite inferior (LI) 1997
Límite superior (LS) 1999
cat("\n\nCon un 95% de confianza, la verdadera media del año de inicio de producción se encuentra entre", li_anio, "y", ls_anio, ".\n")
## 
## 
## Con un 95% de confianza, la verdadera media del año de inicio de producción se encuentra entre 1997 y 1999 .

12 Conclusión

El comportamiento de la variable “Año de Inicio de Producción” se explica con un modelo Geométrico de parametros media=2.1053 y p=0.322. 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 [1999 ; 1997] y una desviación estandar de 2.55.