1 Cargar Datos

datos <- read.csv("database-_1_.csv")
zona<-datos$Cause.Category

2 Tabla de Frecuencia

TDF_causa <- datos %>%
  mutate(Cause.Category = case_when(
    Cause.Category == "CORROSION" ~ "Corrosión",
    Cause.Category == "MATERIAL/WELD/EQUIP FAILURE" ~ "Falla del Equipo",
    Cause.Category == "EXCAVATION DAMAGE" ~ "Daño por Excavación",
    Cause.Category == "INCORRECT OPERATION" ~ "Operación Incorrecta",
    Cause.Category == "NATURAL FORCE DAMAGE" ~ "Fuerzas Naturales",
    Cause.Category == "OTHER OUTSIDE FORCE DAMAGE" ~ "Fuerzas Externas",
    Cause.Category == "ALL OTHER CAUSES" ~ "Causas menores",
    TRUE ~ as.character(Cause.Category) 
  )) %>%
  count(Cause.Category, name = "ni") %>%        
  arrange(desc(ni)) %>%                          
  mutate(hi = (ni / sum(ni)) * 100) %>%         
  mutate(hi = sprintf("%.2f", round(hi, 2)))    
Sumatoria <- data.frame(
  Cause.Category = "TOTAL",
  ni = sum(TDF_causa$ni),
  hi = "100.00"
)

TDF_final <- rbind(TDF_causa, Sumatoria)
colnames(TDF_final) <- c("Causa del Accidente", "ni", "hi (%)")

kable(TDF_final, align = 'c', 
      caption = "Tabla de Frecuencia: Causas de Accidentes") %>%
  kable_styling(full_width = FALSE, position = "center", 
                bootstrap_options = c("striped", "hover", "bordered")) %>%
  row_spec(nrow(TDF_final), bold = TRUE, background = "#f2f2f2") %>%
  row_spec(1, bold = TRUE, color = "black")
Tabla de Frecuencia: Causas de Accidentes
Causa del Accidente ni hi (%)
Falla del Equipo 1435 51.34
Corrosión 592 21.18
Operación Incorrecta 378 13.52
Causas menores 118 4.22
Fuerzas Naturales 118 4.22
Daño por Excavación 97 3.47
Fuerzas Externas 57 2.04
TOTAL 2795 100.00

3 Distribución absoluta general de categoría de causas

datos_causa <- datos %>%
  mutate(Cause.Category = case_when(
    Cause.Category == "CORROSION" ~ "Corrosión",
    Cause.Category == "MATERIAL/WELD/EQUIP FAILURE" ~ "Falla del Equipo",
    Cause.Category == "EXCAVATION DAMAGE" ~ "Daño por Excavación",
    Cause.Category == "INCORRECT OPERATION" ~ "Operación Incorrecta",
    Cause.Category == "NATURAL FORCE DAMAGE" ~ "Fuerzas Naturales",
    Cause.Category == "OTHER OUTSIDE FORCE DAMAGE" ~ "Fuerzas Externas",
    Cause.Category == "ALL OTHER CAUSES" ~ "Causas menores",
    TRUE ~ as.character(Cause.Category)
  )) %>%
  count(Cause.Category, name = "ni")
ggplot(datos_causa, aes(x = reorder(Cause.Category, -ni), y = ni)) +
  
  geom_bar(stat = "identity", fill = "skyblue", width = 0.7) +
  scale_y_continuous(limits = c(0, 2795), breaks = c(0, 1000, 2000, 2795)) +
  
  labs(
    title = "Gráfica 1: Cantidad general de Accidentes por Causa generales",
    x = "Causa del Accidente",
    y = "Número de Accidentes"
  ) +
  
  theme_classic() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10, color = "black"),
    plot.title = element_text(face = "bold", hjust = 0.5)
  )

4 Distribución absoluta local de categoría de causas

