1 Cargar Datos

El presente reporte tiene como objetivo realizar un análisis estadístico descriptivo sobre las categorías de causas registradas en el conjunto de datos database-1.csv. A través del uso del lenguaje de programación R, se procesará la información para identificar las frecuencias y patrones principales, permitiendo una comprensión clara de los factores predominantes en la muestra estudiada.

datos <- read.csv("database-_1_.csv", header = TRUE, sep = ",", dec = ".", check.names = FALSE)

zona<-datos$`Cause.Category`

2 Tabla de Frecuencia

A continuación, se presenta el procesamiento de datos para la variable Cause.Category. Se detalla el código utilizado en R para la importación del archivo CSV y la posterior generación de la tabla de frecuencias, con el fin de analizar la incidencia de cada categoría.

library(dplyr)
library(knitr)
library(kableExtra)
TDF_causa <- datos %>%
  mutate(Cause.Category = case_when(
    `Cause Category` == "CORROSION" ~ "Corrosión",
    `Cause Category` == "MATERIAL/WELD/EQUIP FAILURE" ~ "Falla del Equipo",
    `Cause Category` == "INCORRECT OPERATION" ~ "Operación Incorrecta",
    `Cause Category` == "EXCAVATION DAMAGE" ~ "Daño por Excavación",
    `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)) 
TDF_causa$hi_exacto <- (TDF_causa$ni / sum(TDF_causa$ni)) * 100
TDF_causa$DECIMAL_exacto <- TDF_causa$hi_exacto / 100 

TDF_causa$hi <- round(TDF_causa$hi_exacto, 2)
TDF_causa$DECIMAL <- round(TDF_causa$DECIMAL_exacto, 3) 
dif_hi <- 100 - sum(TDF_causa$hi)
dif_dec <- 1 - sum(TDF_causa$DECIMAL)

idx_max <- which.max(TDF_causa$ni)
TDF_causa$hi[idx_max] <- TDF_causa$hi[idx_max] + dif_hi
TDF_causa$DECIMAL[idx_max] <- TDF_causa$DECIMAL[idx_max] + dif_dec
Sumatoria <- data.frame(
  Cause.Category = "Total",
  ni = sum(TDF_causa$ni),
  hi = sum(TDF_causa$hi),
  DECIMAL = sum(TDF_causa$DECIMAL)
)
TDF_final <- rbind(TDF_causa[, c("Cause.Category", "ni", "hi", "DECIMAL")], Sumatoria)
colnames(TDF_final) <- c("Categoría de causa", "ni", "hi (%)", "fi") 
titulo_formal <- "CUADRO N°1 <br/> Distribución de frecuencias de accidentes según la categoría de causa en Estados Unidos, [2010 - 2016]"
kable(TDF_final, 
      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 = 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(TDF_final), bold = TRUE, background = "#f2f2f2") %>%
  row_spec(1, bold = TRUE, color = "black")
CUADRO N°1
Distribución de frecuencias de accidentes según la categoría de causa en Estados Unidos, [2010 - 2016]
Frecuencia relativa
Categoría de causa ni hi (%) fi
Falla del Equipo 1435 51.35 0.514
Corrosión 592 21.18 0.212
Operación Incorrecta 378 13.52 0.135
Causas menores 118 4.22 0.042
Fuerzas Naturales 118 4.22 0.042
Daño por Excavación 97 3.47 0.035
Fuerzas Externas 57 2.04 0.020
Total 2795 100.00 1.000

3 Cantidad absoluta de accidentes por categoría de causa

Se presenta un histograma de frecuencias para la variable de categorías de causas. La distribución es notablemente asimétrica a la derecha, concentrando la mayor parte de la siniestralidad en problemas técnicos y de materiales (Equipo y Corrosión). Esta visualización permite identificar rápidamente las áreas críticas que requieren mayor atención o mantenimiento preventivo para reducir el número total de accidentes.

library(ggplot2)
library(dplyr)

orden_final <- c("Corrosión", "Falla del Equipo", "Operación Incorrecta", "Daño por Excavación","Causas menores","Fuerzas Naturales", "Fuerzas Externas")

datos_causa <- datos %>%

  mutate(Cause.Category = `Cause Category`) %>%
  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(Cause.Category = factor(Cause.Category, levels = orden_final))

ggplot(datos_causa, aes(x = Cause.Category, 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: Distribución general de categoría de causa",
    x = "Causa del Accidente",
    y = "Cantidad"
  ) +
  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 Cantidad absoluta de accidentes por categoría de causa

Se observa que la tendencia local refleja fielmente el comportamiento del sistema general, manteniendo la jerarquía de las causas de manera proporcional.Los daños por excavación, causas menores, fuerzas naturales y fuerzas externas presentan los valores más bajos, manteniéndose todas por debajo de los 250 incidentes en la escala local.

library(ggplot2)
library(dplyr)

orden_final <- c("Corrosión", "Falla del Equipo", "Operación Incorrecta", "Daño por Excavación","Causas menores","Fuerzas Naturales", "Fuerzas Externas")

datos_causa <- datos %>%

  mutate(Cause.Category = `Cause Category`) %>%
  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(Cause.Category = factor(Cause.Category, levels = orden_final))

ggplot(datos_causa, aes(x = Cause.Category, 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: Distribución local de categoría de causa",
    x = "Causa del Accidente",
    y = "Cantidad"
  ) +
  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 Cantidad Relativa de accidentes por categoría de causa

La presente gráfica permite visualizar el impacto porcentual de cada categoría sobre el total de incidentes registrados a nivel local. A diferencia de las gráficas de frecuencia absoluta, este análisis facilita la identificación de las prioridades estratégicas mediante una escala relativa.

library(dplyr)
library(ggplot2)

orden_final <- c("Corrosión", "Falla del Equipo", "Operación Incorrecta", 
                 "Daño por Excavación", "Causas menores", "Fuerzas Naturales", 
                 "Fuerzas Externas")

datos_causa <- datos %>%

  mutate(Cause.Category = `Cause Category`) %>%
  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) %>%
  mutate(Cause.Category = factor(Cause.Category, levels = orden_final))

ggplot(datos_causa, aes(x = Cause.Category, 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: Distribución relativa local de categoría de Causa",
    x = "Causa del Accidente",
    y = "Porcentaje (%)"
  ) +
  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 Cantidad Relativa de accidentes por categoría de causa

La similitud visual entre ambas gráficas confirma que la muestra local es un reflejo fiel del comportamiento global. Esto valida que cualquier estrategia de mitigación de riesgos diseñada para el total de la base de datos será altamente efectiva si se aplica localmente.

library(dplyr)
library(ggplot2)

orden_final <- c("Corrosión", "Falla del Equipo", "Operación Incorrecta", 
                 "Daño por Excavación", "Causas menores", "Fuerzas Naturales", 
                 "Fuerzas Externas")

datos_causa <- datos %>%
  mutate(Cause.Category = `Cause Category`) %>%
  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) %>%
  mutate(Cause.Category = factor(Cause.Category, levels = orden_final))

ggplot(datos_causa, aes(x = Cause.Category, 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: Distribución relativa general de categoría de Causa",
    x = "Causa del Accidente",
    y = "Porcentaje (%)"
  ) +
  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

El diagrama circular ofrece una visión integral de la participación de cada causa en el total de accidentes registrados. Esta representación permite identificar de manera inmediata qué proporción del problema ocupa cada categoría.

library(dplyr)
library(ggplot2)

datos_pastel <- datos %>%

  mutate(Cause.Category = `Cause Category`) %>%
  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

Este indicador funciona como una conclusión técnica directa. Al señalar a la “Falla del Equipo” como el factor predominante, el reporte proporciona una base sólida para la toma de decisiones, sugiriendo que las acciones correctivas y de inversión deben enfocarse prioritariamente en la integridad y mantenimiento de los componentes físicos.

datos_espanol <- datos %>%
  mutate(Cause.Category = `Cause Category`) %>%
  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

La variable Categoría de causa, correspondiente a los accidentes analizados, es de tipo cualitativa nominal. El valor más frecuente corresponde a Falla del Equipo, la cual representa el 51,34% del total de los casos.

Por lo anterior, se evidencia una predominancia de problemas en la integridad de la infraestructura, ya que la mayoría de los accidentes se asocia a fallas directas del equipo, las cuales superan significativamente a otras causas secundarias, como la operación incorrecta o los factores externos.