1 IDENTIFICACION Y JUSTIFICACION DE LA VARIABLE

La variable subtipo de líquido se define como una variable cualitativa ordinal ya que, aunque clasifica categorías no numéricas, estas se organizan mediante un orden jerárquico basado en su frecuencia de ocurrencia y nivel de criticidad. Esta estructura permite asignar identificadores numéricos (Xi) que reflejan una secuencia lógica, facilitando la medición de la probabilidad acumulada.

2 CARGAR DATOS

Importamos el archivo “database.xls” desde una ruta local y lo almacenamos en el objeto datos, usando el paquete readxl para la lectura y janitor para normalizar los nombres de las columnas.

library(readxl)
library(janitor)
library(tidyverse)
library(knitr)

# 1. Definición de archivo
archivo <- "database.xls"

# 3. Carga con corrección de codificación para evitar errores de tildes
datos <- read_excel(archivo) %>% 
  mutate(across(where(is.character), ~iconv(., from = "latin1", to = "UTF-8"))) %>%
  clean_names()

3 EXTRAER LA VARIABLE

En esta sección se realiza la extracción de la variable Subtipo de Líquido, eliminando valores faltantes (NA) y registros vacíos para asegurar la limpieza de los datos antes del análisis estadístico.

sub_liquido_limpio <- datos$liquid_subtype[!is.na(datos$liquid_subtype) & datos$liquid_subtype != ""]

4 TABLA DE FRECUENCIA

En este apartado se cuantifican los incidentes por categoría y se asigna un identificador numérico (Xi) a cada subtipo. Se transforman las categorías originales al idioma español para facilitar su interpretación.

sub_liquido_factor <- factor(sub_liquido_limpio, 
                             levels = c(
                               "DIESEL, FUEL OIL, KEROSENE, JET FUEL",
                               "GASOLINE (NON-ETHANOL)",
                               "LPG (LIQUEFIED PETROLEUM GAS) / NGL (NATURAL GAS LIQUID)",
                               "OTHER HVL",
                               "MIXTURE OF REFINED PRODUCTS (TRANSMIX OR OTHER MIXTURE)",
                               "ANHYDROUS AMMONIA",
                               "OTHER",
                               "BIODIESEL"
                             ),
                             labels = c(
                               "DIESEL / QUEROSENO", "GASOLINA", "GLP / LGN", "OTROS HVL", 
                               "MEZCLA REFINADOS", "AMONIACO ANHIDRO", "OTROS", "BIODIÉSEL"
                             ))

ni_sub <- table(sub_liquido_factor)
hi_sub <- prop.table(ni_sub) * 100

tabla_sub_liquido <- data.frame(
  ID = 1:length(ni_sub),
  Sub_Liquido = names(ni_sub),
  ni = as.vector(ni_sub),
  hi = round(as.vector(hi_sub), 2)
)

kable(tabla_sub_liquido, col.names = c("Valor (Xi)", "Subtipo de Líquido", "ni", "hi %"),
      caption = "Tabla 1: Distribución por Subtipo de Líquido con Identificador")
Tabla 1: Distribución por Subtipo de Líquido con Identificador
Valor (Xi) Subtipo de Líquido ni hi %
1 DIESEL / QUEROSENO 408 30.24
2 GASOLINA 376 27.87
3 GLP / LGN 188 13.94
4 OTROS HVL 171 12.68
5 MEZCLA REFINADOS 98 7.26
6 AMONIACO ANHIDRO 55 4.08
7 OTROS 51 3.78
8 BIODIÉSEL 2 0.15

5 GRÁFICA DE BARRAS

Se presenta el comportamiento visual de la variable mediante una gráfica de barras que muestra la distribución general de los incidentes por subtipo.

ggplot(tabla_sub_liquido, aes(x = factor(ID), y = ni)) +
  geom_bar(stat = "identity", fill = "skyblue", color = "black") +
  labs(title = "Gráfica N° 1: Distribución general de Subtipo de Líquido",
       x = "Subtipo de Líquido (Xi)", y = "Cantidad") +
  theme_minimal()

6 CONJETURA DE MODELO GEOMÉTRICO

