\(Variable\) \(de\) \(Estudio\): Fecha de Finalización del Pozo (Date Well Completed).
Muy antiguas (1900 – 1925): periodo con muy pocos registros.
Antiguas (1925 – 1950): representación baja en el histórico.
Medias (1950 – 1976): representación intermedia.
Recientes (1976 – 2001): concentra la mayoría de los pozos.
Muy recientes (2001 – 2026): segunda mayor representación, con perforaciones vigentes o recientes.
##### UNIVERSIDAD CENTRAL DEL ECUADOR #####
#### AUTORES: DALLYANA LOZANO ####
### CARRERA: INGENIERÍA EN PETRÓLEOS #####
#### VARIABLE: FECHA DE FINALIZACIÓN DEL POZO ####
suppressPackageStartupMessages({
library(tidyverse)
library(readxl)
library(gt)
library(dplyr)
library(readr)
library(lubridate)
})
Datos <- read_delim("Dataset.csv", delim = ";", escape_double = FALSE, trim_ws = TRUE, show_col_types = FALSE)Extraemos la variable Date Well Completed, omitimos las celdas en blanco y verificamos el tamaño muestral.
suppressPackageStartupMessages({
library(lubridate)
library(dplyr)
})
anios_raw_comp <- Datos$`Completion Year`
anios_validos_comp <- anios_raw_comp[!is.na(anios_raw_comp) & anios_raw_comp != ""]
Anios_limpios_comp <- as.numeric(anios_validos_comp)## Warning: NAs introducidos por coerción
Anios_limpios_comp <- Anios_limpios_comp[!is.na(Anios_limpios_comp)]
Fecha_Comp <- cut(Anios_limpios_comp,
breaks = 5,
labels = c("Muy antiguas",
"Antiguas",
"Medias",
"Recientes",
"Muy recientes"),
ordered_result = TRUE)
conteo_comp <- table(Fecha_Comp)
ni_comp <- as.numeric(conteo_comp)
hi_comp <- (ni_comp / sum(ni_comp)) * 100Se extrajo la variable de año de finalización del pozo (Completion Year) para determinar su frecuencia absoluta(\(n_i\)) y el porcentaje relativo (\(hi\)) respecto al total, agrupando los registros en cinco rangos de igual amplitud: Muy antiguas, Antiguas, Medias, Recientes y Muy recientes.
df_comp_final <- data.frame(
Tipo = names(conteo_comp),
ni = as.character(ni_comp),
hi = as.character(round(hi_comp, 2))
)
fila_total_comp <- data.frame(
Tipo = "TOTAL",
ni = as.character(sum(ni_comp)),
hi = as.character(round(sum(hi_comp), 2))
)
df_show_comp_1 <- bind_rows(df_comp_final, fila_total_comp)
df_show_comp_1 %>%
gt() %>%
tab_header(
title = md("**TABLA Nº 1: DISTRIBUCIÓN DE FRECUENCIAS DEL AÑO DE FINALIZACIÓN DEL POZO**")
) %>%
cols_label(
Tipo = "Rango de Finalización del Pozo",
ni = "ni",
hi = "hi (%)"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
locations = cells_column_labels()
) %>%
tab_style(
style = list(cell_fill(color = "#D0ECE7"), cell_text(weight = "bold")),
locations = cells_body(rows = Tipo == "TOTAL")
) %>%
tab_options(
table.width = pct(90),
data_row.padding = px(12),
column_labels.padding = px(15),
table.border.top.style = "solid",
table.border.top.color = "#2E4053",
table.border.bottom.style = "solid",
table.border.bottom.color = "#2E4053"
)| TABLA Nº 1: DISTRIBUCIÓN DE FRECUENCIAS DEL AÑO DE FINALIZACIÓN DEL POZO | ||
| Rango de Finalización del Pozo | ni | hi (%) |
|---|---|---|
| Muy antiguas | 1380 | 6.14 |
| Antiguas | 2515 | 11.19 |
| Medias | 4635 | 20.63 |
| Recientes | 9100 | 40.49 |
| Muy recientes | 4842 | 21.55 |
| TOTAL | 22472 | 100 |
Se incorporó una asignación jerárquica ordinal y se consolidó la información en un data frame estructurado para su presentación formal.
conteo_comp_j <- table(Fecha_Comp)
ni_comp_j <- as.numeric(conteo_comp_j)
hi_comp_j <- (ni_comp_j / sum(ni_comp_j)) * 100
df_comp_jerarquia <- data.frame(
Asignacion = as.character(1:length(conteo_comp_j)),
Tipo = names(conteo_comp_j),
ni = as.character(ni_comp_j),
hi = as.character(round(hi_comp_j, 2))
)
fila_total_comp_j <- data.frame(
Asignacion = "TOTAL",
Tipo = "",
ni = as.character(sum(ni_comp_j)),
hi = as.character(round(sum(hi_comp_j), 2))
)
df_show_comp_2 <- bind_rows(df_comp_jerarquia, fila_total_comp_j)
df_show_comp_2 %>%
gt() %>%
tab_header(
title = md("**TABLA Nº 2: ASIGNACIÓN JERÁRQUICA DEL AÑO DE FINALIZACIÓN DEL POZO**")
) %>%
cols_label(
Asignacion = "Asignación",
Tipo = "Rango de Años",
ni = "ni",
hi = "hi (%)"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(
style = list(cell_fill(color = "#F2F3F4"), cell_text(weight = "bold", color = "#2E4053")),
locations = cells_column_labels()
) %>%
tab_style(
style = list(cell_fill(color = "#D0ECE7"), cell_text(weight = "bold")),
locations = cells_body(rows = Asignacion == "TOTAL")
) %>%
tab_options(
table.width = pct(90),
data_row.padding = px(12),
column_labels.padding = px(15),
table.border.top.style = "solid",
table.border.top.color = "#2E4053",
table.border.bottom.style = "solid",
table.border.bottom.color = "#2E4053"
)| TABLA Nº 2: ASIGNACIÓN JERÁRQUICA DEL AÑO DE FINALIZACIÓN DEL POZO | |||
| Asignación | Rango de Años | ni | hi (%) |
|---|---|---|---|
| 1 | Muy antiguas | 1380 | 6.14 |
| 2 | Antiguas | 2515 | 11.19 |
| 3 | Medias | 4635 | 20.63 |
| 4 | Recientes | 9100 | 40.49 |
| 5 | Muy recientes | 4842 | 21.55 |
| TOTAL | 22472 | 100 | |
par(mar = c(7, 4, 4, 2))
barplot(as.numeric(df_comp_final$ni),
main = "GRÁFICO Nº 1: DISTRIBUCIÓN DEL AÑO DE FINALIZACIÓN DEL POZO",
ylab = "Cantidad de Pozos",
col = "#B0C4DE",
names.arg = df_comp_final$Tipo,
las = 2,
cex.names = 0.8,
cex.axis = 0.8,
cex.main = 1.1,
ylim = c(0, max(as.numeric(df_comp_final$ni), na.rm = TRUE) + max(as.numeric(df_comp_final$ni), na.rm = TRUE) * 0.1))
mtext("Rango de Año de Finalización", side = 1, line = 6)par(mar = c(5, 4, 4, 2))
barplot(as.numeric(df_comp_jerarquia$hi),
main = "GRÁFICO Nº 2: PORCENTAJE DEL AÑO DE FINALIZACIÓN DEL POZO",
ylab = "Porcentaje (%)",
col = "#B0C4DE",
names.arg = df_comp_jerarquia$Asignacion,
las = 1,
cex.names = 1.0,
cex.axis = 0.8,
cex.main = 1.1,
ylim = c(0, max(as.numeric(df_comp_jerarquia$hi), na.rm = TRUE) + 10))
mtext("Asignación", side = 1, line = 3)Se validó el año de finalización (Completion Year) de los pozos mediante una Distribución Normal \(𝑁(𝜇,𝜎)\), ya que la Binomial no se ajustó adecuadamente (Chi-cuadrado por encima del valor crítico). La forma de campana de la distribución observada sugiere un mejor ajuste con un modelo continuo simétrico.
n_total_Comp <- sum(as.numeric(df_comp_jerarquia$ni))
media_comp <- sum((1:5) * as.numeric(df_comp_jerarquia$ni)) / n_total_Comp
var_comp <- sum(as.numeric(df_comp_jerarquia$ni) * ((1:5) - media_comp)^2) / n_total_Comp
sd_comp <- sqrt(var_comp)
# Probabilidad de cada categoría bajo la curva Normal
limites_comp <- c(-Inf, 1.5, 2.5, 3.5, 4.5, Inf)
prob_normal_comp <- diff(pnorm(limites_comp, mean = media_comp, sd = sd_comp))
P_Normal_Comp <- prob_normal_comp * 100
par(mar = c(9, 4, 4, 2))
max_y_comp <- max(max(as.numeric(df_comp_jerarquia$hi)), max(P_Normal_Comp))
barplot(rbind(as.numeric(df_comp_jerarquia$hi), P_Normal_Comp),
beside = TRUE,
main = "GRÁFICO Nº 3: Comparado de lo Observado frente a lo Esperado del Año de Finalización",
ylab = "Porcentaje (%)",
names.arg = df_comp_jerarquia$Asignacion,
col = c("#B0C4DE", "#AED6F1"),
ylim = c(0, max_y_comp + 25),
las = 1,
cex.names = 0.9,
cex.main = 0.85)
legend("topright",
legend = c("Realidad", "Modelo"),
fill = c("#B0C4DE", "#AED6F1"),
bty = "n", cex = 0.8)
mtext("Rango de Año de Finalización", side = 1, line = 6)Fo_C <- as.numeric(df_comp_jerarquia$hi)
Fe_C <- P_Normal_Comp
test_correlacion_comp <- cor.test(Fo_C, Fe_C)
r_valor_comp <- round(test_correlacion_comp$estimate, 4)
par(mar = c(5, 5, 4, 2))
plot(Fo_C, Fe_C,
main = "GRÁFICO Nº 4: CORRELACIÓN DEL MODELO NORMAL - AÑO DE FINALIZACIÓN",
cex.main = 0.85,
xlab = "Frecuencia Observada (%)",
ylab = "Frecuencia Esperada (%)",
pch = 19,
col = "#2E4053",
cex = 1.5)
abline(lm(Fe_C ~ Fo_C), col = "red", lwd = 2)
text(x = min(Fo_C), y = max(Fe_C),
labels = paste("r =", r_valor_comp),
pos = 4, font = 2, col = "#2E4053")## [1] 87.14688
x2_C <- sum(((Fo_C - Fe_C)^2) / Fe_C)
gl_C <- length(Fo_C) - 1 - 2 # -2 por los parámetros estimados: media y sd
vc_C <- qchisq(0.99, gl_C)
cat("Estadístico Chi-cuadrado (Calculado):", round(x2_C, 4), "\n")## Estadístico Chi-cuadrado (Calculado): 8.3641
## Valor Crítico (Tabla): 9.2103
## ¿Se acepta el modelo? (Calculado < Crítico): TRUE
tabla_resumen_C <- data.frame(
Variable = "Año de Finalización del Pozo",
Pearson = round(Correlacion_C, 2),
Chi2 = round(x2_C, 4),
Umbral = round(vc_C, 2),
Resultado = ifelse(x2_C < vc_C, "Modelo Aceptado", "Modelo Rechazado")
)
tabla_resumen_C %>%
gt() %>%
tab_header(
title = md("**TABLA Nº 3: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD**")
) %>%
cols_label(
Variable = "Variable",
Pearson = "Test Pearson (%)",
Chi2 = "Chi Cuadrado",
Umbral = "Umbral de Aceptación",
Resultado = "Resultado Final"
) %>%
tab_source_note(
source_note = "Autor: Dallyana Lozano"
) %>%
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.width = pct(95),
table.border.top.color = "#2E4053",
table.border.bottom.color = "#2E4053",
column_labels.border.bottom.color = "#2E4053",
data_row.padding = px(10)
)| TABLA Nº 3: RESUMEN DEL TEST DE BONDAD AL MODELO DE PROBABILIDAD | ||||
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de Aceptación | Resultado Final |
|---|---|---|---|---|
| Año de Finalización del Pozo | 87.15 | 8.3641 | 9.21 | Modelo Aceptado |
| Autor: Dallyana Lozano | ||||
## [1] "40.49"
La probabilidad de que un pozo tenga su año de finalización en el rango Recientes (1976-2001) es de aproximadamente 40.49%.
## [1] "6.14"
La probabilidad de encontrar pozos en el rango Muy antiguas (1900-1925) es de 6.14%..
El modelo Normal N(μ,σ) se ajustó adecuadamente a la variable Año de Finalización del Pozo, confirmando el patrón de campana observado en la distribución (crecimiento, pico y declive). La mayor concentración de pozos se ubica en los rangos Recientes (40.5%) y Muy recientes (21.6%), reflejando el periodo de mayor actividad de perforación dentro del bloque.