1 Carga de datos

El presente reporte tiene como objetivo realizar un análisis estadístico descriptivo sobre las subcategorí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 estudiad

# 1. Cargar la base de datos
database <- read.csv("database-_1_.csv", header = TRUE, sep = ",", dec = ".", check.names = FALSE)
zona<-database$Cause.Subcategory

2 Tabla de frecuencia

A continuación, se presenta el procesamiento de datos para la variable Subcause.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.

# Suponiendo que tu base ya se llama 'database'
TDF_subcausa <- database %>%
  # Limpiar valores vacíos
  filter(`Cause Subcategory` != "" & !is.na(`Cause Subcategory`)) %>%
  
  # Agrupación de subcategorías principales (se generan 7 grupos principales)
  mutate(`Cause Subcategory` = case_when(
    `Cause Subcategory` == "INTERNAL" ~ "Corrosión Interna",
    `Cause Subcategory` == "EXTERNAL" ~ "Corrosión Externa",
    `Cause Subcategory` == "PUMP OR PUMP-RELATED EQUIPMENT" ~ "Falla en Equipos de Bombeo",
    `Cause Subcategory` %in% c("NON-THREADED CONNECTION FAILURE", "THREADED CONNECTION/COUPLING FAILURE") ~ "Fallas de Conexión",
    `Cause Subcategory` == "MALFUNCTION OF CONTROL/RELIEF EQUIPMENT" ~ "Falla en Equipos de Control",
    `Cause Subcategory` %in% c("OTHER EQUIPMENT FAILURE", "FAILURE OF EQUIPMENT BODY") ~ "Otras Fallas de Equipos",
    
    TRUE ~ "Climatización" 
  )) %>%
  
  # Contar frecuencias
  count(`Cause Subcategory`, name = "ni") %>%       
  mutate(ni = as.numeric(ni)) %>%
  arrange(desc(ni)) %>%                            
  mutate(hi = (ni / sum(ni)) * 100) %>%          
  mutate(hi = sprintf("%.2f", round(hi, 2)))    

# Crear la fila de Sumatoria Total
Sumatoria <- data.frame(
  `Cause Subcategory` = "TOTAL",
  ni = sum(TDF_subcausa$ni),
  hi = "100.00",
  check.names = FALSE # Evita el cambio de espacios por puntos
)

# Unir tabla agrupada con el total
TDF_final <- rbind(TDF_subcausa, Sumatoria)

# Renombrar columnas para la visualización
colnames(TDF_final) <- c("Subcategoría de Causa", "ni", "hi (%)")

