# ==============================================================================
# ANÁLISIS DE VARIABLE NOMINAL: EXPLOSIÓN DE LÍQUIDO
# ==============================================================================
# Cargar librerías
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.1 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.2.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(kableExtra)
##
## Adjuntando el paquete: 'kableExtra'
##
## The following object is masked from 'package:dplyr':
##
## group_rows
library(scales)
##
## Adjuntando el paquete: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
library(janitor)
##
## Adjuntando el paquete: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
# 1. CARGAR DATOS --------------------------------------------------------------
# Cargamos y limpiamos nombres automáticamente
dataset_traducido_espanol <- read_csv("C:/Users/Usuario/Downloads/dataset_traducido_espanol.csv") %>%
clean_names()
## 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): Fecha_Hora_Accidente, Nombre_Operador, Nombre_Tuberia_Instalacion,...
## dbl (18): Numero_Reporte, Numero_Suplementario, Año_Accidente, ID_Operador, ...
##
## ℹ 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.
# DETECCIÓN AUTOMÁTICA DE LA COLUMNA (Para evitar el error de "Not Found")
# Buscamos la columna que se refiera a explosión y la renombramos a "var_explosion"
dataset_traducido_espanol <- dataset_traducido_espanol %>%
rename(var_explosion = contains("explocion") | contains("explosion"))
# 2. TABLA DE FRECUENCIA -------------------------------------------------------
tabla_frec <- dataset_traducido_espanol %>%
group_by(Explosion = var_explosion) %>%
summarise(Frecuencia_Absoluta = n()) %>%
mutate(Frecuencia_Relativa = Frecuencia_Absoluta / sum(Frecuencia_Absoluta),
Porcentaje = percent(Frecuencia_Relativa, accuracy = 0.1)) %>%
arrange(desc(Frecuencia_Absoluta))
# Mostrar tabla atractiva
tabla_frec %>%
kbl(caption = "Tabla de Frecuencias: Explosión de Líquido", align = "c") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = F) %>%
row_spec(0, bold = T, color = "white", background = "#2c3e50")
Tabla de Frecuencias: Explosión de Líquido
|
Explosion
|
Frecuencia_Absoluta
|
Frecuencia_Relativa
|
Porcentaje
|
|
No
|
2780
|
0.9946333
|
99.5%
|
|
Si
|
15
|
0.0053667
|
0.5%
|
# 3. ANÁLISIS DE EXPLOSIÓN (GRÁFICO DE BARRAS) ---------------------------------
# Nota: Para variables nominales se usa barras, no histograma de frecuencias
ggplot(dataset_traducido_espanol, aes(x = var_explosion, fill = var_explosion)) +
geom_bar(color = "black") +
scale_fill_manual(values = c("no" = "#3498db", "si" = "#e74c3c", "yes" = "#e74c3c")) +
labs(title = "Paso 3: Frecuencia de Explosión",
x = "¿Hubo Explosión?", y = "Cantidad de Casos") +
theme_minimal()
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

# 4. CANTIDAD ABSOLUTA GLOBAL --------------------------------------------------
ggplot(tabla_frec, aes(x = Explosion, y = Frecuencia_Absoluta, fill = Explosion)) +
geom_col(width = 0.6) +
geom_text(aes(label = Frecuencia_Absoluta), vjust = -0.5, fontface = "bold") +
labs(title = "Paso 4: Cantidad Absoluta Global",
x = "Categoría", y = "Total de Registros") +
theme_bw() + theme(legend.position = "none")

# 5. ANÁLISIS GLOBAL DE ACCIDENTES POR EXPLOSIÓN -------------------------------
# Comparativa global de la distribución
ggplot(dataset_traducido_espanol, aes(x = var_explosion, fill = var_explosion)) +
geom_bar() +
labs(title = "Paso 5: Análisis Global de Accidentes",
subtitle = "Basado en la ocurrencia de explosión",
x = "Explosión de Líquido", y = "Frecuencia") +
theme_light()

# 6. COMPOSICIÓN PORCENTUAL LOCAL ----------------------------------------------
ggplot(tabla_frec, aes(x = Explosion, y = Frecuencia_Relativa, fill = Explosion)) +
geom_bar(stat = "identity") +
scale_y_continuous(labels = percent) +
labs(title = "Paso 6: Composición Porcentual Local",
x = "Categoría", y = "Porcentaje") +
theme_minimal()

# 7. DIAGRAMA CIRCULAR ---------------------------------------------------------
ggplot(tabla_frec, aes(x = "", y = Frecuencia_Relativa, fill = Explosion)) +
geom_bar(stat = "identity", width = 1, color = "white") +
coord_polar("y", start = 0) +
geom_text(aes(label = Porcentaje), position = position_stack(vjust = 0.5), color = "white") +
labs(title = "Paso 7: Distribución Porcentual") +
theme_void()

# 8. INDICADORES ESTADÍSTICOS --------------------------------------------------
# Calculamos indicadores descriptivos básicos para la variable nominal
indicadores <- dataset_traducido_espanol %>%
group_by(Explosion = var_explosion) %>%
summarise(Conteo = n(),
Proporcion = n() / nrow(dataset_traducido_espanol))
indicadores %>%
kbl(caption = "Indicadores Estadísticos de la Variable") %>%
kable_classic(full_width = F)
Indicadores Estadísticos de la Variable
|
Explosion
|
Conteo
|
Proporcion
|
|
No
|
2780
|
0.9946333
|
|
Si
|
15
|
0.0053667
|
# 9. CONCLUSIONES --------------------------------------------------------------
cat("CONCLUSIONES:\n",
"1. La explosión es un evento nominal dicotómico raro (baja frecuencia).\n",
"2. La gran mayoría de los incidentes no presentan explosión de líquido.\n",
"3. La distribución está fuertemente sesgada hacia la categoría 'NO'.")
## CONCLUSIONES:
## 1. La explosión es un evento nominal dicotómico raro (baja frecuencia).
## 2. La gran mayoría de los incidentes no presentan explosión de líquido.
## 3. La distribución está fuertemente sesgada hacia la categoría 'NO'.