Análisis de Accidentes Mineros: Variable LONGITUDE

Variable Cuantitativa Continua - Longitud La longitud representa la posición este-oeste donde ocurren los accidentes mineros. Esta variable permite analizar la distribución espacial de los incidentes, identificando zonas de mayor concentración y patrones geográficos de riesgo.

1 Carga y Preparación de Datos

En esta sección se limpia el entorno de trabajo, se cargan las librerías necesarias y se importa el dataset desde un archivo Excel. Además se extrae y prepara la variable LONGITUDE para el análisis.

1.1 Carga de Librerías y Datos

# Limpiar entorno
rm(list = ls())

# Cargar librerías
if (!require("readxl")) install.packages("readxl")
library(readxl)
if (!require("moments")) install.packages("moments")
library(moments)

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

cat("✓ Datos cargados exitosamente\n")
## ✓ Datos cargados exitosamente
cat("✓ Dimensiones:", nrow(datos), "observaciones\n")
## ✓ Dimensiones: 4945 observaciones
# Extraer variable
LONGITUDE_raw <- datos$LONGITUDE

# Limpieza
LONGITUDE <- as.numeric(LONGITUDE_raw)
LONGITUDE <- LONGITUDE[!is.na(LONGITUDE)]

# Tamaño muestral
n <- length(LONGITUDE)

# Reporte
datos_originales <- nrow(datos)
datos_eliminados <- datos_originales - n
tasa_validez <- round((n / datos_originales) * 100, 2)

2 Distribución de Frecuencias - Regla de Sturges

Método estadístico para determinar el número óptimo de intervalos (clases) al construir una tabla de frecuencias agrupadas o un histograma.

2.1 Parámetros de Sturges y Límites de Clase

Se calculan el número óptimo de intervalos y su amplitud.

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

# Crear la tabla
parametros_sturges <- data.frame(
  Parámetro = c("Rango (R)", 
                "Número de datos (n)", 
                "Fórmula de k", 
                "Número de intervalos (k)", 
                "Amplitud de clase (A)"),
  Cálculo = c(
    paste("max - min =", round(max(LONGITUDE), 4), "-", round(min(LONGITUDE), 4)),
    paste("n =", n),
    paste("1 + 3.3 × log₁₀(", n, ")"),
    paste("floor(", round(1 + 3.3 * log10(n), 4), ")"),
    paste(round(R, 4), "/", k)
  ),
  Valor = c(
    round(R, 4),
    n,
    round(1 + 3.3 * log10(n), 4),
    k,
    round(A, 4)
  ),
  Unidad = c("grados", "datos", "", "intervalos", "grados/intervalo")
)

# Mostrar tabla con formato mejorado
library(knitr)
kable(parametros_sturges, 
      align = c("l", "l", "r", "l"),
      caption = "Tabla 1: Parámetros de la Regla de Sturges para LONGITUDE",
      col.names = c("Parámetro", "Cálculo", "Valor", "Unidad"))
Tabla 1: Parámetros de la Regla de Sturges para LONGITUDE
Parámetro Cálculo Valor Unidad
Rango (R) max - min = -69.0064 - -124.1028 55.0964 grados
Número de datos (n) n = 4945 4945.0000 datos
Fórmula de k 1 + 3.3 × log₁₀( 4945 ) 13.1907
Número de intervalos (k) floor( 13.1907 ) 13.0000 intervalos
Amplitud de clase (A) 55.0964 / 13 4.2382 grados/intervalo
# Límites de clase
liminf <- seq(from = min(LONGITUDE), to = max(LONGITUDE) - A, by = A)
limsup <- seq(from = min(LONGITUDE) + A, to = max(LONGITUDE), by = A)
MC <- (liminf + limsup) / 2

2.2 Frecuencias Absolutas

Se cuenta cuántos valores caen en cada intervalo.

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

2.3 Frecuencias Relativas y Acumuladas

Se calculan porcentajes y acumulados.

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)))

2.4 Tabla de frecuencias Relativas y Acumuladas

Se crea un data.frame con todos los tipos de frecuencias.

