1 IDENTIFICACION Y JUSTIFICACIÓN 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 (\(X_i\)) que reflejan una secuencia lógica, facilitando la medición de la probabilidad acumulada y permitiendo que la magnitud del riesgo de cada incidente sea analizada bajo una jerarquía establecida de mayor a menor impacto.

2 CARGAR DATOS

Importamos el archivo “database (1).csv” desde una ruta local y lo almacena en el objeto datos, usando espacios o tabulaciones como separador.

## setwd("C:/Users/ronal/OneDrive/Desktop")

datos <- read.csv("database (1).csv", header = TRUE, sep = ",", dec = ".")

3 EXTRAER LA VARIABLE

En esta sección se realiza la extracción de la variable Sub Tipo de Líquido, eliminando valores faltantes (NA) y registros vacíos. Posteriormente, se transforman las categorías originales al idioma español para facilitar su interpretación en los análisis estadísticos.

# 1. Extraer la variable 
Sub_Liquido <- datos$Liquid.Subtype[
  !is.na(datos$Liquid.Subtype) & datos$Liquid.Subtype != ""
]

# 2. Traducir los nombres a Español y convertir a factor
Sub_Liquido <- factor(Sub_Liquido, 
                      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"
                      )
)

4 TABLA DE FRECUENCIA

En este apartado se cuantifican los incidentes por categoría y se asigna un identificador numérico (\(X_i\)) a cada subtipo.

# 1. Extraer y limpiar la variable
Sub_Liquido_limpio <- datos$Liquid.Subtype[!is.na(datos$Liquid.Subtype) & datos$Liquid.Subtype != ""]

# 2. Traducir categorías y convertir en Factor
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"
                      ))

# 3. Cálculo de frecuencias ni (absoluta) y hi (relativa %)
ni_sub <- table(Sub_Liquido_factor)
hi_sub <- prop.table(ni_sub) * 100

# 4. Construcción de la tabla base con ID numérico (Xi)
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)
)

# 5. Creación de la fila de TOTAL
fila_total_sub <- data.frame(
  ID = NA, 
  Sub_Liquido = "TOTAL", 
  ni = sum(tabla_sub_liquido$ni), 
  hi = sum(tabla_sub_liquido$hi)
)

# 6. Consolidación de la tabla final
tabla_final_sub <- rbind(tabla_sub_liquido, fila_total_sub)

# Renderizado de la tabla en el documento
knitr::kable(tabla_final_sub, 
             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
NA TOTAL 1349 100.00

5 GRÁFICA DE BARRAS

library(ggplot2)

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

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. Este comportamiento visual, donde cada barra es proporcionalmente menor a la anterior, constituye la firma característica de una distribución geométrica.

# 1. Estimación del parámetro p basado en la media observada
media_observada <- sum(tabla_sub_liquido$ID * tabla_sub_liquido$ni) / sum(tabla_sub_liquido$ni)
p_estimado <- 1 / media_observada

# 2. Cálculo de frecuencias relativas teóricas (Modelo %)
# Fórmula: P(X=k) = p * (1-p)^(k-1)
tabla_sub_liquido$hi_modelo <- (p_estimado * (1 - p_estimado)^(tabla_sub_liquido$ID - 1)) * 100

# 3. Preparación de datos para la comparación 
df_comparativo_hi <- pivot_longer(tabla_sub_liquido, 
                                  cols = c("hi", "hi_modelo"), 
                                  names_to = "Origen", 
                                  values_to = "Valor")

# Ajuste de etiquetas para la leyenda
df_comparativo_hi$Origen <- ifelse(df_comparativo_hi$Origen == "hi", "Realidad", "Modelo")

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

7 TEST DE PERSON

# 1. Definir Fo (Frecuencias Observadas - Realidad)
Fo_sub <- tabla_sub_liquido$hi

# 2. Definir Fe (Frecuencias Esperadas - Modelo Geométrico)
Fe_sub <- tabla_sub_liquido$hi_modelo

# 3. Cálculo de la Correlación de Pearson
Correlacion_Sub <- cor(Fo_sub, Fe_sub) * 100

# 4. Mostrar el resultado en el documento
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

# 1. Definición de parámetros básicos
k <- length(tabla_sub_liquido$ni) 
n_total <- sum(tabla_sub_liquido$ni)

# 2. Grados de libertad (k - 1 - parámetros estimados)
grados_libertad <- k - 2 

# 3. Nivel de significancia
nivel_significancia <- 0.3

# 4. Preparación de Frecuencias Porcentuales (Fo y Fe)
Fo_porc <- tabla_sub_liquido$hi
Fe_porc <- tabla_sub_liquido$hi_modelo

# 5. Cálculo del estadístico Chi-Cuadrado (x2)
x2 <- sum((Fe_porc - Fo_porc)^2 / Fe_porc)

# 6. Determinación del Umbral (Valor Crítico)
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)

# 7. Resultado del Test
modelo_aceptado <- x2 < umbral_aceptacion

# --- Visualización de Resultados ---
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, "\n")
## ¿El modelo es aceptado bajo este umbral?: TRUE

9 CÁLCULO DE PROBABILIDADES

Para demostrar la utilidad práctica del análisis realizado, se plantean y resuelven dos interrogantes clave: una basada en la probabilidad teórica del modelo y otra en la proyección de datos reales.

¿Cuál es la probabilidad teórica de que, ante un nuevo incidente, el líquido involucrado sea e (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 de esos incidentes se espera que involucren Gasolina ?

# Obtenemos la frecuencia relativa real (hi) para el ID 2
hi_gasolina <- tabla_sub_liquido$hi[tabla_sub_liquido$ID == 2]

# Cálculo de la cantidad esperada para una muestra de N = 500
n_proyeccion <- 500
cantidad_esperada <- (hi_gasolina / 100) * n_proyeccion

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. Mediante un parámetro estimado p = 0.37, lo cual fue validado estadísticamente. Esta estructura permite predecir POR EJEMPLO ¿Cuál es la probabilidad de que, ante un nuevo incidente, el líquido involucrado sea e (Diesel / Queroseno)? , facilitando la toma de decisiones preventivas basadas en la probabilidad acumulada de cada subtipo.