Introducción

Este estudio analiza la evolución temporal de los pozos petrolíferos en Brasil. La Variable Año de Conclusión de los pozos petrolíferos es de tipo ordinal, pero se convirtió en discreta al asignarle identificadores numéricos (Xi ) para facilitar el análisis probabilístico y la comparación con el modelo.

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(CONCLUSAO)),
    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_Concl = floor(Anio_Exacto / 10) * 10,
    Periodo      = paste0(Decada_Concl, " - ", Decada_Concl + 9)
  )

Variable_Exacta <- Datos$Anio_Exacto

if (length(Variable_Exacta) == 0) stop("ERROR: No hay datos válidos para CONCLUSIÓN.")

4 _ Conteo

df_calc <- data.frame(Periodo = Datos$Periodo, Orden = Datos$Decada_Concl)

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

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)))

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)
)
cat("Rango de años:", min(Variable_Exacta), "–", max(Variable_Exacta), "\n")
## Rango de años: 1922 – 2018

5 _ Tabla

Se presenta la distribución de pozos concluidos agrupada en intervalos de 10 años

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 POR DÉCADAS**"),
    subtitle = md("Variable: **Año de Conclusión**")
  ) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
  cols_label(
    Periodo = "Periodo (Década)",
    ni      = "Cant. Pozos (ni)",
    hi      = "Porcentaje (hi%)",
    Ni_asc  = "Ni (Asc)",
    Ni_desc = "Ni (Desc)",
    Hi_asc  = "Hi (Asc)",
    Hi_desc = "Hi (Desc)"
  ) %>%
  cols_align(align = "center", columns = everything()) %>%
  tab_style(
    style = list(
      cell_fill(color = "#2E4053"),
      cell_text(color = "white", weight = "bold")
    ),
    locations = cells_title(groups = c("title", "subtitle"))
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#F2F3F4"),
      cell_text(weight = "bold", color = "#2E4053")
    ),
    locations = cells_column_labels()
  ) %>%
  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 POR DÉCADAS
Variable: Año de Conclusión
Periodo (Década) Cant. Pozos (ni) Porcentaje (hi%) Ni (Asc) Ni (Desc) Hi (Asc) Hi (Desc)
1920 - 1929 2 0.01 2 29311 0.01 100
1930 - 1939 4 0.01 6 29309 0.02 99.99
1940 - 1949 189 0.64 195 29305 0.67 99.98
1950 - 1959 818 2.79 1013 29116 3.46 99.33
1960 - 1969 2427 8.28 3440 28298 11.74 96.54
1970 - 1979 2523 8.61 5963 25871 20.34 88.26
1980 - 1989 9533 32.52 15496 23348 52.87 79.66
1990 - 1999 3662 12.49 19158 13815 65.36 47.13
2000 - 2009 5480 18.7 24638 10153 84.06 34.64
2010 - 2019 4673 15.94 29311 4673 100 15.94
TOTAL 29311 100 - - - -
Autor: Ashly Alzate

Análisis Gráfico

Representación visual de la actividad de perforación en Brasil.

#Gráficos de barras
col_gris_azulado <- "#5D6D7E"
col_ejes         <- "#2E4053"

vals_x   <- TDF_Decadas$Periodo
vals_y   <- TDF_Decadas$ni
ylim_max <- max(vals_y) * 1.1

# GRÁFICO 1: 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 Conclusión de Pozos Petroleros de Brasil",
  ylab      = "Cantidad de Pozos Concluidos",
  cex.main  = 0.8,
  col       = col_gris_azulado, border = "white",
  axes      = FALSE, ylim = c(0, ylim_max), 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)

Gráfico 2: Frecuencia Absoluta — escala corregida

par(mar = c(10, 5, 4, 2))
bp2 <- barplot(
  vals_y,
  main      = "Gráfica N°2: Distribución de Fecha de Conclusión de Pozos Petroleros de Brasil",
  ylab      = "Cantidad de Pozos Concluidos",
  cex.main  = 0.8,
  col       = col_gris_azulado, border = "white",
  axes      = FALSE, ylim = c(0, ylim_max), 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)

Gráfico 3: Frecuencia Porcentual

vals_y_pct <- TDF_Decadas$hi



par(mar = c(10, 5, 4, 2))
bp3 <- barplot(
  vals_y_pct,
  main      = "Gráfica N°3: Distribución Porcentual de Fecha de Conclusión de Pozos Petroleros de Brasil",
  ylab      = "% del Total",
  cex.main  = 0.8,
  col       = col_gris_azulado, 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)

