##### 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)
})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 \(𝑁(𝜇,𝜎)\), 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.