INTRODUCCIÓN

Este estudio analiza la Fecha de Término de Perforación de pozos petrolíferos en Brasil (1920–2018) mediante estadística inferencial para evaluar el dinamismo histórico exploratorio y modelar la probabilidad de proyectos hidrocarburíferos.

1 _ Librerías

Carga de paquetes

library(readxl)
library(dplyr)
library(gt)
library(e1071)
library(lubridate)

2 _ Carga Datos

Importación del archivo

setwd("~/SEGUNDO SEMESTRE/SEGUNDO SEMESTRE")
Datos_Brutos <- read.csv(  
  "tabela_de_pocos_janeiro_2018.csv",  
  header        = TRUE,  
  sep           = ",",  
  quote         = "\"",
  dec           = ".",  
  fileEncoding  = "Latin1",
  fill          = TRUE
)

3 _ Variables

Filtrado de fechas

Datos <- Datos_Brutos %>%
  mutate(
    Fecha_Limpieza = trimws(as.character(TERMINO)),
    Fecha_Obj = if_else(
      grepl("-", Fecha_Limpieza),
      as.Date(Fecha_Limpieza, format = "%Y-%m-%d"),
      as.Date(Fecha_Limpieza, format = "%d/%m/%Y")
    ),
    Anio_Exacto = year(Fecha_Obj)
  ) %>%
  filter(!is.na(Anio_Exacto) & Anio_Exacto > 1900) %>%
  mutate(
    Decada_Termino = floor(Anio_Exacto / 10) * 10,
    Periodo        = paste0(Decada_Termino, " - ", Decada_Termino + 9)
  )

Variable_Exacta <- Datos$Anio_Exacto  
Variable_Clases <- Datos$Periodo       
Variable_Orden  <- Datos$Decada_Termino

if(length(Variable_Exacta) == 0) {
  stop("ERROR: No hay datos válidos. Revisa si la columna en el CSV se llama exactamente 'TERMINO'.")
}
cat("Rango de años:", min(Variable_Exacta), "–", max(Variable_Exacta), "\n")
## Rango de años: 1922 – 2017

4 _ Conteo

df_calc <- data.frame(Periodo = Variable_Clases, Orden = Variable_Orden)

TDF_Raw <- df_calc %>%
  group_by(Orden, Periodo) %>%
  summarise(ni = n(), .groups = "drop") %>%
  arrange(Orden)  

# Cálculo de todas las frecuencias
ni      <- TDF_Raw$ni
N       <- sum(ni)
hi      <- (ni / N) * 100

Ni_asc  <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_asc  <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))

# Tabla consolidada
TDF_Decadas <- data.frame(
  Periodo  = TDF_Raw$Periodo,
  ni       = ni,
  hi       = round(hi, 2),
  Ni_asc   = Ni_asc,
  Ni_desc  = Ni_desc,
  Hi_asc   = round(Hi_asc, 2),
  Hi_desc  = round(Hi_desc, 2)
)

5 _ Tabla

Tabla de Distribución por Décadas

# 1. Convertimos todo TDF_Decadas a texto (character) para que acepte los guiones "—"
totales <- c("TOTAL", sum(ni), round(sum(hi), 2), "—", "—", "—", "—")

TDF_Char <- TDF_Decadas %>% mutate(across(everything(), as.character))
TDF_Show <- rbind(TDF_Char, totales)

TDF_Show %>%
  gt() %>%
  tab_header(
    title    = md("**DISTRIBUCIÓN DE FRECUENCIAS POR DÉCADAS**"),
    subtitle = md("Variable: **Año de Término de Perforación** | Fuente: Tabela de Poços 2018")
  ) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
  cols_label(
    Periodo = "Período (Década)",
    ni      = md("Frec. Abs. (*n*ᵢ)"),
    hi      = md("Frec. Rel. (*h*ᵢ %)"),
    Ni_asc  = md("Frec. Acum. Asc. (*N*ᵢ↑)"),
    Ni_desc = md("Frec. Acum. Desc. (*N*ᵢ↓)"),
    Hi_asc  = md("% Acum. Asc. (*H*ᵢ↑)"),
    Hi_desc = md("% Acum. Desc. (*H*ᵢ↓)")
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style     = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
    locations = cells_title()
  ) %>%
  tab_style(
    style     = list(cell_fill(color = "#2E4053"), cell_text(color = "white", weight = "bold")),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style     = list(cell_fill(color = "#D5D8DC"), cell_text(weight = "bold")),
    locations = cells_body(rows = nrow(TDF_Show))  # Fila TOTAL
  ) %>%
  tab_options(
    table.border.top.color        = "#2E4053",
    table.border.bottom.color     = "#2E4053",
    column_labels.border.bottom.color = "#2E4053",
    data_row.padding              = px(6)
  )
