Se inicia el proceso mediante la importación del conjunto de datos principal (database-1.csv), asegurando la integridad de la información y la correcta asignación de variables operativas como el cierre de tuberías. Esta etapa es fundamental para establecer la base del estudio, permitiendo la limpieza de registros inconsistentes y la verificación del tamaño muestral necesario para garantizar la validez de las conclusiones posteriores.
datos <- read.csv("database-_1_.csv")
zona<-datos$Pipeline.Shutdown
En este apartado se utiliza el paquete dplyr para estructurar la tabla de frecuencias, transformando los datos brutos en categorías organizadas y manejables. Este paso preliminar es crucial para observar la distribución inicial de los incidentes, facilitando la identificación de patrones antes de proceder a la visualización de riesgos específicos por volatilidad.
library(dplyr)
##
## 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(knitr)
library(kableExtra)
##
## Adjuntando el paquete: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
df_parcial <- datos %>%
mutate(Pipeline.Shutdown = trimws(toupper(Pipeline.Shutdown)),
Pipeline.Shutdown = ifelse(Pipeline.Shutdown == "YES", "SI", Pipeline.Shutdown)) %>%
filter(Pipeline.Shutdown %in% c("SI", "NO")) %>%
count(Pipeline.Shutdown, name = "ni")
total_objetivo <- 2795
suma_actual <- sum(df_parcial$ni)
n_restante <- total_objetivo - suma_actual
fila_restante <- data.frame(
Pipeline.Shutdown = "NO IDENTIFICADOS",
ni = n_restante
)
df_completo <- rbind(df_parcial, fila_restante) %>%
mutate(hi_pct = round((ni / sum(ni)) * 100, 2)) %>%
arrange(desc(ni))
fila_total <- data.frame(
Pipeline.Shutdown = "TOTAL",
ni = sum(df_completo$ni),
hi_pct = 100.00
)
tabla_final <- rbind(df_completo, fila_total)
kable(tabla_final,
digits = 2,
col.names = c("Estado", "Frecuencia (ni)", "Porcentaje (%)"),
align = 'c',
caption = "Tabla: Distribución Total de Cierres") %>%
kable_styling(full_width = FALSE, position = "center",
bootstrap_options = c("striped", "bordered")) %>%
row_spec(nrow(tabla_final), bold = TRUE, background = "#f2f2f2") %>%
row_spec(which(tabla_final$Pipeline.Shutdown == "NO IDENTIFICADOS"), color = "gray", italic = TRUE)
| Estado | Frecuencia (ni) | Porcentaje (%) |
|---|---|---|
| SI | 1395 | 49.91 |
| NO | 1188 | 42.50 |
| NO IDENTIFICADOS | 212 | 7.58 |
| TOTAL | 2795 | 100.00 |
Aquí se evalúa la frecuencia de los accidentes en relación con el estado operativo de la infraestructura, comparando visualmente los eventos ocurridos cuando hubo un cierre de oleoductos frente a cuando no lo hubo. Esta comparativa permite identificar si las medidas de interrupción operativa tienen una correlación directa con el volumen de incidentes registrados en la muestra.
#barra local ni
library(ggplot2)
library(dplyr)
datos_grafico <- datos %>%
mutate(Pipeline.Shutdown = trimws(toupper(Pipeline.Shutdown)),
Pipeline.Shutdown = ifelse(Pipeline.Shutdown == "YES", "SI", Pipeline.Shutdown)) %>%
filter(Pipeline.Shutdown %in% c("SI", "NO")) %>%
count(Pipeline.Shutdown, name = "ni")
ggplot(datos_grafico, aes(x = Pipeline.Shutdown, y = ni, fill = Pipeline.Shutdown)) +
geom_bar(stat = "identity", width = 0.6) +
scale_fill_manual(values = c("SI" = "skyblue", "NO" = "skyblue")) +
labs(
title = "Gráfica 1: Cierres de oleoductos SI/NO",
x = "Cierre de oleoductos",
y = "Número de Accidentes"
) +
theme_classic() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(face = "bold", size = 14)
)
Este apartado extiende el análisis del estado operativo a una escala global para verificar la consistencia de los protocolos de seguridad. Al observar que la tendencia de cierres efectivos se repite a nivel internacional, se puede concluir que la interrupción del sistema es el escenario predominante durante la gestión de emergencias, independientemente de la ubicación geográfica del incidente.
#barra general
library(ggplot2)
library(dplyr)
datos_grafico <- datos %>%
mutate(Pipeline.Shutdown = trimws(toupper(Pipeline.Shutdown)),
Pipeline.Shutdown = ifelse(Pipeline.Shutdown == "YES", "SI", Pipeline.Shutdown)) %>%
filter(Pipeline.Shutdown %in% c("SI", "NO")) %>%
count(Pipeline.Shutdown, name = "ni")
ggplot(datos_grafico, aes(x = Pipeline.Shutdown, y = ni, fill = Pipeline.Shutdown)) +
geom_bar(stat = "identity", width = 0.6) +
scale_fill_manual(values = c("SI" = "skyblue", "NO" = "skyblue")) +
scale_y_continuous(limits = c(0, 2795), breaks = c(0, 1000, 2000, 2795)) +
labs(
title = "Gráfica 2: Cantidad de Cierres de oleoductos en general",
x = "Cierre de oleoductos",
y = "Número de Accidentes"
) +
theme_classic() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(face = "bold", size = 14)
)
Esta sección analiza la incidencia de accidentes en relación con el estado operativo de los ductos, comparando visualmente los eventos ocurridos bajo flujo activo frente a los de flujo interrumpido. La gráfica revela que la mayoría de los reportes se concentran en la categoría de cierre operativo (“SI”), superando los 1,400 registros, lo que sugiere que la maniobra de cierre es la respuesta estándar de mitigación ante la detección de fallas.
library(ggplot2)
library(dplyr)
library(ggplot2)
library(dplyr)
datos_grafico <- datos %>%
mutate(Pipeline.Shutdown = trimws(toupper(Pipeline.Shutdown)),
Pipeline.Shutdown = ifelse(Pipeline.Shutdown == "YES", "SI", Pipeline.Shutdown)) %>%
filter(Pipeline.Shutdown %in% c("SI", "NO")) %>%
count(Pipeline.Shutdown, name = "ni") %>%
mutate(porcentaje = (ni / sum(ni)) * 100)
ggplot(datos_grafico, aes(x = Pipeline.Shutdown, y = porcentaje, fill = Pipeline.Shutdown)) +
geom_bar(stat = "identity", width = 0.6) +
scale_fill_manual(values = c("SI" = "skyblue", "NO" = "skyblue")) +
scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, 10)) +
labs(
title = "Gráfica 2: Porcentaje de Cierres de oleoductos",
x = "Cierre de oleoductos",
y = "Porcentaje (%)"
) +
theme_classic() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(face = "bold", size = 14)
)
Extraemos la variable cierre de oleoductos, omitimos valores nulos y verificamos el tamaño muestral para asegurar la validez del estudio. El análisis indica que la mayoría de los incidentes ocurren con el sistema cerrado (~1,400 casos), superando a los eventos con flujo activo. Esto sugiere que el cierre es la respuesta operativa estándar ante la detección de anomalías en la red.
#barra_local hi
library(ggplot2)
library(dplyr)
datos_grafico <- datos %>%
mutate(Pipeline.Shutdown = trimws(toupper(Pipeline.Shutdown)),
Pipeline.Shutdown = ifelse(Pipeline.Shutdown == "YES", "SI", Pipeline.Shutdown)) %>%
filter(Pipeline.Shutdown %in% c("SI", "NO")) %>%
count(Pipeline.Shutdown, name = "ni") %>%
mutate(hi_pct = (ni / sum(ni)) * 100)
ggplot(datos_grafico, aes(x = Pipeline.Shutdown, y = hi_pct, fill = Pipeline.Shutdown)) +
geom_bar(stat = "identity", width = 0.6) +
scale_fill_manual(values = c("SI" = "skyblue", "NO" = "skyblue")) +
scale_y_continuous(limits = c(0, 60), breaks = seq(0, 60, by = 10)) +
labs(
title = "Gráfica 4: Cantidad de porcentaje local",
x = "Cierre de oleoductos",
y = "Porcentaje (%)"
) +
theme_classic() +
theme(
legend.position = "none",
axis.text.x = element_text(size = 12, face = "bold"),
plot.title = element_text(face = "bold", size = 14)
)
El diagrama circular de esta variable resalta una distribución predominante en la categoría “SI”, la cual ocupa más de la mitad del área total del gráfico. Esta visualización confirma que la interrupción del flujo es la condición operativa más frecuente durante el registro de los accidentes. Refleja una política de seguridad donde el cese de actividad es el estado predominante cuando se documenta un siniestro.
#diagrama circular
library(ggplot2)
library(dplyr)
df_clean <- datos %>%
mutate(Pipeline.Shutdown = trimws(toupper(Pipeline.Shutdown)),
Pipeline.Shutdown = ifelse(Pipeline.Shutdown == "YES", "SI", Pipeline.Shutdown)) %>%
filter(Pipeline.Shutdown %in% c("SI", "NO")) %>%
count(Pipeline.Shutdown, name = "ni") %>%
mutate(hi_pct = round((ni / sum(ni)) * 100, 1))
ggplot(df_clean, aes(x = "", y = hi_pct, fill = Pipeline.Shutdown)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(hi_pct, "%")),
position = position_stack(vjust = 0.5),
color = "white", fontface = "bold", size = 5) +
scale_fill_manual(values = c("SI" = "skyblue", "NO" = "skyblue")) +
labs(title = "Gráfico 5: Distribución de Cierres de oleoductos", fill = "Estado") +
theme_void()
Los indicadores de la variable muestran una moda clara en el estado de cierre, con una frecuencia absoluta que sobrepasa los 1,400 registros frente a los 1,200 del flujo activo. La concentración de los datos en esta categoría reduce la varianza y evidencia una asimetría hacia el “SI”, confirmando que estadísticamente hay una mayor probabilidad de encontrar el sistema cerrado al momento de reportar el incidente.
variable_limpia <- trimws(toupper(na.omit(datos$Pipeline.Shutdown)))
variable_limpia <- variable_limpia[variable_limpia != ""]
tabla_frecuencia <- table(variable_limpia)
mas_repetido <- names(tabla_frecuencia)[which.max(tabla_frecuencia)]
cantidad <- max(tabla_frecuencia)
total_validos <- sum(tabla_frecuencia)
porcentaje <- round((cantidad / total_validos) * 100, 2)
cat("El valor que más se repite es:", mas_repetido, "\n")
## El valor que más se repite es: YES
cat("Cantidad:", cantidad, "\n")
## Cantidad: 1395
cat("Representa el:", porcentaje, "% de los casos válidos\n")
## Representa el: 54.01 % de los casos válidos
El modelo probabilístico muestra una densidad de masa concentrada en el cierre operativo (\(P > 0.53\)), evidenciando un sesgo asimétrico en la distribución. Esta saturación del espacio muestral confirma que la siniestralidad no es uniforme, sino que sigue un comportamiento estocástico condicionado por la interrupción del flujo como medida de mitigación o respuesta ante la falla.