TablaFrecuencias <- data.frame(
  Clase = 1:k,
  Li = round(liminf, 2),
  Ls = round(limsup, 2),
  MC = round(MC, 2),
  fi = n_i,
  hi = round(h_i, 2),
  Fi = Ni_asc,
  Hi = round(Hi_asc, 2)
)

# Mostrar tabla con formato mejorado
library(knitr)
kable(TablaFrecuencias, 
      align = c("c", "r", "r", "r", "r", "r", "r", "r"),
      caption = "Tabla 2: Distribución de Frecuencias de LONGITUDE",
      col.names = c("Clase", "Lím. Inf.", "Lím. Sup.", "Marca Clase", 
                    "fi", "hi (%)", "Fi", "Hi (%)"))
Tabla 2: Distribución de Frecuencias de LONGITUDE
Clase Lím. Inf. Lím. Sup. Marca Clase fi hi (%) Fi Hi (%)
1 -124.10 -119.86 -121.98 108 2.18 108 2.18
2 -119.86 -115.63 -117.75 324 6.55 432 8.74
3 -115.63 -111.39 -113.51 158 3.20 590 11.93
4 -111.39 -107.15 -109.27 421 8.51 1011 20.44
5 -107.15 -102.91 -105.03 172 3.48 1183 23.92
6 -102.91 -98.67 -100.79 45 0.91 1228 24.83
7 -98.67 -94.44 -96.55 245 4.95 1473 29.79
8 -94.44 -90.20 -92.32 321 6.49 1794 36.28
9 -90.20 -85.96 -88.08 995 20.12 2789 56.40
10 -85.96 -81.72 -83.84 889 17.98 3678 74.38
11 -81.72 -77.48 -79.60 934 18.89 4612 93.27
12 -77.48 -73.24 -75.36 286 5.78 4898 99.05
13 -73.24 -69.01 -71.13 47 0.95 4945 100.00

3 Indicadores

Son valores numéricos que resumen, describen y analizan características de un conjunto de datos. Permiten simplificar y entender grandes volúmenes de información de manera más eficiente.

3.1 Indicadores de Tendencia Central

Son medidas estadísticas que identifican el valor central o típico de un conjunto de datos.

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

3.2 Indicadores de Dispersión

Se calculan medidas que indican la variabilidad de los datos: varianza, desviación estándar y coeficiente de variación.

varianza <- var(LONGITUDE)
desv_est <- sd(LONGITUDE)
CV <- (desv_est / media) * 100

3.3 Indicadores de Posición

Se calculan medidas que dividen la distribución en partes iguales: cuartiles y rango intercuartílico.

cuartiles <- quantile(LONGITUDE)
Q1 <- cuartiles[2]
Q2 <- cuartiles[3]
Q3 <- cuartiles[4]
IQR_val <- IQR(LONGITUDE)

# Detección de outliers
lim_inf_outlier <- Q1 - 1.5 * IQR_val
lim_sup_outlier <- Q3 + 1.5 * IQR_val
outliers <- LONGITUDE[LONGITUDE < lim_inf_outlier | LONGITUDE > lim_sup_outlier]
n_outliers <- length(outliers)

3.4 Indicadores de Forma

Se calculan medidas que describen la forma de la distribución: asimetría y curtosis.

asimetria <- skewness(LONGITUDE)
curtosis <- kurtosis(LONGITUDE)

3.5 Tabla de Resumen de Indicadores

