1 Configuración y Carga de Datos

Para iniciar el procesamiento estadístico inferencial, se verifica la estructura global del conjunto de datos correspondientes a los bloques contractuales y arrendamientos de hidrocarburos en el estado de Kansas. Esto permite asegurar la integridad de los registros de forma eficiente.

datos <- read_csv("C:/Users/luisq/Downloads/oil_and_gas_leases_data.csv",
                  show_col_types = FALSE)
cat("Base de datos cargada correctamente.\n")
## Base de datos cargada correctamente.
cat("Total de registros evaluados (filas):", nrow(datos), "\n")
## Total de registros evaluados (filas): 47757

2 Extraer Variable

A partir de la base de datos consolidada, se realiza el aislamiento de la variable cualitativa ordinal Sección (SECCION), mapeada desde la columna técnica SECTION. Dado que esta variable presenta 36 categorías únicas (valores del 1 al 36), superior al límite de 10 categorías establecido por la cátedra, se aplica una estrategia de agrupación para facilitar el análisis estadístico.

datos <- datos %>%
  filter(!is.na(SECTION)) %>%
  mutate(SECCION = as.integer(SECTION))
variable_section <- datos %>% select(SECCION)

3 Tabla de Distribución de Frecuencias

Se presentan dos versiones de agrupación para esta variable, ambas respetando la estructura de tres columnas estipulada por la cátedra.

Versión A — Agrupación por Rangos

Se agrupan las 36 secciones en 6 rangos de igual amplitud (6 secciones cada uno), siguiendo el orden natural del sistema PLSS.

# Agrupación en 6 rangos de igual amplitud
datos_a <- datos %>%
  mutate(Grupo_Seccion = case_when(
    SECCION >= 1  & SECCION <= 6  ~ "Secciones 1 - 6",
    SECCION >= 7  & SECCION <= 12 ~ "Secciones 7 - 12",
    SECCION >= 13 & SECCION <= 18 ~ "Secciones 13 - 18",
    SECCION >= 19 & SECCION <= 24 ~ "Secciones 19 - 24",
    SECCION >= 25 & SECCION <= 30 ~ "Secciones 25 - 30",
    SECCION >= 31 & SECCION <= 36 ~ "Secciones 31 - 36"
  )) %>%
  mutate(Grupo_Seccion = factor(Grupo_Seccion, levels = c(
    "Secciones 1 - 6", "Secciones 7 - 12", "Secciones 13 - 18",
    "Secciones 19 - 24", "Secciones 25 - 30", "Secciones 31 - 36"
  )))

frecuencias_a <- datos_a %>%
  group_by(Seccion = Grupo_Seccion, .drop = FALSE) %>%
  summarise(Frecuencia_ni = n(), .groups = "drop") %>%
  arrange(Seccion)

tabla_a <- frecuencias_a %>%
  mutate(Porcentaje_hi = (Frecuencia_ni / sum(Frecuencia_ni)) * 100)

total_a <- data.frame(
  Seccion       = "TOTAL",
  Frecuencia_ni = sum(tabla_a$Frecuencia_ni),
  Porcentaje_hi = sum(tabla_a$Porcentaje_hi)
)

resultado_a <- bind_rows(
  tabla_a %>% mutate(Porcentaje_hi = sprintf("%.2f", Porcentaje_hi),
                     Seccion = as.character(Seccion)),
  total_a %>% mutate(Porcentaje_hi = sprintf("%.2f", Porcentaje_hi))
)

kable(
  resultado_a,
  caption   = "Tabla N°1A — Distribución de Frecuencias de Sección (Agrupación por Rangos)",
  col.names = c("Sección (Rango)", "Frecuencia (ni)", "Porcentaje (hi%)"),
  align     = c("l", "c", "c")
)
Tabla N°1A — Distribución de Frecuencias de Sección (Agrupación por Rangos)
Sección (Rango) Frecuencia (ni) Porcentaje (hi%)
Secciones 1 - 6 8012 16.78
Secciones 7 - 12 8050 16.86
Secciones 13 - 18 8159 17.08
Secciones 19 - 24 7916 16.58
Secciones 25 - 30 7813 16.36
Secciones 31 - 36 7807 16.35
TOTAL 47757 100.00

Versión B — Top 10 + Otros

Se presentan las 10 secciones con mayor frecuencia y el resto se agrupa como “Otras secciones”.

# Top 10 secciones más frecuentes
top10_section <- datos %>%
  count(SECCION, sort = TRUE) %>%
  slice_head(n = 10) %>%
  pull(SECCION)

datos_b <- datos %>%
  mutate(Grupo_Seccion = ifelse(SECCION %in% top10_section,
                                paste0("Sección ", SECCION),
                                "Otras secciones")) %>%
  mutate(Grupo_Seccion = factor(Grupo_Seccion,
                                levels = c(paste0("Sección ", top10_section),
                                           "Otras secciones")))

frecuencias_b <- datos_b %>%
  group_by(Seccion = Grupo_Seccion, .drop = FALSE) %>%
  summarise(Frecuencia_ni = n(), .groups = "drop") %>%
  arrange(Seccion)

tabla_b <- frecuencias_b %>%
  mutate(Porcentaje_hi = (Frecuencia_ni / sum(Frecuencia_ni)) * 100)

total_b <- data.frame(
  Seccion       = "TOTAL",
  Frecuencia_ni = sum(tabla_b$Frecuencia_ni),
  Porcentaje_hi = sum(tabla_b$Porcentaje_hi)
)

resultado_b <- bind_rows(
  tabla_b %>% mutate(Porcentaje_hi = sprintf("%.2f", Porcentaje_hi),
                     Seccion = as.character(Seccion)),
  total_b %>% mutate(Porcentaje_hi = sprintf("%.2f", Porcentaje_hi))
)

kable(
  resultado_b,
  caption   = "Tabla N°1B — Distribución de Frecuencias de Sección (Top 10 + Otros)",
  col.names = c("Sección", "Frecuencia (ni)", "Porcentaje (hi%)"),
  align     = c("l", "c", "c")
)
Tabla N°1B — Distribución de Frecuencias de Sección (Top 10 + Otros)
Sección Frecuencia (ni) Porcentaje (hi%)
Sección 3 1455 3.05
Sección 15 1413 2.96
Sección 4 1409 2.95
Sección 27 1405 2.94
Sección 34 1394 2.92
Sección 22 1382 2.89
Sección 8 1378 2.89
Sección 16 1373 2.87
Sección 11 1361 2.85
Sección 17 1361 2.85
Otras secciones 33826 70.83
TOTAL 47757 100.00

Autor: Grupo 6