Se seleccionó el modelo geométrico debido a que la distribución de frecuencias presenta un decaimiento constante y sucesivo, donde cada barra es proporcionalmente menor a la anterior.

media_obs <- sum(tabla_sub_liquido$ID * tabla_sub_liquido$ni) / sum(tabla_sub_liquido$ni)
p_estimado <- 1 / media_obs
tabla_sub_liquido$hi_modelo <- (p_estimado * (1 - p_estimado)^(tabla_sub_liquido$ID - 1)) * 100

# Gráfica comparativa Realidad vs Modelo
df_grafica <- pivot_longer(tabla_sub_liquido, cols = c("hi", "hi_modelo"), 
                           names_to = "Origen", values_to = "Valor")

ggplot(df_grafica, aes(x = factor(ID), y = Valor, fill = Origen)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  scale_fill_manual(values = c("hi_modelo" = "skyblue", "hi" = "dodgerblue4"),
                    labels = c("Modelo", "Realidad")) +
  labs(title = "Gráfica N° 2: Modelo de probabilidad geométrico de subtipo de líquido",
       subtitle = paste("Parámetro p (Éxito) estimado =", round(p_estimado, 4)),
       x = "Subtipo de Líquido (Xi)", y = "Probabilidad %") +
  theme_minimal()

7 TEST DE PEARSON

Se calcula el coeficiente de correlación de Pearson para determinar el grado de afinidad lineal entre las frecuencias observadas (Realidad) y las esperadas por el modelo geométrico.

Fo_sub <- tabla_sub_liquido$hi
Fe_sub <- tabla_sub_liquido$hi_modelo
Correlacion_Sub <- cor(Fo_sub, Fe_sub) * 100

cat("La correlación de Pearson (afinidad) entre la Realidad y el Modelo es:", 
    round(Correlacion_Sub, 2), "%")
## La correlación de Pearson (afinidad) entre la Realidad y el Modelo es: 96.1 %

8 TEST CHI-CUADRADO

Validación estadística mediante el estadístico Chi-Cuadrado para verificar si las diferencias entre la realidad y el modelo son significativas bajo un umbral crítico.

k <- length(tabla_sub_liquido$ni) 
grados_libertad <- k - 2 
nivel_significancia <- 0.3
x2 <- sum((Fe_sub - Fo_sub)^2 / Fe_sub)
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)
modelo_aceptado <- x2 < umbral_aceptacion

cat("Estadístico Chi-Cuadrado calculado:", round(x2, 4), "\n")
## Estadístico Chi-Cuadrado calculado: 6.2707
cat("Umbral de Aceptación (Valor Crítico):", round(umbral_aceptacion, 4), "\n")
## Umbral de Aceptación (Valor Crítico): 7.2311
cat("¿El modelo es aceptado bajo este umbral?:", modelo_aceptado)
## ¿El modelo es aceptado bajo este umbral?: TRUE

9 CÁLCULO DE PROBABILIDADES

Demostración de la utilidad práctica del análisis mediante la resolución de interrogantes sobre la probabilidad teórica y proyecciones de datos reales. ¿Cuál es la probabilidad teórica de que, ante un nuevo incidente, el líquido involucrado sea Diesel / Queroseno?

prob_teorica_id1 <- p_estimado
cat("Respuesta: La probabilidad teórica es del", round(prob_teorica_id1 * 100, 2), "%")
## Respuesta: La probabilidad teórica es del 37.46 %

Si se reportan 500 nuevos incidentes y se mantiene la distribución observada, ¿cuántos involucrarían Gasolina?

hi_gasolina <- tabla_sub_liquido$hi[tabla_sub_liquido$ID == 2]
cantidad_esperada <- (hi_gasolina / 100) * 500
cat("Respuesta: Se esperarían aproximadamente", round(cantidad_esperada, 0), "incidentes.")
## Respuesta: Se esperarían aproximadamente 139 incidentes.

10 CONCLUSIONES

La variable subtipo de líquido presenta un comportamiento geométrico validado estadísticamente con p = 0.37. Esta estructura permite predecir la probabilidad de futuros incidentes, facilitando la toma de decisiones preventivas basadas en datos.