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 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
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])
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 | ||||||||
Se presentan cuatro gráficas en escala de grises que permiten analizar visualmente la distribución de la variable cuantitativa continua Longitud.
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)
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)
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)
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)
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 | |
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