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