1 INTRODUCCIÓN

1.1 Contexto del Proyecto

1.2 El presente análisis forma parte del proyecto de investigación sobre Accidentes en Operaciones Mineras, desarrollado en la Carrera de Ingeniería en Minas de la Universidad Central del Ecuador (FIGEMPA).

2 CARGA Y PREPARACIÓN DE DATOS

# Limpiar entorno
rm(list = ls())

# Cargar datos
ruta <- "C:/Users/arian/OneDrive/Documentos/UNI/estadistica/PROYECTO/1. DATOS/5000_Datos.xlsx"

if(!file.exists(ruta)) {
  stop("ERROR: Archivo no encontrado. Por favor verifica la ruta.")
}

datos <- read_excel(ruta)

# Extraer y limpiar variable
NO_INJURIES_raw <- datos$NO_INJURIES
NO_INJURIES <- as.numeric(NO_INJURIES_raw)
NO_INJURIES <- NO_INJURIES[!is.na(NO_INJURIES)]

# Tamaño muestral
n <- length(NO_INJURIES)
datos_originales <- nrow(datos)
tasa_validez <- round((n / datos_originales) * 100, 2)

2.1 Reporte de Datos

Resumen de Calidad de Datos
Indicador Valor
Datos originales 4945
Datos válidos 4945
Datos eliminados 0
Tasa de validez 100%

3 TABLAS DE DISTRIBUCIÓN DE FRECUENCIAS

3.1 Tabla de Frecuencias Simple

# Frecuencias simples
valores_unicos <- sort(unique(NO_INJURIES))
Ni_simple <- as.numeric(table(NO_INJURIES))
hi_simple <- (Ni_simple / n) * 100
Ni_asc_simple <- cumsum(Ni_simple)
Hi_asc_simple <- cumsum(hi_simple)
Ni_desc_simple <- rev(cumsum(rev(Ni_simple)))
Hi_desc_simple <- rev(cumsum(rev(hi_simple)))

TablaSimple <- data.frame(
  Valor = valores_unicos,
  Ni = Ni_simple,
  "hi (%)" = round(hi_simple, 2),
  "Ni Asc" = Ni_asc_simple,
  "Hi Asc (%)" = round(Hi_asc_simple, 2),
  "Ni Desc" = Ni_desc_simple,
  "Hi Desc (%)" = round(Hi_desc_simple, 2),
  check.names = FALSE
)

kable(TablaSimple, align = 'c',
      caption = "Tabla de Distribución de Frecuencias Simple - NO_INJURIES") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE,
                font_size = 12) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#3498db") %>%
  scroll_box(height = "400px")
Tabla de Distribución de Frecuencias Simple - NO_INJURIES
Valor Ni hi (%) Ni Asc Hi Asc (%) Ni Desc Hi Desc (%)
0 591 11.95 591 11.95 4945 100.00
1 4309 87.14 4900 99.09 4354 88.05
2 32 0.65 4932 99.74 45 0.91
3 7 0.14 4939 99.88 13 0.26
4 2 0.04 4941 99.92 6 0.12
5 2 0.04 4943 99.96 4 0.08
6 1 0.02 4944 99.98 2 0.04
10 1 0.02 4945 100.00 1 0.02

3.2 Tabla de Frecuencias Agrupada (Sturges)

# Parámetros de Sturges
R <- max(NO_INJURIES) - min(NO_INJURIES)
k <- floor(1 + 3.3 * log10(n))
A <- R / k

# Límites de clase
liminf <- seq(from = min(NO_INJURIES), to = max(NO_INJURIES) - A, by = A)
limsup <- seq(from = min(NO_INJURIES) + A, to = max(NO_INJURIES), by = A)
MC <- (liminf + limsup) / 2

# Frecuencias agrupadas
n_i <- numeric(k)
for (i in 1:k) {
  if (i == k) {
    n_i[i] <- sum(NO_INJURIES >= liminf[i] & NO_INJURIES <= limsup[i])
  } else {
    n_i[i] <- sum(NO_INJURIES >= liminf[i] & NO_INJURIES < limsup[i])
  }
}

