1 Carga de datos

Verificamos que rstudio nos lea correctamente los datos

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

1.1 Extraemos la variable

Ocupation <- datos$OCCUPATION

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

df_ocu <- data.frame(variable = Ocupation)
df_ocu$variable <- str_trim(df_ocu$variable)

2.1 Agrupacion de Variables

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

# AGRUPACIÓN
df_ocu$grupo <- case_when(
  str_detect(df_ocu$variable, regex("OPERATOR|DRIVER|LOADER|TRUCK|SHOVEL|GRADER|CRANE|FORKLIFT|HOIST|EXCAVATOR", ignore_case = TRUE)) ~ "OPERADORES DE MAQUINARIA",
  str_detect(df_ocu$variable, regex("LABORER|HELPER|WORKER|CLEAN|JANITOR|SWEEPER|ROUSTABOUT|GROUND|YARD", ignore_case = TRUE)) ~ "TRABAJADORES GENERALES",
  str_detect(df_ocu$variable, regex("MECHANIC|MAINTENANCE|REPAIR|WELDER|ELECTRIC|PLUMBER|MACHINIST", ignore_case = TRUE)) ~ "MANTENIMIENTO / MECÁNICOS",
  str_detect(df_ocu$variable, regex("FOREMAN|SUPERVISOR|MANAGER|SUPERINTENDENT|LEADMAN|BOSS", ignore_case = TRUE)) ~ "SUPERVISORES / JEFES",
  str_detect(df_ocu$variable, regex("MINER|DRILL|BOLT|BLAST|LONGWALL|SCOOP|RAMCAR|SHOT", ignore_case = TRUE)) ~ "MINERÍA DIRECTA",
  str_detect(df_ocu$variable, regex("WAREHOUSE|SUPPLY|STORE|PALLET|BAGGER|PACKAGER", ignore_case = TRUE)) ~ "ALMACÉN / LOGÍSTICA",
  str_detect(df_ocu$variable, regex("CLERK|SURVEY|DRAFT|LAB|INSPECT|SAFETY|TECHNIC", ignore_case = TRUE)) ~ "ADMINISTRATIVO / TÉCNICO",
  str_detect(df_ocu$variable, regex("NO VALUE FOUND", ignore_case = TRUE)) ~ "NO DECLARADO",
  TRUE ~ "OTROS"
)

La variable Ocupación fue operacionalizada como una variable ordinal y jerarquizada conforme a un criterio de complejidad funcional creciente, considerando el grado de especialización técnica, el nivel de responsabilidad jerárquica y la magnitud de exposición a los procesos operativos del sistema minero, desde categorías sin información registrada hasta funciones de supervisión y dirección operativa.

orden_ocupacion <- c(
  "NO DECLARADO",
  "OTROS",
  "ADMINISTRATIVO / TÉCNICO",
  "ALMACÉN / LOGÍSTICA",
  "TRABAJADORES GENERALES",
  "OPERADORES DE MAQUINARIA",
  "MANTENIMIENTO / MECÁNICOS",
  "MINERÍA DIRECTA",
  "SUPERVISORES / JEFES"
)

df_ocu$grupo <- factor(
  df_ocu$grupo,
  levels = orden_ocupacion,
  ordered = TRUE
)

2.2 Calculamos las frecuencias absolutas y relativas simples

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

# Totales
TDFocuFinalCompleto <- rbind(
  TDFocuFinal,
  data.frame(grupo = "TOTAL", ni = sum(TDFocuFinal$ni), hi = 100)
)

print(TDFocuFinalCompleto)
##                        grupo   ni  hi
## 1               NO DECLARADO  591  12
## 2                      OTROS  249   5
## 3   ADMINISTRATIVO / TÉCNICO   36   1
## 4        ALMACÉN / LOGÍSTICA    4   0
## 5     TRABAJADORES GENERALES  814  16
## 6   OPERADORES DE MAQUINARIA 1784  36
## 7  MANTENIMIENTO / MECÁNICOS 1094  22
## 8            MINERÍA DIRECTA  118   2
## 9       SUPERVISORES / JEFES  255   5
## 10                     TOTAL 4945 100

2.3 Tabla completa

tabla_ocupation <- TDFocuFinalCompleto %>%
  gt() %>%
  tab_header(
    title = md("Tabla N° 1"),
    subtitle = md("Distribución de Frecuencias Agrupadas por Ocupación (Ordinal)")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 1")
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = grupo == "TOTAL")
  )

