datos <- read.csv(
"Datos Mineros.csv",
header = TRUE,
sep = ";",
dec = ".",
fileEncoding = "latin1"
)
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)
library(moments)
library(knitr)
La variable NO_INJURIES, aunque es de naturaleza discreta, fue agrupada en intervalos con el fin de facilitar la representación gráfica, suavizar la distribución y permitir un análisis más claro del comportamiento estadístico.
# Extraer variable NO_INJURIES
df_inj <- data.frame(variable = datos$NO_INJURIES)
NO_INJURIES <- as.numeric(df_inj$variable)
NO_INJURIES <- NO_INJURIES[!is.na(NO_INJURIES)]
Fila total de las sumas de ni y hi
# Extraer variable NO_INJURIES
# Agrupar la variable en intervalos
inj <- NO_INJURIES
clasificacion <- character(length(inj))
for(i in seq_along(inj)){
if(inj[i] >= 0 & inj[i] < 1){
clasificacion[i] <- "[0 , 1)"
} else if(inj[i] >= 1 & inj[i] < 2){
clasificacion[i] <- "[1 , 2)"
} else if(inj[i] >= 2 & inj[i] < 3){
clasificacion[i] <- "[2 , 3)"
} else if(inj[i] >= 3 & inj[i] < 4){
clasificacion[i] <- "[3 , 4)"
} else if(inj[i] >= 4 & inj[i] < 5){
clasificacion[i] <- "[4 , 5)"
} else if(inj[i] >= 5 & inj[i] < 6){
clasificacion[i] <- "[5 , 6)"
} else if(inj[i] >= 6 & inj[i] < 7){
clasificacion[i] <- "[6 , 7)"
} else if(inj[i] >= 7 & inj[i] < 8){
clasificacion[i] <- "[7 , 8)"
} else if(inj[i] >= 8 & inj[i] < 9){
clasificacion[i] <- "[8 , 9)"
} else if(inj[i] >= 9 & inj[i] <= 10){
clasificacion[i] <- "[9 , 10]"
} else {
clasificacion[i] <- NA
}
}
# Quitar NA
clasificacion <- na.omit(clasificacion)
# Orden de intervalos
orden <- c("[0 , 1)",
"[1 , 2)",
"[2 , 3)",
"[3 , 4)",
"[4 , 5)",
"[5 , 6)",
"[6 , 7)",
"[7 , 8)",
"[8 , 9)",
"[9 , 10]")
clasificacion <- factor(clasificacion, levels = orden)
# Frecuencias simples y acumuladas
ni <- table(clasificacion)
total <- sum(ni)
hi <- round(as.numeric(ni) / total * 100, 2)
Ni_Asc <- cumsum(ni)
Hi_Asc <- cumsum(hi)
Ni_Desc <- rev(cumsum(rev(ni)))
Hi_Desc <- rev(cumsum(rev(hi)))
tabla_final <- data.frame(
Intervalo = names(ni),
ni = as.numeric(ni),
hi = hi,
Ni_Asc = as.numeric(Ni_Asc),
Hi_Asc = round(Hi_Asc, 2),
Ni_Desc = as.numeric(Ni_Desc),
Hi_Desc = round(Hi_Desc, 2),
check.names = FALSE
)
tabla_final
## Intervalo ni hi Ni_Asc Hi_Asc Ni_Desc Hi_Desc
## 1 [0 , 1) 591 11.95 591 11.95 4945 100.00
## 2 [1 , 2) 4309 87.14 4900 99.09 4354 88.05
## 3 [2 , 3) 32 0.65 4932 99.74 45 0.91
## 4 [3 , 4) 7 0.14 4939 99.88 13 0.26
## 5 [4 , 5) 2 0.04 4941 99.92 6 0.12
## 6 [5 , 6) 2 0.04 4943 99.96 4 0.08
## 7 [6 , 7) 1 0.02 4944 99.98 2 0.04
## 8 [7 , 8) 0 0.00 4944 99.98 1 0.02
## 9 [8 , 9) 0 0.00 4944 99.98 1 0.02
## 10 [9 , 10] 1 0.02 4945 100.00 1 0.02
TABLA DE DISTRIBUCIÓN DE CANTIDAD FINAL
fila_total <- data.frame(
Intervalo = "TOTAL",
ni = sum(tabla_final$ni),
hi = round(sum(tabla_final$hi), 2),
Ni_Asc = "-",
Hi_Asc = "-",
Ni_Desc = "-",
Hi_Desc = "-"
)
tabla_final <- rbind(tabla_final, fila_total)
# 7) Reemplazar NA por guiones
tabla_final[is.na(tabla_final)] <- "-"
# 8) TABLA GT (bonita)
TablaInj <- tabla_final %>%
gt() %>%
tab_header(
title = md("*Tabla Nº. 1*"),
subtitle = md("**Tabla de distribución del número de lesionados en accidentes mineros (EE.UU.)**")
) %>%
tab_source_note(
source_note = md("__Autor: Grupo 1__")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
table.border.top.style = "solid",
table.border.bottom.style = "solid",
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = gt::px(2),
row.striping.include_table_body = TRUE,
heading.border.bottom.color = "black",
heading.border.bottom.width = gt::px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black"
) %>%
tab_style(
style = cell_text(weight = "bold"),
locations = cells_body(rows = Intervalo == "TOTAL")
)
TablaInj
| Tabla Nº. 1 | ||||||
| Tabla de distribución del número de lesionados en accidentes mineros (EE.UU.) | ||||||
| Intervalo | ni | hi | Ni_Asc | Hi_Asc | Ni_Desc | Hi_Desc |
|---|---|---|---|---|---|---|
| [0 , 1) | 591 | 11.95 | 591 | 11.95 | 4945 | 100 |
| [1 , 2) | 4309 | 87.14 | 4900 | 99.09 | 4354 | 88.05 |
| [2 , 3) | 32 | 0.65 | 4932 | 99.74 | 45 | 0.91 |
| [3 , 4) | 7 | 0.14 | 4939 | 99.88 | 13 | 0.26 |
| [4 , 5) | 2 | 0.04 | 4941 | 99.92 | 6 | 0.12 |
| [5 , 6) | 2 | 0.04 | 4943 | 99.96 | 4 | 0.08 |
| [6 , 7) | 1 | 0.02 | 4944 | 99.98 | 2 | 0.04 |
| [7 , 8) | 0 | 0.00 | 4944 | 99.98 | 1 | 0.02 |
| [8 , 9) | 0 | 0.00 | 4944 | 99.98 | 1 | 0.02 |
| [9 , 10] | 1 | 0.02 | 4945 | 100 | 1 | 0.02 |
| TOTAL | 4945 | 100.00 | - | - | - | - |
| Autor: Grupo 1 | ||||||
Histograma de cantidad
hist(NO_INJURIES,
main = "Gráfica Nº1: Distribución de NO_INJURIES",
col = "gray",
ylab = "Cantidad",
xlab = "Número de lesionados")
Histograma de cantidad en porcentaje
# Barras en porcentaje (sin TOTAL)
hi_plot <- tabla_final$hi[tabla_final$Intervalo != "TOTAL"]
etiquetas_x <- tabla_final$Intervalo[tabla_final$Intervalo != "TOTAL"]
barplot(as.numeric(hi_plot),
main = "Gráfica Nº2: Distribución porcentual de Número de Lesionados",
col = "gray",
space = 0,
las = 2,
xlab = "Intervalos de Número de Lesionados",
ylab = "Porcentaje (%)",
names.arg = etiquetas_x,
ylim = c(0, 100))
Ojivas combinadas Ni
x_intervalos <- seq_along(ni)
plot(x = x_intervalos,
y = as.numeric(Ni_Asc),
type = "o",
col = "blue",
main = "Gráfica Nº5: Ojiva combinada (Ni)",
xlab = "Intervalos",
ylab = "Cantidad acumulada (Ni)",
xaxt = "n")
axis(1,
at = x_intervalos,
labels = orden,
las = 2,
cex.axis = 0.8)
lines(x = x_intervalos,
y = as.numeric(Ni_Desc),
type = "o",
col = "red")
Ojivas combinadas Ni
plot(x = x_intervalos,
y = as.numeric(Hi_Asc),
type = "o",
col = "blue",
main = "Gráfica Nº6: Ojiva combinada (Hi)",
xlab = "Intervalos",
ylab = "Porcentaje acumulado (Hi)",
ylim = c(0, 100),
xaxt = "n")
axis(1, at = x_intervalos, labels = orden, las = 2, cex.axis = 0.8)
lines(x = x_intervalos, y = as.numeric(Hi_Desc), type = "o", col = "red")
boxplot(NO_INJURIES,
horizontal = TRUE,
col = "blue",
main = "Gráfica Nº7: Distribucion de cantidad de numeros de lesionados",
xlab = "Número de lesionados")
Indicadores
#MEDIA ARITMETICA
ri <- min(NO_INJURIES)
rs <- max(NO_INJURIES)
x <- mean(NO_INJURIES)
x
## [1] 0.8954499
#MEDIANA ARITMETICA
Me <- median(NO_INJURIES)
Me
## [1] 1
DISPERSION
#DESVIACIÓN ESTÁNDAR
sdv <- sd(NO_INJURIES)
sdv
## [1] 0.3902502
#COEFICIENTE DE VARIACIÓN
CV <- (sdv / x) * 100
CV
## [1] 43.58147
FORMA
#COEFICIENTE DE VARIACIÓN
As <- moments::skewness(NO_INJURIES)
As
## [1] 2.637139
#COEFICIENTE DE VARIACIÓN
K <- moments::kurtosis(NO_INJURIES)
K
## [1] 77.35958
TABLA DE INDICADORES ESTADISTICOS
TablaIndicadores <- data.frame(
Variable = "NO_INJURIES",
minimo = ri,
maximo = rs,
x = round(x, 2),
Me = Me,
sd = round(sdv, 2),
`Cv (%)` = round(CV, 2),
As = round(As, 2),
K = round(K, 2),
check.names = FALSE
)
kable(TablaIndicadores, caption = "Tabla N°2. Indicadores estadísticos de Numeros de Lesionados")
| Variable | minimo | maximo | x | Me | sd | Cv (%) | As | K |
|---|---|---|---|---|---|---|---|---|
| NO_INJURIES | 0 | 10 | 0.9 | 1 | 0.39 | 43.58 | 2.64 | 77.36 |
TABLA DE OUTLIERS
outliers <- boxplot.stats(NO_INJURIES)$out
num_outliers <- length(outliers)
# Guardar mínimo y máximo correctamente
minoutliers <- ifelse(num_outliers > 0, min(outliers), NA)
maxoutliers <- ifelse(num_outliers > 0, max(outliers), NA)
num_outliers
## [1] 636
minoutliers
## [1] 0
maxoutliers
## [1] 10
# Tabla Outliers
TablaOutliers <- data.frame(
Outliers = num_outliers,
Minimo = minoutliers,
Maximo = maxoutliers
)
colnames(TablaOutliers) <- c("Outliers", "Mínimo", "Máximo")
kable(
TablaOutliers,
format = "markdown",
caption = "Tabla N°4: Valores atípicos (Outliers) de la variable NO_INJURIES (Número de lesionados en accidentes mineros)"
)
| Outliers | Mínimo | Máximo |
|---|---|---|
| 636 | 0 | 10 |
La variable Número de lesionados presenta valores que oscilan entre 0 y los niveles máximos observados, evidenciando una marcada concentración en los valores bajos, particularmente en accidentes que involucran uno o ningún lesionado. La mediana refleja que la ocurrencia típica corresponde a eventos de baja severidad, mientras que la desviación estándar indica la presencia de variabilidad influenciada por un número reducido de accidentes con múltiples lesionados. Este comportamiento genera una distribución asimétrica positiva, característica común en estudios de accidentabilidad, donde predominan incidentes menores y los eventos severos aparecen con menor frecuencia. La acumulación de observaciones en los intervalos inferiores sugiere que, en términos generales, la mayoría de los accidentes registrados presentan impactos humanos limitados. Sin embargo, la existencia de valores atípicos asociados a accidentes de mayor magnitud resalta la importancia de mantener y fortalecer continuamente las estrategias de prevención y control de riesgos en operaciones mineras.