1. Configuración y Carga de Datos

Se carga el conjunto de datos de arrendamientos de hidrocarburos del estado de Kansas, EE.UU., registrados por el Kansas Geological Survey.

ruta_archivo <- file.choose()
datos_vale <- read_delim(ruta_archivo, delim = ";", show_col_types = FALSE)

cat("Dataset cargado correctamente.\n")
## Dataset cargado correctamente.
cat("Total de registros evaluados (filas):", nrow(datos_vale), "\n")
## Total de registros evaluados (filas): 104173

2. Extraer Variable

La variable SECTION (Sección) identifica la subdivisión de un township dentro del sistema PLSS (Public Land Survey System) utilizada para la localización precisa de cada pozo. Se eliminan los registros sin valor (NA o vacíos), y se conserva el 100% de las observaciones válidas para el análisis.

x_raw <- datos_vale %>%
  filter(!is.na(SECTION)) %>%
  pull(SECTION)

n <- length(x_raw)

cat("Observaciones válidas:", n, "\n")
## Observaciones válidas: 100840
cat("Secciones distintas:", length(unique(x_raw)), "\n")
## Secciones distintas: 2635

3. Ordenamiento Lógico

Se establece el orden lógico de la variable cualitativa ordinal Sección, respetando la progresión numérica natural de las 36 subdivisiones del township dentro del sistema PLSS: de la Sección 1 a la Sección 36. Este ordenamiento es fundamental para garantizar una correcta interpretación estadística y visual de los resultados.

# Definir el orden lógico de las categorías (Sección 1 -> Sección 36)
orden_logico <- as.character(1:36)

# Aplicar factor ordenado a la variable SECTION
datos <- datos_vale %>%
  filter(!is.na(SECTION)) %>%
  mutate(
    SECTION = factor(as.character(as.integer(SECTION)), levels = orden_logico, ordered = TRUE)
  )

# Verificar que el orden fue aplicado correctamente
cat("Orden de categorías establecido:\n")
## Orden de categorías establecido:
cat(paste(levels(datos$SECTION), collapse = " → "), "\n")
## 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9 → 10 → 11 → 12 → 13 → 14 → 15 → 16 → 17 → 18 → 19 → 20 → 21 → 22 → 23 → 24 → 25 → 26 → 27 → 28 → 29 → 30 → 31 → 32 → 33 → 34 → 35 → 36
cat("\nDistribución por sección:\n")
## 
## Distribución por sección:
print(table(datos$SECTION))
## 
##    1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
## 2622 2695 2878 2924 2638 2608 2538 2720 2590 2676 2739 2709 2734 2979 2784 2741 
##   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32 
## 2677 2754 2735 2667 2633 2801 2655 2553 2458 2594 2714 2598 2572 2641 2606 2538 
##   33   34   35   36 
## 2682 2708 2658 2542

4. Tabla de Distribución de Frecuencias

Se presenta la distribución de frecuencias completa de la variable Sección, con las 2,635 categorías registradas (Secciones 1 a 36) en Kansas, EE.UU. (n total = 100,840). Al tratarse de una variable ordinal, la tabla se ordena según la progresión lógica establecida en el punto anterior (y no por frecuencia), e incluye la frecuencia absoluta, el porcentaje, y sus respectivos acumulados. La tabla es interactiva: permite buscar una sección específica, ordenar por cualquier columna y ajustar el número de filas visibles, de modo que se conserva el 100% de la información sin omitir ninguna categoría.

tabla_freq <- datos %>%
  count(SECTION, name = "ni") %>%
  arrange(SECTION) %>%
  mutate(
    `hi_pct` = ni / n * 100,
    Ni       = cumsum(ni),
    Hi_pct   = cumsum(`hi_pct`)
  )

# Sin redondeo en hi_pct: se conserva el valor real de la Frecuencia Relativa
# tal como se calcula (ni/n*100), sin recortarlo a un número fijo de decimales.
tabla_completa <- data.frame(
  `Sección`                    = as.character(tabla_freq$SECTION),
  `Frecuencia Absoluta (ni)`   = tabla_freq$ni,
  `Porcentaje (hi%)`           = tabla_freq$hi_pct,
  `Frec. Acumulada (Ni)`       = tabla_freq$Ni,
  `Porcentaje Acumulado (Hi%)` = tabla_freq$Hi_pct,
  check.names = FALSE,
  stringsAsFactors = FALSE
)