h_i <- (n_i / sum(n_i)) * 100
Ni_asc <- cumsum(n_i)
Hi_asc <- cumsum(h_i)
Ni_desc <- rev(cumsum(rev(n_i)))
Hi_desc <- rev(cumsum(rev(h_i)))

TablaAgrupada <- data.frame(
  Clase = 1:k,
  "Lím. Inf." = round(liminf, 2),
  "Lím. Sup." = round(limsup, 2),
  "M.C." = round(MC, 2),
  Ni = n_i,
  "hi (%)" = round(h_i, 2),
  "Ni Asc" = Ni_asc,
  "Hi Asc (%)" = round(Hi_asc, 2),
  "Ni Desc" = Ni_desc,
  "Hi Desc (%)" = round(Hi_desc, 2),
  check.names = FALSE
)

kable(TablaAgrupada, align = 'c',
      caption = "Tabla de Distribución de Frecuencias Agrupada (Sturges) - NO_INJURIES") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE,
                font_size = 11) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2ecc71")
Tabla de Distribución de Frecuencias Agrupada (Sturges) - NO_INJURIES
Clase Lím. Inf. Lím. Sup. M.C. Ni hi (%) Ni Asc Hi Asc (%) Ni Desc Hi Desc (%)
1 0.00 0.77 0.38 591 11.95 591 11.95 4945 100.00
2 0.77 1.54 1.15 4309 87.14 4900 99.09 4354 88.05
3 1.54 2.31 1.92 32 0.65 4932 99.74 45 0.91
4 2.31 3.08 2.69 7 0.14 4939 99.88 13 0.26
5 3.08 3.85 3.46 0 0.00 4939 99.88 6 0.12
6 3.85 4.62 4.23 2 0.04 4941 99.92 6 0.12
7 4.62 5.38 5.00 2 0.04 4943 99.96 4 0.08
8 5.38 6.15 5.77 1 0.02 4944 99.98 2 0.04
9 6.15 6.92 6.54 0 0.00 4944 99.98 1 0.02
10 6.92 7.69 7.31 0 0.00 4944 99.98 1 0.02
11 7.69 8.46 8.08 0 0.00 4944 99.98 1 0.02
12 8.46 9.23 8.85 0 0.00 4944 99.98 1 0.02
13 9.23 10.00 9.62 1 0.02 4945 100.00 1 0.02

3.2.1 Parámetros de Sturges

Parámetro Valor
Rango (R) 10 lesionados
Número de intervalos (k) 13
Amplitud de clase (A) 0.7692 lesionados

4 INDICADORES DE TENDENCIA CENTRAL

minimo <- min(NO_INJURIES)
maximo <- max(NO_INJURIES)
rango <- maximo - minimo
media <- mean(NO_INJURIES)
mediana <- median(NO_INJURIES)
moda <- as.numeric(names(sort(table(NO_INJURIES), decreasing = TRUE)[1]))

indicadores <- data.frame(
  Indicador = c("Mínimo", "Media", "Mediana", "Moda", "Máximo", "Rango"),
  Valor = c(minimo, round(media, 4), mediana, moda, maximo, rango),
  Unidad = rep("lesionados", 6)
)

kable(indicadores, align = 'lrc',
      caption = "Indicadores de Tendencia Central - NO_INJURIES") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#9b59b6") %>%
  row_spec(c(2, 3), bold = TRUE, background = "#ecf0f1")
Indicadores de Tendencia Central - NO_INJURIES
Indicador Valor Unidad
Mínimo 0.0000 lesionados
Media 0.8954 lesionados
Mediana 1.0000 lesionados
Moda 1.0000 lesionados
Máximo 10.0000 lesionados
Rango 10.0000 lesionados

5 VISUALIZACIONES

5.1 Histogramas

par(mfrow = c(1, 2), mar = c(4, 4, 3, 1))

