1. Configuración y Carga de Datos

Para iniciar el procesamiento estadístico, se verifica la estructura global del conjunto de datos correspondientes a los bloques contractuales y arrendamientos de hidrocarburos en el estado de Kansas.

ruta_csv <- "C:/Users/luisq/OneDrive/Desktop/ESTADISTICA/kansas.csv"
datos <- read_delim(ruta_csv, delim = ";", show_col_types = FALSE)
cat("Data set cargada correctamente.\n")
## Data set cargada correctamente.
cat("Total de registros (filas):", nrow(datos), "\n")
## Total de registros (filas): 104173

2. Extraer Variable

Se realiza el aislamiento de la variable cuantitativa discreta RANGE, que representa la división este-oeste del sistema de agrimensura rectangular (PLSS) utilizado en Kansas. Sus valores son números enteros contables que indican la posición este-oeste de cada arrendamiento respecto al meridiano base. Se filtran únicamente los valores válidos en el rango 1–43.

x_raw <- datos %>%
  mutate(RNG = suppressWarnings(as.integer(RANGE))) %>%
  filter(!is.na(RNG), RNG >= 1, RNG <= 43) %>%
  pull(RNG)

n_unique <- length(unique(x_raw))
cat("Observaciones válidas:", length(x_raw), "\n")
## Observaciones válidas: 98826
cat("Valores únicos:", n_unique, "\n")
## Valores únicos: 43
cat("Como hay", n_unique, "> 10 valores únicos, se agrupa en intervalos de clase (máx. 10).\n")
## Como hay 43 > 10 valores únicos, se agrupa en intervalos de clase (máx. 10).

3. Determinación de los Intervalos

Aunque RANGE es una variable cuantitativa discreta, presenta 43 valores únicos, lo que supera el umbral de 10. Por esta razón, se la trata como variable continua agrupada en intervalos de clase: con tantos valores distintos, listarlos individualmente no aporta información útil y el agrupamiento permite identificar patrones de distribución geográfica de forma clara y comparable. Los intervalos se construyen con notación \([L_i, L_s)\) —cerrado a la izquierda, abierto a la derecha—, excepto el último que se cierra en ambos extremos, aplicando el criterio de máximo 10 intervalos.

\[k = 10 \quad \text{(máximo permitido)} \qquad c = \left\lceil \frac{\max - \min}{k} \right\rceil\]

x         <- x_raw
n         <- length(x)
x_min     <- min(x)
x_max     <- max(x)
rango_val <- x_max - x_min

k      <- 10
c_amp  <- ceiling(rango_val / k)

cat("n =", n, "| k =", k, "| Rango =", rango_val, "| Amplitud c =", c_amp, "\n")
## n = 98826 | k = 10 | Rango = 42 | Amplitud c = 5
lim_inf    <- x_min + (0:(k - 1)) * c_amp
lim_sup    <- lim_inf + c_amp
lim_sup[k] <- x_max + 1
mc         <- floor((lim_inf + lim_sup) / 2)
breaks_vec <- c(lim_inf, lim_sup[k])

4. Tabla de Distribución de Frecuencias

Se calcula la distribución de frecuencias absolutas y relativas para la variable cuantitativa discreta agrupada Range, correspondiente a los arrendamientos de hidrocarburos registrados en Kansas, EE.UU.

intervalos_cut <- cut(x, breaks = breaks_vec, right = FALSE, include.lowest = TRUE)
freq_abs       <- as.integer(table(intervalos_cut))

li <- lim_inf
ls <- lim_sup

hi_dec  <- freq_abs / n
Ni_asc  <- cumsum(freq_abs)
Hi_asc  <- cumsum(hi_dec)
Ni_desc <- n - c(0, head(Ni_asc, -1))
Hi_desc <- 1 - c(0, head(Hi_asc, -1))

etiq_intervalo    <- paste0("[", li, " – ", ls, ")")
etiq_intervalo[k] <- paste0("[", li[k], " – ", ls[k] - 1, "]")

tabla_df <- data.frame(
  Intervalo = etiq_intervalo,
  MC        = as.integer(mc),
  ni        = freq_abs,
  hi_pct    = round(hi_dec * 100, 2),
  hi_real   = round(hi_dec, 4),
  Ni_a      = Ni_asc,
  Hi_a      = round(Hi_asc, 4),
  Ni_d      = Ni_desc,
  Hi_d      = round(Hi_desc, 4),
  stringsAsFactors = FALSE
)

