INTRODUCCIÓN

Este estudio analiza la evolución temporal de los pozos petrolíferos en Brasil. La Variable Año de Finalizació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(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 Estadísticos

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.