1 Cargar Datos

Como paso previo al análisis descriptivo, es indispensable preparar el entorno de trabajo y estructurar la información. En esta sección inicial, se importan las librerías necesarias para la manipulación ágil de la información (dplyr) y para la generación de tablas con formato profesional (kableExtra). Posteriormente, se procede a la importación del conjunto de datos original, almacenando los registros en un marco de datos (dataframe) que servirá como base para los procesamientos posteriores, como el análisis de la variable de ignición.

datos <- read.csv("database-_1_.csv")
zona<-datos$Liquid.Ignition
library(dplyr)
library(knitr)
library(kableExtra)
library(ggplot2)

2 tabla de frecuencia

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.

datos <- datos %>%
  mutate(Liquid.Ignition = case_when(
    trimws(Liquid.Ignition) == "YES" ~ "Sí",
    trimws(Liquid.Ignition) == "NO" ~ "No",
    TRUE ~ as.character(Liquid.Ignition) # Mantiene otros valores sin borrar nada
  ))

# Ahora creamos la tabla directamente desde la variable ya traducida
freq_LI <- table(datos$Liquid.Ignition)
Tabla_LI <- as.data.frame(freq_LI)
colnames(Tabla_LI) <- c("x", "ni")
Tabla_LI$hi <- round(Tabla_LI$ni / sum(Tabla_LI$ni), 4)

# 2. Crear fila de TOTAL
fila_total_LI <- data.frame(x = "TOTAL", ni = sum(Tabla_LI$ni), hi = 1.00)
TablaFinal_LI <- rbind(Tabla_LI, fila_total_LI)

# 3. Generar tabla con formato kableExtra
TablaFinal_LI %>%
  kable(
    caption = "Tabla 1: Distribución de Frecuencias de Ignición del Líquido",
    align = "c", 
    col.names = c("Estado de Ignición", "Frecuencia Absoluta (ni)", "Frecuencia Relativa (hi)")
  ) %>%
  kable_styling(
    bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
    full_width = F, 
    position = "center"
  ) %>%
  row_spec(0, bold = T, color = "white", background = "#2c3e50") %>% # Encabezado
  row_spec(nrow(TablaFinal_LI), bold = T, color = "white", background = "#34495e") %>% # Fila TOTAL
  column_spec(1, italic = T, border_right = T)
Tabla 1: Distribución de Frecuencias de Ignición del Líquido
Estado de Ignición Frecuencia Absoluta (ni) Frecuencia Relativa (hi)
No 2700 0.966
95 0.034
TOTAL 2795 1.000

3 Cantidad absoluta global de accidentes por Ignición líquida

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í" = "skyblue", "No" = "skyblue")) +
  
  labs(
    title = "Gráfica 1: Ignición líquida Sí/No",
    x = "Ignició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)
  )

4 Cantidad absoluta local por Ignición líquida

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” ignición 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)) +
  
  # Actualizamos a "Sí" con tilde y aplicamos el contraste de colores
  scale_fill_manual(values = c("Sí" = "skyblue", "No" = "skyblue")) + 
  
  theme_minimal() +
  labs(
    title = "Gráfica No 2: Distribución General de Ignición Líquida",
    x = "Estado de Ignició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)

5 Cantidad relativa global de accidentes por Ignición líquida

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)

# 1. Filtramos Tabla_LI y calculamos el porcentaje usando tu columna 'hi'
datos_grafico <- Tabla_LI %>%
  filter(x %in% c("Sí", "No")) %>%
  mutate(porcentaje = hi * 100)

# 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í" = "skyblue", "No" = "skyblue")) +
  
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, 10)) + 
  
  labs(
    title = "Gráfica 3: Porcentaje de Ignición líquida",
    x = "Ignició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)
  )

6 Cantidad relativa local de Ignición líquida

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 calculamos el porcentaje (hi * 100)
datos_grafico <- Tabla_LI %>%
  filter(x %in% c("Sí", "No")) %>%                  
  mutate(hi_pct = hi * 100) 

# 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í" = "skyblue", "No" = "skyblue")) +
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
  
  labs(
    title = "Gráfica 4: Cantidad de porcentaje local",
    x = "Ignició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)
  )

7 Diagrama circular

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 * 100, 1))

# 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 Ignición líquida", fill = "Estado") +
  theme_void()

8 Indicadores Estadístico

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.

variable_limpia <- trimws(toupper(na.omit(datos$Liquid.Ignition)))
variable_limpia <- ifelse(variable_limpia == "YES", "SI", variable_limpia)
variable_limpia <- variable_limpia[variable_limpia %in% c("SI", "NO")]

tabla_frecuencia <- table(variable_limpia)

mas_repetido <- names(tabla_frecuencia)[which.max(tabla_frecuencia)]
cantidad <- max(tabla_frecuencia)
total_validos <- sum(tabla_frecuencia)
porcentaje <- round((cantidad / total_validos) * 100, 2)

cat("El valor que más se repite es:", mas_repetido, "\n")
## El valor que más se repite es: NO
cat("Cantidad:", cantidad, "\n")
## Cantidad: 2700
cat("moda:", "No")
## moda: No

9 Conclusión

El modelo probabilístico muestra una densidad de masa fuertemente concentrada en la ausencia de ignición (\(P > 0.96\)), evidenciando un sesgo asimétrico extremo en la distribución de los datos. Esta saturación del espacio muestral en la categoría “NO” confirma que la siniestralidad asociada al fuego no es un comportamiento habitual, sino un evento estocástico y atípico de baja frecuencia dentro del volumen total de derrames e incidentes operacionales.