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_csv <- "C:/Users/luisq/OneDrive/Desktop/ESTADISTICA/kansas.csv"
datos <- read_delim(ruta_csv, delim = ";", show_col_types = FALSE)
cat("Base de datos cargada correctamente.\n")
## Base de datos cargada correctamente.
cat("Total de registros (filas):", nrow(datos), "\n")
## Total de registros (filas): 104173

2. Extracción y Limpieza de la Variable

La variable TOWNSHIP representa la división norte-sur del sistema de agrimensura rectangular de Kansas. Se filtran únicamente valores enteros válidos en el rango 1–35.

x_raw <- datos %>%
  mutate(TWP = suppressWarnings(as.integer(TOWNSHIP))) %>%
  filter(!is.na(TWP), TWP >= 1, TWP <= 35) %>%
  pull(TWP)

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

3. Identificación de la Variable

Criterio Clasificación
Tipo Cuantitativa Continua (agrupada — más de 10 valores únicos)
Escala De razón
Variable TOWNSHIP (división norte-sur, sistema de agrimensura)
Rango 1 a 35
Fuente Kansas Geological Survey – Kansas, EE.UU.

Justificación: Aunque el township toma valores enteros, presenta 35 valores únicos, superando el umbral de 10. Por convención estadística se agrupa en intervalos de clase y se trata como variable cuantitativa continua. La escala es de razón, ya que el cero tiene significado absoluto.


4. Determinación de los Intervalos (Regla de Sturges)

\[k = 1 + 3{,}322 \cdot \log_{10}(n) \qquad c = \left\lceil \frac{\text{Rango}}{k} \right\rceil\]

x     <- x_raw
n     <- length(x)
k     <- ceiling(1 + 3.322 * log10(n))
rango <- max(x) - min(x)
c_amp <- ceiling(rango / k)

cat("n =", n, "| k =", k, "| Rango =", rango, "| Amplitud c =", c_amp, "\n")
## n = 97708 | k = 18 | Rango = 34 | Amplitud c = 2
lim_inf    <- min(x) + (0:(k - 1)) * c_amp
lim_sup    <- lim_inf + c_amp
lim_sup[k] <- max(x) + 1        # cierra el último intervalo
mc         <- (lim_inf + lim_sup) / 2   # marca de clase correcta: (Li + Ls) / 2

5. Tabla de Distribución de Frecuencias

Se construye la tabla de la variable cuantitativa continua Township, correspondiente a los arrendamientos de hidrocarburos registrados en Kansas, EE.UU., durante el período histórico disponible (n = 97,708).

breaks_vec <- c(lim_inf, lim_sup[k])
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          # límite superior real del intervalo (abierto)

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))

# Etiquetas de intervalos con notación [Li, Ls)
etiq_intervalo        <- paste0("[", li, " – ", ls, ")")
etiq_intervalo[k]     <- paste0("[", li[k], " – ", ls[k] - 1, "]")  # último: cerrado

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

# Convertir TODAS las columnas numéricas a character antes de armar el total
tabla_df2 <- tabla_df %>%
  mutate(
    MC   = as.character(MC),
    ni   = as.character(ni),
    Ni_a = as.character(Ni_a),
    Ni_d = as.character(Ni_d)
  )

# Fila de totales: todos los valores reales
total_row <- data.frame(
  Intervalo = "**TOTAL**",
  MC        = "—",
  ni        = as.character(n),
  hi_pct    = "100.00%",
  hi_real   = "1.0000",
  Ni_a      = as.character(n),
  Hi_a      = "1.0000",
  Ni_d      = as.character(n),
  Hi_d      = "1.0000",
  stringsAsFactors = FALSE
)

tabla_final <- bind_rows(tabla_df2, total_row)

kable(
  tabla_final,
  caption   = paste0(
    "Tabla N°1: Distribución de Frecuencias de la Variable Cuantitativa Continua Township, ",
    "registrada en los arrendamientos de hidrocarburos del estado de Kansas, EE.UU., ",
    "período histórico disponible (n = ", format(n, big.mark = ","), " registros válidos)."
  ),
  col.names = c(
    "Intervalo [Li – Ls)",
    "Marca de Clase",
    "ni (FA)", "hi %", "hi (decimal)",
    "Ni ↑ (FAAa)", "Hi ↑ (FRAa)",
    "Ni ↓ (FAAd)", "Hi ↓ (FRAd)"
  ),
  align = c("l", rep("c", 8)),
  escape = FALSE
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "bordered"),
    full_width = TRUE, font_size = 12
  ) %>%
  add_header_above(c(" " = 2,
                     "Frecuencia Absoluta" = 1,
                     "Frecuencia Relativa" = 2,
                     "Acumulada ↑" = 2,
                     "Acumulada ↓" = 2)) %>%
  row_spec(0, bold = TRUE, background = "#d3d3d3", color = "black") %>%
  row_spec(nrow(tabla_final), bold = TRUE, background = "#a9a9a9", color = "black")
