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 DEPTH_OF_WELL, que representa la distancia total medida verticalmente desde la superficie hasta el fondo del pozo perforado, expresada en pies. Sus valores pertenecen a los reales no negativos en el rango 0–9,999 pies. Se filtran únicamente los valores válidos dentro de ese rango.

x_raw <- datos %>%
  mutate(DW = suppressWarnings(as.numeric(DEPTH_OF_WELL))) %>%
  filter(!is.na(DW), DW >= 0, DW <= 9999) %>%
  pull(DW)

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

3. Determinación de los Intervalos

Para la variable cuantitativa continua Profundidad del Pozo, se aplica el criterio de máximo 10 intervalos de clase. La amplitud se calcula como \(c = \left\lceil \dfrac{\max - \min}{k} \right\rceil\), y 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 = \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 = 52046 | k = 10 | Rango = 9999 | Amplitud c = 1000
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 Profundidad del Pozo, 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("[", li, " – ", ls, ")")
etiq_intervalo[k] <- paste0("[", li[k], " – ", ls[k], "]")

tabla_df <- data.frame(
  Intervalo = etiq_intervalo,
  MC        = round(mc, 2),
  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: Profundidad del Pozo, ",
      "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: Profundidad del Pozo, pozos de hidrocarburos, Kansas, EE.UU. (n = 52,046 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)
[0 – 1000) 500.0 3582 6.88 0.0688 3582 0.0688 52046 1.0000
[1000 – 2000) 1500.0 5873 11.28 0.1128 9455 0.1817 48464 0.9312
[2000 – 3000) 2500.0 9846 18.92 0.1892 19301 0.3708 42591 0.8183
[3000 – 4000) 3500.0 13021 25.02 0.2502 32322 0.6210 32745 0.6292
[4000 – 5000) 4500.0 11164 21.45 0.2145 43486 0.8355 19724 0.3790
[5000 – 6000) 5500.0 5531 10.63 0.1063 49017 0.9418 8560 0.1645
[6000 – 7000) 6500.0 2100 4.03 0.0403 51117 0.9822 3029 0.0582
[7000 – 8000) 7500.0 112 0.22 0.0022 51229 0.9843 929 0.0178
[8000 – 9000) 8500.0 170 0.33 0.0033 51399 0.9876 817 0.0157
[9000 – 9999] 9499.5 647 1.24 0.0124 52046 1.0000 647 0.0124
TOTAL 52046 100.00 1.0000 52046 1.0000 52046 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 Profundidad del Pozo.

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("Profundidad del pozo (pies)", side = 1, line = 3.5, cex = 1)
mtext("Profundidad del Pozo,\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 = 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("Profundidad del pozo (pies)", side = 1, line = 3.5, cex = 1)
mtext("Profundidad del Pozo,\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("Profundidad del pozo (pies)", side = 1, line = 3.5, cex = 1)
mtext("Profundidad del Pozo,\npozos de hidrocarburos, Kansas, EE.UU.",
      side = 3, line = 3, cex = 0.9, font = 2)
text(q1,      1.38, labels = paste0("Q1=", round(q1)), cex = 0.8)
text(mediana, 0.62, labels = paste0("Me=", round(mediana)), cex = 0.8)
text(q3,      1.38, labels = paste0("Q3=", round(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) - 50, max(x_asc) + 50),
     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 + 80, y_cruce + (n * 0.04),
     labels = paste0("Cruce \u2248 Me = ", round(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("Profundidad del pozo (pies)",         side = 1, line = 3.5, cex = 1)
mtext("Profundidad del Pozo,\npozos de hidrocarburos, Kansas, EE.UU.",
      side = 3, line = 3, cex = 0.9, font = 2)

6. Indicadores Estadísticos

Para la variable cuantitativa continua Profundidad del Pozo, 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(n_outliers, " 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, 2), " pies"), paste0(round(x_max, 2), " pies"),
            paste0(round(rango_val, 2), " pies"),
            paste0(round(media, 2), " pies"), paste0(round(mediana, 2), " pies"),
            moda_int,
            as.character(round(desv_std^2, 2)), paste0(round(desv_std, 2), " pies"),
            paste0(round(cv, 2), "%"),
            paste0(round(q1, 2), " pies"), paste0(round(q3, 2), " pies"),
            paste0(round(iqr_val, 2), " pies"),
            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: Profundidad del Pozo (pies)*")
  ) %>%
  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: Profundidad del Pozo (pies)
Indicador Valor
Tamaño muestral (n) 52,046
Mínimo 0 pies
Máximo 9999 pies
Rango 9999 pies
Media 3547.38 pies
Mediana 3450 pies
Moda (intervalo modal) [3000 – 4000)
Varianza (s²) 2771288.16
Desviación estándar (s) 1664.72 pies
Coef. de variación (CV%) 46.93%
Cuartil 1 (Q1) 2696 pies
Cuartil 3 (Q3) 4593 pies
Rango intercuartílico (IQR) 1897 pies
Asimetría de Pearson 0.1755
Curtosis 4.1303
Valores atípicos (Outliers) 864 valores atípicos detectados
Autor: Leslye Quinchiguango

7. Conclusiones

La variable Profundidad del Pozo fluctúa entre 0 y 9999 pies (rango = 9999 pies) y sus valores varían en torno a 3450 pies, con una desviación estándar de 1664.72 pies, siendo un grupo de valores heterogéneo (CV = 46.93%), con 864 valores atípicos detectados. El conjunto de valores se concentra a la derecha (As = 0.18), con mayor concentración de pozos de menor profundidad y una cola hacia pozos muy profundos. Por lo tanto, el comportamiento es medianamente favorable, dado que la alta variabilidad en la profundidad refleja una cartera de pozos heterogénea que demanda estrategias de perforación y equipamiento diferenciadas.


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