DISTRIBUCIÓN DE FRECUENCIAS POR DÉCADAS
Variable: Año de Término de Perforación | Fuente: Tabela de Poços 2018
Período (Década) Frec. Abs. (nᵢ) Frec. Rel. (hᵢ %) Frec. Acum. Asc. (Nᵢ↑) Frec. Acum. Desc. (Nᵢ↓) % Acum. Asc. (Hᵢ↑) % Acum. Desc. (Hᵢ↓)
1920 - 1929 2 0.01 2 27729 0.01 100
1930 - 1939 4 0.01 6 27727 0.02 99.99
1940 - 1949 188 0.68 194 27723 0.7 99.98
1950 - 1959 818 2.95 1012 27535 3.65 99.3
1960 - 1969 2427 8.75 3439 26717 12.4 96.35
1970 - 1979 2523 9.1 5962 24290 21.5 87.6
1980 - 1989 9538 34.4 15500 21767 55.9 78.5
1990 - 1999 3663 13.21 19163 12229 69.11 44.1
2000 - 2009 3941 14.21 23104 8566 83.32 30.89
2010 - 2019 4625 16.68 27729 4625 100 16.68
TOTAL 27729 100
Autor: Ashly Alzate

Análisis Gráfico

#Gráficos de Barras — Frecuencia Absoluta

#Escala Local


par(mar = c(10, 5, 4, 2))

bp <- barplot(
  vals_y,
  main      = "Gráfica N°1: Distribución de Fecha de Término de Pozos Petroleros de Brasil\n(Escala local — máximo ajustado a los datos)",
  cex.main  = 0.78,
  ylab      = "Cantidad de Pozos Finalizados",
  col       = col_barra,
  border    = "white",
  axes      = FALSE,
  ylim      = c(0, max(vals_y) * 1.1),
  axisnames = FALSE
)

axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp, labels = vals_x, col = col_ejes, col.axis = col_ejes, las = 2, cex.axis = 0.8)
title(xlab = "Década", line = 8)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
box(bty = "l", col = col_ejes)

Escala Global

par(mar = c(10, 5, 4, 2))

bp2 <- barplot(
  vals_y,
  main      = "Gráfica N°2: Distribución de Fecha de Término de Pozos Petroleros de Brasil\n(Escala global — eje Y hasta el total N)",
  cex.main  = 0.78,
  ylab      = "Cantidad de Pozos Finalizados",
  col       = col_barra,
  border    = "white",
  axes      = FALSE,
  ylim      = c(0, N),
  axisnames = FALSE
)

axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp2, labels = vals_x, col = col_ejes, col.axis = col_ejes, las = 2, cex.axis = 0.8)
title(xlab = "Década", line = 8)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
box(bty = "l", col = col_ejes)

Análisis Gráfico

#Gráficos de Barras — Frecuencia Porcentual
#Escala Loca


par(mar = c(10, 5, 4, 2))

bp3 <- barplot(
  vals_y_pct,
  main      = "Gráfica N°3: Distribución Porcentual de Fecha de Término de Pozos Petroleros de Brasil\n(Escala local — máximo ajustado al porcentaje mayor)",
  cex.main  = 0.78,
  ylab      = "Porcentaje del Total (%)",
  col       = col_barra,
  border    = "white",
  axes      = FALSE,
  ylim      = c(0, max(vals_y_pct) * 1.2),
  axisnames = FALSE
)

axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp3, labels = vals_x, col = col_ejes, col.axis = col_ejes, las = 2, cex.axis = 0.8)
text(x = bp3, y = vals_y_pct, label = paste0(round(vals_y_pct, 1), "%"),
     pos = 3, cex = 0.7, col = col_ejes)
