El presente informe estadístico analiza la variable Lámina de Agua (m) de pozos petroleros de Brasil.
# 1. LIBRERÍAS Y CARGA DE DATOS
library(readxl)
library(dplyr)
library(gt)
library(e1071)
# Carga de datos
Datos_Brutos <- read_excel("tabela_de_pocos_janeiro_2018.xlsx", sheet = 1)
vars_to_keep <- c("POCO", "OPERADOR", "ESTADO", "BACIA", "DIRECAO",
"TIPO", "SITUACAO", "PROFUNDIDADE_VERTICAL_M", "LAMINA_D_AGUA_M")
Datos <- Datos_Brutos %>%
select(any_of(vars_to_keep)) %>%
mutate(LAMINA_D_AGUA_M = as.numeric(gsub(",", ".", as.character(LAMINA_D_AGUA_M))))
Variable <- na.omit(Datos$LAMINA_D_AGUA_M)
Variable <- Variable[Variable > 0 & Variable < 10000]
if(length(Variable) == 0) stop("ERROR")
# 2. CÁLCULOS MATEMÁTICOS (STURGES)
N <- length(Variable)
min_val <- min(Variable)
max_val <- max(Variable)
Rango <- max_val - min_val
K <- floor(1 + 3.322 * log10(N))
Amplitud <- Rango / K
breaks_raw <- seq(min_val, max_val, length.out = K + 1)
breaks_raw[length(breaks_raw)] <- max_val + 0.0001
lim_inf_raw <- breaks_raw[1:K]
lim_sup_raw <- breaks_raw[2:(K+1)]
MC <- (lim_inf_raw + lim_sup_raw) / 2
ni <- numeric(K)
for (i in 1:K) {
if (i < K) {
ni[i] <- length(Variable[Variable >= lim_inf_raw[i] & Variable < lim_sup_raw[i]])
} else {
ni[i] <- length(Variable[Variable >= lim_inf_raw[i] & Variable <= lim_sup_raw[i]])
}
}
hi <- (ni / sum(ni)) * 100
Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))
TDF_Lamina <- data.frame(
Li = round(lim_inf_raw, 2),
Ls = round(lim_sup_raw, 2),
MC = round(MC, 2),
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)
)A continuación se presenta la tabla de distribución de frecuencias obtenida.
# Totales
totales <- c("TOTAL", "-", "-", sum(ni), round(sum(hi), 2), "-", "-", "-", "-")
TDF_Char <- TDF_Lamina %>% mutate(across(everything(), as.character))
TDF_Final <- rbind(TDF_Char, totales)
TDF_Final %>%
gt() %>%
tab_header(
title = md("**DISTRIBUCIÓN DE FRECUENCIAS DE POZOS PETROLEROS DE BRASIL**"),
subtitle = md("Variable: **Lámina de Agua (m)**")
) %>%
tab_source_note(source_note = "Fuente: Datos ANP 2018") %>%
cols_label(
Li = "Lím. Inf", Ls = "Lím. Sup", MC = "Marca Clase (Xi)",
ni = "ni", hi = "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 DE FRECUENCIAS DE POZOS PETROLEROS DE BRASIL | ||||||||
| Variable: Lámina de Agua (m) | ||||||||
| Lím. Inf | Lím. Sup | Marca Clase (Xi) | ni | hi (%) | Ni (Asc) | Ni (Desc) | Hi (Asc) | Hi (Desc) |
|---|---|---|---|---|---|---|---|---|
| 0.25 | 230.08 | 115.16 | 3441 | 55.66 | 3441 | 6182 | 55.66 | 100 |
| 230.08 | 459.9 | 344.99 | 254 | 4.11 | 3695 | 2741 | 59.77 | 44.34 |
| 459.9 | 689.73 | 574.82 | 233 | 3.77 | 3928 | 2487 | 63.54 | 40.23 |
| 689.73 | 919.56 | 804.64 | 362 | 5.86 | 4290 | 2254 | 69.4 | 36.46 |
| 919.56 | 1149.38 | 1034.47 | 429 | 6.94 | 4719 | 1892 | 76.33 | 30.6 |
| 1149.38 | 1379.21 | 1264.3 | 450 | 7.28 | 5169 | 1463 | 83.61 | 23.67 |
| 1379.21 | 1609.04 | 1494.12 | 315 | 5.1 | 5484 | 1013 | 88.71 | 16.39 |
| 1609.04 | 1838.87 | 1723.95 | 256 | 4.14 | 5740 | 698 | 92.85 | 11.29 |
| 1838.87 | 2068.69 | 1953.78 | 154 | 2.49 | 5894 | 442 | 95.34 | 7.15 |
| 2068.69 | 2298.52 | 2183.61 | 211 | 3.41 | 6105 | 288 | 98.75 | 4.66 |
| 2298.52 | 2528.35 | 2413.43 | 36 | 0.58 | 6141 | 77 | 99.34 | 1.25 |
| 2528.35 | 2758.17 | 2643.26 | 23 | 0.37 | 6164 | 41 | 99.71 | 0.66 |
| 2758.17 | 2988 | 2873.09 | 18 | 0.29 | 6182 | 18 | 100 | 0.29 |
| TOTAL | - | - | 6182 | 100 | - | - | - | - |
| Fuente: Datos ANP 2018 | ||||||||
Esta sección presenta la visualización de la distribución de los datos.
col_gris_azulado <- "#5D6D7E"
col_ejes <- "#2E4053"
h_base <- hist(Variable, breaks = "Sturges", plot = FALSE)
ylim_max <- max(h_base$counts) * 1.1
# GRÁFICO 1: Histograma Absoluto (Local)
par(mar = c(8, 5, 4, 2))
plot(h_base,
main = "Gráfica No.1: Distribución de Lámina de Agua de Pozos Petroleros de Brasil",
xlab = "Lámina de Agua (m)",
ylab = "Frecuencia Absoluta",
col = col_gris_azulado, border = "white", axes = FALSE,
ylim = c(0, ylim_max))
axis(1, at = round(h_base$breaks, 0), labels = format(round(h_base$breaks, 0), scientific = FALSE), las = 2, cex.axis = 0.7)
axis(2)
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted") # GRÁFICO 2: Histograma Global
par(mar = c(8, 5, 4, 2))
plot(h_base,
main = "Gráfica N°2: Distribución de Lámina de Agua de Pozos Petroleros de Brasil",
xlab = "Lámina de Agua (m)",
ylab = "Total Pozos",
col = col_gris_azulado, border = "white", axes = FALSE,
ylim = c(0, sum(h_base$counts)))
axis(1, at = round(h_base$breaks, 0), labels = format(round(h_base$breaks, 0), scientific = FALSE), las = 2, cex.axis = 0.7)
axis(2)
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted")h_porc <- h_base
h_porc$counts <- (h_porc$counts / sum(h_porc$counts)) * 100
h_porc$density <- h_porc$counts
ylim_porc <- max(h_porc$counts) * 1.2
# GRÁFICO 3: Porcentajes (Local)
par(mar = c(8, 5, 4, 2))
plot(h_porc,
main = "Gráfica N°3: Distribución Porcentual de Lámina de Agua de Pozos Petroleros de Brasil",
xlab = "Lámina de Agua (m)",
ylab = "Porcentaje (%)",
col = col_gris_azulado, border = "white", axes = FALSE, freq = TRUE,
ylim = c(0, ylim_porc))
axis(1, at = round(h_base$breaks, 0), labels = format(round(h_base$breaks, 0), scientific = FALSE), las = 2, cex.axis = 0.7)
axis(2)
text(x = h_base$mids, y = h_porc$counts, label = paste0(round(h_porc$counts, 1), "%"), pos = 3, cex = 0.6, col = col_ejes)
grid(nx=NA, ny=NULL, col="#D7DBDD", lty="dotted") # GRÁFICO 4: Global Porcentual
par(mar = c(8, 5, 4, 2))
plot(h_porc,
main = "Gráfica No.4: Distribución Porcentual de Lámina de Agua de Pozos Petroleros de Brasil",
xlab = "Lámina de Agua (m)",
ylab = "% del Total",
col = col_gris_azulado, border = "white", axes = FALSE, freq = TRUE,
ylim = c(0, 100))
axis(1, at = round(h_base$breaks, 0), labels = format(round(h_base$breaks, 0), scientific = FALSE), las = 2, cex.axis = 0.7)
axis(2)
text(x = h_base$mids, y = h_porc$counts, label = paste0(round(h_porc$counts, 1), "%"), pos = 3, cex = 0.6, col = col_ejes)
abline(h=seq(0,100,20), col="#D7DBDD", lty="dotted")# GRÁFICO 5: Boxplot
par(mar = c(5, 5, 4, 2))
boxplot(Variable, horizontal = TRUE, col = col_gris_azulado,
main = "Gráfica No.5: Diagrama de Caja de Lámina de Agua de Pozos Petroleros de Brasil(Boxplot)",
xlab = "Lámina de Agua (m)", outline = TRUE, outpch = 19, outcol = "#C0392B",
boxwex = 0.5, frame.plot = FALSE, xaxt = "n")
eje_x_detallado <- pretty(Variable, n = 20)
axis(1, at = eje_x_detallado, labels = format(eje_x_detallado, scientific = FALSE), cex.axis=0.7, las=2)
grid(nx=NULL, ny=NA, col="lightgray", lty="dotted")# GRÁFICO 6: Ojivas
par(mar = c(5, 5, 4, 8), xpd = TRUE)
x_asc <- c(min(breaks_raw), breaks_raw[2:length(breaks_raw)])
y_asc <- c(0, Ni_asc)
x_desc <- c(min(breaks_raw), breaks_raw[2:length(breaks_raw)])
y_desc <- c(Ni_desc, 0)
x_range <- range(c(x_asc, x_desc))
y_range <- c(0, max(c(y_asc, y_desc)))
col_azul <- "#2E4053"
col_rojo <- "#C0392B"
plot(x_asc, y_asc, type = "o", col = col_azul, lwd=2, pch=19,
main = "Gráfica No.6: Ojivas Ascendente y Descendente de Lámina de Agua de Pozos Petroleros de Brasil",
xlab = "Lámina de Agua (m)", ylab = "Frecuencia acumulada",
xlim = x_range, ylim = y_range, axes = FALSE, frame.plot = FALSE, line=3, cex.main=0.98)
axis(1, at = round(breaks_raw,0), labels = format(round(breaks_raw,0), scientific = FALSE), las=2, cex.axis=0.6)
axis(2, at = pretty(y_asc), labels = format(pretty(y_asc), scientific = FALSE))
lines(x_desc, 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()# CÁLCULO DE INDICADORES
media_val <- mean(Variable)
mediana_val <- median(Variable)
freq_max <- max(TDF_Lamina$ni)
modas_calc <- TDF_Lamina$MC[TDF_Lamina$ni == freq_max]
moda_txt <- paste(round(modas_calc, 2), collapse = ", ")
rango_txt <- paste0("[", round(min(Variable), 2), "; ", round(max(Variable), 2), "]")
varianza_val <- var(Variable)
sd_val <- sd(Variable)
cv_val <- (sd_val / abs(media_val)) * 100
asimetria_val <- skewness(Variable, type = 2)
curtosis_val <- kurtosis(Variable, type = 2)
vals_atipicos <- boxplot.stats(Variable)$out
num_atipicos <- length(vals_atipicos)
status_atipicos <- if(num_atipicos > 0) {
min_out <- min(vals_atipicos)
max_out <- max(vals_atipicos)
paste0(num_atipicos, " [", round(min_out, 2), "; ", round(max_out, 2), "]")
} else {
"0 (Sin atípicos)"
}
df_resumen <- data.frame(
"Variable" = "Lámina de Agua (m)",
"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("**CONCLUSIONES Y ESTADÍSTICOS**"),
subtitle = "Resumen de Indicadores de Lámina de Agua de Pozos Petroleros de Brasil"
) %>%
tab_source_note(source_note = "Autor: Grupo 3 ") %>%
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 [Intervalo]"
) %>%
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()
)| CONCLUSIONES Y ESTADÍSTICOS | ||||||||||
| Resumen de Indicadores de Lámina de Agua de Pozos Petroleros de Brasil | ||||||||||
| Variable | Rango [Min; Max] | Media (X̄) | Mediana (Me) | Moda (Mo) | Varianza (S²) | Desv. Est. (S) | C.V. (%) | Asimetría (As) | Curtosis (K) | Outliers [Intervalo] |
|---|---|---|---|---|---|---|---|---|---|---|
| Lámina de Agua (m) | [0.25; 2988] | 584.06 | 142.00 | 115.16 | 484,472.98 | 696.04 | 119.17 | 1.0427 | −0.09 | 26 [2694; 2988] |
| Autor: Grupo 3 | ||||||||||
min_txt <- format(min(Variable), scientific = FALSE)
max_txt <- format(max(Variable), scientific = FALSE)
asimetria_val <- skewness(Variable, type = 2)
if (abs(asimetria_val) <= 1.0) {
valor_referencia <- mean(Variable)
centro_valor <- format(round(valor_referencia, 2), scientific = FALSE)
tipo_centro <- "Media"
} else {
valor_referencia <- median(Variable)
centro_valor <- format(round(valor_referencia, 2), scientific = FALSE)
tipo_centro <- "Mediana"
}
sd_txt <- format(round(sd(Variable), 4), scientific = FALSE)
cv_calc <- (sd(Variable) / abs(mean(Variable))) * 100
tipo_homogeneidad <- if(cv_calc > 30) "heterogénea" else "homogénea"
donde_se_concentra <- if(asimetria_val > 0) "parte media baja (menor profundidad)" else "parte media alta (mayor profundidad)"
outliers_lista <- boxplot.stats(Variable)$out
num_outliers <- length(outliers_lista)
texto_outliers <- if(num_outliers > 0) {
paste0("con la presencia de **", num_outliers, " valores atípicos**")
} else {
"sin valores atípicos significativos"
}
juicio_tecnico <- if(valor_referencia < 400) {
"favorable desde la perspectiva de costos operativos, ya que la lámina de agua promedio corresponde a un entorno de **Aguas Someras**. Esto permite el uso de plataformas autoelevables (Jack-ups) y reduce significativamente la complejidad logística y de infraestructura submarina en comparación con proyectos de aguas profundas"
} else if (valor_referencia >= 400 & valor_referencia < 1500) {
"exigente en términos tecnológicos, situándose en un entorno de **Aguas Profundas**. Esto implica un incremento sustancial en el CAPEX debido a la necesidad de unidades flotantes semisumergibles y sistemas de posicionamiento dinámico, alejándose de la economía de las plataformas fijas"
} else {
"de alta complejidad técnica y financiera (**Aguas Ultraprofundas**), característico de los yacimientos del Pre-sal. Este escenario demanda la tecnología más costosa de la industria (FPSOs sofisticados, Risers flexibles y ROVs), justificable únicamente por el alto potencial de reservas de hidrocarburos asociados"
}
cat(paste0(
"## Análisis Descriptivo y Entorno Operativo\n\n",
"La variable **Lámina de Agua** fluctúa entre **", min_txt, "** y **", max_txt, "** metros, ",
"y sus valores se encuentran alrededor de **", centro_valor, "** metros (", tipo_centro, "). ",
"Presenta una desviación estándar de **", sd_txt, "**, siendo una variable **", tipo_homogeneidad, "** ",
"(CV: ", round(cv_calc, 2), "%), ",
"cuyos valores se concentran en la **", donde_se_concentra, "** de la distribución ",
texto_outliers, "; ",
"**por lo tanto, el entorno operativo se clasifica como ", juicio_tecnico, ".**"
))La variable Lámina de Agua fluctúa entre 0.25 y 2988 metros, y sus valores se encuentran alrededor de 142 metros (Mediana). Presenta una desviación estándar de 696.0409, siendo una variable heterogénea (CV: 119.17%), cuyos valores se concentran en la parte media baja (menor profundidad) de la distribución con la presencia de 26 valores atípicos; por lo tanto, el entorno operativo se clasifica como favorable desde la perspectiva de costos operativos, ya que la lámina de agua promedio corresponde a un entorno de Aguas Someras. Esto permite el uso de plataformas autoelevables (Jack-ups) y reduce significativamente la complejidad logística y de infraestructura submarina en comparación con proyectos de aguas profundas.