tabla_resumen <- data.frame(
  Categoría = c("Tendencia Central", "Tendencia Central", "Tendencia Central", "Tendencia Central", "Tendencia Central",
                "Dispersión", "Dispersión", "Dispersión",
                "Posición", "Posición", "Posición", "Posición",
                "Forma", "Forma"),
  Indicador = c("Mínimo", "Media", "Mediana", "Moda", "Máximo",
                "Varianza", "Desviación Estándar", "Coeficiente de Variación",
                "Cuartil 1 (Q1)", "Cuartil 2 (Q2)", "Cuartil 3 (Q3)", "Rango Intercuartílico",
                "Asimetría", "Curtosis"),
  Valor = c(round(minimo, 4), round(media, 4), round(mediana, 4), round(moda, 4), round(maximo, 4),
            round(varianza, 4), round(desv_est, 4), paste0(round(CV, 2), "%"),
            round(Q1, 4), round(Q2, 4), round(Q3, 4), round(IQR_val, 4),
            round(asimetria, 4), round(curtosis, 4)),
  Unidad = c("grados", "grados", "grados", "grados", "grados",
             "grados²", "grados", "", "grados", "grados", "grados", "grados",
             "", ""),
  Interpretación = c("Valor mínimo observado", "Promedio de todos los valores",
                     "Valor que divide la muestra en dos partes iguales",
                     "Valor más frecuente", "Valor máximo observado",
                     "Medida de dispersión al cuadrado", "Dispersión promedio respecto a la media",
                     paste0("Dispersión relativa (", ifelse(CV < 15, "BAJA", ifelse(CV < 30, "MODERADA", "ALTA")), ")"),
                     "25% de datos por debajo", "50% de datos por debajo", "75% de datos por debajo",
                     "Rango del 50% central de datos",
                     ifelse(asimetria > 0, "Asimétrica positiva", ifelse(asimetria < 0, "Asimétrica negativa", "Simétrica")),
                     ifelse(curtosis > 3, "Leptocúrtica", ifelse(curtosis < 3, "Platicúrtica", "Mesocúrtica")))
)

# Mostrar tabla con formato mejorado
library(knitr)
kable(tabla_resumen, 
      align = c("l", "l", "r", "c", "l"),
      caption = "Tabla 3: Resumen de Indicadores Estadísticos de LONGITUDE",
      col.names = c("Categoría", "Indicador", "Valor", "Unidad", "Interpretación"))
Tabla 3: Resumen de Indicadores Estadísticos de LONGITUDE
Categoría Indicador Valor Unidad Interpretación
Tendencia Central Mínimo -124.1028 grados Valor mínimo observado
Tendencia Central Media -91.4508 grados Promedio de todos los valores
Tendencia Central Mediana -87.3753 grados Valor que divide la muestra en dos partes iguales
Tendencia Central Moda -109.335 grados Valor más frecuente
Tendencia Central Máximo -69.0064 grados Valor máximo observado
Dispersión Varianza 172.7785 grados² Medida de dispersión al cuadrado
Dispersión Desviación Estándar 13.1445 grados Dispersión promedio respecto a la media
Dispersión Coeficiente de Variación -14.37% Dispersión relativa (BAJA)
Posición Cuartil 1 (Q1) -98.4403 grados 25% de datos por debajo
Posición Cuartil 2 (Q2) -87.3753 grados 50% de datos por debajo
Posición Cuartil 3 (Q3) -81.6933 grados 75% de datos por debajo
Posición Rango Intercuartílico 16.7469 grados Rango del 50% central de datos
Forma Asimetría -0.8686 Asimétrica negativa
Forma Curtosis 2.5049 Platicúrtica

4 Gráficas

4.1 Diagrama de Barras

Generamos diagramas de barras tanto Global como Local para las frecuencias absolutas para visualizar el conteo de ocurrencias de los valores de la variable.

par(mfrow = c(2, 2), mar = c(5, 4, 4, 2) + 0.1)
hist(LONGITUDE,
     main = "Gráfica Nº1: Histograma Global\nFrecuencias Absolutas",
     xlab = "Longitud (grados)",
     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",
       cex = 0.8)

hist(LONGITUDE,
     main = "Gráfica Nº2: Histograma Local\nFrecuencias Absolutas",
     xlab = "Longitud (grados)",
     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",
       cex = 0.8)

alturas_porc <- h_i
nombres_barras <- round(MC, 1)

barplot(alturas_porc,
        main = "Gráfica Nº3: Histograma Global\nFrecuencias Relativas",
        xlab = "Marca de Clase (Longitud)",
        ylab = "Porcentaje (%)",
        col = "darkorange",
        border = "white",
        names.arg = nombres_barras,
        las = 2,
        cex.names = 0.7,
        space = 0,
        ylim = c(0, max(alturas_porc) * 1.1))

abline(h = 0)

# Añadir líneas de media y mediana
abline(v = (media - min(liminf)) / A * 1, col = "red", lwd = 2, lty = 2)
abline(v = (mediana - min(liminf)) / A * 1, col = "blue", lwd = 2, lty = 2)

