knitr::opts_chunk$set(echo = TRUE)

1 Carga de datos

datos <- read.csv("Datos Mineros.csv",
                  header = TRUE,
                  sep = ";",
                  dec = ".",
                  fileEncoding = "latin1")

1.1 Extraemos la variable

Clasificacion <- datos$CLASSIFICATION

1.2 Cargamos Librerias

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
library(gt)

2 Tabla de Distribución De Frecuencias Simples

# Convertimos a dataframe
df_clas <- data.frame(variable = Clasificacion, stringsAsFactors = FALSE)

# Agrupación por palabras clave
 

df_clas$grupo <- case_when(
  str_detect(df_clas$variable, regex("FALL|SLIP", ignore_case = TRUE)) ~ "CAIDAS",
  str_detect(df_clas$variable, regex("HAND|HANDTOOLS|HANDLING", ignore_case = TRUE)) ~ "MANUALES",
  str_detect(df_clas$variable, regex("DUST|RESPIRATORY", ignore_case = TRUE)) ~ "POLVO Y RESPIRATORIO",
  str_detect(df_clas$variable, regex("EXPLOS", ignore_case = TRUE)) ~ "EXPLOSIVOS",
  str_detect(df_clas$variable, regex("HAULAGE", ignore_case = TRUE)) ~ "TRANSPORTE",
  str_detect(df_clas$variable, regex("DISEASE|ILLNESS|DISORDERS", ignore_case = TRUE)) ~ "ENFERMEDADES",
  str_detect(df_clas$variable, regex("MACHINERY", ignore_case = TRUE)) ~ "MAQUINARIA",
  str_detect(df_clas$variable, regex("FIRE", ignore_case = TRUE)) ~ "INCENDIOS",
  TRUE ~ "OTROS"
)

2.1 Calculamos las frecuencias absolutas y relativas simples

TDFgrupoFinal <- df_clas %>%
  group_by(grupo) %>%
  summarise(ni = n(), .groups = "drop") %>%
  mutate(hi = round((ni / sum(ni)) * 100, 0))
TDFgrupoFinalCompleto <- rbind(
  TDFgrupoFinal,
  data.frame(
    grupo = "TOTAL",
    ni = sum(TDFgrupoFinal$ni),
    hi = 100
  )
)

print(TDFgrupoFinalCompleto)
## # A tibble: 10 × 3
##    grupo                   ni    hi
##    <chr>                <int> <dbl>
##  1 CAIDAS                1401    28
##  2 ENFERMEDADES           145     3
##  3 EXPLOSIVOS               6     0
##  4 INCENDIOS               63     1
##  5 MANUALES              1854    37
##  6 MAQUINARIA             535    11
##  7 OTROS                  514    10
##  8 POLVO Y RESPIRATORIO    58     1
##  9 TRANSPORTE             369     7
## 10 TOTAL                 4945   100

2.2 Tabla completa

tabla_clasificacion <- TDFgrupoFinalCompleto %>%
  gt() %>%
  tab_header(
    title = "Tabla N° 1",
    subtitle = "Distribución de Frecuencias Agrupadas de Accidentes Mineros"
  ) %>%
  tab_source_note(
    source_note = "Autor: Grupo1"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = grupo == "TOTAL")
  )

tabla_clasificacion
Tabla N° 1
Distribución de Frecuencias Agrupadas de Accidentes Mineros
grupo ni hi
CAIDAS 1401 28
ENFERMEDADES 145 3
EXPLOSIVOS 6 0
INCENDIOS 63 1
MANUALES 1854 37
MAQUINARIA 535 11
OTROS 514 10
POLVO Y RESPIRATORIO 58 1
TRANSPORTE 369 7
TOTAL 4945 100
Autor: Grupo1
#Comprobación del tamaño
'Suma de ni: 4945' 
## [1] "Suma de ni: 4945"
'Suma de hi: 100 %'
## [1] "Suma de hi: 100 %"

3 Gráficas de distribución de frecuencia

3.1 Diagrama de barras ni

#FRECUENCIAS ABSOLUTAS LOCAL(ni)

barplot(TDFgrupoFinal$ni,
        main = "Gráfica Nº1: Frecuencia de Accidentes Mineros por Grupo (Local)",
        xlab = "Grupo de Accidentes",
        ylab = "Cantidad (ni)",
        col = "steelblue",
        names.arg = TDFgrupoFinal$grupo,
        cex.names = 0.4,
        las = 2)

#FRECUENCIAS ABSOLUTAS GLOBAL(ni)

barplot(TDFgrupoFinal$ni,
        main = "Gráfica Nº2: Frecuencia de Accidentes Mineros por Grupo (Global)",
        xlab = "Grupo de Accidentes",
        ylab = "Cantidad (ni)",
        col = "steelblue",
        names.arg = TDFgrupoFinal$grupo,
        cex.names = 0.4,
        las = 2,
        ylim = c(0, max(TDFgrupoFinal$ni) * 1.2))

3.2 Diagrama de barras hi

Creamos el diagrama de barras con la frecuencia relativa

barplot(TDFgrupoFinal$hi,
        main = "Gráfica Nº3: Porcentaje de Accidentes Mineros por Grupo (Local)",
        xlab = "Grupo de Accidentes",
        ylab = "Porcentaje (%)",
        col = "steelblue",
        names.arg = TDFgrupoFinal$grupo,
        cex.names = 0.4,
        las = 2,
        ylim = c(0, max(TDFgrupoFinal$hi) * 1.2))

#FRECUENCIAS RELATIVAS GLOBAL(hi)

barplot(TDFgrupoFinal$hi,
        main = "Gráfica Nº4: Porcentaje de Accidentes Mineros por Grupo (Global)",
        xlab = "Grupo de Accidentes",
        ylab = "Porcentaje (%)",
        col = "steelblue",
        names.arg = TDFgrupoFinal$grupo,
        cex.names = 0.9,
        las = 2,
        ylim = c(0, 100))

3.3 Diagrama circular

Creamos el sector circular para tener una mejor visualización del porcentaje de incidencia de un echo o fenómeno, usando la frecuencia relativa.

#DIAGRAMA CIRCULAR (hi)
Colores <- colorRampPalette(c("lightskyblue", "darkblue"))
etiquetas <- paste(TDFgrupoFinal$hi, "%", sep = "")

pie(TDFgrupoFinal$hi,
    radius = 0.7,
    col = Colores(nrow(TDFgrupoFinal)),
    main = "Gráfica Nº5: Porcentaje de Accidentes Mineros por Grupo",
    labels = etiquetas)

legend(x = 1, y = 0,
       title = "Grupos",
       legend = TDFgrupoFinal$grupo,
       fill = Colores(nrow(TDFgrupoFinal)),
       cex = 0.8,
       title.cex = 1)

4 Indicadores

# MODA

moda_clasificacion <- TDFgrupoFinal[TDFgrupoFinal$ni == max(TDFgrupoFinal$ni), ]
print(moda_clasificacion)
## # A tibble: 1 × 3
##   grupo       ni    hi
##   <chr>    <int> <dbl>
## 1 MANUALES  1854    37
'1 MANUALES  1854    37'
## [1] "1 MANUALES  1854    37"