El presente reporte tiene como objetivo realizar un análisis
estadístico descriptivo sobre los tipos de tubería registrados en el
conjunto de datos database-_1_.csv. A través del uso del
lenguaje de programación R, se procesará la información para identificar
las frecuencias y patrones principales, permitiendo una comprensión
clara de las infraestructuras predominantes en la muestra de accidentes
estudiada.
# 1. Cargar la base de datos
database <- read.csv("database-_1_.csv", header = TRUE, sep = ",", dec = ".", check.names = FALSE)
zona <- database$`Pipeline Type`
A continuación, se presenta el procesamiento de datos para la variable Pipeline Type. Se detalla el código utilizado en R para la importación del archivo CSV y la posterior generación de la tabla de frecuencias, con el fin de analizar la incidencia de siniestros según el tipo de infraestructura.
library(dplyr)
library(knitr)
library(kableExtra)
TDF_tuberia <- database %>%
mutate(`Pipeline Type` = case_when(
`Pipeline Type` == "ABOVEGROUND" ~ "Superficial",
`Pipeline Type` == "UNDERGROUND" ~ "Subterráneo",
`Pipeline Type` == "TANK" ~ "Tanque",
`Pipeline Type` == "TRANSITION AREA" ~ "Área de Transición",
is.na(`Pipeline Type`) | `Pipeline Type` == "" ~ "No especificado",
TRUE ~ "Otro"
)) %>%
count(`Pipeline Type`, name = "ni") %>%
arrange(desc(ni))
TDF_tuberia$hi_exacto <- (TDF_tuberia$ni / sum(TDF_tuberia$ni)) * 100
TDF_tuberia$DECIMAL_exacto <- TDF_tuberia$hi_exacto / 100
TDF_tuberia$hi <- round(TDF_tuberia$hi_exacto, 2)
TDF_tuberia$DECIMAL <- round(TDF_tuberia$DECIMAL_exacto, 3)
dif_hi <- 100 - sum(TDF_tuberia$hi)
dif_dec <- 1 - sum(TDF_tuberia$DECIMAL)
idx_max <- which.max(TDF_tuberia$ni)
TDF_tuberia$hi[idx_max] <- TDF_tuberia$hi[idx_max] + dif_hi
TDF_tuberia$DECIMAL[idx_max] <- TDF_tuberia$DECIMAL[idx_max] + dif_dec
Sumatoria <- data.frame(
`Pipeline Type` = "Total",
ni = sum(TDF_tuberia$ni),
hi = sum(TDF_tuberia$hi),
DECIMAL = sum(TDF_tuberia$DECIMAL),
check.names = FALSE
)
TDF_final <- rbind(TDF_tuberia[, c("Pipeline Type", "ni", "hi", "DECIMAL")], Sumatoria)
colnames(TDF_final) <- c("Tipo de tubería", "ni", "hi (%)", "fi")
titulo_formal <- "CUADRO N° [1] <br/> Distribucion de frecuencias segun el tipo de tuberia en accidentes de oleoductos de Estados Unidos, [2010 - 2016]"
kable(TDF_final, align = 'c', digits = c(0, 0, 2, 3)) %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped", "hover", "condensed", "bordered")) %>%
add_header_above(c(" " = 2, "Frecuencia relativa" = 2),
bold = c(FALSE, TRUE),
background = c("white", "#D5D8DC")) %>%
add_header_above(setNames(4, titulo_formal), align = "center", escape = FALSE, bold = FALSE, background = "white") %>%
row_spec(0, bold = TRUE) %>%
row_spec(nrow(TDF_final), bold = TRUE, background = "#f2f2f2") %>%
row_spec(1, bold = TRUE)
| Tipo de tubería | ni | hi (%) | fi |
|---|---|---|---|
| Superficial | 1475 | 52.78 | 0.528 |
| Subterráneo | 985 | 35.24 | 0.352 |
| Tanque | 301 | 10.77 | 0.108 |
| No especificado | 18 | 0.64 | 0.006 |
| Área de Transición | 16 | 0.57 | 0.006 |
| Total | 2795 | 100.00 | 1.000 |
AVISO IMPORANTE! La diferencia entre los 2,795 siniestros totales de la base de datos y los 2,777 reportados en el análisis se debe a que existen 18 registros que no contienen información (valores nulos o vacíos) en la variable “Pipeline Type”. Para asegurar la precisión del estudio estadístico, el código en R aplicó un filtro de limpieza que excluye automáticamente estos datos faltantes, garantizando que el análisis de frecuencias, los porcentajes y los gráficos reflejen únicamente los incidentes donde el tipo de infraestructura está válidamente documentado.
A continuación, se presenta un gráfico de barras que ilustra la distribución absoluta de los distintos tipos de tuberías implicados en accidentes. Esta representación visual permite apreciar de forma rápida e intuitiva cuáles son las infraestructuras con mayor incidencia, destacando la diferencia entre los sistemas expuestos al exterior y los enterrados
ggplot(TDF_tuberia, aes(x = reorder(`Pipeline Type`, -ni), y = ni)) +
geom_bar(stat = "identity", fill = "#2980b9") +
labs(title = "Gráfica N 1: Distribución Absoluta global de tipo de tubería",
x = "Tipo de Tubería",
y = "Cantidad") +
theme_minimal() +
# Inclinamos los textos del eje X para que se lean bien
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
ylim(0, max(TDF_tuberia$ni) * 1.1)
El siguiente gráfico mantiene el análisis de frecuencias absolutas enfocado en el volumen de siniestros por cada clasificación específica de infraestructura.
ggplot(TDF_tuberia, aes(x = reorder(`Pipeline Type`, -ni), y = ni)) +
geom_bar(stat = "identity", fill = "#2980b9") +
labs(title = "Gráfica N 2: Distribución Absoluta local de tipo de tubería",
x = "Tipo de Tubería",
y = "Cantidad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
ylim(0, max(TDF_tuberia$ni) * 1.1)
A través de la gráfica de incidencia relativa, se estandariza el volumen de siniestros expresando cada tipo de tubería como una proporción del total. Esta métrica porcentual es fundamental para evaluar probabilísticamente el peso específico de cada infraestructura frente al universo completo de datos observados.
# Convertimos 'hi' a numérico para graficar correctamente
TDF_tuberia <- TDF_tuberia %>% mutate(hi_num = as.numeric(hi))
ggplot(TDF_tuberia, aes(x = reorder(`Pipeline Type`, -hi_num), y = hi_num)) +
geom_bar(stat = "identity", fill = "#2980b9") +
labs(title = "Gráfica N 3: Distribución Relativa global de tipo de tubería",
x = "Tipo de Tubería",
y = "Porcentaje (hi %)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
ylim(0, 100)
Al enfocar el análisis porcentual ajustando los ejes a la incidencia real de la muestra, observamos con mayor detalle la distribución de probabilidad de fallo de cada tipo de conducto. Esta visualización facilita enfocar la atención en el análisis de riesgos.
# Usamos TDF_tuberia
ggplot(TDF_tuberia, aes(x = reorder(`Pipeline Type`, -hi_num), y = hi_num)) +
geom_bar(stat = "identity", fill = "#2980b9") +
labs(title = "Gráfica N 4: Distribución Relativa local de tipo de tubería",
x = "Tipo de Tubería",
y = "Porcentaje (%)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
ylim(0, max(TDF_tuberia$hi_num) * 1.1)
El siguiente diagrama circular muestra la composición porcentual de la siniestralidad, permitiendo visualizar de un vistazo qué tipos de tuberías o infraestructuras concentran la mayor proporción de los incidentes.
ggplot(TDF_tuberia, aes(x = "", y = hi_num, fill = `Pipeline Type`)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(hi, "%")), position = position_stack(vjust = 0.5), size = 4) +
scale_fill_brewer(palette = "Blues") +
labs(title = "Gráfica N 5: Distribución de tipos de tubería") +
theme_void() +
theme(legend.position = "right",
legend.title = element_blank(),
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5))
Dado el carácter nominal de la variable analizada, el estudio de tendencia central no admite promedios ni desviaciones estándar, por lo que se fundamenta estrictamente en el análisis de frecuencias y la Moda estadística. A continuación, se presentan los indicadores descriptivos que cuantifican el tamaño de la muestra y determinan el tipo de instalación con mayor probabilidad de siniestro.
total_accidentes <- sum(TDF_tuberia$ni)
moda_cat <- TDF_tuberia$`Pipeline Type`[which.max(TDF_tuberia$ni)]
moda_frec <- max(TDF_tuberia$ni)
moda_porcentaje <- TDF_tuberia$hi[which.max(TDF_tuberia$ni)]
cat("--- INDICADORES ESTADÍSTICOS ---\n")
## --- INDICADORES ESTADÍSTICOS ---
cat("Total de siniestros analizados (N):", total_accidentes, "\n")
## Total de siniestros analizados (N): 2795
cat("Moda (Categoría más frecuente):", moda_cat, "con", moda_frec, "casos (", moda_porcentaje, "% )\n")
## Moda (Categoría más frecuente): Superficial con 1475 casos ( 52.78 % )
La variable Tipo de Tubería, correspondiente a la infraestructura siniestrada, es de tipo nominal. El valor más frecuente es Superficial, concentrando la mayor proporción de los accidentes con un 52.77% del total.
Por lo anterior, este predominio resulta favorable para la atención de emergencias, ya que el acceso directo agiliza la inspección y reparación. Esto permite contener rápidamente los daños, a diferencia de los incidentes en tuberías subterráneas, donde la necesidad de excavación hace que la logística de respuesta sea mucho más compleja.