INTRODUCCION
Este estudio analiza la evolución temporal de los pozos petrolíferos en Brasil mediante la variable Año de Inicio, aplicando tablas de frecuencias, gráficos estadísticos y medidas de síntesis.
Carga de paquetes
# 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.")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)
)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 | ||||||
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)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")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 | ||||||||||
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.