1 Carga y Exploración Inicial de Datos

1.1 Procesamiento y Limpieza de Datos

# Carga de librerias
library(readxl)
library(dplyr)
library(gt)
library(e1071)
library(lubridate)

# Datos
setwd("C:/Users/majke/Downloads/Proyecto Estadistica/RMARKDOWN")

Datos_Brutos <- read.csv(
  "Pozos brasil 2.csv",
  header       = TRUE,
  sep          = ";",
  dec          = "/",
  fileEncoding = "Latin1"
)


# Extraer variable de interés
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
cat("Rango de años:", min(Variable_Exacta), "–", max(Variable_Exacta), "\n")
## Rango de años: 1922 – 2017

2 Distribución de Frecuencias

2.1 Cálculo de Frecuencias por Década

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)
)

2.2 Tabla de Distribución por Décadas

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

3 Análisis Gráfico

3.1 Gráficos de Barras — Frecuencia Absoluta

3.1.1 Escala Local

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)

3.1.2 Escala Global

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)

3.2 Gráficos de Barras — Frecuencia Porcentual

3.2.1 Escala Loca

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)

3.2.2 Escala Global

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)

3.3 Diagrama de Caja (Boxplot)

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.

3.4 Ojivas Acumuladas

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()


4 Estadísticos Descriptivos

4.1 Cálculo de Medidas Resumen

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), "]")

4.2 Tabla de Estadísticos Descriptivos

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*

5 Conclusiones

5.1 Análisis Descriptivo y Conclusiones

Los valores de la variable Año de Término fluctúan entre 1922 y 2017 y giran en torno a la media de 1,989.81 (muy cercana a la mediana de 1,987.00), con una desviación estándar de 16.29, con 54 valores atípicos correspondientes al rango [1922 – 1943], siendo un conjunto de datos heterogéneo (C.V. = 0.82%), cuyos valores se agrupan fuertemente en la parte alta de la variable. Por lo anterior, el comportamiento es perjudicial, ya que la concentración de términos en las décadas recientes con valores atípicos históricos evidencia una industria con un ciclo de vida prolongado que reduce su actividad en el tiempo.