datos_causa <- datos %>%
  mutate(Cause.Category = case_when(
    Cause.Category == "CORROSION" ~ "Corrosión",
    Cause.Category == "MATERIAL/WELD/EQUIP FAILURE" ~ "Falla del Equipo",
    Cause.Category == "EXCAVATION DAMAGE" ~ "Daño por Excavación",
    Cause.Category == "INCORRECT OPERATION" ~ "Operación Incorrecta",
    Cause.Category == "NATURAL FORCE DAMAGE" ~ "Fuerzas Naturales",
    Cause.Category == "OTHER OUTSIDE FORCE DAMAGE" ~ "Fuerzas Externas",
    Cause.Category == "ALL OTHER CAUSES" ~ "Causas menores",
    TRUE ~ as.character(Cause.Category)
  )) %>%
  count(Cause.Category, name = "ni")
ggplot(datos_causa, aes(x = reorder(Cause.Category, -ni), y = ni)) +
  
  geom_bar(stat = "identity", fill = "skyblue", width = 0.7) +
  scale_y_continuous(limits = c(0, 1435), breaks = c(0, 500, 1000, 1435)) +
  
  labs(
    title = "Gráfica 2: Cantidad local de Accidentes por Causa generales",
    x = "Causa del Accidente",
    y = "Número de Accidentes"
  ) +
  
  theme_classic() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10, color = "black"),
    plot.title = element_text(face = "bold", hjust = 0.5)
  )

5 Incidencia Relativa local por Categoría

datos_causa <- datos %>%
  mutate(Cause.Category = case_when(
    Cause.Category == "CORROSION" ~ "Corrosión",
    Cause.Category == "MATERIAL/WELD/EQUIP FAILURE" ~ "Falla del Equipo",
    Cause.Category == "EXCAVATION DAMAGE" ~ "Daño por Excavación",
    Cause.Category == "INCORRECT OPERATION" ~ "Operación Incorrecta",
    Cause.Category == "NATURAL FORCE DAMAGE" ~ "Fuerzas Naturales",
    Cause.Category == "OTHER OUTSIDE FORCE DAMAGE" ~ "Fuerzas Externas",
    Cause.Category == "ALL OTHER CAUSES" ~ "Causas menores",
    TRUE ~ as.character(Cause.Category)
  )) %>%
  count(Cause.Category, name = "ni") %>%
  mutate(hi = (ni / sum(ni)) * 100) 
ggplot(datos_causa, aes(x = reorder(Cause.Category, -hi), y = hi)) +
  
  geom_bar(stat = "identity", fill = "skyblue", width = 0.7) +
  scale_y_continuous(limits = c(0, 60), breaks = seq(0, 60, by = 10)) +
  
  labs(
    title = "Gráfica 3: Porcentaje local de Accidentes por Causa",
    x = "Causa del Accidente",
    y = "Porcentaje de Accidentes (%)"
  ) +
  
  theme_classic() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10, color = "black"),
    plot.title = element_text(face = "bold", hjust = 0.5)
  )

6 Incidencia Relativa global por Categoría de causas

datos_causa <- datos %>%
  mutate(Cause.Category = case_when(
    Cause.Category == "CORROSION" ~ "Corrosión",
    Cause.Category == "MATERIAL/WELD/EQUIP FAILURE" ~ "Falla del Equipo",
    Cause.Category == "EXCAVATION DAMAGE" ~ "Daño por Excavación",
    Cause.Category == "INCORRECT OPERATION" ~ "Operación Incorrecta",
    Cause.Category == "NATURAL FORCE DAMAGE" ~ "Fuerzas Naturales",
    Cause.Category == "OTHER OUTSIDE FORCE DAMAGE" ~ "Fuerzas Externas",
    Cause.Category == "ALL OTHER CAUSES" ~ "Causas menores",
    TRUE ~ as.character(Cause.Category)
  )) %>%
  count(Cause.Category, name = "ni") %>%
  mutate(hi = (ni / sum(ni)) * 100)
