La carga de librerias es muy importante para las gráficas
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
library(ggplot2)
library(dplyr)
library(knitr)
library(kableExtra)
Se inicia el proceso mediante la importación del conjunto de datos principal (database-1.csv), asegurando la integridad de la información y la correcta asignación de variables operativas como la ignición de líquidos durante los incidentes.
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"
Esta etapa es fundamental para establecer la base del estudio, permitiendo la limpieza de registros inconsistentes y la verificación del tamaño muestral necesario para garantizar la validez de las conclusiones posteriores.
zona <- datos$`Liquid Ignition`
En esta fase se realiza el cálculo de las frecuencias absolutas de la variable extraída. Este procedimiento estadístico agrupa los registros para determinar la ocurrencia y nivel de incidencia de los eventos de ignición o combustión en los derrames, consolidando los datos crudos en valores numéricos interpretables que servirán de base para el análisis estructurado.
conteo_zona <- table(zona)
print(conteo_zona)
## zona
## NO YES
## 2700 95
A continuación, se analiza la variable categórica Ignición Líquida, la cual indica si se produjo o no la ignición de un líquido 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.
# 1. Preparar datos
datos_ignicion <- datos %>%
mutate(Liquid.Ignition = case_when(
trimws(`Liquid Ignition`) == "YES" ~ "Sí",
trimws(`Liquid Ignition`) == "NO" ~ "No",
TRUE ~ as.character(`Liquid Ignition`)
))
freq_LI <- table(datos_ignicion$Liquid.Ignition)
Tabla_LI <- as.data.frame(freq_LI)
colnames(Tabla_LI) <- c("x", "ni")
Tabla_LI$hi_exacto <- (Tabla_LI$ni / sum(Tabla_LI$ni)) * 100
Tabla_LI$DECIMAL_exacto <- Tabla_LI$hi_exacto / 100
Tabla_LI$hi <- round(Tabla_LI$hi_exacto, 2)
Tabla_LI$DECIMAL <- round(Tabla_LI$DECIMAL_exacto, 4)
dif_hi <- 100 - sum(Tabla_LI$hi)
dif_dec <- 1 - sum(Tabla_LI$DECIMAL)
idx_max <- which.max(Tabla_LI$ni)
Tabla_LI$hi[idx_max] <- Tabla_LI$hi[idx_max] + dif_hi
Tabla_LI$DECIMAL[idx_max] <- Tabla_LI$DECIMAL[idx_max] + dif_dec
fila_total_LI <- data.frame(
x = "Total",
ni = sum(Tabla_LI$ni),
hi = sum(Tabla_LI$hi),
DECIMAL = sum(Tabla_LI$DECIMAL)
)
TablaFinal_LI <- rbind(Tabla_LI[, c("x", "ni", "hi", "DECIMAL")], fila_total_LI)
colnames(TablaFinal_LI) <- c("Estado de encendido", "ni", "hi (%)", "fi")
titulo_formal <- "CUADRO N°1 <br/> Distribución de frecuencias de encendido por encedido por liquído en Estados Unidos,[2010 - 2016]"
kable(TablaFinal_LI,
align = "c",
digits = c(0, 0, 2, 4)) %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped", "hover", "condensed", "bordered")) %>%
add_header_above(c(" " = 2, "Frecuencia relativa" = 2), bold = TRUE, background = "#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_LI), bold = TRUE, background = "#f2f2f2") %>%
column_spec(1, italic = TRUE)
| Estado de encendido | ni | hi (%) | fi |
|---|---|---|---|
| No | 2700 | 96.6 | 0.966 |
| Sí | 95 | 3.4 | 0.034 |
| Total | 2795 | 100.0 | 1.000 |
Aquí se evalúa la frecuencia de los accidentes en relación con la ignición del líquido derramado, comparando visualmente los eventos en los que hubo un incendio frente a aquellos en los que no. Esta comparativa permite identificar la proporción de incidentes que escalan a un escenario de combustión, lo cual es crítico para medir la efectividad de los protocolos de contención primaria.
library(ggplot2)
library(dplyr)
# 1. Filtramos Tabla_LI para usar solo las categorías de interés
datos_grafico <- Tabla_LI %>%
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 N1: Distribución global por Encendido por líquido",
x = "Encendido por líquido",
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 fuego en las emergencias reportadas. Al observar que la tendencia de “NO” encendido es abrumadoramente mayoritaria, se puede concluir que las condiciones ambientales, las medidas de seguridad intrínsecas del fluido o la rápida respuesta en campo evitan exitosamente la combustión en la mayor parte de los incidentes.
library(ggplot2)
# 1. Filtramos Tabla_LI para usar solo las categorías "Sí" y "No"
df_grafico <- subset(Tabla_LI, x %in% c("Sí", "No"))
# 2. Generamos el gráfico usando la columna 'x' y 'ni' de Tabla_LI
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, 2975)) +
scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
theme_minimal() +
labs(
title = "Gráfica No 2: Distribución local de Encendido por líquido",
x = "Encendido por líquido",
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 ignición del ducto o producto. La gráfica revela que la inmensa mayoría de los reportes se concentran en la categoría de no ignición (“NO”), superando los 2,700 registros frente a un pequeño grupo de casos con “SI”. Esto sugiere que el incendio es una complicación infrecuente dentro de la matriz general de accidentes.
library(ggplot2)
library(dplyr)
datos_grafico <- Tabla_LI %>%
filter(x %in% c("Sí", "No")) %>%
mutate(porcentaje = hi)
ggplot(datos_grafico, aes(x = reorder(x, -porcentaje), y = porcentaje, fill = x)) +
geom_bar(stat = "identity", color = "black", alpha = 0.8, width = 0.6) +
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 No 3: Distribución relativa global por Encendido por líquido",
x = "Encendido por líquido",
y = "Porcentaje (%)"
) +
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(hjust = 0.5, face = "bold", size = 14)
)
Extraemos la variable ignició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 presencia de fuego representan más del 96% de la casuística. Esto enfatiza que, si bien la ignición acarrea un riesgo de consecuencias severas, su materialización es mínima comparada con el volumen total de fugas. (Nota: Se ajustó el eje Y a 100 porque el NO supera el 90%)
library(ggplot2)
library(dplyr)
# 1. Filtramos la tabla y usamos 'hi' directamente (sin el * 100)
datos_grafico <- Tabla_LI %>%
filter(x %in% c("Sí", "No")) %>%
mutate(hi_pct = hi)
ggplot(datos_grafico, aes(x = reorder(x, -hi_pct), y = hi_pct, fill = x)) +
geom_bar(stat = "identity", color = "black", alpha = 0.8, width = 0.6) +
scale_fill_manual(values = c("Sí" = "steelblue", "No" = "skyblue")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 80, by = 10)) +
labs(
title = "Gráfica No 4: Distribución relativa local de Encendido por líquido",
x = "Encendido por líquido",
y = "Porcentaje (%)"
) +
theme_minimal() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(hjust = 0.5, face = "bold", size = 14)
)
El diagrama circular de esta variable resalta una distribución que acapara la casi totalidad del gráfico en la categoría “NO”. Esta visualización extrema confirma que la presencia de fuego no es en lo absoluto el estado predominante durante el registro de los accidentes, consolidando a la ignición como una rareza estadística en estos eventos.
library(ggplot2)
library(dplyr)
# 1. Filtramos Tabla_LI y creamos el porcentaje para el gráfico
df_clean <- Tabla_LI %>%
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 No5: Distribución de Encendido por líquido", fill = "Estado") +
theme_void()
Los indicadores de la variable muestran una moda innegable en el estado “NO”, con una frecuencia absoluta que roza los 2,700 registros válidos, contra menos de 100 de casos activos. La alta aglomeración de los datos en esta categoría indica una varianza sumamente baja y evidencia una asimetría casi total hacia la negatividad del evento, indicando estadísticamente una probabilidad muy escasa de hallar fuego tras un siniestro.
# Cargar la librería necesaria (si no la has cargado antes)
library(knitr)
# Tu código para extraer los valores de la tabla de frecuencias
idx_max <- which.max(Tabla_LI$ni)
mas_repetido <- as.character(Tabla_LI$x[idx_max]) # Nos aseguramos de que sea texto
cantidad <- Tabla_LI$ni[idx_max]
total_validos <- sum(Tabla_LI$ni)
porcentaje <- Tabla_LI$hi[idx_max]
# 1. Crear un Data Frame con la estructura exacta de la imagen
tabla_indicadores_li <- data.frame(
Variable = "Encendido por líquido",
Media = "N/A",
Mediana = "N/A",
Moda = mas_repetido
)
# 2. Generar la tabla con el formato formal
kable(tabla_indicadores_li,
caption = "Tabla 5: Indicadores Estadísticos de la Variable", # <-- Ajusta el número y nombre
align = c("l", "c", "c", "c"))
| Variable | Media | Mediana | Moda |
|---|---|---|---|
| Encendido por líquido | N/A | N/A | No |
La variable nominal Encendido por líquido tiene como valor más frecuente el estado ‘NO’ (moda), abarcando el 96.6% de los registros de Encendido por líquido.