# 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 Profundidad Perforada de forma robusta (el nombre
# puede llegar alterado por R como "Drilled.Depth..ft" al leer "Drilled Depth, ft")
col_prof <- grep("Drilled.Depth", names(Datos), value = TRUE)[1]
if (is.na(col_prof)) stop("ERROR: No se encontró la columna de Profundidad Perforada en el dataset.")
# Extracción y conversión a numérico
Variable <- suppressWarnings(as.numeric(Datos[[col_prof]]))
# 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 Profundidad Perforada tras la limpieza.")
cat("Columna detectada:", col_prof, "\n")
## Columna detectada: Drilled.Depth..ft
cat("N° de pozos con profundidad perforada válida:", length(Variable), "\n")
## N° de pozos con profundidad perforada válida: 32793
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("Profundidad perforada (Drilled Depth)", "Cuantitativa continua", "Pies (ft)",
"Pozos de petróleo y gas de Nueva York con profundidad perforada 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 | Profundidad perforada (Drilled Depth) |
| Tipo de variable | Cuantitativa continua |
| Unidad de medida | Pies (ft) |
| Población de referencia | Pozos de petróleo y gas de Nueva York con profundidad perforada registrada |
| Tamaño de muestra (N) | 32793 |
| Valor mínimo | 1 |
| Valor máximo | 15795 |
| Rango | 15794 |
| N° de clases (Sturges) | 16 |
| Amplitud de clase | 987.1 |
La profundidad perforada (Drilled Depth) es la profundidad final alcanzada durante la perforación del pozo, medida en pies (ft). Se excluyen del análisis los pozos con profundidad 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_Prof <- 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_Prof %>% mutate(across(everything(), as.character))
TDF_Final <- rbind(TDF_Char, totales)
modal_row <- which.max(TDF_Prof$ni)
TDF_Final %>%
gt() %>%
tab_header(
title = md("**DISTRIBUCIÓN DE FRECUENCIAS — PROFUNDIDAD PERFORADA**"),
subtitle = md("Variable: **Profundidad perforada del pozo (ft)**")
) %>%
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 — PROFUNDIDAD PERFORADA | ||||||||
| Variable: Profundidad perforada del pozo (ft) | ||||||||
| Lím. Inf | Lím. Sup | Marca de clase (Xi) | ni | hi (%) |
Frecuencias acumuladas
|
|||
|---|---|---|---|---|---|---|---|---|
| Ni (Asc) | Ni (Desc) | Hi (Asc) | Hi (Desc) | |||||
| 1 | 988.1 | 494.6 | 3921 | 11.96 | 3921 | 32793 | 11.96 | 100 |
| 988.1 | 1975.2 | 1481.7 | 17489 | 53.33 | 21410 | 28872 | 65.29 | 88.04 |
| 1975.2 | 2962.4 | 2468.8 | 4862 | 14.83 | 26272 | 11383 | 80.11 | 34.71 |
| 2962.4 | 3949.5 | 3455.9 | 3301 | 10.07 | 29573 | 6521 | 90.18 | 19.89 |
| 3949.5 | 4936.6 | 4443.1 | 2586 | 7.89 | 32159 | 3220 | 98.07 | 9.82 |
| 4936.6 | 5923.8 | 5430.2 | 326 | 0.99 | 32485 | 634 | 99.06 | 1.93 |
| 5923.8 | 6910.9 | 6417.3 | 106 | 0.32 | 32591 | 308 | 99.38 | 0.94 |
| 6910.9 | 7898 | 7404.4 | 80 | 0.24 | 32671 | 202 | 99.63 | 0.62 |
| 7898 | 8885.1 | 8391.6 | 31 | 0.09 | 32702 | 122 | 99.72 | 0.37 |
| 8885.1 | 9872.2 | 9378.7 | 36 | 0.11 | 32738 | 91 | 99.83 | 0.28 |
| 9872.2 | 10859.4 | 10365.8 | 32 | 0.1 | 32770 | 55 | 99.93 | 0.17 |
| 10859.4 | 11846.5 | 11352.9 | 18 | 0.05 | 32788 | 23 | 99.98 | 0.07 |
| 11846.5 | 12833.6 | 12340.1 | 3 | 0.01 | 32791 | 5 | 99.99 | 0.02 |
| 12833.6 | 13820.8 | 13327.2 | 0 | 0 | 32791 | 2 | 99.99 | 0.01 |
| 13820.8 | 14807.9 | 14314.3 | 1 | 0 | 32792 | 2 | 100 | 0.01 |
| 14807.9 | 15795 | 15301.4 | 1 | 0 | 32793 | 1 | 100 | 0 |
| TOTAL | - | - | 32793 | 100 | - | - | - | - |
| Fuente: NYS DEC — Oil, Gas & Other Regulated Wells. Elaboración: JENNY. | ||||||||
h_base <- hist(Variable, breaks = "Sturges", plot = FALSE)
# Marcas "redondas" del eje Y que abarcan holgadamente la barra más alta,
# para que ninguna barra sobresalga por encima de la última línea de la grilla
y_ticks_freq <- pretty(c(0, h_base$counts), n = 6)
y_top_freq <- max(y_ticks_freq)
# Margen izquierdo ampliado (7) para que los números del eje (p. ej. "20,000")
# no se superpongan con el título del eje Y
par(mar = c(8, 7, 5, 2))
plot(h_base,
main = "Gráfica N°1: Distribución de la profundidad perforada de los pozos (NY)",
xlab = "Profundidad perforada (ft)", ylab = "",
col = col_barras, border = "white", axes = FALSE,
xlim = range(h_base$breaks), xaxs = "i",
ylim = c(0, y_top_freq), yaxs = "i")
axis(1, at = round(h_base$breaks), labels = format(round(h_base$breaks), big.mark = ","),
las = 2, cex.axis = 0.7)
axis(2, at = y_ticks_freq, labels = format(y_ticks_freq, big.mark = ","),
las = 1, cex.axis = 0.8)
# Título del eje Y separado de los números (line = 5) para evitar el choque
mtext("Frecuencia absoluta (n° de pozos)", side = 2, line = 5, cex = 0.9)
grid(nx = NA, ny = NULL, col = col_grid, lty = "dotted")
box(bty = "l", col = "black")
h_porc <- h_base
h_porc$counts <- (h_porc$counts / sum(h_porc$counts)) * 100
h_porc$density <- h_porc$counts
# Se deja espacio extra arriba (además de la etiqueta "%") para que ni la
# barra ni su etiqueta de texto sobresalgan del área del gráfico
y_ticks_porc <- pretty(c(0, h_porc$counts), n = 6)
y_max <- max(y_ticks_porc) + (y_ticks_porc[2] - y_ticks_porc[1]) * 0.4
# Margen izquierdo ampliado (7) para que los números del eje no choquen
# con el título del eje Y
par(mar = c(8, 7, 5, 2))
plot(h_porc,
main = "Gráfica N°2: Distribución porcentual de la profundidad perforada",
xlab = "Profundidad perforada (ft)", ylab = "",
col = col_barras, border = "white", axes = FALSE,
xlim = range(h_base$breaks), xaxs = "i",
ylim = c(0, y_max), yaxs = "i")
axis(1, at = round(h_base$breaks), labels = format(round(h_base$breaks), big.mark = ","),
las = 2, cex.axis = 0.7)
axis(2, at = y_ticks_porc, las = 1, cex.axis = 0.8)
mtext("Porcentaje de pozos (%)", side = 2, line = 5, cex = 0.9)
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")
box(bty = "l", col = "black")
par(mar = c(7, 5, 4, 2))
boxplot(Variable, horizontal = TRUE, col = col_barras,
main = "Gráfica N°3: Diagrama de caja de la profundidad perforada",
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("Profundidad perforada (ft)", 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 profundidad perforada",
xlab = "Profundidad perforada (ft)", 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_Prof$ni)
modas_calc <- TDF_Prof$MC[TDF_Prof$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" = "Profundidad perforada (ft)",
"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 profundidad perforada 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 profundidad perforada 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 |
|---|---|---|---|---|---|---|---|---|---|---|
| Profundidad perforada (ft) | [1 ; 15795] | 2,021.47 | 1,600.00 | 1481.7 | 1,567,134.36 | 1,251.85 | 61.93 | 1.9447 | 6.8103 | 1521 [4399 ; 15795] |
| Autor: JENNY | ||||||||||
La variable Profundidad perforada fluctúa entre 1 y 15795 pies, y sus valores se concentran alrededor de 2021.5 ft (mediana ≈ 1600 ft). Presenta una desviación estándar de 1251.9 ft, siendo una variable heterogénea (C.V. = 61.93%).
La distribución es asimétrica positiva (sesgo hacia la derecha) (As = 1.9447) y leptocúrtica (más apuntada que la normal) (Curtosis = 6.8103). Se identificaron 1521 valores atípicos en el conjunto de datos.
De un total de 47407 pozos registrados en la base original, 32793 pozos presentan un dato de profundidad perforada válido (> 0), lo cual permite caracterizar la profundidad alcanzada durante la perforación de los pozos en Nueva York.