# 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.