Carga de datos

Verificamos que rstudio nos lea correctamente los datos

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

Extraemos la variable

df_activity <- data.frame(variable = datos$ACTIVITY)

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)

Tabla de Distribución De Frecuencias Simples

# Convertimos a dataframe
df_activity <- data.frame(variable = datos$ACTIVITY)

Agrupacion de Variables

Se agrupo por parametros las cuales se repetian o tienen algo en comun.

df_activity$grupo <- case_when(
  
  str_detect(df_activity$variable, regex("DRILL FACE|RIB|SIDE|DOWN", ignore_case = TRUE)) ~ 
    "PERFORACIÓN / FRENTE",
  
  str_detect(df_activity$variable, regex("HAND TOOLS \\(NOT POWERED\\)", ignore_case = TRUE)) ~ 
    "HERRAMIENTAS MANUALES",
  
  str_detect(df_activity$variable, regex("HAND TOOLS \\(POWERED\\)", ignore_case = TRUE)) ~ 
    "HERRAMIENTAS MOTORIZADAS",
  
  str_detect(df_activity$variable, regex("MACHINE MAINTENANCE", ignore_case = TRUE)) ~ 
    "MANTENIMIENTO",
  
  str_detect(df_activity$variable, regex("HANDLING SUPPLIES OR MATERIAL", ignore_case = TRUE)) ~ 
    "MANIPULACIÓN DE MATERIALES",
  
  str_detect(df_activity$variable, regex("HANDLING COAL|ROCK|ORE", ignore_case = TRUE)) ~ 
    "MANIPULACIÓN DE MINERAL",
  
  str_detect(df_activity$variable, regex("HAULAGE|DUMP TRUCK|FORK LIFT|UTILITY TRUCK|WATER TRUCK", 
                                         ignore_case = TRUE)) ~ 
    "TRANSPORTE / HAULAJE",
  
  str_detect(df_activity$variable, regex("ROOF BOLTER|UNDERGROUND EQUIPMENT|SURFACE EQUIPMENT", 
                                         ignore_case = TRUE)) ~ 
    "OPERACIÓN DE EQUIPOS",
  
  str_detect(df_activity$variable, regex("WALKING|RUNNING", ignore_case = TRUE)) ~ 
    "DESPLAZAMIENTO",
  
  str_detect(df_activity$variable, regex("GETTING ON OR OFF EQUIPMENT", ignore_case = TRUE)) ~ 
    "SUBIR / BAJAR EQUIPOS",
  
  str_detect(df_activity$variable, regex("OFFICE AND LAB WORK|CLERICAL", ignore_case = TRUE)) ~ 
    "TRABAJO ADMINISTRATIVO",
  
  str_detect(df_activity$variable, regex("NO VALUE FOUND", ignore_case = TRUE)) ~ 
    "SIN VALOR",
  
  TRUE ~ "OTRAS ACTIVIDADES"
)

Las actividades laborales fueron clasificadas según su similitud operativa y organizadas de acuerdo con un criterio de riesgo creciente en el entorno minero, considerando el nivel de exposición física y operacional de cada actividad.

# DEFINIR ORDEN (VARIABLE ORDINAL)

orden_grupos <- c(
  "TRABAJO ADMINISTRATIVO",
  "DESPLAZAMIENTO",
  "HERRAMIENTAS MANUALES",
  "HERRAMIENTAS MOTORIZADAS",
  "MANIPULACIÓN DE MATERIALES",
  "MANIPULACIÓN DE MINERAL",
  "TRANSPORTE / HAULAJE",
  "OPERACIÓN DE EQUIPOS",
  "SUBIR / BAJAR EQUIPOS",
  "MANTENIMIENTO",
  "PERFORACIÓN / FRENTE",
  "SIN VALOR",
  "OTRAS ACTIVIDADES"
)
df_activity$grupo <- factor(
  df_activity$grupo,
  levels = orden_grupos,
  ordered = TRUE
)

Calculamos las frecuencias absolutas y relativas simples

TDF_activity <- df_activity %>%
  count(grupo, name = "ni") %>%
  arrange(grupo) %>%
  mutate(
    hi = round(ni / sum(ni) * 100, 0)
  )

# Agregar totale
TDF_activity_completo <- rbind(
  TDF_activity,
  data.frame(grupo = "TOTAL", ni = sum(TDF_activity$ni), hi = 100)
)

print(TDF_activity_completo)
##                         grupo   ni  hi
## 1      TRABAJO ADMINISTRATIVO    4   0
## 2              DESPLAZAMIENTO  441   9
## 3       HERRAMIENTAS MANUALES  460   9
## 4    HERRAMIENTAS MOTORIZADAS  115   2
## 5  MANIPULACIÓN DE MATERIALES  779  16
## 6     MANIPULACIÓN DE MINERAL   98   2
## 7        TRANSPORTE / HAULAJE  118   2
## 8        OPERACIÓN DE EQUIPOS  278   6
## 9       SUBIR / BAJAR EQUIPOS  268   5
## 10              MANTENIMIENTO  673  14
## 11       PERFORACIÓN / FRENTE   42   1
## 12                  SIN VALOR  591  12
## 13          OTRAS ACTIVIDADES 1078  22
## 14                      TOTAL 4945 100

