# VARIABLE CUALITATIVA ORDINAL: CLASIFICACIÓN
# Proyecto: Producción de pozos de gas y petróleo no convencional
# Grupo – Carrera de Petróleos
# 2026

# =========================================================
# 1. CARGA DE LIBRERÍAS Y DATOS
# =========================================================

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(readr)
library(gt)

# Lectura del archivo CSV

datos <- read_delim(
  "produccin-de-pozos-de-gas-y-petrleo-no-convencional.csv",
  delim = ";"
)
## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
##   dat <- vroom(...)
##   problems(dat)
## Rows: 400759 Columns: 40
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr  (27): idempresa, prod_pet, prod_gas, prod_agua, tef, tipoextraccion, ti...
## dbl  (10): anio, mes, idpozo, iny_agua, iny_gas, iny_co2, iny_otro, vida_uti...
## lgl   (2): rectificado, habilitado
## dttm  (1): fechaingreso
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# =========================================================
# 2. LIMPIEZA Y DEFINICIÓN DEL ORDEN DE LA VARIABLE
# =========================================================

# Conversión a texto y limpieza

datos <- datos %>%
  mutate(
    clasificacion = as.character(clasificacion),
    clasificacion = trimws(clasificacion),
    clasificacion = tolower(clasificacion)
  )

# Orden de la variable ordinal

orden_clasificacion <- c(
  "exploracion",
  "explotacion",
  "servicio"
)

# Conversión a factor ordinal

datos <- datos %>%
  mutate(
    clasificacion = factor(
      clasificacion,
      levels = orden_clasificacion,
      ordered = TRUE
    )
  )

# =========================================================
# 3. TABLA DE DISTRIBUCIÓN DE FRECUENCIAS
# =========================================================

# 3.1. Cálculo de frecuencias

TDFClasificacion <- datos %>%
  filter(!is.na(clasificacion)) %>%
  count(clasificacion, name = "ni") %>%
  arrange(clasificacion) %>%
  mutate(
    hi = (ni / sum(ni)) * 100,
    Ni = cumsum(ni),
    Hi = cumsum(hi)
  )

# =========================================================
# 3.2. TABLA DE FRECUENCIAS
# =========================================================

TDFClasificacion_total <- TDFClasificacion %>%
  add_row(
    clasificacion = "Total",
    ni = sum(TDFClasificacion$ni),
    hi = sum(TDFClasificacion$hi),
    Ni = NA,
    Hi = NA
  )

TDFClasificacion_total
## # A tibble: 4 × 5
##   clasificacion     ni      hi     Ni     Hi
##   <chr>          <int>   <dbl>  <int>  <dbl>
## 1 exploracion    36296   9.08   36296   9.08
## 2 explotacion   362743  90.7   399039  99.8 
## 3 servicio         787   0.197 399826 100   
## 4 Total         399826 100         NA  NA
# =========================================================
# 3.3. PRESENTACIÓN DE LA TABLA
# =========================================================

tabla_presentacion <- TDFClasificacion_total %>%
  mutate(
    hi = round(hi, 4),
    Hi = round(Hi, 4)
  )

tabla_presentacion %>%
  gt() %>%
  tab_header(
    title = md("**Tabla Nro. 1**"),
    subtitle = md("Distribución de frecuencias de la clasificación
                  de pozos de gas y petróleo no convencional")
  ) %>%
  cols_label(
    clasificacion = "Clasificación",
    ni = "Frecuencia absoluta (ni)",
    hi = "Frecuencia relativa (%)",
    Ni = "Frecuencia acumulada (Ni)",
    Hi = "Frecuencia relativa acumulada (%)"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = clasificacion == "Total")
  ) %>%
  tab_source_note(
    source_note = md("Elaborado por: Grupo – Carrera de Petróleos")
  )
Tabla Nro. 1
Distribución de frecuencias de la clasificación de pozos de gas y petróleo no convencional
Clasificación Frecuencia absoluta (ni) Frecuencia relativa (%) Frecuencia acumulada (Ni) Frecuencia relativa acumulada (%)
exploracion 36296 9.0779 36296 9.0779
explotacion 362743 90.7252 399039 99.8032
servicio 787 0.1968 399826 100.0000
Total 399826 100.0000 NA NA
Elaborado por: Grupo – Carrera de Petróleos
# =========================================================
# 4. DATOS PARA GRÁFICOS
# =========================================================

categorias <- tabla_presentacion$clasificacion[
  -nrow(tabla_presentacion)
]

ni <- tabla_presentacion$ni[
  -nrow(tabla_presentacion)
]

