# Librerías necesarias
library(dplyr)
library(gt)
library(e1071)
# Paleta de colores del informe
col_principal <- "#0E6655"
col_barras <- "#16A085"
col_acento <- "#E67E22"
col_claro <- "#E8F8F5"
col_grid <- "#D7DBDD"
# --- Carga de datos ---
# El dataset está separado por ";" y usa codificación Latin-1 (según el archivo
# "Oil_Gas_Other_Regulated_Wells_Beginning_1860" descargado del NYS DEC).
# Ajusta la ruta según la ubicación del archivo en tu equipo.
ruta_csv <- "C:/Users/PATRICIA/Desktop/pr-estadistica/Oil__Gas____Other_Regulated_Wells__Beginning_1860 (3).csv"
Datos <- read.csv(ruta_csv,
header = TRUE,
sep = ";",
dec = ".",
fileEncoding = "Latin1",
stringsAsFactors = FALSE)
cat("Dimensiones del dataset:", nrow(Datos), "filas x", ncol(Datos), "columnas\n")
## Dimensiones del dataset: 47407 filas x 55 columnas
# Localizamos la columna de Elevación de forma robusta (el nombre puede llegar
# alterado por R como "Elevation..ft" al leer "Elevation, ft")
col_elev <- grep("Elevation", names(Datos), value = TRUE)[1]
if (is.na(col_elev)) stop("ERROR: No se encontró la columna de Elevación en el dataset.")
# Extracción y conversión a numérico
Variable <- suppressWarnings(as.numeric(Datos[[col_elev]]))
# Limpieza: se eliminan NA y valores 0 o sin dato registrado
Variable <- na.omit(Variable)
Variable <- Variable[Variable > 0]
if (length(Variable) == 0) stop("ERROR: No hay datos válidos de Elevación tras la limpieza.")
cat("Columna detectada:", col_elev, "\n")
## Columna detectada: Elevation..ft
cat("N° de pozos con elevación válida:", length(Variable), "\n")
## N° de pozos con elevación válida: 25548
N <- length(Variable)
min_val <- min(Variable)
max_val <- max(Variable)
Rango <- max_val - min_val
K <- floor(1 + 3.322 * log10(N)) # N° de clases (Regla de Sturges)
Amplitud <- Rango / K
ficha <- data.frame(
Característica = c("Nombre de la variable", "Tipo de variable", "Unidad de medida",
"Población de referencia", "Tamaño de muestra (N)",
"Valor mínimo", "Valor máximo", "Rango",
"N° de clases (Sturges)", "Amplitud de clase"),
Valor = c("Elevación del terreno (Elevation)", "Cuantitativa continua", "Pies s.n.m. (ft)",
"Pozos de petróleo y gas de Nueva York con elevación registrada",
as.character(N), round(min_val, 1), round(max_val, 1),
round(Rango, 1), as.character(K), round(Amplitud, 1))
)
ficha %>%
gt() %>%
tab_header(title = md("**FICHA TÉCNICA DE LA VARIABLE**")) %>%
cols_align(align = "left", columns = everything()) %>%
tab_style(style = list(cell_fill(color = col_principal), cell_text(color = "white", weight = "bold")),
locations = cells_title()) %>%
tab_style(style = list(cell_fill(color = "#148F77"), cell_text(color = "white", weight = "bold")),
locations = cells_column_labels()) %>%
opt_row_striping() %>%
tab_options(table.font.size = px(13), heading.align = "left")
| FICHA TÉCNICA DE LA VARIABLE | |
| Característica | Valor |
|---|---|
| Nombre de la variable | Elevación del terreno (Elevation) |
| Tipo de variable | Cuantitativa continua |
| Unidad de medida | Pies s.n.m. (ft) |
| Población de referencia | Pozos de petróleo y gas de Nueva York con elevación registrada |
| Tamaño de muestra (N) | 25548 |
| Valor mínimo | 3 |
| Valor máximo | 3500 |
| Rango | 3497 |
| N° de clases (Sturges) | 15 |
| Amplitud de clase | 233.1 |
La elevación (Elevation) es la altura del terreno donde se ubica la boca del pozo, medida en pies sobre el nivel del mar (ft s.n.m.). Se excluyen del análisis los pozos con elevación 0 o sin dato registrado.
breaks_table <- seq(min_val, max_val, length.out = K + 1)
breaks_table[length(breaks_table)] <- max_val + 0.0001
lim_inf_table <- breaks_table[1:K]
lim_sup_table <- breaks_table[2:(K + 1)]
MC <- (lim_inf_table + lim_sup_table) / 2
ni <- numeric(K)
for (i in 1:K) {
if (i < K) {
ni[i] <- length(Variable[Variable >= lim_inf_table[i] & Variable < lim_sup_table[i]])
} else {
ni[i] <- length(Variable[Variable >= lim_inf_table[i] & Variable <= lim_sup_table[i]])
}
}
hi <- (ni / sum(ni)) * 100
Ni_asc <- cumsum(ni)
Ni_desc <- rev(cumsum(rev(ni)))
Hi_asc <- cumsum(hi)
Hi_desc <- rev(cumsum(rev(hi)))
TDF_Elev <- data.frame(
Li = round(lim_inf_table, 1),
Ls = round(lim_sup_table, 1),
MC = round(MC, 1),
ni = ni,
hi = round(hi, 2),
Ni_asc = Ni_asc,
Ni_desc = Ni_desc,
Hi_asc = round(Hi_asc, 2),
Hi_desc = round(Hi_desc, 2)
)
# Fila de totales
totales <- c("TOTAL", "-", "-", sum(ni), round(sum(hi), 2), "-", "-", "-", "-")
TDF_Char <- TDF_Elev %>% mutate(across(everything(), as.character))
TDF_Final <- rbind(TDF_Char, totales)
modal_row <- which.max(TDF_Elev$ni)
TDF_Final %>%
gt() %>%
tab_header(
title = md("**DISTRIBUCIÓN DE FRECUENCIAS — ELEVACIÓN DEL TERRENO**"),
subtitle = md("Variable: **Elevación del pozo (ft s.n.m.)**")
) %>%
tab_spanner(label = "Frecuencias acumuladas",
columns = c(Ni_asc, Ni_desc, Hi_asc, Hi_desc)) %>%
cols_label(
Li = "Lím. Inf", Ls = "Lím. Sup", MC = "Marca de clase (Xi)",
ni = "ni", hi = "hi (%)",
Ni_asc = "Ni (Asc)", Ni_desc = "Ni (Desc)",
Hi_asc = "Hi (Asc)", Hi_desc = "Hi (Desc)"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(style = list(cell_fill(color = col_principal), cell_text(color = "white", weight = "bold")),
locations = cells_title()) %>%
tab_style(style = list(cell_fill(color = "#148F77"), cell_text(color = "white", weight = "bold")),
locations = cells_column_labels()) %>%
tab_style(style = list(cell_fill(color = "#148F77"), cell_text(color = "white", weight = "bold")),
locations = cells_column_spanners()) %>%
tab_style(style = list(cell_fill(color = "#FDEBD0"), cell_text(weight = "bold")),
locations = cells_body(rows = modal_row)) %>%
tab_style(style = list(cell_fill(color = "#D0ECE7"), cell_text(weight = "bold")),
locations = cells_body(rows = nrow(TDF_Final))) %>%
opt_row_striping() %>%
tab_options(
table.font.size = px(13),
heading.align = "left",
heading.title.font.size = px(17),
data_row.padding = px(7),
table.border.top.color = col_principal,
table.border.bottom.color = col_principal,
column_labels.border.bottom.color = col_principal
) %>%
tab_source_note(md("*Fuente: NYS DEC — Oil, Gas & Other Regulated Wells. Elaboración: JENNY.*"))
| DISTRIBUCIÓN DE FRECUENCIAS — ELEVACIÓN DEL TERRENO | ||||||||
| Variable: Elevación del pozo (ft s.n.m.) | ||||||||
| Lím. Inf | Lím. Sup | Marca de clase (Xi) | ni | hi (%) |
Frecuencias acumuladas
|
|||
|---|---|---|---|---|---|---|---|---|
| Ni (Asc) | Ni (Desc) | Hi (Asc) | Hi (Desc) | |||||
| 3 | 236.1 | 119.6 | 303 | 1.19 | 303 | 25548 | 1.19 | 100 |
| 236.1 | 469.3 | 352.7 | 464 | 1.82 | 767 | 25245 | 3 | 98.81 |
| 469.3 | 702.4 | 585.8 | 2087 | 8.17 | 2854 | 24781 | 11.17 | 97 |
| 702.4 | 935.5 | 819 | 2992 | 11.71 | 5846 | 22694 | 22.88 | 88.83 |
| 935.5 | 1168.7 | 1052.1 | 2159 | 8.45 | 8005 | 19702 | 31.33 | 77.12 |
| 1168.7 | 1401.8 | 1285.2 | 3095 | 12.11 | 11100 | 17543 | 43.45 | 68.67 |
| 1401.8 | 1634.9 | 1518.4 | 4704 | 18.41 | 15804 | 14448 | 61.86 | 56.55 |
| 1634.9 | 1868.1 | 1751.5 | 3684 | 14.42 | 19488 | 9744 | 76.28 | 38.14 |
| 1868.1 | 2101.2 | 1984.6 | 2830 | 11.08 | 22318 | 6060 | 87.36 | 23.72 |
| 2101.2 | 2334.3 | 2217.8 | 2966 | 11.61 | 25284 | 3230 | 98.97 | 12.64 |
| 2334.3 | 2567.5 | 2450.9 | 254 | 0.99 | 25538 | 264 | 99.96 | 1.03 |
| 2567.5 | 2800.6 | 2684 | 7 | 0.03 | 25545 | 10 | 99.99 | 0.04 |
| 2800.6 | 3033.7 | 2917.2 | 2 | 0.01 | 25547 | 3 | 100 | 0.01 |
| 3033.7 | 3266.9 | 3150.3 | 0 | 0 | 25547 | 1 | 100 | 0 |
| 3266.9 | 3500 | 3383.4 | 1 | 0 | 25548 | 1 | 100 | 0 |
| TOTAL | - | - | 25548 | 100 | - | - | - | - |
| Fuente: NYS DEC — Oil, Gas & Other Regulated Wells. Elaboración: JENNY. | ||||||||
h_base <- hist(Variable, breaks = "Sturges", plot = FALSE)
par(mar = c(8, 5, 4, 2))
plot(h_base,
main = "Gráfica N°1: Distribución de la elevación del terreno de los pozos (NY)",
xlab = "Elevación (ft s.n.m.)", ylab = "Frecuencia absoluta (n° de pozos)",
col = col_barras, border = "white", axes = FALSE,
ylim = c(0, max(h_base$counts) * 1.1))
axis(1, at = round(h_base$breaks), labels = format(round(h_base$breaks), big.mark = ","),
las = 2, cex.axis = 0.7)
axis(2)
grid(nx = NA, ny = NULL, col = col_grid, lty = "dotted")
h_porc <- h_base
h_porc$counts <- (h_porc$counts / sum(h_porc$counts)) * 100
h_porc$density <- h_porc$counts
y_max <- ceiling(max(h_porc$counts) / 5) * 5
par(mar = c(8, 5, 4, 2))
plot(h_porc,
main = "Gráfica N°2: Distribución porcentual de la elevación",
xlab = "Elevación (ft s.n.m.)", ylab = "Porcentaje de pozos (%)",
col = col_barras, border = "white", axes = FALSE,
ylim = c(0, y_max))
axis(1, at = round(h_base$breaks), labels = format(round(h_base$breaks), big.mark = ","),
las = 2, cex.axis = 0.7)
axis(2)
text(x = h_base$mids, y = h_porc$counts, labels = paste0(round(h_porc$counts, 1), "%"),
pos = 3, cex = 0.6, col = col_principal)
grid(nx = NA, ny = NULL, col = col_grid, lty = "dotted")
par(mar = c(7, 5, 4, 2))
boxplot(Variable, horizontal = TRUE, col = col_barras,
main = "Gráfica N°3: Diagrama de caja de la elevación",
xlab = "", outline = TRUE, axes = FALSE,
outcol = col_acento, boxwex = 0.5, frame.plot = FALSE)
eje_x <- pretty(Variable, n = 8)
axis(1, at = eje_x, labels = format(eje_x, scientific = FALSE, big.mark = ","),
las = 2, cex.axis = 0.8)
mtext("Elevación (ft s.n.m.)", side = 1, line = 5.5)
grid(nx = NULL, ny = NA, col = col_grid, lty = "dotted")
par(mar = c(5, 5, 4, 8), xpd = TRUE)
x_ac <- breaks_table
y_asc <- c(0, Ni_asc)
y_des <- c(Ni_desc, 0)
x_range <- range(x_ac)
y_range <- c(0, max(c(y_asc, y_des)))
plot(x_ac, y_asc, type = "o", col = col_principal, lwd = 2, pch = 16,
main = "Gráfica N°4: Ojivas de la elevación",
xlab = "Elevación (ft s.n.m.)", ylab = "Frecuencia acumulada (n° de pozos)",
xlim = x_range, ylim = y_range, axes = FALSE, frame.plot = FALSE)
axis(1, at = round(breaks_table), labels = format(round(breaks_table), big.mark = ","),
las = 2, cex.axis = 0.6)
axis(2, at = pretty(y_asc), labels = format(pretty(y_asc), big.mark = ","))
lines(x_ac, y_des, type = "o", col = col_acento, lwd = 2, pch = 16)
legend("right", legend = c("Ascendente (Ni↑)", "Descendente (Ni↓)"),
col = c(col_principal, col_acento), lty = 1, pch = 16,
inset = c(-0.18, 0), bty = "n")
grid(col = col_grid, lty = "dotted")
media_val <- mean(Variable)
mediana_val <- median(Variable)
freq_max <- max(TDF_Elev$ni)
modas_calc <- TDF_Elev$MC[TDF_Elev$ni == freq_max]
moda_txt <- paste(round(modas_calc, 1), collapse = " ; ")
rango_txt <- paste0("[", round(min_val, 1), " ; ", round(max_val, 1), "]")
varianza_val <- var(Variable)
sd_val <- sd(Variable)
cv_val <- (sd_val / abs(media_val)) * 100
asimetria_val <- skewness(Variable, type = 2)
curtosis_val <- kurtosis(Variable, type = 2)
vals_atipicos <- boxplot.stats(Variable)$out
num_atipicos <- length(vals_atipicos)
status_atipicos <- if (num_atipicos > 0) {
paste0(num_atipicos, " [", round(min(vals_atipicos), 1), " ; ", round(max(vals_atipicos), 1), "]")
} else {
"0 (Sin atípicos)"
}
df_resumen <- data.frame(
"Variable" = "Elevación (ft s.n.m.)",
"Rango" = rango_txt,
"Media" = media_val,
"Mediana" = mediana_val,
"Moda" = moda_txt,
"Varianza" = varianza_val,
"Desv_Std" = sd_val,
"CV_Porc" = cv_val,
"Asimetria" = asimetria_val,
"Curtosis" = curtosis_val,
"Atipicos" = status_atipicos,
check.names = FALSE
)
df_resumen %>%
gt() %>%
tab_header(
title = md("**RESUMEN ESTADÍSTICO Y MEDIDAS DESCRIPTIVAS**"),
subtitle = "Indicadores de la elevación del terreno de los pozos (ft) — Nueva York"
) %>%
tab_source_note(source_note = "Autor: JENNY") %>%
fmt_number(columns = c(Media, Mediana, Varianza, Desv_Std, CV_Porc), decimals = 2) %>%
fmt_number(columns = c(Asimetria, Curtosis), decimals = 4) %>%
cols_label(
Variable = "Variable", Rango = "Rango Total",
Media = "Media (X)", Mediana = "Mediana (Me)", Moda = "Moda (Mo)",
Varianza = "Varianza (S2)", Desv_Std = "Desv. Est. (S)", CV_Porc = "C.V. (%)",
Asimetria = "Asimetría (As)", Curtosis = "Curtosis", Atipicos = "Atípicos"
) %>%
cols_align(align = "center", columns = everything()) %>%
tab_style(style = list(cell_fill(color = col_principal), cell_text(color = "white", weight = "bold")),
locations = cells_title()) %>%
tab_style(style = list(cell_fill(color = "#148F77"), cell_text(color = "white", weight = "bold")),
locations = cells_column_labels()) %>%
tab_options(
table.font.size = px(13),
heading.align = "left",
data_row.padding = px(9),
table.border.top.color = col_principal,
table.border.bottom.color = col_principal,
column_labels.border.bottom.color = col_principal
)
| RESUMEN ESTADÍSTICO Y MEDIDAS DESCRIPTIVAS | ||||||||||
| Indicadores de la elevación del terreno de los pozos (ft) — Nueva York | ||||||||||
| Variable | Rango Total | Media (X) | Mediana (Me) | Moda (Mo) | Varianza (S2) | Desv. Est. (S) | C.V. (%) | Asimetría (As) | Curtosis | Atípicos |
|---|---|---|---|---|---|---|---|---|---|---|
| Elevación (ft s.n.m.) | [3 ; 3500] | 1,432.98 | 1,495.00 | 1518.4 | 291,239.03 | 539.67 | 37.66 | −0.2732 | −0.7318 | 1 [3500 ; 3500] |
| Autor: JENNY | ||||||||||
La variable Elevación fluctúa entre 3 y 3500 pies sobre el nivel del mar, y sus valores se concentran alrededor de 1433 ft (mediana ≈ 1495 ft). Presenta una desviación estándar de 539.7 ft, siendo una variable heterogénea (C.V. = 37.66%).
La distribución es aproximadamente simétrica (As = -0.2732) y platicúrtica (más aplanada que la normal) (Curtosis = -0.7318). Se identificaron 1 valores atípicos en el conjunto de datos.
De un total de 47407 pozos registrados en la base original, 25548 pozos presentan un dato de elevación válido (> 0), lo cual permite caracterizar el terreno donde se concentra la actividad de perforación en Nueva York.