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("Data set cargada correctamente.\n")
## Data set cargada correctamente.
cat("Total de registros (filas):", nrow(datos), "\n")
## Total de registros (filas): 104173
Se realiza el aislamiento de la variable cuantitativa discreta RANGE, que representa la división este-oeste del sistema de agrimensura rectangular (PLSS) utilizado en Kansas. Sus valores son números enteros contables que indican la posición este-oeste de cada arrendamiento respecto al meridiano base. Se filtran únicamente los valores válidos en el rango 1–43.
x_raw <- datos %>%
mutate(RNG = suppressWarnings(as.integer(RANGE))) %>%
filter(!is.na(RNG), RNG >= 1, RNG <= 43) %>%
pull(RNG)
n_unique <- length(unique(x_raw))
cat("Observaciones válidas:", length(x_raw), "\n")
## Observaciones válidas: 98826
cat("Valores únicos:", n_unique, "\n")
## Valores únicos: 43
cat("Como hay", n_unique, "> 10 valores únicos, se agrupa en intervalos de clase (máx. 10).\n")
## Como hay 43 > 10 valores únicos, se agrupa en intervalos de clase (máx. 10).
Aunque RANGE es una variable cuantitativa discreta, presenta 43 valores únicos, lo que supera el umbral de 10. Por esta razón, se la trata como variable continua agrupada en intervalos de clase: con tantos valores distintos, listarlos individualmente no aporta información útil y el agrupamiento permite identificar patrones de distribución geográfica de forma clara y comparable. 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, aplicando el criterio de máximo 10 intervalos.
\[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 = 98826 | k = 10 | Rango = 42 | Amplitud c = 5
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])
Se calcula la distribución de frecuencias absolutas y relativas para la variable cuantitativa discreta agrupada Range, correspondiente a los arrendamientos 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] - 1, "]")
tabla_df <- data.frame(
Intervalo = etiq_intervalo,
MC = as.integer(mc),
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_integer_,
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 Discreta Agrupada: Range, ",
"arrendamientos 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 Discreta Agrupada: Range, arrendamientos de hidrocarburos, Kansas, EE.UU. (n = 98,826 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) | |||
| [1 – 6) | 3 | 7468 | 7.56 | 0.0756 | 7468 | 0.0756 | 98826 | 1.0000 |
| [6 – 11) | 8 | 10793 | 10.92 | 0.1092 | 18261 | 0.1848 | 91358 | 0.9244 |
| [11 – 16) | 13 | 23490 | 23.77 | 0.2377 | 41751 | 0.4225 | 80565 | 0.8152 |
| [16 – 21) | 18 | 20004 | 20.24 | 0.2024 | 61755 | 0.6249 | 57075 | 0.5775 |
| [21 – 26) | 23 | 9646 | 9.76 | 0.0976 | 71401 | 0.7225 | 37071 | 0.3751 |
| [26 – 31) | 28 | 4111 | 4.16 | 0.0416 | 75512 | 0.7641 | 27425 | 0.2775 |
| [31 – 36) | 33 | 11646 | 11.78 | 0.1178 | 87158 | 0.8819 | 23314 | 0.2359 |
| [36 – 41) | 38 | 9019 | 9.13 | 0.0913 | 96177 | 0.9732 | 11668 | 0.1181 |
| [41 – 46) | 43 | 2649 | 2.68 | 0.0268 | 98826 | 1.0000 | 2649 | 0.0268 |
| [46 – 43] | 45 | 0 | 0.00 | 0.0000 | 98826 | 1.0000 | 0 | 0.0000 |
| TOTAL | — | 98826 | 100.00 | 1.0000 | 98826 | 1.0000 | 98826 | 1.0000 |
| Autor: Leslye Quinchiguango | ||||||||
Se presentan cuatro gráficas en escala de grises que permiten analizar visualmente la distribución de la variable cuantitativa discreta agrupada Range.
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("Range", side = 1, line = 3.5, cex = 1)
mtext("Range,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
side = 3, line = 3, cex = 0.9, font = 2)
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("Range", side = 1, line = 3.5, cex = 1)
mtext("Range,\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)
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("Range", side = 1, line = 3.5, cex = 1)
mtext("Range,\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=", as.integer(mediana)), cex = 0.8)
text(q3, 1.38, labels = paste0("Q3=", q3), cex = 0.8)
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.3, y_cruce + (n * 0.04),
labels = paste0("Cruce \u2248 Me = ", as.integer(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("Range", side = 1, line = 3.5, cex = 1)
mtext("Range,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
side = 3, line = 3, cex = 0.9, font = 2)
Para la variable cuantitativa discreta agrupada Range, se calculan todos los indicadores de tendencia central, dispersión y forma.
moda_val <- as.integer(names(sort(table(x), decreasing = TRUE)[1]))
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
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 = ", ")
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", "Valores atípicos (Outliers)"),
Valor = c(format(n, big.mark = ","), as.character(x_min), as.character(x_max),
as.character(rango_val), as.character(round(media, 2)),
as.character(round(mediana)), as.character(moda_val),
as.character(round(desv_std^2, 2)), as.character(round(desv_std, 2)),
paste0(round(cv, 2), "%"), as.character(round(q1)),
as.character(round(q3)), as.character(round(iqr_val)),
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 Discreta Agrupada: Range*")
) %>%
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(45), 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 Discreta Agrupada: Range | |
| Indicador | Valor |
|---|---|
| Tamaño muestral (n) | 98,826 |
| Mínimo | 1 |
| Máximo | 43 |
| Rango | 42 |
| Media | 19.74 |
| Mediana | 17 |
| Moda | 14 |
| Varianza (s²) | 116.46 |
| Desviación estándar (s) | 10.79 |
| Coef. de variación (CV%) | 54.68% |
| Cuartil 1 (Q1) | 12 |
| Cuartil 3 (Q3) | 29 |
| Rango intercuartílico (IQR) | 17 |
| Asimetría de Pearson | 0.7605 |
| Curtosis | 2.1926 |
| Valores atípicos (Outliers) | Sin valores atípicos |
| Autor: Leslye Quinchiguango | |
La variable Range fluctúa entre 1 y 43 (rango = 42 unidades) y sus valores varían en torno a 17, con una desviación estándar de 10.79 unidades, siendo un grupo de valores heterogéneo (CV = 54.68%), sin presencia de valores atípicos. El conjunto de valores se concentra a la derecha (As = 0.76), con mayor concentración de arrendamientos en los rangos del este. Por lo tanto, el comportamiento es medianamente favorable, dado que los arrendamientos se distribuyen a lo largo de una amplia extensión en el eje este-oeste, implicando mayores costos logísticos y operativos para la industria.
Autor: Leslye Quinchiguango — Análisis Estadístico, Kansas Hydrocarbon Leases Dataset