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", header = TRUE, sep = ",", dec = ".", check.names = FALSE)
zona <- datos$`Liquid Ignition`
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)

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`) 
  ))

# Ahora creamos la tabla directamente desde la nueva variable (que ya tiene el punto)
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)) * 100, 2)  # Multiplicado por 100 para porcentaje

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

TablaFinal_LI %>%
  kable(
    caption = "Tabla 1: Distribución de Frecuencias de Encendido por líquido",
    align = "c", 
    col.names = c("Estado de Encendido por líquido", "ni", "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 Encendido por líquido
Estado de Encendido por líquido ni hi (%)
No 2700 96.6
95 3.4
TOTAL 2795 100.0

3 Cantidad absoluta de Encendido por líquido

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)
  )

4 Cantidad absoluta de Encendido por líquido

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)

5 Cantidad relativa de Encendido por líquido

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í" = "steelblue", "No" = "skyblue")) +
  
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, 10)) + 
  
  labs(
    title = "Gráfica No3: Distribución relativa global por Encendido por líquido",
    x = "Encendido por líquido",
    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)
  )
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_bar()`).

6 Cantidad relativa de Encendido por líquido

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í" = "steelblue", "No" = "skyblue")) +
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 10)) +
  
  labs(
    title = "Gráfica No4: Distribución relativa local de Encendido por líquido",
    x = "Encendido por líquido",
    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)
  )
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_bar()`).

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 No5: Distribución de Encendido por líquido", 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:, Si", "\n")
## El valor que más se repite es:, Si
cat("Cantidad:", cantidad, "\n")
## Cantidad: 2700
cat("moda:", "Si")
## moda: Si

9 Conclusión

La condición Sí constituye la moda de la variable cualitativa nominal Encendido por liquido, con 2700 ocurrencias que representan más del 96% del total, lo que indica que la mayor proporción de incidentes reportados presenta ignición líquida, reflejando una predominancia de presencia de fuego tras el siniestro frente a una ocurrencia aislada de menos de 100 casos sin ignición.