# HISTOGRAMA GLOBAL - FRECUENCIAS ABSOLUTAS
cat("Generando Histograma Global de Frecuencias Absolutas...\n")
## Generando Histograma Global de Frecuencias Absolutas...
hist(NO_INJURIES,
     main = "Histograma Global de Frecuencias Absolutas\nVariable NO_INJURIES",
     xlab = "Número de Lesionados",
     ylab = "Frecuencia Absoluta",
     col = "steelblue",
     border = "white",
     las = 1,
     breaks = k)
abline(v = media, col = "red", lwd = 2, lty = 2)
abline(v = mediana, col = "blue", lwd = 2, lty = 2)
legend("topright",
       legend = c(paste("Media =", round(media, 2)),
                  paste("Mediana =", round(mediana, 2))),
       col = c("red", "blue"),
       lty = 2,
       lwd = 2,
       bty = "n")

# HISTOGRAMA LOCAL - FRECUENCIAS ABSOLUTAS
cat("Generando Histograma Local de Frecuencias Absolutas...\n")
## Generando Histograma Local de Frecuencias Absolutas...
hist(NO_INJURIES,
     main = "Histograma Local de Frecuencias Absolutas\nVariable NO_INJURIES",
     xlab = "Número de Lesionados",
     ylab = "Frecuencia Absoluta",
     col = "lightcoral",
     border = "white",
     las = 1,
     breaks = k,
     ylim = c(0, max(n_i) * 1.2))
abline(v = media, col = "red", lwd = 2, lty = 2)
abline(v = mediana, col = "blue", lwd = 2, lty = 2)
legend("topright",
       legend = c(paste("Media =", round(media, 2)),
                  paste("Mediana =", round(mediana, 2))),
       col = c("red", "blue"),
       lty = 2,
       lwd = 2,
       bty = "n")

# HISTOGRAMA GLOBAL - FRECUENCIAS RELATIVAS
cat("Generando Histograma Global de Frecuencias Relativas...\n")
## Generando Histograma Global de Frecuencias Relativas...
barplot(h_i,
        main = "Histograma Global de Frecuencias Relativas\nVariable NO_INJURIES",
        xlab = "Marca de Clase",
        ylab = "Porcentaje (%)",
        col = "darkorange",
        border = "white",
        names.arg = round(MC, 1),
        las = 2,
        cex.names = 0.7,
        space = 0)
abline(h = 0)

# HISTOGRAMA LOCAL - FRECUENCIAS RELATIVAS
cat("Generando Histograma Local de Frecuencias Relativas...\n")
## Generando Histograma Local de Frecuencias Relativas...
barplot(h_i,
        main = "Histograma Local de Frecuencias Relativas\nVariable NO_INJURIES",
        xlab = "Marca de Clase",
        ylab = "Porcentaje (%)",
        col = "mediumpurple",
        border = "white",
        names.arg = round(MC, 1),
        las = 2,
        cex.names = 0.7,
        space = 0,
        ylim = c(0, 100))
abline(h = 0)

5.2 Diagrama de Caja

par(mar = c(4, 4, 3, 1))
boxplot(NO_INJURIES, horizontal = TRUE,
        main = "Diagrama de Caja - NO_INJURIES",
        xlab = "Número de Lesionados",
        col = "#2ecc71", border = "#27ae60",
        outcol = "red", outpch = 16, las = 1)
points(media, 1, pch = 23, bg = "blue", cex = 1.5)
legend("topright",
       legend = c("Media", "Mediana", "Valores atípicos"),
       pch = c(23, NA, 16),
       col = c("blue", "black", "red"),
       lty = c(NA, 1, NA),
       lwd = c(NA, 2, NA),
       pt.bg = c("blue", NA, NA),
       bty = "n", cex = 0.8)

5.3 Ojivas

par(mfrow = c(1, 2), mar = c(4, 4, 3, 1))

