División Norte-Sur de los Arrendamientos de Hidrocarburos en Kansas


1. Cargar datos

Este bloque importa la base original de arrendamientos de hidrocarburos y verifica su estructura.

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
str(datos)
## spc_tbl_ [104,173 × 95] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ CODE                         : chr [1:104173] NA NA "28-JUL-2000 OPERATOR_NAME=COLT ENERGY INCO\"" NA ...
##  $ DEPT_WATER_RESOURCES_CODE    : chr [1:104173] NA NA "Whitlow Energy, Inc." NA ...
##  $ DEPT_MOTOR_VEHICLES_ABBREV   : chr [1:104173] NA NA NA NA ...
##  $ NAME                         : chr [1:104173] NA NA "800" NA ...
##  $ WIZARD_BASE_REFERENCE_YEAR   : chr [1:104173] NA NA "23100" NA ...
##  $ WIZARD_PREDEVELOPMENT_YEAR   : chr [1:104173] NA NA NA NA ...
##  $ UPDATE_DATE_1                : num [1:104173] NA NA 275319 NA NA ...
##  $ UPDATE_INITIALS_1            : num [1:104173] NA NA 1970 NA NA NA NA NA NA NA ...
##  $ ABBREVIATED_TO_4_CHARS       : num [1:104173] NA NA 2026 NA NA ...
##  $ KCC_DISTRICT_NUMBER          : chr [1:104173] NA NA "DATA_SOURCE" NA ...
##  $ OBJECTID                     : chr [1:104173] "42971829" "42971830" "1001106572" "42971831" ...
##  $ KID                          : chr [1:104173] "1001106903" "1001106572" NA "1001106590" ...
##  $ LEASE_NAME                   : chr [1:104173] "J. G. HAVENER" "EARLY" NA "ELDEN BURKE" ...
##  $ FIELD_KID                    : chr [1:104173] "1000147101" "1000147596" NA "1000147696" ...
##  $ OPERATOR_KID                 : chr [1:104173] "1044772773" "1041810049" "Town Oil Company Inc." "1027997289" ...
##  $ LEASE_CODE_PI_BEENE          : chr [1:104173] "11322" "10661" NA "10687" ...
##  $ LEASE_CODE_DOR               : chr [1:104173] "100743" "100416" NA "100434" ...
##  $ PRODUCES_GAS                 : chr [1:104173] "No" "No" "NAD27" "No" ...
##  $ PRODUCES_OIL                 : chr [1:104173] "Yes" "Yes" NA "Yes" ...
##  $ STATE_CODE                   : chr [1:104173] "15" "15" NA "15" ...
##  $ COUNTY_CODE                  : num [1:104173] 125 45 NA 49 49 49 49 207 31 31 ...
##  $ LATITUDE                     : chr [1:104173] "37.132.046" "3.876.033" NA "37.482.822" ...
##  $ LATITUDE_LEO_FOOTAGES        : logi [1:104173] NA NA NA NA NA NA ...
##  $ LATITUDE_LEO_QUARTER_CALLS   : chr [1:104173] NA NA NA NA ...
##  $ LATITUDE_DIRECTION           : chr [1:104173] NA NA "387.603.303" NA ...
##  $ LONGITUDE                    : chr [1:104173] "-95.882.477" "-95.157.902" "-951.579.018" "-96.298.344" ...
##  $ LONGITUDE_LEO_FOOTAGES       : chr [1:104173] NA NA "387.603.378" NA ...
##  $ LONGITUDE_LEO_QUARTER_CALLS  : chr [1:104173] NA NA "-951.581.503" NA ...
##  $ LONGITUDE_DIRECTION          : chr [1:104173] NA NA "312500.22" NA ...
##  $ LONGITUDE_LATITUDE_SOURCE    : chr [1:104173] "CENTER_OF_SECTION" "CENTER_OF_SECTION" "4292184.41" "CENTER_OF_SECTION" ...
##  $ PRINCIPAL_MERIDIAN           : num [1:104173] 6 6 15 6 6 6 6 6 6 6 ...
##  $ TOWNSHIP                     : num [1:104173] 33 15 312483 29 31 ...
##  $ TOWNSHIP_DIRECTION           : chr [1:104173] "S" "S" "4292393.14" "S" ...
##  $ RANGE                        : num [1:104173] 14 20 15 10 10 10 13 16 14 16 ...
##  $ RANGE_DIRECTION              : chr [1:104173] "E" "E" "EARLY" "E" ...
##  $ SECTION                      : chr [1:104173] "33" "11" "BALDWIN" "34" ...
##  $ SUBDIVISION_1_LARGEST        : chr [1:104173] NA NA "-105.929.576.967" NA ...
##  $ SUBDIVISION_2                : chr [1:104173] NA NA "46.874.008.688" NA ...
##  $ SUBDIVISION_3                : chr [1:104173] NA NA NA NA ...
##  $ SUBDIVISION_4_SMALLEST       : chr [1:104173] NA NA NA NA ...
##  $ SPOT                         : chr [1:104173] NA NA NA NA ...
##  $ FEET_NORTH_FROM_REFERENCE    : num [1:104173] NA NA NA NA NA NA NA NA NA NA ...
##  $ FEET_EAST_FROM_REFERENCE     : num [1:104173] NA NA NA NA NA NA NA NA NA NA ...
##  $ REFERENCE_CORNER             : chr [1:104173] NA NA NA NA ...
##  $ MEETS_AND_BOUNDS             : logi [1:104173] NA NA NA NA NA NA ...
##  $ OLD_SPOT_OR_LOCATION         : chr [1:104173] NA NA NA NA ...
##  $ UPDATE_INITIALS              : chr [1:104173] "DOR#4" "DOR" NA "DOR" ...
##  $ UPDATE_DATE                  : chr [1:104173] "11/23/2013 3:11:58 PM" "5/31/2011 9:48:34 AM" NA "5/31/2011 9:48:35 AM" ...
##  $ SKIP_IT                      : chr [1:104173] NA NA NA NA ...
##  $ COMMENTS                     : chr [1:104173] NA NA NA NA ...
##  $ CORRECTIONS                  : chr [1:104173] "28-JUL-2000 OPERATOR_NAME=HORTON OIL COMPA" "06-FEB-1999 LEASE_NAME=EARLY S." NA "28-JUL-2000 OPERATOR_NAME=DENTON OIL COMPA" ...
##  $ OPERATOR_NAME                : chr [1:104173] "Horton, John" NA NA "Suerte Oil Company" ...
##  $ PRODUCING_FORMATION          : chr [1:104173] NA NA NA NA ...
##  $ DEPTH_OF_WELL                : num [1:104173] 700 NA NA 1400 NA ...
##  $ FIELD_CODE_DOR               : num [1:104173] 63550 NA NA 25250 10800 ...
##  $ DATA_SOURCE                  : chr [1:104173] NA NA NA NA ...
##  $ CUMULATIVE_PRODUCTION        : num [1:104173] 47293 NA NA 82624 10518 ...
##  $ CUMULATIVE_YEAR_STARTED      : num [1:104173] 1970 NA NA 1970 1971 ...
##  $ CUMULATIVE_YEAR_ENDED        : num [1:104173] 2025 NA NA 2017 1983 ...
##  $ FIELD_KID_SOURCE             : chr [1:104173] "DATA_SOURCE" NA NA "DATA_SOURCE" ...
##  $ LEASE_KID                    : num [1:104173] 1e+09 NA NA 1e+09 1e+09 ...
##  $ LEASE_KID_SOURCE             : logi [1:104173] NA NA NA NA NA NA ...
##  $ PRODUCING_FORMATION_OLD      : chr [1:104173] NA NA NA NA ...
##  $ QUARTER_CALLS_SOURCE         : chr [1:104173] NA NA NA NA ...
##  $ OPERATOR_NAME_OLD            : chr [1:104173] "Horton Oil Company, Inc." NA NA "Suerte Oil Company" ...
##  $ PRODUCING_FORMATION_STRAT_KID: num [1:104173] NA NA NA NA NA NA NA NA NA NA ...
##  $ PRODUCING_FORMATION_SOURCE   : chr [1:104173] NA NA NA NA ...
##  $ LONGITUDE_LATITUDE_DATUM     : chr [1:104173] "NAD27" NA NA "NAD27" ...
##  $ GPS_LATITUDE                 : logi [1:104173] NA NA NA NA NA NA ...
##  $ GPS_LONGITUDE                : logi [1:104173] NA NA NA NA NA NA ...
##  $ GPS_DATUM                    : logi [1:104173] NA NA NA NA NA NA ...
##  $ GPS_SOURCE                   : logi [1:104173] NA NA NA NA NA NA ...
##  $ GPS_DATE                     : logi [1:104173] NA NA NA NA NA NA ...
##  $ GPS_ACCURACY_COMMENTS        : logi [1:104173] NA NA NA NA NA NA ...
##  $ NAD27_LATITUDE               : chr [1:104173] "371.320.458" NA NA "374.828.223" ...
##  $ NAD27_LONGITUDE              : chr [1:104173] "-95.882.477" NA NA "-962.983.435" ...
##  $ NAD83_LATITUDE               : chr [1:104173] "371.321.146" NA NA "374.828.544" ...
##  $ NAD83_LONGITUDE              : chr [1:104173] "-958.827.371" NA NA "-96.298.619" ...
##  $ NAD27_UTM_X                  : num [1:104173] 243937 NA NA 738884 741149 ...
##  $ NAD27_UTM_Y                  : num [1:104173] 4113207 NA NA 4151660 4132923 ...
##  $ NAD27_UTM_ZONE               : num [1:104173] 15 NA NA 14 14 14 15 15 15 15 ...
##  $ NAD83_UTM_X                  : num [1:104173] 243920 NA NA 738853 741119 ...
##  $ NAD83_UTM_Y                  : num [1:104173] 4113419 NA NA 4151867 4133131 ...
##  $ NAD83_UTM_ZONE               : num [1:104173] 15 NA NA 14 14 14 15 15 15 15 ...
##  $ LEASE_NAME_DOR               : chr [1:104173] "HAVENER,J.G." NA NA "ELDEN BURKE" ...
##  $ FIELD_NAME                   : chr [1:104173] "WAYSIDE-HAVANA" NA NA "DUNKLEBERGER" ...
##  $ x                            : chr [1:104173] "-106.736.183.151" NA NA "-107.199.141.514" ...
##  $ y                            : chr [1:104173] "44.575.388.408" NA NA "45.066.267.765" ...
##  $ ...89                        : logi [1:104173] NA NA NA NA NA NA ...
##  $ ...90                        : logi [1:104173] NA NA NA NA NA NA ...
##  $ ...91                        : logi [1:104173] NA NA NA NA NA NA ...
##  $ ...92                        : logi [1:104173] NA NA NA NA NA NA ...
##  $ ...93                        : logi [1:104173] NA NA NA NA NA NA ...
##  $ ...94                        : logi [1:104173] NA NA NA NA NA NA ...
##  $ ...95                        : logi [1:104173] NA NA NA NA NA NA ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   CODE = col_character(),
##   ..   DEPT_WATER_RESOURCES_CODE = col_character(),
##   ..   DEPT_MOTOR_VEHICLES_ABBREV = col_character(),
##   ..   NAME = col_character(),
##   ..   WIZARD_BASE_REFERENCE_YEAR = col_character(),
##   ..   WIZARD_PREDEVELOPMENT_YEAR = col_character(),
##   ..   UPDATE_DATE_1 = col_double(),
##   ..   UPDATE_INITIALS_1 = col_double(),
##   ..   ABBREVIATED_TO_4_CHARS = col_double(),
##   ..   KCC_DISTRICT_NUMBER = col_character(),
##   ..   OBJECTID = col_character(),
##   ..   KID = col_character(),
##   ..   LEASE_NAME = col_character(),
##   ..   FIELD_KID = col_character(),
##   ..   OPERATOR_KID = col_character(),
##   ..   LEASE_CODE_PI_BEENE = col_character(),
##   ..   LEASE_CODE_DOR = col_character(),
##   ..   PRODUCES_GAS = col_character(),
##   ..   PRODUCES_OIL = col_character(),
##   ..   STATE_CODE = col_character(),
##   ..   COUNTY_CODE = col_double(),
##   ..   LATITUDE = col_character(),
##   ..   LATITUDE_LEO_FOOTAGES = col_logical(),
##   ..   LATITUDE_LEO_QUARTER_CALLS = col_character(),
##   ..   LATITUDE_DIRECTION = col_character(),
##   ..   LONGITUDE = col_character(),
##   ..   LONGITUDE_LEO_FOOTAGES = col_character(),
##   ..   LONGITUDE_LEO_QUARTER_CALLS = col_character(),
##   ..   LONGITUDE_DIRECTION = col_character(),
##   ..   LONGITUDE_LATITUDE_SOURCE = col_character(),
##   ..   PRINCIPAL_MERIDIAN = col_double(),
##   ..   TOWNSHIP = col_double(),
##   ..   TOWNSHIP_DIRECTION = col_character(),
##   ..   RANGE = col_double(),
##   ..   RANGE_DIRECTION = col_character(),
##   ..   SECTION = col_character(),
##   ..   SUBDIVISION_1_LARGEST = col_character(),
##   ..   SUBDIVISION_2 = col_character(),
##   ..   SUBDIVISION_3 = col_character(),
##   ..   SUBDIVISION_4_SMALLEST = col_character(),
##   ..   SPOT = col_character(),
##   ..   FEET_NORTH_FROM_REFERENCE = col_double(),
##   ..   FEET_EAST_FROM_REFERENCE = col_double(),
##   ..   REFERENCE_CORNER = col_character(),
##   ..   MEETS_AND_BOUNDS = col_logical(),
##   ..   OLD_SPOT_OR_LOCATION = col_character(),
##   ..   UPDATE_INITIALS = col_character(),
##   ..   UPDATE_DATE = col_character(),
##   ..   SKIP_IT = col_character(),
##   ..   COMMENTS = col_character(),
##   ..   CORRECTIONS = col_character(),
##   ..   OPERATOR_NAME = col_character(),
##   ..   PRODUCING_FORMATION = col_character(),
##   ..   DEPTH_OF_WELL = col_double(),
##   ..   FIELD_CODE_DOR = col_double(),
##   ..   DATA_SOURCE = col_character(),
##   ..   CUMULATIVE_PRODUCTION = col_double(),
##   ..   CUMULATIVE_YEAR_STARTED = col_double(),
##   ..   CUMULATIVE_YEAR_ENDED = col_double(),
##   ..   FIELD_KID_SOURCE = col_character(),
##   ..   LEASE_KID = col_double(),
##   ..   LEASE_KID_SOURCE = col_logical(),
##   ..   PRODUCING_FORMATION_OLD = col_character(),
##   ..   QUARTER_CALLS_SOURCE = col_character(),
##   ..   OPERATOR_NAME_OLD = col_character(),
##   ..   PRODUCING_FORMATION_STRAT_KID = col_double(),
##   ..   PRODUCING_FORMATION_SOURCE = col_character(),
##   ..   LONGITUDE_LATITUDE_DATUM = col_character(),
##   ..   GPS_LATITUDE = col_logical(),
##   ..   GPS_LONGITUDE = col_logical(),
##   ..   GPS_DATUM = col_logical(),
##   ..   GPS_SOURCE = col_logical(),
##   ..   GPS_DATE = col_logical(),
##   ..   GPS_ACCURACY_COMMENTS = col_logical(),
##   ..   NAD27_LATITUDE = col_character(),
##   ..   NAD27_LONGITUDE = col_character(),
##   ..   NAD83_LATITUDE = col_character(),
##   ..   NAD83_LONGITUDE = col_character(),
##   ..   NAD27_UTM_X = col_double(),
##   ..   NAD27_UTM_Y = col_double(),
##   ..   NAD27_UTM_ZONE = col_double(),
##   ..   NAD83_UTM_X = col_double(),
##   ..   NAD83_UTM_Y = col_double(),
##   ..   NAD83_UTM_ZONE = col_double(),
##   ..   LEASE_NAME_DOR = col_character(),
##   ..   FIELD_NAME = col_character(),
##   ..   x = col_character(),
##   ..   y = col_character(),
##   ..   ...89 = col_logical(),
##   ..   ...90 = col_logical(),
##   ..   ...91 = col_logical(),
##   ..   ...92 = col_logical(),
##   ..   ...93 = col_logical(),
##   ..   ...94 = col_logical(),
##   ..   ...95 = col_logical()
##   .. )
##  - attr(*, "problems")=<pointer: 0x0000029e375e1f20>