total_row <- data.frame(
  Intervalo = "TOTAL",
  MC        = NA_integer_,
  ni        = sum(freq_abs),
  hi_pct    = round(sum(hi_dec) * 100, 2),
  hi_real   = round(sum(hi_dec), 4),
  Ni_a      = max(Ni_asc),
  Hi_a      = round(max(Hi_asc), 4),
  Ni_d      = max(Ni_desc),
  Hi_d      = round(max(Hi_desc), 4),
  stringsAsFactors = FALSE
)

tabla_final_freq <- bind_rows(tabla_df, total_row)

tabla_final_freq %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°1: Distribución de Frecuencias**"),
    subtitle = md(paste0(
      "*Variable Cuantitativa Discreta Agrupada: Range, ",
      "arrendamientos de hidrocarburos, Kansas, EE.UU. (n = ",
      format(n, big.mark = ","), " registros válidos)*"
    ))
  ) %>%
  cols_label(
    Intervalo = md("**Intervalo [Li – Ls)**"),
    MC        = md("**Marca de Clase**"),
    ni        = md("**ni (FA)**"),
    hi_pct    = md("**hi %**"),
    hi_real   = md("**hi (decimal)**"),
    Ni_a      = md("**Ni ↑ (FAAa)**"),
    Hi_a      = md("**Hi ↑ (FRAa)**"),
    Ni_d      = md("**Ni ↓ (FAAd)**"),
    Hi_d      = md("**Hi ↓ (FRAd)**")
  ) %>%
  tab_spanner(label = md("**Frecuencia Relativa**"), columns = c(hi_pct, hi_real)) %>%
  tab_spanner(label = md("**Acumulada ↑**"),         columns = c(Ni_a, Hi_a)) %>%
  tab_spanner(label = md("**Acumulada ↓**"),         columns = c(Ni_d, Hi_d)) %>%
  tab_style(
    style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
    locations = cells_column_spanners()
  ) %>%
  tab_style(
    style = cell_fill(color = "#F5F5F5"),
    locations = cells_body(rows = seq(1, nrow(tabla_final_freq), by = 2))
  ) %>%
  tab_style(
    style = list(cell_fill(color = "#D6D6D6"), cell_text(weight = "bold")),
    locations = cells_body(rows = Intervalo == "TOTAL", columns = everything())
  ) %>%
  fmt_missing(columns = everything(), missing_text = "—") %>%
  tab_source_note(source_note = md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(
    table.width = pct(100), heading.title.font.size = px(16),
    heading.subtitle.font.size = px(12), table.font.size = px(13),
    data_row.padding = px(6)
  )
Tabla N°1: Distribución de Frecuencias
Variable Cuantitativa Discreta Agrupada: Range, arrendamientos de hidrocarburos, Kansas, EE.UU. (n = 98,826 registros válidos)
Intervalo [Li – Ls) Marca de Clase ni (FA)
Frecuencia Relativa
Acumulada ↑
Acumulada ↓
hi % hi (decimal) Ni ↑ (FAAa) Hi ↑ (FRAa) Ni ↓ (FAAd) Hi ↓ (FRAd)
[1 – 6) 3 7468 7.56 0.0756 7468 0.0756 98826 1.0000
[6 – 11) 8 10793 10.92 0.1092 18261 0.1848 91358 0.9244
[11 – 16) 13 23490 23.77 0.2377 41751 0.4225 80565 0.8152
[16 – 21) 18 20004 20.24 0.2024 61755 0.6249 57075 0.5775
[21 – 26) 23 9646 9.76 0.0976 71401 0.7225 37071 0.3751
[26 – 31) 28 4111 4.16 0.0416 75512 0.7641 27425 0.2775
[31 – 36) 33 11646 11.78 0.1178 87158 0.8819 23314 0.2359
[36 – 41) 38 9019 9.13 0.0913 96177 0.9732 11668 0.1181
[41 – 46) 43 2649 2.68 0.0268 98826 1.0000 2649 0.0268
[46 – 43] 45 0 0.00 0.0000 98826 1.0000 0 0.0000
TOTAL 98826 100.00 1.0000 98826 1.0000 98826 1.0000
Autor: Leslye Quinchiguango

5. Representación Gráfica

Se presentan cuatro gráficas en escala de grises que permiten analizar visualmente la distribución de la variable cuantitativa discreta agrupada Range.

5.1 Histograma de Frecuencias Absolutas

grises <- gray(seq(0.25, 0.80, length.out = k))
h_obj  <- hist(x, breaks = breaks_vec, plot = FALSE)

par(mar = c(5, 6, 6, 2))
plot(h_obj, col = grises, border = "black", freq = TRUE,
     main = "", xlab = "", ylab = "", las = 1, xaxt = "n")
axis(1, at = breaks_vec, labels = breaks_vec, las = 1, cex.axis = 0.9)
mtext("Frecuencia Absoluta (ni)", side = 2, line = 4.5, cex = 1)
mtext("Range",                    side = 1, line = 3.5, cex = 1)
mtext("Range,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
      side = 3, line = 3, cex = 0.9, font = 2)

5.2 Polígono de Frecuencias

mc_ext <- c(mc[1] - c_amp, mc, mc[k] + c_amp)
ni_ext <- c(0, freq_abs, 0)
grises <- gray(seq(0.25, 0.80, length.out = k))
h_obj  <- hist(x, breaks = breaks_vec, plot = FALSE)

par(mar = c(5, 6, 6, 2))
plot(h_obj, col = grises, border = "black", freq = TRUE,
     main = "", xlab = "", ylab = "", las = 1, xaxt = "n",
     ylim = c(0, max(freq_abs) * 1.20))
axis(1, at = breaks_vec, labels = breaks_vec, las = 1, cex.axis = 0.9)
lines(mc_ext, ni_ext, col = "black", lwd = 2, lty = 1)
points(mc_ext, ni_ext, pch = 16, col = "black", cex = 0.9)
mtext("Frecuencia Absoluta (ni)", side = 2, line = 4.5, cex = 1)
mtext("Range",                    side = 1, line = 3.5, cex = 1)
mtext("Range,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
      side = 3, line = 3, cex = 0.9, font = 2)
legend("topright",
       legend = c("Histograma", "Polígono de frecuencias"),
       fill = c("gray60", NA), border = c("black", NA),
       lty = c(NA, 1), pch = c(NA, 16), lwd = c(NA, 2), col = c(NA, "black"),
       bty = "n", cex = 0.85)

5.3 Boxplot

media    <- mean(x)
mediana  <- median(x)
desv_std <- sd(x)
q1       <- as.numeric(quantile(x, 0.25))
q3       <- as.numeric(quantile(x, 0.75))

par(mar = c(5, 4, 6, 2))
boxplot(x, col = "gray75", border = "black",
        horizontal = TRUE, outline = TRUE, pch = 16, cex = 0.5,
        main = "", xlab = "", ylab = "")
mtext("Range", side = 1, line = 3.5, cex = 1)
mtext("Range,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
      side = 3, line = 3, cex = 0.9, font = 2)
text(q1,      1.38, labels = paste0("Q1=", q1),                cex = 0.8)
text(mediana, 0.62, labels = paste0("Me=", as.integer(mediana)), cex = 0.8)
text(q3,      1.38, labels = paste0("Q3=", q3),                cex = 0.8)

5.4 Ojivas Creciente y Decreciente

x_asc  <- c(li[1], ls)
y_asc  <- c(0, Ni_asc)
x_desc <- c(li[1], ls)
y_desc <- c(n, Ni_desc)

par(mar = c(5, 7, 6, 2))
plot(x_asc, y_asc, type = "b", pch = 16, lwd = 2, col = "black",
     ylim = c(0, n * 1.10), xlim = c(min(x_asc) - 1, max(x_asc) + 1),
     xlab = "", ylab = "", main = "", las = 1, xaxt = "n")
axis(1, at = breaks_vec, labels = breaks_vec, las = 1, cex.axis = 0.9)
lines(x_desc, y_desc, type = "b", pch = 17, lwd = 2, col = "gray40", lty = 2)
grid(col = "gray85", lty = "dotted")
y_cruce <- n / 2
abline(h = y_cruce, col = "gray50", lty = 3, lwd = 1.2)
abline(v = mediana,  col = "gray50", lty = 3, lwd = 1.2)
text(mediana + 0.3, y_cruce + (n * 0.04),
     labels = paste0("Cruce \u2248 Me = ", as.integer(mediana)),
     cex = 0.82, col = "black", font = 3)
legend("right",
       legend = c("Ojiva Creciente (Ni \u2191)", "Ojiva Decreciente (Ni \u2193)"),
       col = c("black", "gray40"), lty = c(1, 2), pch = c(16, 17),
       lwd = 2, bty = "n", cex = 0.9)
mtext("Frecuencia Absoluta Acumulada (Ni)", side = 2, line = 5,   cex = 1)
mtext("Range",                               side = 1, line = 3.5, cex = 1)
mtext("Range,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
      side = 3, line = 3, cex = 0.9, font = 2)

6. Indicadores Estadísticos

Para la variable cuantitativa discreta agrupada Range, se calculan todos los indicadores de tendencia central, dispersión y forma.

moda_val     <- as.integer(names(sort(table(x), decreasing = TRUE)[1]))
cv           <- (desv_std / media) * 100
iqr_val      <- IQR(x)
asimetria    <- (3 * (media - mediana)) / desv_std
curtosis_val <- (sum((x - media)^4) / length(x)) / (desv_std^4)
lim_inf_out  <- q1 - 1.5 * iqr_val
lim_sup_out  <- q3 + 1.5 * iqr_val
outliers     <- sort(unique(x[x < lim_inf_out | x > lim_sup_out]))
outliers_str <- if (length(outliers) == 0) "Sin valores atípicos" else paste(outliers, collapse = ", ")

data.frame(
  Indicador = c("Tamaño muestral (n)", "Mínimo", "Máximo", "Rango",
                "Media", "Mediana", "Moda", "Varianza (s²)",
                "Desviación estándar (s)", "Coef. de variación (CV%)",
                "Cuartil 1 (Q1)", "Cuartil 3 (Q3)", "Rango intercuartílico (IQR)",
                "Asimetría de Pearson", "Curtosis", "Valores atípicos (Outliers)"),
  Valor = c(format(n, big.mark = ","), as.character(x_min), as.character(x_max),
            as.character(rango_val), as.character(round(media, 2)),
            as.character(round(mediana)), as.character(moda_val),
            as.character(round(desv_std^2, 2)), as.character(round(desv_std, 2)),
            paste0(round(cv, 2), "%"), as.character(round(q1)),
            as.character(round(q3)), as.character(round(iqr_val)),
            as.character(round(asimetria, 4)), as.character(round(curtosis_val, 4)),
            outliers_str),
  stringsAsFactors = FALSE
) %>%
  gt() %>%
  tab_header(
    title    = md("**Tabla N°2: Indicadores Estadísticos**"),
    subtitle = md("*Variable Cuantitativa Discreta Agrupada: Range*")
  ) %>%
  cols_label(Indicador = md("**Indicador**"), Valor = md("**Valor**")) %>%
  cols_align(align = "left",  columns = Indicador) %>%
  cols_align(align = "right", columns = Valor) %>%
  tab_style(
    style = list(cell_fill(color = "#2C2C2C"), cell_text(color = "white", weight = "bold")),
    locations = cells_column_labels()
  ) %>%
  tab_style(
    style = cell_borders(sides = "bottom", color = "#E0E0E0", weight = px(1)),
    locations = cells_body(rows = everything())
  ) %>%
  tab_source_note(source_note = md("*Autor: Leslye Quinchiguango*")) %>%
  tab_options(
    table.width = pct(45), heading.title.font.size = px(15),
    heading.subtitle.font.size = px(11), table.font.size = px(12),
    data_row.padding = px(4),
    column_labels.border.top.width = px(2), column_labels.border.bottom.width = px(2),
    table_body.border.bottom.width = px(2),
    table.border.top.style = "hidden", table.border.bottom.style = "hidden"
  )
Tabla N°2: Indicadores Estadísticos
Variable Cuantitativa Discreta Agrupada: Range
Indicador Valor
Tamaño muestral (n) 98,826
Mínimo 1
Máximo 43
Rango 42
Media 19.74
Mediana 17
Moda 14
Varianza (s²) 116.46
Desviación estándar (s) 10.79
Coef. de variación (CV%) 54.68%
Cuartil 1 (Q1) 12
Cuartil 3 (Q3) 29
Rango intercuartílico (IQR) 17
Asimetría de Pearson 0.7605
Curtosis 2.1926
Valores atípicos (Outliers) Sin valores atípicos
Autor: Leslye Quinchiguango

7. Conclusiones

La variable Range fluctúa entre 1 y 43 (rango = 42 unidades) y sus valores varían en torno a 17, con una desviación estándar de 10.79 unidades, siendo un grupo de valores heterogéneo (CV = 54.68%), sin presencia de valores atípicos. El conjunto de valores se concentra a la derecha (As = 0.76), con mayor concentración de arrendamientos en los rangos del este. Por lo tanto, el comportamiento es medianamente favorable, dado que los arrendamientos se distribuyen a lo largo de una amplia extensión en el eje este-oeste, implicando mayores costos logísticos y operativos para la industria.


Autor: Leslye Quinchiguango — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset