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.
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
Se realiza el aislamiento de la variable cuantitativa discreta COUNTY_CODE, que representa el código identificador del condado de Kansas en el que se ubica cada arrendamiento de hidrocarburos. Sus valores son números enteros contables en el rango 1–207. Se filtran únicamente los valores válidos dentro de ese rango.
x_raw <- datos %>%
mutate(CTY = suppressWarnings(as.integer(COUNTY_CODE))) %>%
filter(!is.na(CTY), CTY >= 1, CTY <= 207) %>%
pull(CTY)
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: 92
cat("Como hay", n_unique, "> 10 valores únicos, se agrupa en intervalos de clase (máx. 10).\n")
## Como hay 92 > 10 valores únicos, se agrupa en intervalos de clase (máx. 10).
Se aplica el criterio de máximo 10 intervalos para variables discretas agrupadas. 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_max <- 10
c_amp <- ceiling(rango_val / k_max)
k <- ceiling((rango_val + 1) / c_amp) # numero real de intervalos necesarios (<= k_max), evita breaks duplicados/invertidos
cat("n =", n, "| k =", k, "| Rango =", rango_val, "| Amplitud c =", c_amp, "\n")
## n = 47757 | k = 10 | Rango = 206 | Amplitud c = 21
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 Código de Condado, correspondiente a los arrendamientos de hidrocarburos registrados en Kansas, EE.UU.
Justificación del agrupamiento. Código de Condado es discreta, pero al tener 92 valores únicos (más de los 10 recomendados) una tabla de frecuencia simple resultaría demasiado extensa y poco legible. Por ello se agrupa en intervalos de clase, como se hace con variables continuas, únicamente como recurso para resumir la información; su naturaleza discreta se conserva en los límites e indicadores, que siguen siendo enteros.
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: Código de Condado, ",
"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: Código de Condado, arrendamientos de hidrocarburos, Kansas, EE.UU. (n = 47,757 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 – 22) | 11 | 6555 | 13.73 | 0.1373 | 6555 | 0.1373 | 47757 | 1.0000 |
| [22 – 43) | 32 | 3489 | 7.31 | 0.0731 | 10044 | 0.2103 | 41202 | 0.8627 |
| [43 – 64) | 53 | 5132 | 10.75 | 0.1075 | 15176 | 0.3178 | 37713 | 0.7897 |
| [64 – 85) | 74 | 5650 | 11.83 | 0.1183 | 20826 | 0.4361 | 32581 | 0.6822 |
| [85 – 106) | 95 | 4072 | 8.53 | 0.0853 | 24898 | 0.5213 | 26931 | 0.5639 |
| [106 – 127) | 116 | 4355 | 9.12 | 0.0912 | 29253 | 0.6125 | 22859 | 0.4787 |
| [127 – 148) | 137 | 4520 | 9.46 | 0.0946 | 33773 | 0.7072 | 18504 | 0.3875 |
| [148 – 169) | 158 | 5261 | 11.02 | 0.1102 | 39034 | 0.8173 | 13984 | 0.2928 |
| [169 – 190) | 179 | 5084 | 10.65 | 0.1065 | 44118 | 0.9238 | 8723 | 0.1827 |
| [190 – 207] | 199 | 3639 | 7.62 | 0.0762 | 47757 | 1.0000 | 3639 | 0.0762 |
| TOTAL | — | 47757 | 100.00 | 1.0000 | 47757 | 1.0000 | 47757 | 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 Código de Condado.
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("Código de Condado", side = 1, line = 3.5, cex = 1)
mtext(
"Gráfica N°1: Histograma de Frecuencias Absolutas de la Variable Código de Condado,\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("Código de Condado", side = 1, line = 3.5, cex = 1)
mtext(
"Gráfica N°2: Polígono de Frecuencias de la Variable Código de Condado,\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)
# Calcular indicadores necesarios para el 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("Código de Condado", side = 1, line = 3.5, cex = 1)
mtext(
"Gráfica N°3: Boxplot de la Variable Código de Condado,\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)
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("Código de Condado", side = 1, line = 3.5, cex = 1)
mtext(
"Gráfica N°4: Ojivas Creciente y Decreciente de la Variable Código de Condado,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
side = 3, line = 3, cex = 0.9, font = 2
)
Para la variable cuantitativa discreta agrupada Código de Condado, 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 = ", ")
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, big.mark = ","),
as.character(x_min),
as.character(x_max),
as.character(rango_val),
as.character(round(media)),
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))
),
stringsAsFactors = FALSE
)
indicadores %>%
gt() %>%
tab_header(
title = md("**Tabla N°2: Indicadores Estadísticos**"),
subtitle = md("*Variable Cuantitativa Discreta Agrupada: Código de Condado*")
) %>%
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_style(
style = list(
cell_fill(color = "#F0F0F0"),
cell_text(weight = "bold")
),
locations = cells_body(
rows = Indicador == "Media",
columns = 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: Código de Condado | |
| Indicador | Valor |
|---|---|
| Tamaño muestral (n) | 47,757 |
| Mínimo | 1 |
| Máximo | 207 |
| Rango | 206 |
| Media | 102 |
| Mediana | 99 |
| Moda | 7 |
| Varianza (s²) | 3838.79 |
| Desviación estándar (s) | 61.96 |
| Coef. de variación (CV%) | 60.63% |
| Cuartil 1 (Q1) | 51 |
| Cuartil 3 (Q3) | 159 |
| Rango intercuartílico (IQR) | 108 |
| Asimetría de Pearson | 0.1548 |
| Curtosis | 1.7776 |
| Autor: Leslye Quinchiguango | |
La variable Código de Condado fluctúa entre 1 y 207 (rango = 206 condados) y sus valores varían en torno a 99, con una desviación estándar de 61.96 condados, siendo un grupo de valores heterogéneo (CV = 60.63%), sin presencia de valores atípicos. El conjunto de valores se concentra a la derecha (As = 0.15), con mayor concentración de arrendamientos en condados con códigos bajos. Por lo tanto, el comportamiento es medianamente favorable, dado que los arrendamientos se distribuyen entre un número amplio de condados, implicando mayores costos logísticos y operativos para la industria.
Autor: Leslye Quinchiguango