title(xlab = "Década", line = 8)
grid(nx = NA, ny = NULL, col = "#D7DBDD", lty = "dotted")
box(bty = "l", col = col_ejes)

Escala Global

par(mar = c(10, 5, 4, 2))

bp4 <- barplot(
  vals_y_pct,
  main      = "Gráfica N°4: Distribución Porcentual de Fecha de Término de Pozos Petroleros de Brasil\n(Escala global — eje Y de 0% a 100%)",
  cex.main  = 0.78,
  ylab      = "Porcentaje del Total (%)",
  col       = col_barra,
  border    = "white",
  axes      = FALSE,
  ylim      = c(0, 100),
  axisnames = FALSE
)

axis(2, col = col_ejes, col.axis = col_ejes)
axis(1, at = bp4, labels = vals_x, col = col_ejes, col.axis = col_ejes, las = 2, cex.axis = 0.8)
text(x = bp4, y = vals_y_pct, label = paste0(round(vals_y_pct, 1), "%"),
     pos = 3, cex = 0.7, col = col_ejes)
title(xlab = "Década", line = 8)
abline(h = seq(0, 100, 20), col = "#D7DBDD", lty = "dotted")
box(bty = "l", col = col_ejes)

Diagrama de Caja

par(mar = c(7, 5, 5, 2))

boxplot(
  Variable_Exacta,
  horizontal  = TRUE,
  col         = col_barra,
  main        = "Gráfica N°5: Diagrama de Caja — Año Exacto de Término\nPozos Petroleros de Brasil",
  cex.main    = 0.82,
  xlab        = "",
  outline     = TRUE,
  outpch      = 19,
  outcol      = col_rojo,
  boxwex      = 0.5,
  frame.plot  = FALSE,
  xaxt        = "n"
)

eje_x <- pretty(Variable_Exacta, n = 8)
axis(1, at = eje_x, labels = format(eje_x, scientific = FALSE),
     cex.axis = 0.8, col = col_ejes, col.axis = col_ejes)
title(xlab = "Año Exacto de Término", line = 4)
grid(nx = NULL, ny = NA, col = "lightgray", lty = "dotted")

Lectura del boxplot: La caja concentra el 50% central de los datos (entre el Q1 y Q3). La línea interior marca la mediana. Los puntos rojos representan valores atípicos —pozos finalizados entre 1922 y mediados de los años 1940— que pertenecen al período pionero de la industria petrolera brasileña y no son errores de datos, sino observaciones históricamente válidas.

Ojivas Acomuladas

par(mar = c(10, 5, 4, 8), xpd = TRUE)

y_asc  <- TDF_Decadas$Ni_asc
y_desc <- TDF_Decadas$Ni_desc

plot(
  vals_x_num, y_asc,
  type     = "o",
  col      = col_azul,
  lwd      = 2,
  pch      = 19,
  main     = "Gráfica N°6: Ojivas Ascendente y Descendente Acumuladas por Décadas\nFecha de Término — Pozos Petroleros de Brasil",
  cex.main = 0.75,
  ylab     = "Frecuencia Acumulada (Nᵢ)",
  xlab     = "",
  axes     = FALSE,
  frame.plot = FALSE
)

lines(vals_x_num, y_desc, type = "o", col = col_rojo, lwd = 2, pch = 19)

axis(1, at = vals_x_num, labels = TDF_Decadas$Periodo,
     las = 2, cex.axis = 0.8, col = col_ejes, col.axis = col_ejes)
axis(2, col = col_ejes, col.axis = col_ejes)
title(xlab = "Década", line = 8)

legend(
  "right",
  legend = c("Ojiva Ascendente", "Ojiva Descendente"),
  col    = c(col_azul, col_rojo),
  lty    = 1, pch = 19, cex = 0.75, lwd = 2,
  inset  = c(-0.18, 0), bty = "n"
)

grid()

Cálculo de Medidas Resumen

media_val    <- mean(Variable_Exacta)
mediana_val  <- median(Variable_Exacta)


t_moda       <- table(Variable_Exacta)
freq_max     <- max(t_moda)
modas_calc   <- as.numeric(names(t_moda)[t_moda == freq_max])
moda_txt     <- paste(modas_calc, collapse = ", ")