ggplot(datos_causa, aes(x = reorder(Cause.Category, -hi), y = hi)) +
  
  geom_bar(stat = "identity", fill = "skyblue", width = 0.7) +
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 20)) +
  
  labs(
    title = "Gráfica 4: Porcentaje general de Accidentes por Causa",
    x = "Causa del Accidente",
    y = "Porcentaje de Accidentes (%)"
  ) +
  
  theme_classic() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size = 10, color = "black"),
    plot.title = element_text(face = "bold", hjust = 0.5)
  )

7 Diagrama Circular

datos_pastel <- datos %>%
  mutate(Cause.Category = case_when(
    Cause.Category == "CORROSION" ~ "Corrosión",
    Cause.Category == "MATERIAL/WELD/EQUIP FAILURE" ~ "Falla del Equipo",
    Cause.Category == "EXCAVATION DAMAGE" ~ "Daño por Excavación",
    Cause.Category == "INCORRECT OPERATION" ~ "Operación Incorrecta",
    Cause.Category == "NATURAL FORCE DAMAGE" ~ "Fuerzas Naturales",
    Cause.Category == "OTHER OUTSIDE FORCE DAMAGE" ~ "Fuerzas Externas",
    Cause.Category == "ALL OTHER CAUSES" ~ "Causas menores",
    TRUE ~ as.character(Cause.Category)
  )) %>%
  count(Cause.Category, name = "ni") %>%
  mutate(prop = ni / sum(ni) * 100) %>%
  arrange(desc(Cause.Category)) %>%
  mutate(ypos = cumsum(prop) - 0.5 * prop)
ggplot(datos_pastel, aes(x = "", y = prop, fill = Cause.Category)) +
  
  geom_bar(stat = "identity", width = 1, color = "white") +
  
  coord_polar("y", start = 0) +
  
  theme_void() + 
  geom_text(aes(label = paste0(round(prop, 1), "%")), 
            position = position_stack(vjust = 0.5), 
            color = "black", size = 3) +
  
  labs(
    title = "Diagrama Circular: Causas de Accidentes",
    fill = "Causa del Accidente"
  ) +
  scale_fill_brewer(palette = "Blues") +
  theme(
    legend.position = "right", # Posición a la derecha
    legend.title = element_text(face = "bold"),
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14)
  )

8 Indicadores Estadíticos

datos_espanol <- datos %>%
  mutate(Cause.Category = case_when(
    Cause.Category == "CORROSION" ~ "Corrosión",
    Cause.Category == "MATERIAL/WELD/EQUIP FAILURE" ~ "Falla del Equipo",
    Cause.Category == "EXCAVATION DAMAGE" ~ "Daño por Excavación",
    Cause.Category == "INCORRECT OPERATION" ~ "Operación Incorrecta",
    Cause.Category == "NATURAL FORCE DAMAGE" ~ "Fuerzas Naturales",
    Cause.Category == "OTHER OUTSIDE FORCE DAMAGE" ~ "Fuerzas Externas",
    Cause.Category == "ALL OTHER CAUSES" ~ "Causas menores",
    TRUE ~ as.character(Cause.Category)
  ))
tabla_causas <- table(na.omit(datos_espanol$Cause.Category))

causa_top <- names(tabla_causas)[which.max(tabla_causas)]
cantidad_top <- max(tabla_causas)
total_eventos <- sum(tabla_causas)
porcentaje_top <- round((cantidad_top / total_eventos) * 100, 2)
cat("La causa principal de los accidentes es:", causa_top, "\n")
## La causa principal de los accidentes es: Falla del Equipo
cat("Ocurrió", cantidad_top, "veces, lo que representa el", porcentaje_top, "% del total de casos.\n")
## Ocurrió 1435 veces, lo que representa el 51.34 % del total de casos.

9 Conclusión

#El análisis de las causas revela que la Falla del Equipo es el factor predominante, consolidándose como la moda estadística. No obstante, factores humanos y externos, como la Operación Incorrecta, conservan una relevancia significativa. La evidencia gráfica sugiere que, si bien la integridad de la infraestructura es el punto más crítico, las deficiencias en los procedimientos operativos también impactan considerablemente en la siniestralidad total.