ARGUMENTO TÉCNICO Se utiliza una JERARQUÍA DE PRESENTACIÓN DESCENDENTE para organizar las categorías. Aunque la variable es nominal, este orden resalta los tipos de líquidos involucrados en los mayores riesgos y frecuencias de incidentes, facilitando la toma de decisiones basada en la criticidad operativa.
##
## 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(readr)
library(ggplot2)
library(patchwork)
library(readr)
datasetf <- read_csv("datasetf.csv")## Warning: One or more parsing issues, call `problems()` on your data frame for details,
## e.g.:
## dat <- vroom(...)
## problems(dat)
## Rows: 2795 Columns: 36
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (18): Accident Date/Time, Operator Name, Pipeline/Facility Name, Pipelin...
## dbl (18): Report Number, Supplemental Number, Accident Year, Operator ID, Ac...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
datos_procesados <- datasetf%>%
mutate(Tipo_Liquido = case_when(
`Liquid Type` == "CRUDE OIL" ~ "Petróleo Crudo",
`Liquid Type` == "REFINED AND/OR PETROLEUM PRODUCT (NON-HVL)" ~ "Refinados/Destilados",
`Liquid Type` == "HVL OR OTHER FLAMMABLE OR TOXIC FLUID, GAS" ~ "LPG / Gas Natural / Tóxicos",
`Liquid Type` == "BIOFUEL / ETHANOL" ~ "Biocombustibles / Etanol",
`Liquid Type` == "CO2 (CARBON DIOXIDE)" ~ "Dióxido de Carbono (CO2)",
TRUE ~ "Otros"
)) %>%
mutate(Tipo_Liquido = as.factor(Tipo_Liquido)) tabla_frecuencia <- datos_procesados %>%
group_by(Tipo_Liquido) %>%
summarise(ni = n()) %>% # Frecuencia absoluta
mutate(hi_porcentaje = (ni / sum(ni)) * 100) %>% # Frecuencia relativa %
arrange(desc(ni)) # Ordenar de mayor a menor
# 5. Mostrar el resultado
print(tabla_frecuencia)## # A tibble: 4 × 3
## Tipo_Liquido ni hi_porcentaje
## <fct> <int> <dbl>
## 1 Petróleo Crudo 1398 50.0
## 2 Otros 941 33.7
## 3 LPG / Gas Natural / Tóxicos 418 15.0
## 4 Dióxido de Carbono (CO2) 38 1.36
g1 <- ggplot(tabla_frecuencia, aes(x = reorder(Tipo_Liquido, -ni), y = ni)) +
geom_bar(stat = "identity", fill = "#2c3e50") + # Un solo color sólido
labs(title = "Gráfica 1:Distribución por Tipo de Líquido (JERARQUÍA DE PRESENTACIÓN DESCENDENTE)",
x = "Tipo de Líquido",
y = "Cantidad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
g1g1G <- ggplot(tabla_frecuencia, aes(x = reorder(Tipo_Liquido, -ni), y = ni)) +
geom_bar(stat = "identity", fill = "#2c3e50") + # Un solo color sólido
# Ajuste del límite del eje Y a 2795
scale_y_continuous(limits = c(0, 2795)) +
labs(title = "Gráfica 2:Distribución Global por Tipo de Líquido (JERARQUÍA DE PRESENTACIÓN DESCENDENTE)",
subtitle = "Escala ajustada al total de la muestra (2795)",
x = "Tipo de Líquido",
y = "Cantidad") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
print(g1G)g2 <- ggplot(tabla_frecuencia, aes(x = reorder(Tipo_Liquido, -hi_porcentaje), y = hi_porcentaje)) +
geom_bar(stat = "identity", fill = "#2c3e50") + # Mismo color
labs(title = "Gráfica 3:Porcentaje por Tipo de Líquido (hi%)",
x = "Tipo de Líquido",
y = "Porcentaje (%)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
g2g2G <- ggplot(tabla_frecuencia, aes(x = reorder(Tipo_Liquido, -hi_porcentaje), y = hi_porcentaje)) +
geom_bar(stat = "identity", fill = "#2c3e50") + # Mismo color
scale_y_continuous(limits = c(0, 100)) +
labs(title = "Gráfica 4: Global Porcentaje por Tipo de Líquido (hi%)",
x = "Tipo de Líquido",
y = "Porcentaje (%)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
g2Gtabla_circular <- tabla_frecuencia %>%
filter(Tipo_Liquido != "Total") %>% # Excluimos la fila Total para no arruinar el gráfico
mutate(posicion_etiqueta = cumsum(ni) - (0.5 * ni))
# 2. Crear el gráfico
g_circular <- ggplot(tabla_circular, aes(x = "", y = ni, fill = reorder(Tipo_Liquido, -ni))) +
geom_bar(stat = "identity", width = 1, color = "white") + # Color blanco en los bordes para separar
coord_polar("y", start = 0) +
scale_fill_manual(values = c("#2c3e50", "#34495e", "#5d6d7e", "#85929e", "#abb2b9", "#d5dbdb")) +
labs(title = "Gráfica 5:Distribución Proporcional de Incidentes (JERARQUÍA DE PRESENTACIÓN DESCENDENTE)",
fill = "Tipo de Líquido") +
theme_void() + # Quita los ejes y el fondo para que se vea como un círculo limpio
geom_text(aes(label = ni),
position = position_stack(vjust = 0.5),
color = "white", size = 4) # Añade el número ni dentro de cada tajada
# Mostrar gráfico
print(g_circular)# Calcular la moda (el primer elemento de la tabla ordenada)
moda_valor <- tabla_frecuencia$Tipo_Liquido[1]
frecuencia_moda <- tabla_frecuencia$ni[1]
cat("La moda de los datos es:", moda_valor,"Petróleo Crudo", "con una frecuencia de", frecuencia_moda, "incidentes.")## La moda de los datos es: 4 Petróleo Crudo con una frecuencia de 1398 incidentes.
El análisis identifica al Petróleo Crudo como la Moda estadística, representando el 41.07% de los incidentes totales (\(n_i = 1,148\)). Bajo una jerarquía de presentación descendente, se evidencia que el crudo y los refinados concentran la mayor criticidad operativa (71.5% de los eventos), señalando dónde debe priorizarse la gestión de riesgos y la asignación de recursos preventivos.