Tabla completa

tabla_activity <- TDF_activity_completo %>%
  gt() %>%
  tab_header(
    title = md("Tabla N° 1"),
    subtitle = md("Distribución de Frecuencias de la Actividad")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo1")
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = grupo == "TOTAL")
  )

tabla_activity
Tabla N° 1
Distribución de Frecuencias de la Actividad
grupo ni hi
TRABAJO ADMINISTRATIVO 4 0
DESPLAZAMIENTO 441 9
HERRAMIENTAS MANUALES 460 9
HERRAMIENTAS MOTORIZADAS 115 2
MANIPULACIÓN DE MATERIALES 779 16
MANIPULACIÓN DE MINERAL 98 2
TRANSPORTE / HAULAJE 118 2
OPERACIÓN DE EQUIPOS 278 6
SUBIR / BAJAR EQUIPOS 268 5
MANTENIMIENTO 673 14
PERFORACIÓN / FRENTE 42 1
SIN VALOR 591 12
OTRAS ACTIVIDADES 1078 22
TOTAL 4945 100
Autor: Grupo1
#Comprobación del tamaño
sum(TDF_activity$ni)
## [1] 4945
sum(TDF_activity$hi)
## [1] 100

Gráficas de distribución de frecuencia

Diagrama de barras ni

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

barplot(TDF_activity$ni,
        main = "Gráfica Nº2: Frecuencia de la Actividad (Global)",
        xlab = "Grupo de Daños",
        ylab = "Cantidad (ni)",
        col = "steelblue",
        names.arg = TDF_activity$ni,
        cex.names = 0.4,
        las = 2,
        ylim = c(0, max(TDF_activity$ni) * 1.2))

Diagrama de barras hi

barplot(TDF_activity$hi,
        main = "Gráfica Nº3: Porcentaje de la Actividad",
        xlab = "Grupo de Actividad",
        ylab = "Porcentaje (%)",
        col = "steelblue",
        names.arg = TDF_activity$grupo,
        cex.names = 0.6,
        las = 2,
        ylim = c(0, 22))

barplot(TDF_activity$hi,
        main = "Gráfica Nº4: Porcentaje de la Actividad (Global)",
        xlab = "Naturaleza del Daño",
        ylab = "Porcentaje (%)",
        col = "steelblue",
        names.arg = TDF_activity$hi,
        cex.names = 0.4,
        las = 2,
        ylim = c(0, 100))

Diagrama circular

El diagrama circular representa la distribución porcentual de las actividades agrupadas en una variable ordinal, donde cada sector muestra la proporción relativa de cada grupo de actividad respecto al total, permitiendo visualizar su peso relativo dentro del conjunto analizado.

Colores <- colorRampPalette(c("lightskyblue", "darkblue"))
etiquetas <- paste(TDF_activity$hi, "%", sep = "")

pie(TDF_activity$hi,
    radius = 0.7,
    col = Colores(nrow(TDF_activity)),
    main = "Gráfica Nº5: Porcentaje de la Actividad",
    labels = etiquetas)

legend(x = 1, y = 0.5,
       title = "Grupo de Actividad",
       legend = TDF_activity$grupo,
       fill = Colores(nrow(TDF_activity)),
       cex = 0.4,
       title.cex = 0.8)

Indicadores

moda_ACTIVIDAD <- TDF_activity[TDF_activity$ni == max(TDF_activity$ni), ]
print(moda_ACTIVIDAD)
##                grupo   ni hi
## 13 OTRAS ACTIVIDADES 1078 22
'13 OTRAS ACTIVIDADES 1078 22'
## [1] "13 OTRAS ACTIVIDADES 1078 22"
# Calcular frecuencias acumuladas
TDF_activity <- TDF_activity %>%
  mutate(
    Ni = cumsum(ni),
    Hi_acum = cumsum(hi)
  )

# Total de observaciones
N <- sum(TDF_activity$ni)

# Posición de la mediana
pos_mediana <- N / 2

# Mediana
mediana_ACTIVIDAD <- TDF_activity %>%
  filter(Ni >= pos_mediana) %>%
  slice(1)

print(mediana_ACTIVIDAD)
##                   grupo  ni hi   Ni Hi_acum
## 1 SUBIR / BAJAR EQUIPOS 268  5 2561      51

Conclusion

La variable “ACTIVIDAD” fluctúa entre “TRABAJO ADMINISTRATIVO” y “OTRAS ACTIVIDADES”, y gira en torno a “TRANSPORTE / HAULAJE” de la distribución de accidentes laborales.