tabla_ocupation
Tabla N° 1
Distribución de Frecuencias Agrupadas por Ocupación (Ordinal)
grupo ni hi
NO DECLARADO 591 12
OTROS 249 5
ADMINISTRATIVO / TÉCNICO 36 1
ALMACÉN / LOGÍSTICA 4 0
TRABAJADORES GENERALES 814 16
OPERADORES DE MAQUINARIA 1784 36
MANTENIMIENTO / MECÁNICOS 1094 22
MINERÍA DIRECTA 118 2
SUPERVISORES / JEFES 255 5
TOTAL 4945 100
Autor: Grupo 1
#Comprobación del tamaño
sum(TDFocuFinal$ni)
## [1] 4945

3 Gráficas de distribución de frecuencia

3.1 Diagrama de barras ni

barplot(TDFocuFinal$ni,
        main = "Grfica  Nº1: Frecuencia de Accidentes por Ocupación (Local)",
        xlab = "Grupo de ocupación",
        ylab = "Cantidad (ni)",
        col = "steelblue",
        names.arg = TDFocuFinal$grupo,
        las = 2,
        cex.names = 0.7,
        ylim = c(0, max(TDFocuFinal$ni) * 1.2))

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

3.2 Diagrama de barras hi

barplot(TDFocuFinal$hi,
        main = "Gráfica Nº3: Porcentaje de Accidentes Mineros por Ocupación (Local)",
        xlab = "Grupo de ocupación",
        ylab = "Porcentaje (%)",
        col = "steelblue",
        names.arg = TDFocuFinal$hi,
        las = 2,
        ylim = c(0, 36),
        cex.names = 0.7)

barplot(TDFocuFinal$hi,
        main = "Gráfica Nº4:Porcentaje de Accidentes Mineros por Ocupación (Global)",
        xlab = "Naturaleza del Daño",
        ylab = "Porcentaje (%)",
        col = "steelblue",
        names.arg = TDFocuFinal$grupo,
        cex.names = 0.4,
        las = 2,
        ylim = c(0, 100))

3.3 Diagrama circular

Colores <- colorRampPalette(c("lightskyblue", "darkblue"))

# Porcentajes
porcentajes <- paste(TDFocuFinal$hi, "%", sep = "")

pie(TDFocuFinal$hi,
    radius = 0.7,
    col = Colores(nrow(TDFocuFinal)),
    main = "Gráfica Nº5: Porcentaje de Accidentes por Ocupación",
    labels = NA)   # ← clave: sin etiquetas en el pie

legend("topright",
       inset = c(-0.06, 0.3),
       xpd = TRUE,
       title = "Grupo de Ocupación",
       legend = paste(TDFocuFinal$grupo, "-", porcentajes),
       fill = Colores(nrow(TDFocuFinal)),
       cex = 0.55)

4 Indicadores

moda_OCUPACION <- TDFocuFinal[TDFocuFinal$ni == max(TDFocuFinal$ni), ]
print(moda_OCUPACION)
##                      grupo   ni hi
## 6 OPERADORES DE MAQUINARIA 1784 36
'6 OPERADORES DE MAQUINARIA 1784 36'
## [1] "6 OPERADORES DE MAQUINARIA 1784 36"
# Mediana
TDFocuFinal_med <- TDFocuFinal %>%
  mutate(
    Ni = cumsum(ni),
    Hi = cumsum(hi)
  )

TDFocuFinal_med
##                       grupo   ni hi   Ni Hi
## 1              NO DECLARADO  591 12  591 12
## 2                     OTROS  249  5  840 17
## 3  ADMINISTRATIVO / TÉCNICO   36  1  876 18
## 4       ALMACÉN / LOGÍSTICA    4  0  880 18
## 5    TRABAJADORES GENERALES  814 16 1694 34
## 6  OPERADORES DE MAQUINARIA 1784 36 3478 70
## 7 MANTENIMIENTO / MECÁNICOS 1094 22 4572 92
## 8           MINERÍA DIRECTA  118  2 4690 94
## 9      SUPERVISORES / JEFES  255  5 4945 99
total <- sum(TDFocuFinal$ni)
pos_mediana <- total / 2

mediana_ocupacion <- TDFocuFinal_med %>%
  filter(Ni >= pos_mediana) %>%
  slice(1)

mediana_ocupacion
##                      grupo   ni hi   Ni Hi
## 1 OPERADORES DE MAQUINARIA 1784 36 3478 70