La correcta inicialización del entorno de trabajo y la carga de
librerías especializadas constituyen el primer paso crítico para el
procesamiento estadístico. Herramientas como dplyr permiten
una manipulación estructurada y eficiente de la información, mientras
que paquetes como knitr y kableExtra resultan
indispensables para garantizar que la presentación de los resultados y
las tablas de frecuencias cumplan con los más altos estándares de
calidad visual exigidos en la redacción de informes técnicos.
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(knitr)
library(kableExtra)
##
## Adjuntando el paquete: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
El desarrollo de este análisis cuantitativo parte de la importación exhaustiva de los registros históricos recopilados en el conjunto de datos principal (database-1.csv). Este proceso asegura que se conserve la integridad estructural de la matriz de información original, garantizando la correcta lectura de variables operativas y de seguridad crítica. En este caso particular, se presta especial atención a los registros relacionados con incidentes que escalaron a situaciones de extrema severidad, verificando que los encabezados originales se mantengan inalterados para su correcto procesamiento.
datos <- read.csv("database-_1_.csv", header = TRUE, sep = ",", dec = ".", check.names = FALSE)
names(datos)
## [1] "Report Number"
## [2] "Supplemental Number"
## [3] "Accident Year"
## [4] "Accident Date/Time"
## [5] "Operator ID"
## [6] "Operator Name"
## [7] "Pipeline/Facility Name"
## [8] "Pipeline Location"
## [9] "Pipeline Type"
## [10] "Liquid Type"
## [11] "Liquid Subtype"
## [12] "Liquid Name"
## [13] "Accident City"
## [14] "Accident County"
## [15] "Accident State"
## [16] "Accident Latitude"
## [17] "Accident Longitude"
## [18] "Cause Category"
## [19] "Cause Subcategory"
## [20] "Unintentional Release (Barrels)"
## [21] "Intentional Release (Barrels)"
## [22] "Liquid Recovery (Barrels)"
## [23] "Net Loss (Barrels)"
## [24] "Liquid Ignition"
## [25] "Liquid Explosion"
## [26] "Pipeline Shutdown"
## [27] "Shutdown Date/Time"
## [28] "Restart Date/Time"
## [29] "Public Evacuations"
## [30] "Property Damage Costs"
## [31] "Lost Commodity Costs"
## [32] "Public/Private Property Damage Costs"
## [33] "Emergency Response Costs"
## [34] "Environmental Remediation Costs"
## [35] "Other Costs"
## [36] "All Costs"
La parametrización del estudio demanda aislar elementos específicos para su evaluación detallada. En esta etapa, se aísla la variable dicotómica referente a las explosiones de líquidos (Liquid Explosion). Este paso metodológico es crucial, ya que permite realizar una depuración focalizada, identificar el comportamiento de la infraestructura ante fallas críticas y delimitar el tamaño muestral sobre el cual se evaluará la incidencia de estos eventos catastróficos, asegurando la solidez técnica de las conclusiones posteriores.
zona <- datos$`Liquid Explosion`
La fase de cálculo de frecuencias absolutas transforma el volumen de datos extraídos en métricas de evaluación de riesgos directamente interpretables. A través de este procedimiento estadístico, se tabulan todas las observaciones para cuantificar el número exacto de incidentes que culminaron en una explosión. La consolidación de estos valores absolutos proporciona una visión objetiva del nivel de incidencia de estos eventos dentro de la red de tuberías, fundamentando de manera cuantitativa cualquier propuesta orientada a la mitigación de riesgos y mejora en la gestión de la infraestructura.
conteo_zona <- table(zona)
print(conteo_zona)
## zona
## NO YES
## 2780 15
A continuación, se analiza la variable categórica Explosión de Líquidos, la cual indica si se produjo o no la detonación o estallido de un fluido durante el evento estudiado. Para comprender la prevalencia de este factor, se extrajeron los datos y se construyó una tabla de frecuencias absolutas y relativas. Esta distribución nos permite visualizar de manera clara la proporción de casos afirmativos frente a los negativos dentro de la muestra total, resaltando la excepcionalidad de la explosión. library(ggplot2)
library(dplyr)
library(knitr)
library(kableExtra)
datos_explosion <- datos %>%
mutate(Liquid.Explosion = case_when(
trimws(`Liquid Explosion`) == "YES" ~ "Sí",
trimws(`Liquid Explosion`) == "NO" ~ "No",
TRUE ~ as.character(`Liquid Explosion`)
))
freq_LE <- table(datos_explosion$Liquid.Explosion)
Tabla_LE <- as.data.frame(freq_LE)
colnames(Tabla_LE) <- c("x", "ni")
Tabla_LE$hi_exacto <- (Tabla_LE$ni / sum(Tabla_LE$ni)) * 100
Tabla_LE$DECIMAL_exacto <- Tabla_LE$hi_exacto / 100
Tabla_LE$hi <- round(Tabla_LE$hi_exacto, 2)
Tabla_LE$DECIMAL <- round(Tabla_LE$DECIMAL_exacto, 3)
dif_hi <- 100 - sum(Tabla_LE$hi)
dif_dec <- 1 - sum(Tabla_LE$DECIMAL)
idx_max <- which.max(Tabla_LE$ni)
Tabla_LE$hi[idx_max] <- Tabla_LE$hi[idx_max] + dif_hi
Tabla_LE$DECIMAL[idx_max] <- Tabla_LE$DECIMAL[idx_max] + dif_dec
fila_total_LE <- data.frame(
x = "Total",
ni = sum(Tabla_LE$ni),
hi = sum(Tabla_LE$hi),
DECIMAL = sum(Tabla_LE$DECIMAL)
)
TablaFinal_LE <- rbind(Tabla_LE[, c("x", "ni", "hi", "DECIMAL")], fila_total_LE)
colnames(TablaFinal_LE) <- c("Estado de explosión", "ni", "hi (%)", "fi")
titulo_formal <- "CUADRO N° [1] <br/> Distribución de frecuencias de explosión de líquidos en Estados Unidos, [2010 - 2016]"
kable(TablaFinal_LE,
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(TablaFinal_LE), bold = TRUE, background = "#f2f2f2") %>%
column_spec(1, italic = TRUE)
| Estado de explosión | ni | hi (%) | fi |
|---|---|---|---|
| No | 2780 | 99.46 | 0.995 |
| Sí | 15 | 0.54 | 0.005 |
| Total | 2795 | 100.00 | 1.000 |
Aquí se evalúa la frecuencia de los accidentes en relación con la explosión del líquido derramado, comparando visualmente los eventos en los que hubo una detonación frente a aquellos en los que no. Esta comparativa permite identificar la mínima proporción de incidentes que escalan a un escenario de estallido, lo cual es crítico para medir la efectividad de las medidas intrínsecas de contención y estabilización del producto.
library(ggplot2)
library(dplyr)
# 1. Filtramos Tabla_LE para usar solo las categorías de interés
datos_grafico <- Tabla_LE %>%
filter(x %in% c("Sí", "No"))
# 2. Generamos la gráfica leyendo directamente las columnas 'x' y 'ni'
ggplot(datos_grafico, aes(x = x, y = ni, fill = x)) +
geom_bar(stat = "identity", width = 0.6) +
# Usamos "Sí" con tilde porque así lo definiste en tu case_when
scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
labs(
title = "Gráfica 1: Distribución local de explosión líquida",
x = "Explosión líquida",
y = "Cantidad"
) +
theme_classic() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(face = "bold", size = 14)
)
Este apartado extiende el análisis de la variable a una escala global para verificar la incidencia de explosiones en las emergencias reportadas. Al observar que la tendencia de “NO” explosión es abrumadoramente mayoritaria, se puede concluir que las condiciones operativas, la rápida respuesta en campo o las propiedades fisicoquímicas del material mitigan casi por completo el riesgo de detonación en los derrames registrados.
library(ggplot2)
# 1. Filtramos Tabla_LE para usar solo las categorías "Sí" y "No"
df_grafico <- subset(Tabla_LE, x %in% c("Sí", "No"))
# 2. Generamos el gráfico usando la columna 'x' y 'ni' de Tabla_LE
grafico_barras <- ggplot(df_grafico, aes(x = reorder(x, -ni), y = ni, fill = x)) +
geom_bar(stat = "identity", color = "black", alpha = 0.8, width = 0.6) +
scale_y_continuous(limits = c(0, 3000)) +
# Actualizamos a "Sí" con tilde y aplicamos el contraste de colores
scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
theme_minimal() +
labs(
title = "Gráfica No 2: Distribución global de Explosión Líquida",
x = "Estado de Explosión",
y = "Cantidad"
) +
theme(legend.position = "none",
plot.title = element_text(hjust = 0.5, face = "bold"),
plot.subtitle = element_text(hjust = 0.5))
# 3. Mostrar el gráfico
print(grafico_barras)
Esta sección analiza la magnitud visual de los accidentes en relación con la explosión del producto o infraestructura. La gráfica revela que la inmensa mayoría de los reportes se concentran en la categoría de no explosión (“NO”), superando los 2,780 registros frente a una cantidad estadísticamente minúscula de apenas 15 casos con “SI”. Esto confirma que la explosión es un fenómeno extremadamente infrecuente dentro de la matriz general de accidentes.
library(ggplot2)
library(dplyr)
# 1. Filtramos Tabla_LE y calculamos el porcentaje usando la columna 'hi'
datos_grafico <- Tabla_LE %>%
filter(x %in% c("Sí", "No")) %>%
mutate(porcentaje = hi)
# 2. Generamos la gráfica
ggplot(datos_grafico, aes(x = x, y = porcentaje, fill = x)) +
geom_bar(stat = "identity", width = 0.6) +
# Actualizamos a "Sí" con tilde y diferenciamos el color
scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, 10)) +
labs(
title = "Gráfica 3: Distribución relativa global de Explosión líquida",
x = "Explosión líquida",
y = "Porcentaje (%)"
) +
theme_classic() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(face = "bold", size = 14)
)
Extraemos la variable explosión líquida, omitimos valores nulos y verificamos el tamaño muestral para asegurar la validez del estudio. El análisis porcentual indica que los incidentes que cursan sin el desarrollo de una explosión superan el 99.4% de la casuística. Esto enfatiza que el desencadenamiento de una reacción detonante, a pesar de sus gravísimas consecuencias, no forma parte del comportamiento típico de los accidentes analizados.
library(ggplot2)
library(dplyr)
# 1. Filtramos la tabla y calculamos el porcentaje (hi * 100)
datos_grafico <- Tabla_LE %>%
filter(x %in% c("Sí", "No")) %>%
mutate(hi_pct = hi)
# 2. Generamos la gráfica llamando a las columnas 'x' y 'hi_pct'
ggplot(datos_grafico, aes(x = x, y = hi_pct, fill = x)) +
geom_bar(stat = "identity", width = 0.6) +
scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
labs(
title = "Gráfica 4: Distribución relativa local de explosión líquida",
x = "Explosión líquida",
y = "Porcentaje (%)"
) +
theme_classic() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(face = "bold", size = 14)
)
El diagrama circular de esta variable resalta una distribución que acapara prácticamente la totalidad del gráfico en la categoría “NO” (casi un 100% visible). Esta visualización tan extrema confirma que la presencia de estallidos no es en absoluto el estado predominante, consolidando a la explosión líquida como una rareza máxima en la ocurrencia de los siniestros petroleros o de ductos.
library(ggplot2)
library(dplyr)
# 1. Filtramos Tabla_LE y creamos el porcentaje para el gráfico
df_clean <- Tabla_LE %>%
filter(x %in% c("Sí", "No")) %>%
mutate(hi_pct = round(hi))
# 2. Generamos el diagrama circular llamando a la columna 'x'
ggplot(df_clean, aes(x = "", y = hi_pct, fill = x)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(hi_pct, "%")),
position = position_stack(vjust = 0.5),
color = "white", fontface = "bold", size = 5) +
# Aplicamos la misma paleta visual y la tilde en el "Sí"
scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
labs(title = "Gráfico 5: Distribución de Explosión líquida", fill = "Estado") +
theme_void()
Los indicadores de la variable muestran una moda irrefutable en el estado “NO”, con una frecuencia absoluta de 2,780 registros, frente a una cantidad insignificante de 15 casos confirmados. La altísima aglomeración de los datos en la categoría negativa indica una varianza nula y evidencia una asimetría radical, indicando estadísticamente una probabilidad remota de presenciar una explosión tras el derrame o fuga.
# Cargar la librería knitr
library(knitr)
# 1. Identificar la fila con la mayor frecuencia (La Moda)
moda_idx <- which.max(Tabla_LE$ni)
# 2. Extraer los valores
valor_mas_repetido <- Tabla_LE$x[moda_idx]
cantidad <- Tabla_LE$ni[moda_idx]
total_casos <- sum(Tabla_LE$ni)
porcentaje <- Tabla_LE$hi[moda_idx]
# 3. Crear el Data Frame con la estructura exacta de la imagen
tabla_indicadores_le <- data.frame(
Variable = "Liquid Explosion", # <-- Cambia por el nombre exacto de tu variable si es necesario
Media = "N/A",
Mediana = "N/A",
Moda = as.character(valor_mas_repetido) # Toma automáticamente el valor (ej. "SÍ" o "NO")
)
# 4. Generar la tabla con formato formal para el reporte
kable(tabla_indicadores_le,
caption = "Tabla 6: Indicadores Estadísticos de Liquid Explosion", # <-- Ajusta el número de tabla
align = c("l", "c", "c", "c"))
| Variable | Media | Mediana | Moda |
|---|---|---|---|
| Liquid Explosion | N/A | N/A | No |
La variable cualitativa nominal Explosión de líquidos tiene como valor más frecuente el estado ‘NO’ (moda), abarcando el 99.46% de los registros.