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.

datos <- read_csv(file.choose(), 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): 47757

2. Extracción y Limpieza de la Variable

La variable LATITUDE representa la coordenada geográfica norte-sur de cada arrendamiento de hidrocarburos registrado en Kansas. Se filtran únicamente valores válidos dentro del rango geográfico del estado (36.99° – 40.00° N).

x_raw <- datos %>%
  filter(!is.na(LATITUDE), LATITUDE >= 36.99, LATITUDE <= 40.01) %>%
  pull(LATITUDE)

n_unique <- length(unique(x_raw))
cat("Observaciones válidas:", length(x_raw), "\n")
## Observaciones válidas: 47757
cat("Valores únicos:", n_unique, "\n")
## Valores únicos: 32279
cat("Como hay", n_unique, "> 10 valores únicos, se agrupa en intervalos de clase.\n")
## Como hay 32279 > 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 intervalo
Variable LATITUDE (coordenada geográfica norte-sur del arrendamiento)
Rango 36.99° N a 40.00° N
Fuente Kansas Geological Survey – Kansas, EE.UU.

Justificación: La variable LATITUDE toma valores decimales continuos con 32279 valores únicos, superando ampliamente 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 intervalo, ya que el cero geográfico (ecuador) es convencional y no representa ausencia de latitud.


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 <- rango / k

cat("n =", n, "| k =", k, "| Rango =", round(rango, 4), "| Amplitud c =", round(c_amp, 4), "\n")
## n = 47757 | k = 17 | Rango = 3.0058 | Amplitud c = 0.1768
lim_inf    <- min(x) + (0:(k - 1)) * c_amp
lim_sup    <- lim_inf + c_amp
lim_sup[k] <- max(x) + 0.0001   # cierra el último intervalo
mc         <- (lim_inf + lim_sup) / 2   # marca de clase: (Li + Ls) / 2

5. Tabla de Distribución de Frecuencias

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

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

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("[", round(li, 4), " – ", round(ls, 4), ")")
etiq_intervalo[k] <- paste0("[", round(li[k], 4), " – ", round(ls[k], 4), "]")

tabla_df <- data.frame(
  Intervalo = etiq_intervalo,
  MC        = round(mc, 4),
  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
)

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

total_row <- data.frame(
  Intervalo = "*TOTAL*",
  MC        = as.character(round(sum(mc), 2)),
  ni        = as.character(sum(freq_abs)),
  hi_pct    = sprintf("%.2f%%", sum(hi_dec) * 100),
  hi_real   = sprintf("%.4f",   sum(hi_dec)),
  Ni_a      = as.character(max(Ni_asc)),
  Hi_a      = sprintf("%.4f",   max(Hi_asc)),
  Ni_d      = as.character(max(Ni_desc)),
  Hi_d      = sprintf("%.4f",   max(Hi_desc)),
  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 Latitude, ",
    "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 Latitude, registrada en los arrendamientos de hidrocarburos del estado de Kansas, EE.UU., período histórico disponible (n = 47,757 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)
[36.9944 – 37.1712) 37.0828 6299 13.19% 0.1319 6299 0.1319 47757 1.0000
[37.1712 – 37.3481) 37.2596 5330 11.16% 0.1116 11629 0.2435 41458 0.8681
[37.3481 – 37.5249) 37.4365 5469 11.45% 0.1145 17098 0.3580 36128 0.7565
[37.5249 – 37.7017) 37.6133 3760 7.87% 0.0787 20858 0.4368 30659 0.6420
[37.7017 – 37.8785) 37.7901 2983 6.25% 0.0625 23841 0.4992 26899 0.5632
[37.8785 – 38.0553) 37.9669 3106 6.50% 0.0650 26947 0.5643 23916 0.5008
[38.0553 – 38.2321) 38.1437 2797 5.86% 0.0586 29744 0.6228 20810 0.4357
[38.2321 – 38.4089) 38.3205 2922 6.12% 0.0612 32666 0.6840 18013 0.3772
[38.4089 – 38.5857) 38.4973 3087 6.46% 0.0646 35753 0.7486 15091 0.3160
[38.5857 – 38.7626) 38.6741 3311 6.93% 0.0693 39064 0.8180 12004 0.2514
[38.7626 – 38.9394) 38.851 2231 4.67% 0.0467 41295 0.8647 8693 0.1820
[38.9394 – 39.1162) 39.0278 1701 3.56% 0.0356 42996 0.9003 6462 0.1353
[39.1162 – 39.293) 39.2046 1642 3.44% 0.0344 44638 0.9347 4761 0.0997
[39.293 – 39.4698) 39.3814 1173 2.46% 0.0246 45811 0.9593 3119 0.0653
[39.4698 – 39.6466) 39.5582 601 1.26% 0.0126 46412 0.9718 1946 0.0407
[39.6466 – 39.8234) 39.735 757 1.59% 0.0159 47169 0.9877 1345 0.0282
[39.8234 – 40.0003] 39.9119 588 1.23% 0.0123 47757 1.0000 588 0.0123
TOTAL 654.45 47757 100.00% 1.0000 47757 1.0000 47757 1.0000

6. Indicadores Estadísticos

n_x          <- length(x)
media        <- mean(x)
mediana      <- median(x)
moda_val     <- as.numeric(names(sort(table(round(x, 4)), decreasing = TRUE)[1]))
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", "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"
  ),
  Valor = c(
    format(n_x, big.mark = ","), round(min(x), 4), round(max(x), 4), round(rango_val, 4),
    round(media, 4), round(mediana, 4), moda_val,
    round(varianza, 4), round(desv_std, 4), paste0(round(cv, 2), "%"),
    round(q1, 4), round(q3, 4), round(iqr_val, 4),
    round(asimetria, 4), round(curtosis_val, 4)
  ),
  stringsAsFactors = FALSE
)

