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_csv(ruta_archivo, 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): 47757

2. Extracción y Limpieza de la Variable

La variable PRODUCING_FORMATION (Formación Productora) identifica la formación geológica de la cual se extrae el hidrocarburo en cada arrendamiento. Se eliminan los registros sin valor (NA o vacíos). Para el análisis se presenta la distribución de frecuencias completa (todas las categorías), y un resumen gráfico de las 10 categorías más representativas.

x_raw <- datos_vale %>%
  filter(!is.na(PRODUCING_FORMATION), PRODUCING_FORMATION != "") %>%
  pull(PRODUCING_FORMATION)

n <- length(x_raw)

cat("Observaciones válidas:", n, "\n")
## Observaciones válidas: 47756
cat("Formaciones distintas:", length(unique(x_raw)), "\n")
## Formaciones distintas: 313

3. Identificación de la Variable

Criterio Clasificación
Nombre Formación Productora
Nombre técnico PRODUCING_FORMATION
Tipo Cualitativa
Subtipo Nominal policotómica
Dominio Nombres de formaciones geológicas productoras
Rango Múltiples categorías
Unidad No aplica
Escala Nominal
Fuente Kansas Geological Survey – Kansas, EE.UU.

Justificación: La variable registra nombres de formaciones geológicas sin orden natural entre ellas. Corresponde a una variable cualitativa nominal policotómica. Se analiza a través de la distribución de frecuencias completa de sus categorías.


4. Tabla de Distribución de Frecuencias

Se presenta la distribución de frecuencias completa de la variable Formación Productora, con las 313 categorías registradas en Kansas, EE.UU. (n total = 47,756). La tabla es interactiva: permite buscar una formació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.

freq_completa <- sort(table(x_raw), decreasing = TRUE)

categorias_todas <- names(freq_completa)
ni_todas          <- as.integer(freq_completa)
hi_pct_todas      <- ni_todas / n * 100
hi_frac_todas     <- ni_todas / n

# NOTA: se conservan los valores numéricos SIN pre-redondear (round() antes de
# datatable() hacía que 0.0021% se mostrara como "0" desnudo, perdiendo los
# decimales). El redondeo ahora lo aplica DT vía formatRound(), que sí
# conserva los decimales fijos aunque el valor sea muy cercano a 0.
tabla_completa <- data.frame(
  `Formación Productora`       = categorias_todas,
  `Frecuencia Absoluta (nᵢ)`   = ni_todas,
  `Frecuencia Relativa (hᵢ %)` = hi_pct_todas,
  `Probabilidad (hᵢ)`          = hi_frac_todas,
  check.names = FALSE,
  stringsAsFactors = FALSE
)

datatable(
  tabla_completa,
  caption = paste0(
    "Cuadro N°1: Distribución de Frecuencias Completa — ",
    format(length(categorias_todas), big.mark = ","), " Formaciones Productoras distintas, ",
    "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, 50, 100),
    order      = list(list(1, "desc")),
    scrollX    = TRUE
  )
) %>%
  formatStyle(columns = names(tabla_completa), fontSize = "90%") %>%
  formatStyle("Frecuencia Absoluta (nᵢ)", fontWeight = "bold") %>%
  formatRound("Frecuencia Relativa (hᵢ %)", digits = 2) %>%
  formatRound("Probabilidad (hᵢ)", digits = 4)

Debido al elevado número de categorías (313 formaciones distintas), representarlas todas resultaría poco práctico tanto para la lectura de la tabla como para su análisis. Por ello, a partir de este punto se trabaja únicamente con el Top 10 por frecuencia absoluta, con el fin de facilitar la lectura e interpretación de los resultados. La tabla completa presentada arriba (Cuadro N°1) se conserva únicamente como referencia, con el 100% de la información disponible.

4.1 Top 10 de categorías con mayor frecuencia absoluta

top10      <- head(freq_completa, 10)
categorias <- names(top10)
ni         <- as.integer(top10)
hi_pct     <- ni / n * 100

tabla_top10 <- data.frame(
  `Formación Productora` = categorias,
  `Frecuencia (ni)`       = ni,
  `Porcentaje (hi%)`      = round(hi_pct, 2),
  check.names = FALSE,
  stringsAsFactors = FALSE
)

kable(
  tabla_top10,
  caption = paste0(
    "Cuadro N°2: Top 10 Formaciones Productoras con Mayor Frecuencia Absoluta — ",
    "arrendamientos de hidrocarburos del estado de Kansas, EE.UU. ",
    "(n total = ", format(n, big.mark = ","), " registros válidos)."
  ),
  align  = c("l", "c", "c"),
  escape = FALSE
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "bordered"),
    full_width = TRUE, font_size = 12
  ) %>%
  row_spec(0, bold = TRUE, background = "#d3d3d3", color = "black") %>%
  footnote(general = "Autor: Araujo Valeska", general_title = "", footnote_as_chunk = TRUE)
Cuadro N°2: Top 10 Formaciones Productoras con Mayor Frecuencia Absoluta — arrendamientos de hidrocarburos del estado de Kansas, EE.UU. (n total = 47,756 registros válidos).
Formación Productora Frecuencia (ni) Porcentaje (hi%)
UNKNOWN 32073 67.16
Mississippian System 3351 7.02
Chase Group 2053 4.30
Arbuckle Group 1963 4.11
Lansing Group 1509 3.16
Kansas City Group 696 1.46
Council Grove Group 559 1.17
Upper Kearny Member 559 1.17
Bevier Coal Bed 555 1.16
Marmaton Group 313 0.66
Autor: Araujo Valeska