Tabla N°1: Distribución de Frecuencias de la Variable Cuantitativa Continua Township, registrada en los arrendamientos de hidrocarburos del estado de Kansas, EE.UU., período histórico disponible (n = 97,708 registros válidos).
Frecuencia Absoluta
Frecuencia Relativa
Acumulada ↑
Acumulada ↓
Intervalo [Li – Ls) Marca de Clase ni (FA) hi % hi (decimal) Ni ↑ (FAAa) Hi ↑ (FRAa) Ni ↓ (FAAd) Hi ↓ (FRAd)
[1 – 3) 2 1400 1.43% 0.0143 1400 0.0143 97708 1.0000
[3 – 5) 4 1430 1.46% 0.0146 2830 0.0290 96308 0.9857
[5 – 7) 6 1232 1.26% 0.0126 4062 0.0416 94878 0.9710
[7 – 9) 8 1971 2.02% 0.0202 6033 0.0617 93646 0.9584
[9 – 11) 10 2934 3.00% 0.0300 8967 0.0918 91675 0.9383
[11 – 13) 12 2723 2.79% 0.0279 11690 0.1196 88741 0.9082
[13 – 15) 14 5297 5.42% 0.0542 16987 0.1739 86018 0.8804
[15 – 17) 16 5529 5.66% 0.0566 22516 0.2304 80721 0.8261
[17 – 19) 18 5723 5.86% 0.0586 28239 0.2890 75192 0.7696
[19 – 21) 20 6229 6.38% 0.0638 34468 0.3528 69469 0.7110
[21 – 23) 22 5288 5.41% 0.0541 39756 0.4069 63240 0.6472
[23 – 25) 24 6333 6.48% 0.0648 46089 0.4717 57952 0.5931
[25 – 27) 26 6586 6.74% 0.0674 52675 0.5391 51619 0.5283
[27 – 29) 28 7542 7.72% 0.0772 60217 0.6163 45033 0.4609
[29 – 31) 30 10348 10.59% 0.1059 70565 0.7222 37491 0.3837
[31 – 33) 32 10900 11.16% 0.1116 81465 0.8338 27143 0.2778
[33 – 35) 34 13056 13.36% 0.1336 94521 0.9674 16243 0.1662
[35 – 35] 35.5 3187 3.26% 0.0326 97708 1.0000 3187 0.0326
TOTAL 97708 100.00% 1.0000 97708 1.0000 97708 1.0000

6. Indicadores Estadísticos

n_x          <- length(x)
media        <- mean(x)
mediana      <- median(x)
idx_moda     <- which.max(freq_abs)
moda_mc      <- mc[idx_moda]
varianza     <- var(x)
desv_std     <- sd(x)
cv           <- (desv_std / media) * 100
rango_val    <- max(x) - min(x)
q1           <- as.numeric(quantile(x, 0.25))
q3           <- as.numeric(quantile(x, 0.75))
iqr_val      <- IQR(x)
asimetria    <- (3 * (media - mediana)) / desv_std
curtosis_val <- (sum((x - media)^4) / n_x) / (desv_std^4)

indicadores <- data.frame(
  Indicador = c(
    "Tamaño muestral (n)", "Mínimo", "Máximo", "Rango",
    "Media (x̄)", "Mediana (Me)", "Moda (marca de clase modal)",
    "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"
  ),
  Valor = c(
    format(n_x, big.mark = ","), min(x), max(x), rango_val,
    round(media, 4), mediana, round(moda_mc, 2),
    round(varianza, 4), round(desv_std, 4), paste0(round(cv, 2), "%"),
    q1, q3, iqr_val,
    round(asimetria, 4), round(curtosis_val, 4)
  ),
  stringsAsFactors = FALSE
)

kable(
  indicadores,
  caption   = "Tabla N°2: Indicadores Estadísticos de la Variable Township, arrendamientos de hidrocarburos, Kansas, EE.UU.",
  col.names = c("Indicador", "Valor"),
  align     = c("l", "c")
) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "bordered"),
    full_width = FALSE, font_size = 12
  ) %>%
  row_spec(0, bold = TRUE, background = "#d3d3d3", color = "black")
Tabla N°2: Indicadores Estadísticos de la Variable Township, arrendamientos de hidrocarburos, Kansas, EE.UU.
Indicador Valor
Tamaño muestral (n) 97,708
Mínimo 1
Máximo 35
Rango 34
Media (x̄)
23.5815

7. Representación Gráfica

7.1 Gráfica N°1 — Histograma

grises <- gray(seq(0.25, 0.80, length.out = k))
par(mar = c(5, 6, 6, 2))
h_obj <- hist(x, breaks = breaks_vec, plot = FALSE)
plot(h_obj,
     col = grises, border = "black",
     freq = TRUE, main = "", xlab = "", ylab = "", las = 1)
