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("Dataset cargada correctamente.\n")
## Dataset 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 continua LONGITUDE, que representa la coordenada angular que indica la posición este-oeste de cada pozo respecto al meridiano de Greenwich, expresada en grados decimales. Para el estado de Kansas, los valores se encuentran en el rango aproximado de -102.04° a -94.62° O. Se filtran únicamente los valores válidos dentro de ese rango.

x_raw <- datos %>%
  mutate(LON = suppressWarnings(as.numeric(LONGITUDE))) %>%
  filter(!is.na(LON), LON >= -103.0, LON <= -94.0) %>%
  pull(LON)

cat("Observaciones válidas:", length(x_raw), "\n")
## Observaciones válidas: 108

3. Determinación de los Intervalos

Para la variable cuantitativa continua Longitud, se aplica el criterio de máximo 10 intervalos de clase. La amplitud se calcula como \(c = \dfrac{\max - \min}{k}\) sin redondeo, conservando la precisión decimal propia de las coordenadas geográficas. 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.

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

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

k      <- 10
c_amp  <- rango_val / k   # sin ceiling: coordenadas decimales

cat("n =", n, "| k =", k, "| Rango =", round(rango_val, 6), "| Amplitud c =", round(c_amp, 6), "\n")
## n = 108 | k = 10 | Rango = 6.726 | Amplitud c = 0.6726
lim_inf    <- x_min + (0:(k - 1)) * c_amp
lim_sup    <- lim_inf + c_amp
lim_sup[k] <- x_max
mc         <- (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 continua Longitud, correspondiente a los pozos 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("[", 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    = 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_real_,
  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 Continua: Longitud, ",
      "pozos 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 Continua: Longitud, pozos de hidrocarburos, Kansas, EE.UU. (n = 108 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)
[-102.035 – -101.3624) -101.6987 17 15.74 0.1574 17 0.1574 108 1.0000
[-101.3624 – -100.6898) -101.0261 12 11.11 0.1111 29 0.2685 91 0.8426
[-100.6898 – -100.0172) -100.3535 11 10.19 0.1019 40 0.3704 79 0.7315
[-100.0172 – -99.3446) -99.6809 11 10.19 0.1019 51 0.4722 68 0.6296
[-99.3446 – -98.672) -99.0083 20 18.52 0.1852 71 0.6574 57 0.5278
[-98.672 – -97.9994) -98.3357 8 7.41 0.0741 79 0.7315 37 0.3426
[-97.9994 – -97.3268) -97.6631 9 8.33 0.0833 88 0.8148 29 0.2685
[-97.3268 – -96.6542) -96.9905 6 5.56 0.0556 94 0.8704 20 0.1852
[-96.6542 – -95.9816) -96.3179 1 0.93 0.0093 95 0.8796 14 0.1296
[-95.9816 – -95.309] -95.6453 13 12.04 0.1204 108 1.0000 13 0.1204
TOTAL 108 100.00 1.0000 108 1.0000 108 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 continua Longitud.

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 = round(breaks_vec, 3), las = 1, cex.axis = 0.85)
mtext("Frecuencia Absoluta (ni)", side = 2, line = 4.5, cex = 1)
mtext("Longitud (grados)",          side = 1, line = 3.5, cex = 1)
mtext("Longitud,\npozos 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 = round(breaks_vec, 3), las = 1, cex.axis = 0.85)
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("Longitud (grados)",          side = 1, line = 3.5, cex = 1)
mtext("Longitud,\npozos 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("Longitud (grados)", side = 1, line = 3.5, cex = 1)
mtext("Longitud,\npozos de hidrocarburos, Kansas, EE.UU.",
      side = 3, line = 3, cex = 0.9, font = 2)
text(q1,      1.38, labels = paste0("Q1=", round(q1, 3)), cex = 0.8)
text(mediana, 0.62, labels = paste0("Me=", round(mediana, 3)), cex = 0.8)
text(q3,      1.38, labels = paste0("Q3=", round(q3, 3)), 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) - 0.05, max(x_asc) + 0.05),
     xlab = "", ylab = "", main = "", las = 1, xaxt = "n")
axis(1, at = breaks_vec, labels = round(breaks_vec, 3), las = 1, cex.axis = 0.85)
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 + c_amp * 0.15, y_cruce + (n * 0.04),
     labels = paste0("Cruce \u2248 Me = ", round(mediana, 3)),
     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("Longitud (grados)",                   side = 1, line = 3.5, cex = 1)
mtext("Longitud,\npozos de hidrocarburos, Kansas, EE.UU.",
      side = 3, line = 3, cex = 0.9, font = 2)

6. Indicadores Estadísticos

Para la variable cuantitativa continua Longitud, se calculan todos los indicadores de tendencia central, dispersión y forma.

moda_int     <- etiq_intervalo[which.max(freq_abs)]
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
n_outliers   <- sum(x < lim_inf_out | x > lim_sup_out)
outliers_str <- if (n_outliers == 0) "Sin valores atípicos" else paste0(format(n_outliers, big.mark=","), " valores atípicos detectados")

data.frame(
  Indicador = c("Tamaño muestral (n)", "Mínimo", "Máximo", "Rango",
                "Media", "Mediana", "Moda (intervalo 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", "Valores atípicos (Outliers)"),
  Valor = c(format(n, big.mark = ","),
            paste0(round(x_min, 6), "°"), paste0(round(x_max, 6), "°"),
            paste0(round(rango_val, 6), "°"),
            paste0(round(media, 4), "°"), paste0(round(mediana, 4), "°"),
            moda_int,
            as.character(round(desv_std^2, 6)),
            paste0(round(desv_std, 4), "°"),
            paste0(round(cv, 4), "%"),
            paste0(round(q1, 4), "°"), paste0(round(q3, 4), "°"),
            paste0(round(iqr_val, 4), "°"),
            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 Continua: Longitud (grados decimales)*")
  ) %>%
  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(55), 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 Continua: Longitud (grados decimales)
Indicador Valor
Tamaño muestral (n) 108
Mínimo -102.035°
Máximo -95.309°
Rango 6.726°
Media -99.1541°
Mediana -99.23°
Moda (intervalo modal) [-99.3446 – -98.672)
Varianza (s²) 3.802978
Desviación estándar (s) 1.9501°
Coef. de variación (CV%) -1.9668%
Cuartil 1 (Q1) -100.9165°
Cuartil 3 (Q3) -97.847°
Rango intercuartílico (IQR) 3.0695°
Asimetría de Pearson 0.1168
Curtosis 2.256
Valores atípicos (Outliers) Sin valores atípicos
Autor: Leslye Quinchiguango

7. Conclusiones

La variable Longitud fluctúa entre -102.035° y -95.309° N (rango = 6.726°) y sus valores varían en torno a -99.23°, con una desviación estándar de 1.9501°, siendo un grupo de valores homogéneo (CV = -1.9668%), sin presencia de valores atípicos. El conjunto de valores se concentra a la derecha (As = 0.12), con mayor concentración de pozos en las latitudes más bajas (este de Kansas) y una cola hacia el norte. Por lo tanto, el comportamiento es favorable, ya que los pozos presentan una distribución geográfica norte-sur relativamente concentrada, lo que facilita la planificación logística y operativa en el territorio.


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