Gráfico 4: Porcentual — escala global (0 a 100%)

par(mar = c(10, 5, 4, 2))
bp4 <- barplot(
  vals_y_pct,
  main      = "Gráfica N°4: Distribución Porcentual de Fecha de Conclusión de Pozos Petroleros de Brasil",
  ylab      = "% del Total",
  cex.main  = 0.8,
  col       = col_gris_azulado, 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)

Gráfico 5: Boxplot

par(mar = c(7, 5, 4, 2))
boxplot(
  Variable_Exacta,
  horizontal = TRUE,
  col        = col_gris_azulado,
  main       = "Gráfica N°5: Diagrama de Caja de Fecha de Conclusión de Pozos Petroleros de Brasil",
  xlab       = "",
  outline    = TRUE, outpch = 19, outcol = "#C0392B",
  cex.main   = 0.8,
  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 Conclusión", line = 4)
grid(nx = NA, ny = NULL, col = "lightgray", lty = "dotted")

Gráfico 6: Ojivas ascendente y descendente

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

x_vals_num <- TDF_Raw$Orden
y_asc      <- TDF_Decadas$Ni_asc
y_desc     <- TDF_Decadas$Ni_desc
col_azul   <- "#2E4053"
col_rojo   <- "#C0392B"

plot(
  x_vals_num, y_asc,
  type = "o", col = col_azul, lwd = 2, pch = 19,
  main = "Gráfica N°6: Ojivas Ascendente y Descendente de Fecha de Conclusión de Pozos Petroleros de Brasil",
  cex.main = 0.8,
  ylab = "Frecuencia Acumulada", xlab = "",
  axes = FALSE, frame.plot = FALSE
)
axis(1, at = x_vals_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)
lines(x_vals_num, y_desc, type = "o", col = col_rojo, lwd = 2, pch = 19)
legend(
  "right",
  legend = c("Ascendente", "Descendente"),
  col    = c(col_azul, col_rojo),
  lty = 1, pch = 19, cex = 0.7, lwd = 2,
  inset = c(-0.15, 0), bty = "n"
)
grid(nx = NULL, ny = NULL, col = "lightgray", lty = "dotted")

6 _ Indicadores Estadísticos

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 = ", ")

rango_txt    <- paste0("[", min(Variable_Exacta), "; ", max(Variable_Exacta), "]")
varianza_val <- var(Variable_Exacta)
sd_val       <- sd(Variable_Exacta)
cv_val       <- (sd_val / abs(media_val)) * 100

asimetria_val   <- skewness(Variable_Exacta, type = 2)
curtosis_val    <- kurtosis(Variable_Exacta, type = 2)

vals_atipicos   <- boxplot.stats(Variable_Exacta)$out
num_atipicos    <- length(vals_atipicos)
status_atipicos <- if (num_atipicos > 0) paste0(num_atipicos, " outliers") else "0 (Sin atípicos)"

df_resumen <- data.frame(
  Variable  = "Año de Conclusión (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  = status_atipicos
)

df_resumen %>%
  gt() %>%
  tab_header(
    title    = md("**ESTADÍSTICOS DESCRIPTIVOS**"),
    subtitle = "Indicadores calculados sobre años exactos de Conclusión"
  ) %>%
  tab_source_note(source_note = "Autor: Ashly Alzate") %>%
  fmt_number(columns = c(Media, Mediana, Varianza, Desv_Std, CV_Porc, Curtosis), decimals = 2) %>%
  fmt_number(columns = c(Asimetria), decimals = 4) %>%
  cols_label(
    Variable  = "Variable",
    Rango     = "Rango [Min; Max]",
    Media     = "Media (X̄)",
    Mediana   = "Mediana (Me)",
    Moda      = "Moda (Mo)",
    Varianza  = "Varianza (S²)",
    Desv_Std  = "Desv. Est. (S)",
    CV_Porc   = "C.V. (%)",
    Asimetria = "Asimetría (As)",
    Curtosis  = "Curtosis (K)",
    Atipicos  = "Outliers"
  ) %>%
  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()
  )
ESTADÍSTICOS DESCRIPTIVOS
Indicadores calculados sobre años exactos de Conclusión
Variable Rango [Min; Max] Media (X̄) Mediana (Me) Moda (Mo) Varianza (S²) Desv. Est. (S) C.V. (%) Asimetría (As) Curtosis (K) Outliers
Año de Conclusión (Exacto) [1922; 2018] 1,990.57 1,988.00 1986 261.71 16.18 0.81 −0.3086 −0.52 88 outliers
Autor: Ashly Alzate

7 _ Conclusión

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