# Ojivas Absolutas
plot(MC, Ni_asc, type = "b",
     main = "Ojivas - Frecuencias Absolutas",
     xlab = "Marca de Clase",
     ylab = "Frecuencia Acumulada (Ni)",
     col = "#3498db", lwd = 2, pch = 16, cex = 1.2,
     ylim = c(0, n), las = 1)
lines(MC, Ni_desc, type = "b",
      col = "#e74c3c", lwd = 2, pch = 16, cex = 1.2)
legend("right", 
       legend = c("Ascendente", "Descendente"),
       col = c("#3498db", "#e74c3c"), 
       lty = 1, lwd = 2, pch = 16, cex = 0.8, bty = "n")
grid(col = "gray", lty = "dotted")

# Ojivas Relativas
plot(MC, Hi_asc, type = "b",
     main = "Ojivas - Frecuencias Relativas",
     xlab = "Marca de Clase",
     ylab = "Porcentaje Acumulado (Hi %)",
     col = "#3498db", lwd = 2, pch = 16, cex = 1.2,
     ylim = c(0, 100), las = 1)
lines(MC, Hi_desc, type = "b",
      col = "#e74c3c", lwd = 2, pch = 16, cex = 1.2)
legend("right", 
       legend = c("Ascendente", "Descendente"),
       col = c("#3498db", "#e74c3c"), 
       lty = 1, lwd = 2, pch = 16, cex = 0.8, bty = "n")
grid(col = "gray", lty = "dotted")


6 CONCLUSIONES

6.1 Validez y Calidad de los Datos

Se trabajó con 4945 observaciones válidas de un total de 4945 registros, lo que representa una tasa de validez del 100%. Esta alta tasa de validez indica una excelente calidad en los datos analizados, proporcionando una base sólida para las conclusiones derivadas.

6.2 Tendencia Central y Distribución

La variable NO_INJURIES presenta los siguientes indicadores centrales:

  • Media: 0.9 lesionados por accidente
  • Mediana: 1 lesionados por accidente
  • Moda: 1 lesionados por accidente

La mediana mayor que la media indica una asimetría negativa (sesgada a la izquierda), lo cual es poco común en datos de accidentabilidad y merece un análisis más profundo.

6.3 Distribución de Frecuencias

El análisis revela que:

  • La moda de 1 lesionados ocurre en 4309 casos, representando el ** 87.1 %** del total.
  • El ** 99.1 %** de los accidentes involucran 1 o menos lesionados.
  • El ** 0.3 %** de los accidentes involucran 3 o más lesionados (accidentes múltiples).

6.4 Implicaciones para la Seguridad Minera

6.4.1 1. Prevención de Accidentes Múltiples

Del total de accidentes analizados, ** 4900 casos ( 99.1 %)** involucraron 1 o menos lesionados, mientras que ** 45 casos ( 0.9 %)** resultaron en múltiples lesionados. Esto indica que:

  • Los protocolos actuales de seguridad están funcionando para limitar el número de personas afectadas por accidente
  • Se requiere atención especial en situaciones que pueden resultar en accidentes múltiples
  • Es fundamental identificar y mitigar factores que conducen a eventos con múltiples víctimas

6.5 Reflexión Final

El análisis de la variable NO_INJURIES revela que, aunque los accidentes en operaciones mineras son una realidad, la mayoría involucran un número limitado de personas lesionadas. Esto sugiere que las medidas de seguridad existentes tienen un efecto positivo en la contención de la severidad de los accidentes.

Sin embargo, la presencia de casos con múltiples lesionados subraya la necesidad imperativa de mantener y fortalecer continuamente los protocolos de seguridad. Cada lesionado representa no solo un costo humano y económico, sino también una oportunidad de aprendizaje para prevenir futuros incidentes.

La seguridad en la minería debe ser una prioridad constante, con inversión sostenida en:

  • Prevención: Identificación y mitigación proactiva de riesgos
  • Preparación: Capacitación y equipamiento adecuado
  • Respuesta: Protocolos efectivos de emergencia
  • Aprendizaje: Análisis sistemático de incidentes para mejora continua