mtext("Frecuencia Absoluta (ni)", side = 2, line = 4.5, cex = 1)
mtext("Township", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°1: Diagrama de barras de Frecuencias Absolutas de la Variable Township,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
  side = 3, line = 3, cex = 0.9, font = 2
)

7.2 Gráfica N°2 — Polígono de Frecuencias

mc_ext <- c(mc[1] - c_amp, mc, mc[k] + c_amp)
ni_ext <- c(0, freq_abs, 0)
par(mar = c(5, 6, 6, 2))
plot(mc_ext, ni_ext,
     type = "n", xlab = "", ylab = "", main = "",
     ylim = c(0, max(ni_ext) * 1.12), las = 1)
polygon(c(mc_ext[1], mc_ext, tail(mc_ext,1)),
        c(0, ni_ext, 0), col = "gray80", border = NA)
lines(mc_ext, ni_ext, col = "black", lwd = 2)
points(mc_ext, ni_ext, pch = 16, col = "black", cex = 0.9)
mtext("Frecuencia Absoluta (ni)", side = 2, line = 4.5, cex = 1)
mtext("Marca de Clase (Township)", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°2: Polígono de Frecuencias de la Variable Township,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
  side = 3, line = 3, cex = 0.9, font = 2
)

7.3 Gráfica N°3 — Boxplot

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("Township", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°3: Boxplot de la Variable Township,\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=", mediana), cex = 0.8)
text(q3,      1.38, labels = paste0("Q3=", q3),      cex = 0.8)

7.4 Gráfica N°4 — Ojiva Creciente

x_asc <- c(li[1], ls)
y_asc <- c(0, Ni_asc)
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.05), xlab = "", ylab = "", main = "", las = 1)
grid(col = "gray85", lty = "dotted")
mtext("Frec. Absoluta Acumulada Creciente  Ni ↑", side = 2, line = 5, cex = 0.9)
mtext("Township", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°4: Ojiva Creciente de la Variable Township,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
  side = 3, line = 3, cex = 0.9, font = 2
)

7.5 Gráfica N°5 — Ojiva Decreciente

x_desc <- c(li[1], ls)
y_desc <- c(n, Ni_desc)
par(mar = c(5, 7, 6, 2))
plot(x_desc, y_desc,
     type = "b", pch = 16, lwd = 2, col = "black",
     ylim = c(0, n * 1.05), xlab = "", ylab = "", main = "", las = 1)
grid(col = "gray85", lty = "dotted")
mtext("Frec. Absoluta Acumulada Decreciente  Ni ↓", side = 2, line = 5, cex = 0.9)
mtext("Township", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°5: Ojiva Decreciente de la Variable Township,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
  side = 3, line = 3, cex = 0.9, font = 2
)


8. Interpretación General

La variable Township codifica la posición norte-sur de cada arrendamiento de hidrocarburos en Kansas dentro del sistema de agrimensura rectangular (Township 1 = extremo norte, Township 35 = extremo sur).

Con base en los 97,708 registros válidos agrupados en 18 intervalos de amplitud 2, se pueden extraer las siguientes conclusiones:

Tendencia central. La media (23.58) y la mediana (25) son muy cercanas entre sí, lo que indica que la distribución de arrendamientos no presenta un sesgo extremo. La mitad de los arrendamientos se localiza al sur del township 25, sugiriendo que la actividad petrolera tiene un centro de gravedad en la zona centro-sur del estado.

Dispersión. El coeficiente de variación del 36.63% refleja una variabilidad moderada, lo que indica que los arrendamientos se distribuyen de forma amplia sin concentrarse en un único sector. El rango intercuartílico (IQR = 14) confirma que el 50% central de los datos se encuentra en un rango de 14 townships.

Forma de la distribución. La asimetría de Pearson de -0.4927 indica una distribución asimétrica negativa: existe mayor concentración de arrendamientos en los townships del sur, con una cola que se extiende hacia el norte. La curtosis de 2.4578 señala una distribución platicúrtica: los arrendamientos se dispersan de forma relativamente uniforme entre los townships, con colas más ligeras que una distribución normal.

Intervalo de mayor actividad. El intervalo modal [r li[idx_moda] – 35)` concentra 13,056 arrendamientos (13.36%), lo que indica que esta franja geográfica ha sido históricamente la zona de mayor explotación de hidrocarburos en Kansas.

Conclusión general. La actividad de arrendamiento de hidrocarburos en Kansas no se distribuye de manera uniforme en el territorio: existe una franja preferencial de townships donde se concentra la producción, mientras que los extremos norte y sur del estado presentan menor actividad relativa. Esta distribución responde probablemente a las características geológicas del subsuelo kansano.


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