varianza_val <- var(Variable_Exacta)
sd_val       <- sd(Variable_Exacta)
cv_val <- (sd_val / abs(media_val)) * 100

# Asimetría: type = 2 → fórmula de Fisher (estándar académico)
# Negativa → cola izquierda (años más antiguos)
asimetria_val <- skewness(Variable_Exacta, type = 2)

# Curtosis: type = 2 → exceso de curtosis (0 = normal)
# Positivo = leptocúrtica; Negativo = platicúrtica
curtosis_val  <- kurtosis(Variable_Exacta, type = 2)

# Outliers por criterio de Tukey
vals_atipicos <- boxplot.stats(Variable_Exacta)$out
num_atipicos  <- length(vals_atipicos)
rango_atipicos <- if (num_atipicos > 0) {
  paste0(num_atipicos, " valores [",
         min(vals_atipicos), " – ", max(vals_atipicos), "]")
} else {
  "0 (Sin atípicos)"
}

rango_txt <- paste0("[", min(Variable_Exacta), "; ", max(Variable_Exacta), "]")

6 _ Indicadores

df_resumen <- data.frame(
  Variable  = "Año de Término (Exacto)",
  Rango     = rango_txt,
  Media     = media_val,
  Mediana   = mediana_val,
  Moda      = moda_txt,
  Varianza  = varianza_val,
  Desv_Std  = sd_val,
  CV_Porc   = cv_val,
  Asimetria = asimetria_val,
  Curtosis  = curtosis_val,
  Atipicos  = rango_atipicos
)


df_resumen %>%
  gt() %>%
  tab_header(
    title    = md("**CONCLUSIONES Y ESTADISTICOS**"),
    subtitle = md("Resumen de Indicadores del Año Exacto de Termino de los Pozos Petrolíferos en Brasil")
  ) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
fmt_number(
  columns  = c(Media, Mediana, Varianza, Desv_Std, CV_Porc),
  decimals = 2
) %>%
fmt_number(
  columns  = c(Asimetria, Curtosis),
  decimals = 4
) %>%
cols_label(
  Variable  = "Variable",
  Rango     = "Rango [Mín; Máx]",
  Media     = md("Media (X̄)"),
  Mediana   = "Mediana (Me)",
  Moda      = "Moda (Mo)",
  Varianza  = md("Varianza (S²)"),
  Desv_Std  = "Desv. Est. (S)",
  CV_Porc   = "C.V. (%)",
  Asimetria = md("Asimetría (As)"),
  Curtosis  = "Curtosis (K)",
  Atipicos  = "Outliers"
) %>%
  tab_spanner(
    label   = "Tendencia Central",
    columns = c(Media, Mediana, Moda)
  ) %>%
  tab_spanner(
    label   = "Forma",
    columns = c(Asimetria, Curtosis)
  ) %>%
  tab_options(
    column_labels.background.color    = "#2E4053",
    table.border.top.color            = "black",
    table.border.bottom.color         = "#2E4053",
    column_labels.border.bottom.color = "#2E4053",
    data_row.padding                  = px(8)
  ) %>%
  tab_style(
    style     = list(cell_text(weight = "bold", color = "white")),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style     = list(cell_text(weight = "bold", color = "white")),
    locations = cells_column_spanners()
  )
CONCLUSIONES Y ESTADISTICOS
Resumen de Indicadores del Año Exacto de Termino de los Pozos Petrolíferos en Brasil
Variable Rango [Mín; Máx]
Tendencia Central
Varianza (S²) Desv. Est. (S) C.V. (%)
Forma
Outliers
Media (X̄) Mediana (Me) Moda (Mo) Asimetría (As) Curtosis (K)
Año de Término (Exacto) [1922; 2017] 1,989.81 1,987.00 1986 265.42 16.29 0.82 −0.2143 −0.5453 54 valores [1922 – 1943]
Autor: Ashly Alzate

7 _ Conclusión

Los valores de la variable Año de Término fluctúan entre 1922 y 2017 y giran en torno a la media de 1,989.81 (coincidente con la mediana de 1,987.00), con una desviación estándar de 16.29, con 54 valores atípicos identificados, siendo un conjunto de datos heterogéneo (C.V. = 0.82%), cuyos valores se agrupan fuertemente en la parte alta de la variable. Por lo anterior, el comportamiento es perjudicial.