2. Extracción y Limpieza de la Variable

La variable TOWNSHIP representa la división norte-sur del sistema de agrimensura rectangular de Kansas. Sus valores son números enteros contables en el rango 1–35, lo que la clasifica como variable cuantitativa discreta. Se filtran únicamente los valores válidos dentro de ese rango.

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 (máx. 10).\n")
## Como hay 35 > 10 valores únicos, se agrupa en intervalos de clase (máx. 10).

3. Identificación de la Variable

Criterio Clasificación
Tipo Cuantitativa Discreta (agrupada — valores enteros, más de 10 ú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: El township toma únicamente valores enteros positivos (1 al 35) y representa unidades de división territorial contables, sin posibilidad de valores fraccionarios. Por ello se clasifica como variable cuantitativa discreta. Con 35 valores únicos supera el umbral de 10, por lo que se agrupa en intervalos de clase con un máximo de 10 intervalos. La escala es de razón, ya que el cero tiene significado absoluto (ausencia de township).


4. Determinación de los Intervalos

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

Nota metodológica: Para variables discretas agrupadas se aplica el mismo criterio de máximo 10 intervalos. 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.

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 = 97708 | k = 10 | Rango = 34 | Amplitud c = 4
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])

5. Tabla de Distribución de Frecuencias

Se construye la tabla de distribución de frecuencias de la variable cuantitativa discreta agrupada Township, correspondiente a los arrendamientos de hidrocarburos registrados en Kansas, EE.UU. (n = 97,708).

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    = 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
) %>%
  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        = "—",
  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_df, total_row)

