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.
Importamos el archivo “database (1).csv” desde una ruta local y lo almacena en el objeto datos, usando espacios o tabulaciones como separador.
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"
)
)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")| 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 |
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"
) 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"
)# 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 %
# 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
## Umbral de Aceptación (Valor Crítico): 7.2311
## ¿El modelo es aceptado bajo este umbral?: TRUE
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.
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.