Datos <- Datos_Brutos %>%
mutate(
Fecha_Obj = as.Date(TERMINO, 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)
)
# Variables de trabajo
Variable_Exacta <- Datos$Anio_Exacto
Variable_Clases <- Datos$Periodo
Variable_Orden <- Datos$Decada_Termino
# Verificación: detener el proceso si no hay datos válidos
if (length(Variable_Exacta) == 0) {
stop("ERROR: No hay datos válidos en la columna TERMINO.")
}
cat("Total de registros válidos:", length(Variable_Exacta), "\n")## Total de registros válidos: 27729
## Rango de años: 1922 – 2017
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)
)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 = "Elaboración: Grupo 3") %>%
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 | — | — | — | — |
| Elaboración: Grupo 3 | ||||||
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)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)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)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)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.
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()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), "]")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* | ||||||||||