barplot(alturas_porc,
        main = "Gráfica Nº4: Histograma Local\nFrecuencias Relativas",
        xlab = "Marca de Clase (Longitud)",
        ylab = "Porcentaje (%)",
        col = "mediumpurple",
        border = "white",
        names.arg = nombres_barras,
        las = 2,
        cex.names = 0.7,
        space = 0,
        ylim = c(0, 100))

abline(h = 0)

# Añadir líneas de media y mediana
abline(v = (media - min(liminf)) / A * 1, col = "red", lwd = 2, lty = 2)
abline(v = (mediana - min(liminf)) / A * 1, col = "blue", lwd = 2, lty = 2)

4.2 Diagrama de Caja

boxplot(LONGITUDE,
        horizontal = TRUE,
        main = "Gráfica Nº5: Diagrama de Caja\nVariable LONGITUDE",
        xlab = "Longitud (grados)",
        col = "lightgreen",
        border = "darkgreen",
        outcol = "red",
        outpch = 16,
        las = 1)

points(media, 1, pch = 23, bg = "blue", cex = 1.5)

legend("topright",
       legend = c(paste("Mediana:", round(mediana, 2)),
                  paste("Media:", round(media, 2)),
                  paste("Q1:", round(Q1, 2)),
                  paste("Q3:", round(Q3, 2)),
                  paste("Outliers:", n_outliers)),
       bty = "n",
       cex = 0.8) 

4.3 Ojivas

Adicionalmente, generamos las ojivas que nos representa las frecuencias acumuladas y, de igual manera, el intercepto de las gráficas de la ojiva ascendente y la descendente.

4.3.1 Ojivas de Frecuencias Absolutas

plot(MC, Ni_asc,
     type = "b",
     main = "Gráfica Nº6: Ojivas de Frecuencias Absolutas\nVariable LONGITUDE",
     xlab = "Marca de Clase (Longitud en grados)",
     ylab = "Frecuencia Acumulada Absoluta",
     col = "blue",
     lwd = 2,
     pch = 16,
     cex = 1.2,
     las = 1,
     ylim = c(0, n))

lines(MC, Ni_desc,
      type = "b",
      col = "red",
      lwd = 2,
      pch = 16,
      cex = 1.2)

legend("right",
       legend = c("Ascendente", "Descendente"),
       col = c("blue", "red"),
       lty = 1,
       lwd = 2,
       pch = 16,
       bty = "n")

grid(col = "gray", lty = "dotted")

4.3.2 Ojivas de Frecuencias Relativas

plot(MC, Hi_asc,
     type = "b",
     main = "Gráfica Nº7: Ojivas de Frecuencias Relativas\nVariable LONGITUDE",
     xlab = "Marca de Clase (Longitud en grados)",
     ylab = "Frecuencia Acumulada Relativa (%)",
     col = "blue",
     lwd = 2,
     pch = 16,
     cex = 1.2,
     las = 1,
     ylim = c(0, 100))

lines(MC, Hi_desc,
      type = "b",
      col = "red",
      lwd = 2,
      pch = 16,
      cex = 1.2)

legend("right",
       legend = c("Ascendente (%)", "Descendente (%)"),
       col = c("blue", "red"),
       lty = 1,
       lwd = 2,
       pch = 16,
       bty = "n")

grid(col = "gray", lty = "dotted")

5 Conclusiones

La Variable LONGITUDE fluctua entre [-124.10:-69.00] y sus valores giran en torno a -873.753, con una desviacion estandar de 13.14,muy homogenea, ligeramente Fuerte en la parte baja con la existencia de 3 valores atipicos que empiezan desde 124.1028

Por todo lo anterior, el comportamiento de la variable es favorable, ya que la mayoría de las observaciones se encuentran concentradas dentro de un rango coherente y consistente desde el punto de vista geográfico. La baja variabilidad y la escasa cantidad de valores atípicos sugieren que los datos de longitud son estables y representativos, permitiendo su uso confiable en análisis estadísticos posteriores y en la interpretación espacial de los accidentes, lesiones y enfermedades en operaciones mineras. Los valores atípicos identificados no afectan de manera significativa la estructura general de la distribución y pueden estar asociados a ubicaciones extremas o posibles errores de georreferenciación, los cuales deben ser analizados de forma puntual.