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
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")
| 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 |
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)
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)
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)
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)
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))
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 )
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%).