INTRODUCCION

Este estudio analiza la evolución temporal de los pozos petrolíferos en Brasil. La Variable Año de Inicio de los pozos petrolíferos es de tipo ordinal, pero se convirtió en discreta al asignarle identificadores numéricos (\(X_i\)) 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)
library(MASS)
library(knitr)

2 _ Carga datos

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

Datos_Brutos <- as.data.frame(Datos_Brutos)

3 _ Variables

# Extraemos los primeros 4 caracteres del texto de la fecha (año) de forma segura
Datos <- Datos_Brutos %>%
  mutate(
    Anio_Exacto = as.numeric(substr(as.character(INICIO), 1, 4))
  ) %>%
  filter(!is.na(Anio_Exacto) & Anio_Exacto > 1900) %>%
  mutate(
    Decada_Inicio = floor(Anio_Exacto / 10) * 10, 
    Periodo = paste0(Decada_Inicio, " - ", Decada_Inicio + 9)
  )

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

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

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) 

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

5 _ Tabla

TABLA DE DISTRIBUCIÓN DE FRECUENCIA

# Totales
totales <- c("TOTAL", sum(ni), round(sum(hi), 2), "-", "-", "-", "-")

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

colnames(TDF_Show) <- names(TDF_Decadas)
TDF_Show %>%
  gt() %>%
  tab_header(
    title = md("DISTRIBUCIÓN POR DÉCADAS"),
    subtitle = md("Variable: **Inicio de Perforació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()
  ) %>%
  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: Inicio de Perforación
Periodo (Década) Cant. Pozos (ni) Porcentaje (hi%) Ni (Asc) Ni (Desc) Hi (Asc) Hi (Desc)
1920 - 1929 2 0.01 2 29575 0.01 100
1930 - 1939 7 0.02 9 29573 0.03 99.99
1940 - 1949 192 0.65 201 29566 0.68 99.97
1950 - 1959 840 2.84 1041 29374 3.52 99.32
1960 - 1969 2414 8.16 3455 28534 11.68 96.48
1970 - 1979 2562 8.66 6017 26120 20.34 88.32
1980 - 1989 9501 32.13 15518 23558 52.47 79.66
1990 - 1999 3670 12.41 19188 14057 64.88 47.53
2000 - 2009 5690 19.24 24878 10387 84.12 35.12
2010 - 2019 4697 15.88 29575 4697 100 15.88
TOTAL 29575 100 - - - -
Autor: Ashly Alzate

6 _ Gráficas

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 (LOCAL)
par(mar = c(10, 5, 4, 2)) 
bp <- barplot(vals_y, 
        main = "Gráfica No.1: Distribucion de Fecha de Inicio(Inicio) de Pozos Petroleros de Brazil",
        cex.main = 0.8,
        ylab = "Cantidad de Pozos",
        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

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

bp2 <- barplot(vals_y,
        main = "Gráfica N°2: Distribucion de Fecha de Inicio(Inicio) de Pozos Petroleros de Brazil",
        cex.main = 0.8,
        ylab = "Cantidad de Pozos",
        col = col_gris_azulado, 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)

vals_y_pct <- TDF_Decadas$hi

Gráfico 3: Porcentual (LOCAL)

par(mar = c(10, 5, 4, 2))
bp3 <- barplot(vals_y_pct,
        main = "Gráfica N°3: Distribucion Porcentual de Fecha de Inicio(Inicio) de Pozos Petroleros de Brazil",
        cex.main = 0.8,
        ylab = "% del Total",
        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 (GLOBAL - Escala 0 a 100%)

par(mar = c(10, 5, 4, 2))
bp4 <- barplot(vals_y_pct,
        main = "Gráfica N°4: Distribucion Porcentual de Fecha de Inicio(Inicio) de Pozos Petroleros de Brazil",
        cex.main = 0.8,
        ylab = "% del Total",
        col = col_gris_azulado, border = "white", axes = FALSE,
        ylim = c(0, 100), # Eje Y fijo a 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áfica 5: Diagrama de Caja

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 Inicio de Pozos Petroleros en Brazil",
        cex.main = 0.8,
        xlab = "", outline = TRUE, outpch = 19, outcol = "#C0392B", 
        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", line = 4)

Gráfica 6: Ojivas

par(mar = c(6, 5, 4, 8), xpd = TRUE) 
x_vals_num <- unique(Datos$Decada_Inicio) %>% sort()
x_labels <- unique(Datos$Periodo) %>% sort() 
y_asc <- TDF_Decadas$Ni_asc
y_desc <- TDF_Decadas$Ni_desc

col_azul <- "#2E4053"
col_rojo <- "#C0392B"
# Definimos col_ejes por si no lo tenías declarado arriba
col_ejes <- "#2E4053" 

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 Inicio de Pozos Petroleros de Brazil",
     cex.main = 0.8,
     ylab = "Frecuencia Acumulada", xlab = "",
     axes = FALSE, frame.plot = FALSE)

# Cambiamos las = 2 por las = 1 para que los textos queden horizontales
axis(1, at = x_vals_num, labels = x_labels, las = 1, 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 = 4)
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()
grid(nx = NULL, ny = NA, col = "lightgray", lty = "dotted")

7 _ Indicadores Estadísticos

Cálculo de Indicadores (Variable exacta)

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 Inicio (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"
  ) %>%
  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
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 Inicio (Exacto) [1922; 2018] 1,990.64 1,988.00 1982 262.92 16.21 0.81 −0.3246 −0.52 96 outliers
Autor: Ashly Alzate

8 _ Conclusión

Los valores de la variable Año de Inicio fluctúan entre 1922 y 2018 y giran en torno a la media de 1,990.64 (coincidente con la mediana de 1,988.00), con una desviación estándar de 16.21, con 96 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.