# Generación de la tabla con el formato kable
kable(TDF_final, align = 'c', 
      caption = "Tabla de Frecuencia: Subcategorías 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: Subcategorías de Accidentes
Subcategoría de Causa ni hi (%)
Climatización 1028 36.78
Fallas de Conexión 437 15.64
Corrosión Interna 362 12.95
Falla en Equipos de Bombeo 296 10.59
Otras Fallas de Equipos 271 9.70
Corrosión Externa 230 8.23
Falla en Equipos de Control 171 6.12
TOTAL 2795 100.00

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

A continuación, se presenta un diagrama circular que ilustra la distribución porcentual de las distintas subcategorías de causas de accidentes. Esta representación visual permite apreciar de forma rápida e intuitiva cómo se fracciona el 100% de los incidentes registrados, facilitando el contraste entre el peso de las fallas estructurales primarias (como corrosión o fallas de conexión) y el resto de los factores agrupados.

ggplot(TDF_subcausa, aes(x = reorder(`Cause Subcategory`, -ni), y = ni)) +
  geom_bar(stat = "identity", fill = "#2980b9") +
  labs(title = "Gráfica N 1: Cantidad Absoluta General de subcategoria",
       x = "Subcategoría de Causa",
       y = "Cantidad de Accidentes") +
  theme_minimal() +
  # Inclinamos los textos del eje X para que se lean bien
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  ylim(0, 2795)

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

El siguiente gráfico de barras presenta la distribución de los siniestros según su subcategoría de causa. Esta visualización permite identificar rápidamente cuáles son los fallos operativos e infraestructurales que registran un mayor volumen de incidentes.

ggplot(TDF_subcausa, aes(x = reorder(`Cause Subcategory`, -ni), y = ni)) +
  geom_bar(stat = "identity", fill = "#2980b9") +
  labs(title = "Gráfica N 2: Cantidad Absoluta local de subcategoria",
       x = "Subcategoría",
       y = "Cantidad de Accidentes") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  ylim(0, max(TDF_subcausa$ni) * 1.1)

5 Incidencia Relativa global por subcategoría

A través de la gráfica de incidencia relativa, se estandariza el volumen de siniestros expresando cada subcategoría como una proporción del total. Esta métrica porcentual es fundamental para evaluar probabilísticamente el peso específico de cada tipo de falla frente al universo completo de datos observados.

# Convertimos 'hi' a numérico para graficar correctamente
TDF_subcausa <- TDF_subcausa %>% mutate(hi_num = as.numeric(hi))

ggplot(TDF_subcausa, aes(x = reorder(`Cause Subcategory`, -hi_num), y = hi_num)) +
  geom_bar(stat = "identity", fill = "#2980b9") +
  labs(title = "Gráfica N 3: Incidencia Relativa Global ",
       x = "Subcategoría de Causa",
       y = "Porcentaje (hi %)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  ylim(0, 100)

6 Incidencia Relativa global por subcategoría

Al enfocar el análisis porcentual exclusivamente en las fallas estructurales (omitiendo el ruido de factores externos o residuales), se determina la densidad de incidencia de cada error mecánico. Esta representación visual es clave para enfocar los recursos de mantenimiento preventivo hacia los componentes críticos que mayor porcentaje de fallas concentran.

TDF_subcausa <- TDF_subcausa %>% mutate(hi_num = as.numeric(hi))

# Usamos TDF_subcausa que ya incluye "Climatización"
ggplot(TDF_subcausa, aes(x = reorder(`Cause Subcategory`, -hi_num), y = hi_num)) +
  geom_bar(stat = "identity", fill = "#2980b9") +
  labs(title = "Gráfica N 4: Incidencia Relativa local",
       x = "Subcategoría",
       y = "Porcentaje (hi %)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  ylim(0, max(TDF_subcausa$hi_num) * 1.1)

7 Diagrama circular

El siguiente diagrama circular muestra la composición porcentual de la siniestralidad, permitiendo visualizar de un vistazo qué subcategorías técnicas concentran la mayor proporción de los incidentes.

ggplot(TDF_subcausa, aes(x = "", y = hi_num, fill = `Cause Subcategory`)) +
  geom_bar(stat = "identity", width = 1, color = "white") +
  coord_polar("y", start = 0) +
  geom_text(aes(label = paste0(hi, "%")), position = position_stack(vjust = 0.5), size = 4) +
  scale_fill_brewer(palette = "Blues") +
  labs(title = "Gráfica N 5:Distribución de Subcategorías") +
  theme_void() + 
  theme(legend.position = "right", 
        legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5, face = "bold"),
        plot.subtitle = element_text(hjust = 0.5))

8 Indicadores Estadístico

Dado el carácter nominal de la variable analizada, el estudio de tendencia central no admite promedios ni desviaciones estándar, por lo que se fundamenta estrictamente en el análisis de frecuencias y la Moda estadística. A continuación, se presentan los indicadores descriptivos que cuantifican el tamaño de la muestra y determinan el evento de fallo con mayor probabilidad de ocurrencia, tanto a nivel global como en el subconjunto estrictamente técnico.

total_accidentes <- sum(TDF_subcausa$ni)
moda_cat <- TDF_subcausa$`Cause Subcategory`[which.max(TDF_subcausa$ni)]
moda_frec <- max(TDF_subcausa$ni)
moda_porcentaje <- TDF_subcausa$hi[which.max(TDF_subcausa$ni)]

cat("--- INDICADORES ESTADÍSTICOS ---\n")
## --- INDICADORES ESTADÍSTICOS ---
cat("Total de siniestros analizados (N):", total_accidentes, "\n")
## Total de siniestros analizados (N): 2795
cat("Moda (Categoría más frecuente):", moda_cat, "con", moda_frec, "casos (", moda_porcentaje, "% )\n")
## Moda (Categoría más frecuente): Climatización con 1028 casos ( 36.78 % )
cat("Categoría específica más frecuente (excluyendo residual): Fallas de Conexión ( 437 casos )\n")
## Categoría específica más frecuente (excluyendo residual): Fallas de Conexión ( 437 casos )

9 Conclusión

Tras consolidar y analizar las subcategorías de las causas de accidentes, se observa que la agrupación residual designada como “Climatización” (que aglomera múltiples causas menores, factores externos y otras variables no clasificadas en los componentes primarios) representa la Moda estadística de la distribución global, englobando un total de 1,028 siniestros (36.78%).