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 RANGE_DIRECTION (Dirección Range) indica la orientación este u oeste del range respecto al meridiano principal del sistema de referencia PLSS (Public Land Survey System). Se eliminan los registros sin valor (NA o vacíos).

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

n <- length(x_raw)

cat("Observaciones válidas:", n, "\n")
## Observaciones válidas: 47757
cat("Categorías distintas:", length(unique(x_raw)), "\n")
## Categorías distintas: 2

3. Identificación de la Variable

Criterio Clasificación
Nombre Dirección Range
Nombre técnico RANGE_DIRECTION
Tipo Cualitativa
Subtipo Nominal dicotómica
Dominio D = { x | x ∈ {E, W} }
Rango R = { x | x ∈ {E, W} }
Unidad No aplica
Escala Nominal
Fuente Kansas Geological Survey – Kansas, EE.UU.

Justificación: La variable indica una orientación (Este/Oeste) sin orden natural entre sus categorías, por lo que corresponde a una variable cualitativa nominal dicotómica. A diferencia de Dirección Township, en este dataset ambas categorías del dominio (“E” y “W”) están efectivamente presentes, por lo que sí existe variabilidad para analizar.


4. Tabla de Distribución de Frecuencias

Se presenta la distribución de frecuencias completa de la variable Dirección Range, con las 2 categorías registradas (n total = 47,757).

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

tabla_completa <- data.frame(
  Categoria = categorias_todas,
  ni        = ni_todas,
  hi_pct    = hi_pct_todas,
  stringsAsFactors = FALSE
)

tabla_total <- data.frame(
  Categoria = "TOTAL",
  ni        = n,
  hi_pct    = sum(hi_pct_todas),
  stringsAsFactors = FALSE
)

tabla_gt <- bind_rows(tabla_completa, tabla_total)

tabla_gt %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°1: Distribución de Frecuencias**"),
    subtitle = md("*Variable Cualitativa Nominal: Dirección Range*")
  ) %>%
  cols_label(
    Categoria = md("**Dirección Range**"),
    ni        = md("**Frecuencia (ni)**"),
    hi_pct    = md("**Porcentaje (hi%)**")
  ) %>%
  fmt_integer(columns = ni) %>%
  fmt_number(columns = hi_pct, decimals = 2) %>%
  cols_align(align = "center", columns = c(ni, hi_pct)) %>%
  cols_align(align = "left", columns = Categoria) %>%
  tab_style(
    style = list(
      cell_fill(color = "#000000"),
      cell_text(color = "white", weight = "bold")
    ),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = cell_text(color = "#1F618D", weight = "bold"),
    locations = cells_body(
      columns = Categoria,
      rows    = Categoria != "TOTAL"
    )
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#D9D9D9"),
      cell_text(weight = "bold")
    ),
    locations = cells_body(rows = Categoria == "TOTAL")
  ) %>%
  tab_style(
    style = cell_borders(sides = "top", color = "black", weight = px(2)),
    locations = cells_body(rows = Categoria == "TOTAL")
  ) %>%
  tab_source_note(source_note = md("*Autor: Araujo Valeska*")) %>%
  tab_options(
    table.width                = pct(70),
    table.border.top.color     = "black",
    table.border.bottom.color  = "black",
    column_labels.border.bottom.color = "black",
    heading.title.font.size    = px(16),
    heading.subtitle.font.size = px(12),
    table.font.size            = px(13),
    data_row.padding           = px(8)
  )
Tabla N°1: Distribución de Frecuencias
Variable Cualitativa Nominal: Dirección Range
Dirección Range Frecuencia (ni) Porcentaje (hi%)
W 35,562 74.46
E 12,195 25.54
TOTAL 47,757 100.00
Autor: Araujo Valeska

5. Representación Gráfica

La variable Dirección Range presenta únicamente 2 categorías, por lo que —a diferencia de variables con alta cardinalidad como Nombre del Campo— se grafica el 100% de las categorías, sin necesidad de limitar a un top 10.

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

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

top_ord <- setNames(ni, categorias)
colores_g <- gray(seq(0.30, 0.70, length.out = length(top_ord)))

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

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

pct_ord <- setNames(hi_pct, categorias)

par(mar = c(6, 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 = 1, cex.names = 1
)
text(bp2, as.numeric(pct_ord) + max(as.numeric(pct_ord)) * 0.02,
     labels = paste0(round(as.numeric(pct_ord), 2), "%"), cex = 0.9)
mtext("Porcentaje (hᵢ %)", side = 2, line = 4.5, cex = 1)
mtext("Dirección Range",    side = 1, line = 3, cex = 1)
mtext(
  "Gráfica N°2: Diagrama de Barras — Porcentaje\nDirección Range, Kansas, EE.UU.",
  side = 3, line = 3.5, cex = 0.9, font = 2
)

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

pct_circ <- setNames(hi_pct, categorias)
grises_c <- gray(seq(0.30, 0.70, length.out = length(pct_circ)))

par(mar = c(2, 2, 6, 10), 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.9
)
legend(
  x      = 1.1,
  y      = 1,
  legend = paste0(categorias, " (", format(ni, big.mark = ","), ")"),
  fill   = grises_c,
  cex    = 0.8,
  title  = "Dirección (nᵢ)",
  bty    = "n"
)
mtext(
  "Gráfica N°3: Diagrama Circular — Distribución Porcentual\nDirección Range, 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(
    "Dirección Range",
    "Cualitativa Nominal Dicotómica",
    paste0(format(n_categorias, big.mark = ","), " categorías: ",
           paste(sort(unique(x_raw)), collapse = ", ")),
    moda_val,
    "—",
    "—",
    "—",
    "—",
    "—",
    "—",
    "—"
  ),
  stringsAsFactors = FALSE
)

tabla_indicadores %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°2: Indicadores Estadísticos**"),
    subtitle = md("*Variable Cualitativa Nominal: Dirección Range*")
  ) %>%
  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°2: Indicadores Estadísticos
Variable Cualitativa Nominal: Dirección Range
Indicador Valor
Variable Dirección Range
Tipo de variable Cualitativa Nominal Dicotómica
Categorías (Rango) 2 categorías: E, W
Moda (Mo) W
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 Dirección Range es una variable cualitativa nominal dicotómica cuyas dos categorías, “E” y “W”, están efectivamente presentes en el 47,757-registro conjunto de datos analizado. Su valor más frecuente (moda) es “W”, con una participación del 74.46%, frente a 25.54% de la categoría “E”. A diferencia de Dirección Township, esta variable sí presenta variabilidad y podría aportar poder discriminante en análisis geográficos o de segmentación por orientación de los pozos.


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