Introducción
Este estudio analiza la evolución temporal de los pozos petrolíferos en Brasil mediante estadística descriptiva. La variable año de conclusión de los pozos es de tipo ordinal, pero se transformó en discreta al asignarle identificadores numéricos (\(X_i\)) para facilitar el análisis de frecuencias y la comparación histórica.
Carga de paquetes
Importación del archivo
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.")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)
)## Rango de años: 1922 – 2018
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 = "p", 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
)
# Cuadrícula contenida estrictamente dentro del cuadro (xpd = FALSE)
par(xpd = FALSE)
grid(nx = NULL, ny = NULL, col = "lightgray", lty = "dotted")
# Restauramos xpd = TRUE para los elementos externos (leyenda y ejes)
par(xpd = TRUE)
lines(x_vals_num, y_desc, type = "p", col = col_rojo, lwd = 2, pch = 19)
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)
legend(
"right",
legend = c("Ascendente", "Descendente"),
col = c(col_azul, col_rojo),
lty = 0, pch = 19, cex = 0.7, lwd = 2,
inset = c(-0.15, 0), bty = "n"
)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 | ||||||||||
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 debido a la marcada asimetría negativa y a la concentración masiva de pozos en los periodos recientes frente a los registros aislados de las primeras décadas, lo cual genera un sesgo que dificulta la aplicación de modelos de pronóstico uniformes sin una segmentación previa.