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 continua LATITUDE, que representa la coordenada geográfica norte-sur (en grados decimales) de cada arrendamiento de hidrocarburo registrado en Kansas. Sus valores se encuentran dentro del rango geográfico válido del estado (36.99° – 40.00° N). Se filtran únicamente los valores dentro de ese rango.
x_raw <- datos %>%
mutate(LAT = suppressWarnings(as.numeric(LATITUDE))) %>%
filter(!is.na(LAT), LAT >= 36.99, LAT <= 40.01) %>%
pull(LAT)
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: 32279
cat("Como hay", n_unique, "> 10 valores únicos, se agrupa en intervalos de clase (máx. 10).\n")
## Como hay 32279 > 10 valores únicos, se agrupa en intervalos de clase (máx. 10).
Se aplica el criterio de máximo 10 intervalos para variables continuas 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 = \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
cat("n =", n, "| k =", k, "| Rango =", round(rango_val, 4), "| Amplitud c =", round(c_amp, 4), "\n")
## n = 47757 | k = 10 | Rango = 3.0058 | Amplitud c = 0.3006
lim_inf <- x_min + (0:(k - 1)) * c_amp
lim_sup <- lim_inf + c_amp
lim_sup[k] <- x_max + 0.0001 # cierre del último intervalo
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 agrupada Latitude, 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("[", round(li, 4), " – ", round(ls, 4), ")")
etiq_intervalo[k] <- paste0("[", round(li[k], 4), " – ", round(ls[k] - 0.0001, 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 Agrupada: Latitude, ",
"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: Fernando Almeida*")) %>%
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 Agrupada: Latitude, 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) | |||
| [36.9944 – 37.295) | 37.1447 | 10084 | 21.12 | 0.2112 | 10084 | 0.2112 | 47757 | 1.0000 |
| [37.295 – 37.5956) | 37.4453 | 8692 | 18.20 | 0.1820 | 18776 | 0.3932 | 37673 | 0.7888 |
| [37.5956 – 37.8962) | 37.7459 | 5340 | 11.18 | 0.1118 | 24116 | 0.5050 | 28981 | 0.6068 |
| [37.8962 – 38.1968) | 38.0465 | 5134 | 10.75 | 0.1075 | 29250 | 0.6125 | 23641 | 0.4950 |
| [38.1968 – 38.4973) | 38.3470 | 4958 | 10.38 | 0.1038 | 34208 | 0.7163 | 18507 | 0.3875 |
| [38.4973 – 38.7979) | 38.6476 | 5300 | 11.10 | 0.1110 | 39508 | 0.8273 | 13549 | 0.2837 |
| [38.7979 – 39.0985) | 38.9482 | 3319 | 6.95 | 0.0695 | 42827 | 0.8968 | 8249 | 0.1727 |
| [39.0985 – 39.3991) | 39.2488 | 2566 | 5.37 | 0.0537 | 45393 | 0.9505 | 4930 | 0.1032 |
| [39.3991 – 39.6997) | 39.5494 | 1246 | 2.61 | 0.0261 | 46639 | 0.9766 | 2364 | 0.0495 |
| [39.6997 – 40.0002] | 39.8500 | 1118 | 2.34 | 0.0234 | 47757 | 1.0000 | 1118 | 0.0234 |
| TOTAL | — | 47757 | 100.00 | 1.0000 | 47757 | 1.0000 | 47757 | 1.0000 |
| Autor: Fernando Almeida | ||||||||
Se presentan cuatro gráficas en escala de grises que permiten analizar visualmente la distribución de la variable cuantitativa continua agrupada Latitude.
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 = round(breaks_vec, 3), labels = round(breaks_vec, 3), las = 2, cex.axis = 0.8)
mtext("Frecuencia Absoluta (ni)", side = 2, line = 4.5, cex = 1)
mtext("Latitude (°N)", side = 1, line = 4, cex = 1)
mtext(
"Gráfica N°1: Histograma de Frecuencias Absolutas de la Variable Latitude,\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 = round(breaks_vec, 3), labels = round(breaks_vec, 3), las = 2, cex.axis = 0.8)
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("Latitude (°N)", side = 1, line = 4, cex = 1)
mtext(
"Gráfica N°2: Polígono de Frecuencias de la Variable Latitude,\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("Latitude (°N)", side = 1, line = 3.5, cex = 1)
mtext(
"Gráfica N°3: Boxplot de la Variable Latitude,\narrendamientos 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 = round(breaks_vec, 3), labels = round(breaks_vec, 3), las = 2, cex.axis = 0.8)
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.05, 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("Latitude (°N)", side = 1, line = 4, cex = 1)
mtext(
"Gráfica N°4: Ojivas Creciente y Decreciente de la Variable Latitude,\narrendamientos de hidrocarburos, Kansas, EE.UU.",
side = 3, line = 3, cex = 0.9, font = 2
)
Para la variable cuantitativa continua agrupada Latitude, se calculan todos los indicadores de tendencia central, dispersión y forma.
moda_val <- mc[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
outliers <- sort(unique(round(x[x < lim_inf_out | x > lim_sup_out], 4)))
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 (MC 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"
),
Valor = c(
format(n, big.mark = ","),
as.character(round(x_min, 4)),
as.character(round(x_max, 4)),
as.character(round(rango_val, 4)),
as.character(round(media, 0)),
as.character(round(mediana, 0)),
as.character(round(moda_val, 0)),
as.character(round(desv_std^2, 4)),
as.character(round(desv_std, 4)),
paste0(round(cv, 2), "%"),
as.character(round(q1, 0)),
as.character(round(q3, 0)),
as.character(round(iqr_val, 4)),
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 Continua Agrupada: Latitude*")
) %>%
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: Fernando Almeida*")) %>%
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 Continua Agrupada: Latitude | |
| Indicador | Valor |
|---|---|
| Tamaño muestral (n) | 47,757 |
| Mínimo | 36.9944 |
| Máximo | 40.0002 |
| Rango | 3.0058 |
| Media | 38 |
| Mediana | 38 |
| Moda (MC modal) | 37 |
| Varianza (s²) | 0.5712 |
| Desviación estándar (s) | 0.7558 |
| Coef. de variación (CV%) | 1.99% |
| Cuartil 1 (Q1) | 37 |
| Cuartil 3 (Q3) | 39 |
| Rango intercuartílico (IQR) | 1.2269 |
| Asimetría de Pearson | 0.531 |
| Curtosis | 2.3321 |
| Autor: Fernando Almeida | |
La variable Latitud fluctúa entre 36.9944° y 40.0002° y sus valores varían en torno a 37.8808°, con una desviación estándar de 0.7558, siendo un grupo de valores homogéneo sin presencia de valores atípicos. El conjunto de valores se concentra a la izquierda y en la parte fuerte de la variable, por lo tanto el comportamiento es favorable, ya que los arrendamientos se concentran en una franja, lo que facilita la planificación y operación de la industria petrolera en Kansas.
Autor: Fernando Almeida