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
Se realiza el aislamiento de la variable cuantitativa continua LATITUDE, que representa la coordenada angular que indica la posición norte-sur de cada pozo, expresada en grados decimales. Para el estado de Kansas, los valores se encuentran en el rango aproximado de 36.99° a 40.00° N. Se filtran únicamente los valores válidos dentro de ese rango.
x_raw <- datos %>%
mutate(LAT = suppressWarnings(as.numeric(LATITUDE))) %>%
filter(!is.na(LAT), LAT >= 36.0, LAT <= 41.0) %>%
pull(LAT)
cat("Observaciones válidas:", length(x_raw), "\n")
## Observaciones válidas: 122
Para la variable cuantitativa continua Latitud, 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 = 122 | k = 10 | Rango = 2.845 | Amplitud c = 0.2845
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])
Se calcula la distribución de frecuencias absolutas y relativas para la variable cuantitativa continua Latitud, 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: Latitud, ",
"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: Latitud, pozos de hidrocarburos, Kansas, EE.UU. (n = 122 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) | |||
| [36.58 – 36.8645) | 36.7223 | 9 | 7.38 | 0.0738 | 9 | 0.0738 | 122 | 1.0000 |
| [36.8645 – 37.149) | 37.0067 | 25 | 20.49 | 0.2049 | 34 | 0.2787 | 113 | 0.9262 |
| [37.149 – 37.4335) | 37.2913 | 14 | 11.48 | 0.1148 | 48 | 0.3934 | 88 | 0.7213 |
| [37.4335 – 37.718) | 37.5758 | 10 | 8.20 | 0.0820 | 58 | 0.4754 | 74 | 0.6066 |
| [37.718 – 38.0025) | 37.8602 | 11 | 9.02 | 0.0902 | 69 | 0.5656 | 64 | 0.5246 |
| [38.0025 – 38.287) | 38.1448 | 9 | 7.38 | 0.0738 | 78 | 0.6393 | 53 | 0.4344 |
| [38.287 – 38.5715) | 38.4292 | 22 | 18.03 | 0.1803 | 100 | 0.8197 | 44 | 0.3607 |
| [38.5715 – 38.856) | 38.7138 | 10 | 8.20 | 0.0820 | 110 | 0.9016 | 22 | 0.1803 |
| [38.856 – 39.1405) | 38.9982 | 8 | 6.56 | 0.0656 | 118 | 0.9672 | 12 | 0.0984 |
| [39.1405 – 39.425] | 39.2827 | 4 | 3.28 | 0.0328 | 122 | 1.0000 | 4 | 0.0328 |
| TOTAL | — | 122 | 100.00 | 1.0000 | 122 | 1.0000 | 122 | 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 continua Latitud.
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("Latitud (grados)", side = 1, line = 3.5, cex = 1)
mtext("Latitud,\npozos 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 = 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("Latitud (grados)", side = 1, line = 3.5, cex = 1)
mtext("Latitud,\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)
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("Latitud (grados)", side = 1, line = 3.5, cex = 1)
mtext("Latitud,\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)
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("Latitud (grados)", side = 1, line = 3.5, cex = 1)
mtext("Latitud,\npozos de hidrocarburos, Kansas, EE.UU.",
side = 3, line = 3, cex = 0.9, font = 2)
Para la variable cuantitativa continua Latitud, 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: Latitud (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: Latitud (grados decimales) | |
| Indicador | Valor |
|---|---|
| Tamaño muestral (n) | 122 |
| Mínimo | 36.58° |
| Máximo | 39.425° |
| Rango | 2.845° |
| Media | 37.8494° |
| Mediana | 37.868° |
| Moda (intervalo modal) | [36.8645 – 37.149) |
| Varianza (s²) | 0.571725 |
| Desviación estándar (s) | 0.7561° |
| Coef. de variación (CV%) | 1.9977% |
| Cuartil 1 (Q1) | 37.089° |
| Cuartil 3 (Q3) | 38.458° |
| Rango intercuartílico (IQR) | 1.369° |
| Asimetría de Pearson | -0.0737 |
| Curtosis | 1.7825 |
| Valores atípicos (Outliers) | Sin valores atípicos |
| Autor: Leslye Quinchiguango | |
La variable Latitud fluctúa entre 36.58° y 39.425° N (rango = 2.845°) y sus valores varían en torno a 37.868°, con una desviación estándar de 0.7561°, siendo un grupo de valores homogéneo (CV = 1.9977%), sin presencia de valores atípicos. El conjunto de valores se concentra de forma simétrica (As ≈ -0.07), con distribución equilibrada de los pozos en el eje norte-sur de Kansas. 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