hi <- tabla_presentacion$hi[
  -nrow(tabla_presentacion)
]

# =========================================================
# 5. GRÁFICOS DE BARRAS
# =========================================================

# =========================================================
# 5. GRÁFICOS DE BARRAS
# =========================================================

categorias <- tabla_presentacion$clasificacion[-nrow(tabla_presentacion)]

ni <- tabla_presentacion$ni[-nrow(tabla_presentacion)]

hi <- tabla_presentacion$hi[-nrow(tabla_presentacion)]

# =========================================================
# 5.1. FRECUENCIA ABSOLUTA
# =========================================================
options(scipen = 999)
par(mar = c(12, 5, 4, 2))

barplot(
  ni,
  names.arg = categorias,
  las = 1,
  col = "steelblue",
  main = "Gráfica 1: Distribución de frecuencia absoluta de la clasificación
de pozos no convencionales",
  ylab = "",
  xlab = "Clasificación",
  ylim = c(0, max(ni) * 1.15),
  cex.names = 0.9,
  cex.axis = 0.9
)

mtext(
  "Frecuencia absoluta (ni)",
  side = 2,
  line = 4
)

# =========================================================
# 5.2. FRECUENCIA RELATIVA
# =========================================================

par(mar = c(9, 5, 4, 2))

barplot(
  hi,
  names.arg = categorias,
  las = 1,
  col = "darkred",
  main = "Gráfica 2: Distribución de frecuencia relativa de la clasificación
de pozos no convencionales",
  ylab = "Frecuencia relativa (%)",
  xlab = "Clasificación",
  ylim = c(0, max(hi) * 1.15),
  cex.names = 0.9,
  cex.axis = 0.9
)

# =========================================================
# 6. DIAGRAMA CIRCULAR
# =========================================================

par(mar = c(5, 4, 4, 10))
par(xpd = TRUE)

hi_red <- round(hi, 4)

colores <- c(
  "#1f78b4",
  "#33a02c",
  "#ff7f00"
)

pie(
  hi_red,
  labels = paste0(hi_red, " %"),
  main = "Gráfica 3: Distribución porcentual de la clasificación
de pozos no convencionales",
  col = colores
)

legend(
  x = 1.3,
  y = 0,
  legend = paste0(
    categorias,
    " (", hi_red, "%)"
  ),
  fill = colores,
  bty = "n",
  cex = 0.9
)

par(xpd = FALSE)

# =========================================================
# 7. INDICADORES ESTADÍSTICOS
# =========================================================

# 7.1. Moda

indice_moda <- which.max(TDFClasificacion$ni)

moda <- TDFClasificacion$clasificacion[indice_moda]

# =========================================================
# 7.2. Mediana ordinal
# =========================================================

mediana <- categorias[
  which.min(abs(TDFClasificacion$Hi - 50))
]

# =========================================================
# 7.3. TABLA DE INDICADORES
# =========================================================

tabla_indicadores <- data.frame(
  Indicador = c("Moda", "Mediana"),
  Resultado = c(
    as.character(moda),
    as.character(mediana)
  )
)

tabla_indicadores %>%
  gt() %>%
  tab_header(
    title = md("**Tabla Nro. 2**"),
    subtitle = md("Indicadores estadísticos de la clasificación
                  de los pozos no convencionales")
  ) %>%
  cols_label(
    Indicador = "Indicador estadístico",
    Resultado = "Categoría resultante"
  ) %>%
  tab_source_note(
    source_note = md("Elaborado por: Grupo – Carrera de Petróleos")
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body()
  )
Tabla Nro. 2
Indicadores estadísticos de la clasificación de los pozos no convencionales
Indicador estadístico Categoría resultante
Moda explotacion
Mediana exploracion
Elaborado por: Grupo – Carrera de Petróleos
# =========================================================
# 8. CONCLUSIÓN
# =========================================================

cat(
  "La variable 'clasificación' corresponde a una variable ",
  "cualitativa ordinal, permitiendo aplicar indicadores ",
  "estadísticos como la moda y la mediana. El análisis realizado ",
  "permitió identificar la categoría más frecuente y la categoría ",
  "central dentro de la distribución acumulada de los pozos ",
  "de gas y petróleo no convencional analizados."
)
## La variable 'clasificación' corresponde a una variable  cualitativa ordinal, permitiendo aplicar indicadores  estadísticos como la moda y la mediana. El análisis realizado  permitió identificar la categoría más frecuente y la categoría  central dentro de la distribución acumulada de los pozos  de gas y petróleo no convencional analizados.