datatable(
  tabla_completa,
  caption = paste0(
    "Cuadro N°1: Distribución de Frecuencias Completa — ",
    format(length(unique(x_raw)), big.mark = ","), " Secciones (1 a 36), ",
    "arrendamientos de hidrocarburos del estado de Kansas, EE.UU., ",
    "período histórico disponible (n total = ", format(n, big.mark = ","), " registros válidos)."
  ),
  rownames = FALSE,
  filter   = "top",
  options  = list(
    pageLength = 10,
    lengthMenu = c(10, 25, 36),
    order      = list(list(0, "asc")),
    scrollX    = TRUE
  )
) %>%
  formatStyle(columns = names(tabla_completa), fontSize = "90%") %>%
  formatStyle("Frecuencia Absoluta (ni)", fontWeight = "bold")
# Fila de TOTAL (suma de todas las categorías): confirma que la Frecuencia
# Absoluta suma exactamente n y la Frecuencia Relativa suma 100.00%.
tabla_total <- data.frame(
  Categoria = "TOTAL",
  ni        = format(n, big.mark = ","),
  hi_pct    = sprintf("%.2f", sum(tabla_freq$hi_pct)),
  stringsAsFactors = FALSE
)

kable(
  tabla_total,
  col.names = c("", "Frecuencia (ni)", "Porcentaje (hi%)"),
  align     = c("l", "c", "c"),
  escape    = FALSE
) %>%
  kable_styling(
    bootstrap_options = c("condensed", "bordered"),
    full_width = TRUE, font_size = 12
  ) %>%
  row_spec(1, bold = TRUE, background = "#a9a9a9", color = "black") %>%
  footnote(general = "Autor: Araujo Valeska", general_title = "", footnote_as_chunk = TRUE)
Frecuencia (ni) Porcentaje (hi%)
TOTAL 100,840 100.00
Autor: Araujo Valeska

5. Representación Gráfica

La variable Sección presenta 2,635 categorías (1 a 36). Para los diagramas de barras (Frecuencia Absoluta y Porcentaje), en lugar de dividir las categorías o recortar a un “Top 10”, se utilizan gráficas interactivas (Plotly): las 36 secciones se muestran juntas en un único gráfico, y al pasar el cursor (hover) sobre cada barra se despliega el valor exacto de frecuencia y porcentaje; además es posible hacer zoom sobre un rango de secciones, desplazarse (pan) y restablecer la vista, lo que permite revisar los datos sección por sección sin perder de vista el conjunto completo. El diagrama circular (5.3) se mantiene como gráfico estático, ahora con una paleta de colores bien diferenciados para cada una de las 36 secciones. Todas las gráficas respetan el ordenamiento lógico (ascendente, Sección 1 → Sección 36) establecido en el punto 3.

# Se reutiliza el mismo orden lógico ya establecido (SECTION como factor ordenado)
# y las frecuencias calculadas en el Cuadro N°1, para garantizar idéntico orden
# entre tabla y gráficas.
categorias <- as.character(tabla_freq$SECTION)
ni         <- as.integer(tabla_freq$ni)
hi_pct     <- as.numeric(tabla_freq$hi_pct)

# Paleta de colores para las barras interactivas (degradado azul)
colores_interactivo <- colorRampPalette(c("#c6dbef", "#08306b"))(length(categorias))

5.1 Gráfica N°1 — Diagrama de Barras Interactivo (Frecuencia Absoluta)

plot_ly(
  x = factor(categorias, levels = categorias),
  y = ni,
  type = "bar",
  marker = list(color = colores_interactivo, line = list(color = "black", width = 0.8)),
  text = paste0(
    "Sección ", categorias,
    "<br>Frecuencia (nᵢ): ", format(ni, big.mark = ","),
    "<br>Porcentaje (hᵢ%): ", round(hi_pct, 2), "%"
  ),
  hoverinfo = "text"
) %>%
  layout(
    title  = list(text = "Gráfica N°1: Diagrama de Barras — Frecuencia Absoluta (Secciones 1 a 36)", font = list(size = 14)),
    xaxis  = list(title = "Sección", tickangle = -45, type = "category"),
    yaxis  = list(title = "Frecuencia Absoluta (nᵢ)"),
    bargap = 0.15,
    margin = list(t = 60)
  )

5.2 Gráfica N°2 — Diagrama de Barras Interactivo (Porcentaje)

plot_ly(
  x = factor(categorias, levels = categorias),
  y = hi_pct,
  type = "bar",
  marker = list(color = colores_interactivo, line = list(color = "black", width = 0.8)),
  text = paste0(
    "Sección ", categorias,
    "<br>Porcentaje (hᵢ%): ", round(hi_pct, 2), "%",
    "<br>Frecuencia (nᵢ): ", format(ni, big.mark = ",")
  ),
  hoverinfo = "text"
) %>%
  layout(
    title  = list(text = "Gráfica N°2: Diagrama de Barras — Porcentaje (Secciones 1 a 36)", font = list(size = 14)),
    xaxis  = list(title = "Sección", tickangle = -45, type = "category"),
    yaxis  = list(title = "Porcentaje (hᵢ %)"),
    bargap = 0.15,
    margin = list(t = 60)
  )