kable(
  tabla_final,
  caption = paste0(
    "Tabla N°1: Distribución de Frecuencias de la Variable Cuantitativa Discreta Agrupada Township, ",
    "arrendamientos de hidrocarburos, 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 Discreta Agrupada Township, arrendamientos de hidrocarburos, 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 – 5) 3 2830 2.90% 0.0290 2830 0.0290 97708 1.0000
[5 – 9) 7 3203 3.28% 0.0328 6033 0.0617 94878 0.9710
[9 – 13) 11 5657 5.79% 0.0579 11690 0.1196 91675 0.9383
[13 – 17) 15 10826 11.08% 0.1108 22516 0.2304 86018 0.8804
[17 – 21) 19 11952 12.23% 0.1223 34468 0.3528 75192 0.7696
[21 – 25) 23 11621 11.89% 0.1189 46089 0.4717 63240 0.6472
[25 – 29) 27 14128 14.46% 0.1446 60217 0.6163 51619 0.5283
[29 – 33) 31 21248 21.75% 0.2175 81465 0.8338 37491 0.3837
[33 – 37) 35 16243 16.62% 0.1662 97708 1.0000 16243 0.1662
[37 – 35] 36 0 0.00% 0.0000 97708 1.0000 0 0.0000
TOTAL 97708 100.00% 1.0000 97708 1.0000 97708 1.0000

6. Indicadores Estadísticos

Se calculan los indicadores descriptivos agrupados por categoría: rango, tendencia central, dispersión, forma y valores atípicos.

# ── Tendencia central ──────────────────────────────────────────────────────────
media    <- mean(x)
mediana  <- median(x)
moda_val <- as.integer(names(sort(table(x), decreasing = TRUE)[1]))

# ── Dispersión ─────────────────────────────────────────────────────────────────
desv_std <- sd(x)
cv       <- (desv_std / media) * 100
cv_label <- ifelse(cv <= 33, "Homogéneo (CV ≤ 33%)", "Heterogéneo (CV > 33%)")

# ── Cuartiles e IQR ────────────────────────────────────────────────────────────
q1      <- as.numeric(quantile(x, 0.25))
q3      <- as.numeric(quantile(x, 0.75))
iqr_val <- IQR(x)

# ── Forma ──────────────────────────────────────────────────────────────────────
asimetria    <- (3 * (media - mediana)) / desv_std
curtosis_val <- (sum((x - media)^4) / length(x)) / (desv_std^4)

as_label <- ifelse(asimetria > 0.1,  "Asimétrica positiva (As > 0, cola derecha)",
           ifelse(asimetria < -0.1,  "Asimétrica negativa (As < 0, cola izquierda)",
                                     "Aproximadamente simétrica (As ≈ 0)"))

k_label  <- ifelse(curtosis_val > 3, "Leptocúrtica (K > 3)",
            ifelse(curtosis_val < 3, "Platicúrtica (K < 3)",
                                     "Mesocúrtica (K ≈ 3)"))

# ── Outliers: valores fuera de los bigotes del boxplot (1.5 × IQR) ─────────────
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 = ", ")

# ── Construcción de la tabla de indicadores (diseño vertical limpio) ──────────
indicadores <- data.frame(
  Indicador = c(
    "Tamaño muestral (n)",
    "Mínimo",
    "Máximo",
    "Rango",
    "Media",
    "Mediana",
    "Moda",
    "Varianza (s\u00b2)",
    "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, big.mark = ","),
    as.character(x_min),
    as.character(x_max),
    as.character(rango_val),
    as.character(round(media)),
    as.character(as.integer(mediana)),
    as.character(moda_val),
    as.character(round(desv_std^2, 2)),
    as.character(round(desv_std, 2)),
    paste0(round(cv, 2), "%"),
    as.character(q1),
    as.character(q3),
    as.character(iqr_val),
    as.character(round(asimetria, 4)),
    as.character(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", "r"),
  escape    = FALSE
) %>%
  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 24
Mediana 25
Moda 34
Varianza (s²) 74.61
Desviación estándar (s) 8.64
Coef. de variación (CV%) 36.63%
Cuartil 1 (Q1) 17
Cuartil 3 (Q3) 31
Rango intercuartílico (IQR) 14
Asimetría de Pearson -0.4927
Curtosis 2.4578

7. Representación Gráfica

7.1 Gráfica N°1 — Histograma de Frecuencias Absolutas

Este gráfico muestra la distribución de arrendamientos de hidrocarburos según la división norte-sur (township) en Kansas.

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("Township",                 side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°1: Histograma 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

El polígono de frecuencias se construye sobre el histograma, uniendo con una línea continua las marcas de clase. Se añaden puntos ancla en cero al inicio y al final para cerrar correctamente el polígono.

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

# Histograma de fondo
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)

# Polígono de frecuencias encima
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("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
)
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)

7.3 Gráfica N°3 — Boxplot

El boxplot muestra la caja central (Q1–Q3), la mediana, la media y los valores atípicos que aparecen como puntos fuera de los bigotes (criterio 1.5 × IQR).

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 — Ojivas Creciente y Decreciente

Las ojivas creciente y decreciente se presentan en una única gráfica. El punto de cruce entre ambas curvas corresponde a la mediana de la distribución (Township 25).

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.5, y_cruce + (n * 0.04),
     labels = paste0("Cruce \u2248 Me = ", 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("Township",                            side = 1, line = 3.5, cex = 1)
mtext(
  "Gráfica N°4: Ojivas Creciente y Decreciente de la Variable Township,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
  side = 3, line = 3, cex = 0.9, font = 2
)


8. Conclusiones

La variable Township fluctúa entre 1 y 35 (rango = 34 townships) y sus valores varían en torno a 25, con una desviación estándar de 8.64 townships, siendo un grupo de valores heterogéneo (CV = 36.63%), sin presencia de valores atípicos. El conjunto de valores se concentra a la izquierda (As = -0.49), con mayor concentración de arrendamientos en los townships del sur. Por lo tanto, el comportamiento es medianamente favorable, dado que los arrendamientos se distribuyen a lo largo de una amplia extensión territorial, implicando mayores costos logísticos y operativos para la industria.


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