kable(
  indicadores,
  caption = "Tabla N°2: Indicadores Estadísticos de la Variable Latitude, 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 Latitude, arrendamientos de hidrocarburos, Kansas, EE.UU.
Indicador Valor
Tamaño muestral (n) 47,757
Mínimo 36.9944
Máximo 40.0002
Rango 3.0058
Media 38.0146
Mediana 37.8808
Moda 37.014
Varianza (s²) 0.5712
Desviación estándar (s) 0.7558
Coef. de variación (CV%) 1.99%
Cuartil 1 (Q1) 37.3603
Cuartil 3 (Q3) 38.5872
Rango intercuartílico (IQR) 1.2269
Asimetría de Pearson 0.531
Curtosis 2.3321

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("Latitud (°N)", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°1: Histograma de Frecuencias Absolutas de la Variable Latitude,\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 (Latitud °N)", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°2: Polígono de Frecuencias de la Variable Latitude,\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("Latitud (°N)", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°3: Boxplot de la Variable Latitude,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
  side = 3, line = 3, cex = 0.9, font = 2
)
text(q1,      1.38, labels = paste0("Q1=", round(q1, 4)),      cex = 0.8)
text(mediana, 0.62, labels = paste0("Me=", round(mediana, 4)), cex = 0.8)
text(q3,      1.38, labels = paste0("Q3=", round(q3, 4)),      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("Latitud (°N)", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°4: Ojiva Creciente de la Variable Latitude,\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("Latitud (°N)", side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°5: Ojiva Decreciente de la Variable Latitude,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
  side = 3, line = 3, cex = 0.9, font = 2
)


8. Interpretación General

La variable Latitude representa la coordenada geográfica norte-sur de cada arrendamiento de hidrocarburos en Kansas, expresada en grados decimales Norte (°N), con valores comprendidos entre 36.99° N y 40.00° N.

Con base en los 47,757 registros válidos agrupados en 17 intervalos de amplitud 0.1768°, se pueden extraer las siguientes conclusiones:

Tendencia central. La media (38.0146°N) y la mediana (37.8808°N) 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 paralelo 37.8808°N, 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 1.99% refleja una variabilidad baja, lo que indica que los arrendamientos tienden a concentrarse en una franja latitudinal relativamente estrecha del territorio. El rango intercuartílico (IQR = 1.2269°) confirma que el 50% central de los datos se encuentra en una franja de 1.2269 grados de latitud.

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

Valor modal. La moda de la variable es 37.014°N, el valor más frecuente en los registros. El intervalo de mayor actividad concentra 6,299 arrendamientos (13.19%), 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 latitudinal preferencial 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: Ariel Baldeon