5.3 Gráfica N°3 — Diagrama Circular (Distribución Porcentual, todas las Secciones)

pct_circ <- setNames(hi_pct, categorias)

# Paleta de colores bien diferenciados (una tonalidad distinta por cada una
# de las 36 secciones), en lugar de escala de grises o gradiente continuo.
colores_c <- rainbow(length(pct_circ))

par(mar = c(2, 2, 6, 10), xpd = TRUE)
pie(
  as.numeric(pct_circ),
  labels  = NA,
  col     = colores_c,
  border  = "black",
  main    = "",
  radius  = 1,
  cex     = 0.7
)
legend(
  x      = 1.15,
  y      = 1,
  legend = paste0("Sec. ", categorias, " (", format(ni, big.mark = ","), " | ", round(hi_pct, 2), "%)"),
  fill   = colores_c,
  cex    = 0.55,
  ncol   = 2,
  title  = "Sección (nᵢ | hᵢ%)",
  bty    = "n"
)
mtext(
  "Gráfica N°3: Diagrama Circular — Distribución Porcentual\nSecciones 1 a 36, Kansas, EE.UU.",
  side = 3, line = 3.5, cex = 0.9, font = 2
)


6. Indicadores Estadísticos

moda_val     <- names(sort(table(x_raw), decreasing = TRUE))[1]
moda_n       <- max(table(x_raw))
n_categorias <- length(unique(x_raw))
mediana_val  <- median(as.numeric(x_raw))

tabla_indicadores <- data.frame(
  Indicador = c(
    "Variable",
    "Tipo de variable",
    "Categorías (Rango)",
    "Moda (Mo)",
    "Mediana (Me)",
    "Media (X̄)",
    "Varianza (V)",
    "Desv. Estándar (Sd)",
    "Coef. Variación (CV%)",
    "Asimetría (As)",
    "Curtosis (K)"
  ),
  Valor = c(
    "Sección",
    "Cualitativa Ordinal",
    paste0(format(n_categorias, big.mark = ","), " secciones (1 a 36)"),
    paste("Sección", moda_val),
    paste("Sección", mediana_val),
    "—",
    "—",
    "—",
    "—",
    "—",
    "—"
  ),
  stringsAsFactors = FALSE
)

tabla_indicadores %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°2: Indicadores Estadísticos**"),
    subtitle = md("*Variable Cualitativa Ordinal: Sección*")
  ) %>%
  cols_label(
    Indicador = md("**Indicador**"),
    Valor     = md("**Valor**")
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#2C2C2C"),
      cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = cell_fill(color = "#F5F5F5"),
    locations = cells_body(rows = seq(1, nrow(tabla_indicadores), by = 2))
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#D6D6D6"),
      cell_text(weight = "bold")
    ),
    locations = cells_body(
      rows    = Indicador %in% c("Moda (Mo)", "Mediana (Me)"),
      columns = everything()
    )
  ) %>%
  tab_style(
    style = cell_text(style = "italic", color = "gray40"),
    locations = cells_body(
      rows    = Valor == "—",
      columns = Valor
    )
  ) %>%
  tab_source_note(source_note = md("*Autor: Araujo Valeska*")) %>%
  tab_options(
    table.width                = pct(60),
    heading.title.font.size    = px(16),
    heading.subtitle.font.size = px(12),
    table.font.size            = px(13),
    data_row.padding           = px(6)
  )
Tabla N°2: Indicadores Estadísticos
Variable Cualitativa Ordinal: Sección
Indicador Valor
Variable Sección
Tipo de variable Cualitativa Ordinal
Categorías (Rango) 2,635 secciones (1 a 36)
Moda (Mo) Sección 14
Mediana (Me) Sección NA
Media (X̄)
Varianza (V)
Desv. Estándar (Sd)
Coef. Variación (CV%)
Asimetría (As)
Curtosis (K)
Autor: Araujo Valeska

7. Conclusiones

La variable Sección es una variable cualitativa ordinal cuyas 2,635 categorías corresponden a las subdivisiones numeradas del sistema PLSS (Secciones 1 a 36) dentro de cada township de Kansas. El establecimiento del ordenamiento lógico (ascendente, de la Sección 1 a la Sección 36) resultó fundamental para garantizar que tanto la tabla de frecuencias como las gráficas reflejen la progresión natural de la variable, en lugar de un ordenamiento arbitrario por frecuencia. Su valor más frecuente (moda) es la Sección 14, con una participación del 2.95% en la muestra, mientras que la mediana se ubica en la Sección NA. La distribución observada es relativamente homogénea entre las 36 secciones, lo cual es consistente con la naturaleza geográfica y administrativa —más que productiva— de esta variable.


Autor: Araujo Valeska | Análisis Estadístico — Kansas Hydrocarbon Leases Dataset