5. Representación Gráfica

A partir del Top 10 de categorías con mayor frecuencia absoluta (Cuadro N°2) se construyen las siguientes gráficas, que permiten un resumen visual claro y comprensible de las formaciones con mayor participación. La información completa de las 313 categorías —sin ningún dato omitido— queda disponible en la tabla interactiva del Cuadro N°1.

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

# Se reutiliza el mismo Top 10 ya ordenado por frecuencia (categorias/ni)
# calculado en el Cuadro N°2, para garantizar idéntico orden entre tabla y gráfica.
top10_ord <- setNames(ni, categorias)
colores_g <- gray(seq(0.30, 0.80, length.out = length(top10_ord)))

par(mar = c(10, 6, 7, 2))
bp <- barplot(
  as.numeric(top10_ord),
  names.arg = names(top10_ord),
  col       = colores_g,
  border    = "black",
  ylim      = c(0, max(as.numeric(top10_ord)) * 1.18),
  xlab      = "", ylab = "", main = "", las = 2, cex.names = 0.7
)
text(bp, as.numeric(top10_ord) + max(as.numeric(top10_ord)) * 0.02,
     labels = format(as.numeric(top10_ord), big.mark = ","), cex = 0.8)
mtext("Frecuencia Absoluta (nᵢ)", side = 2, line = 4.5, cex = 1)
mtext("Formación Productora",      side = 1, line = 8.5, cex = 1)
mtext(
  "Gráfica N°1: Diagrama de Barras — Frecuencia Absoluta\nTop 10 Formaciones Productoras, Kansas, EE.UU.",
  side = 3, line = 3.5, cex = 0.9, font = 2
)

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

# Mismo orden y categorías que el Cuadro N°2 (hi_pct ya viene alineado con categorias)
pct_ord <- setNames(hi_pct, categorias)

par(mar = c(10, 6, 7, 2))
bp2 <- barplot(
  as.numeric(pct_ord),
  names.arg = names(pct_ord),
  col       = colores_g,
  border    = "black",
  ylim      = c(0, max(as.numeric(pct_ord)) * 1.18),
  xlab      = "", ylab = "", main = "", las = 2, cex.names = 0.7
)
text(bp2, as.numeric(pct_ord) + max(as.numeric(pct_ord)) * 0.02,
     labels = paste0(round(as.numeric(pct_ord), 2), "%"), cex = 0.8)
mtext("Porcentaje (hᵢ %)",       side = 2, line = 4.5, cex = 1)
mtext("Formación Productora",     side = 1, line = 8.5, cex = 1)
mtext(
  "Gráfica N°2: Diagrama de Barras — Porcentaje\nTop 10 Formaciones Productoras, Kansas, EE.UU.",
  side = 3, line = 3.5, cex = 0.9, font = 2
)

5.3 Gráfica N°3 — Diagrama Circular (Distribución Porcentual — Top 10)

# Mismo orden y categorías que el Cuadro N°2
pct_circ <- setNames(hi_pct, categorias)
grises_c <- gray(seq(0.15, 0.85, length.out = length(pct_circ)))

par(mar = c(2, 2, 6, 12), xpd = TRUE)
pie(
  as.numeric(pct_circ),
  labels  = paste0(round(as.numeric(pct_circ), 2), "%"),
  col     = grises_c,
  border  = "black",
  main    = "",
  radius  = 1,
  cex     = 0.85
)
legend(
  x      = 1.2,
  y      = 1,
  legend = paste0(categorias, " (", format(ni, big.mark = ","), ")"),
  fill   = grises_c,
  cex    = 0.7,
  title  = "Formación (nᵢ)",
  bty    = "n"
)
mtext(
  "Gráfica N°3: Diagrama Circular — Distribución Porcentual\nTop 10 Formaciones Productoras, Kansas, EE.UU.",
  side = 3, line = 3.5, cex = 0.9, font = 2
)


6. Tabla de Indicadores

moda_val     <- names(sort(table(x_raw), decreasing = TRUE))[1]
moda_n       <- max(table(x_raw))
n_categorias <- length(unique(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(
    "Formación Productora",
    "Cualitativa Nominal Policotómica",
    paste0(format(n_categorias, big.mark = ","), " formaciones distintas"),
    moda_val,
    "—",
    "—",
    "—",
    "—",
    "—",
    "—",
    "—"
  ),
  stringsAsFactors = FALSE
)

tabla_indicadores %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°3: Indicadores Estadísticos**"),
    subtitle = md("*Variable Cualitativa Nominal: Formación Productora*")
  ) %>%
  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 == "Moda (Mo)",
      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°3: Indicadores Estadísticos
Variable Cualitativa Nominal: Formación Productora
Indicador Valor
Variable Formación Productora
Tipo de variable Cualitativa Nominal Policotómica
Categorías (Rango) 313 formaciones distintas
Moda (Mo) UNKNOWN
Mediana (Me)
Media (X̄)
Varianza (V)
Desv. Estándar (Sd)
Coef. Variación (CV%)
Asimetría (As)
Curtosis (K)
Autor: Araujo Valeska

7. Conclusión

La variable Formación Productora es una variable cualitativa nominal policotómica cuyas categorías corresponden a las 313 formaciones geológicas productoras distintas registradas en Kansas. Su valor más frecuente (moda) es “UNKNOWN”, con una participación del 67.16% en la muestra, lo que evidencia la concentración de los arrendamientos de hidrocarburos en un número reducido de formaciones frente a la alta dispersión del resto de categorías.


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