# UNIVERSIDAD CENTRAL DEL ECUADOR 
# FACULTAD DE INGENIERÍA EN GEOLOGÍA, MINAS, PETRÓLEOS Y AMBIENTAL 
# CARRERA DE INGENIERÍA EN MINAS
# SOFTWARE MINERO
# TEMA: DEFINIR INTERVALOS PARA LEYES MINERALES CON JENKS
# AUTORES: Monica Alejandro, Antonio Chulde, Wendy Montenegro, Johan Morales, Bryan Pastrano
# FECHA:02/06/2025

# ========================
# Cargar librerías
# ========================
#install.packages("classInt") 
library(classInt)

# ========================
# Cargar datos
# ========================
setwd("/cloud/project")  # Ajusta la ruta según tu entorno
Sondajes <- read.csv("sondajes.csv", header = TRUE, sep = ";")
Muestras <- read.csv("assays.csv", header = TRUE, sep = ";")

# ========================
# ANÁLISIS DE COBRE (Cu)
# ========================

# Extraer variable Cu 
Cu <- na.omit(Muestras$Cu.ppb.)
clases_jenksCu <- classIntervals(Cu, n = 4, style = "jenks")

# Ver los cortes (breaks)
clases_jenksCu$brks
## [1]     0  1575  5821 15137 93835
hist(Cu,
     breaks = clases_jenksCu$brks,
     freq = FALSE,  # Densidad ajustada a clases desiguales
     main = "Histograma de concentración de Cu (método de Jenks)",
     xlab = "Concentración de Cu (ppb)",
     ylab = "Densidad",
     col = "lightskyblue",
     border = "white", xlim= c(0,100000))

# Añadir líneas verticales para los cortes
abline(v = clases_jenksCu$brks, col = "red", lty = 2)

# Diagrama de caja
CajaCu <- boxplot(Cu, horizontal = TRUE, col = 'gray', 
                  main = "Diagrama de caja Cu (ppb)", 
                  xlab = "Concentración (ppb)")

CuOut <- CajaCu$out
min_out_Cu <- min(CuOut)
CuComun <- subset(Cu, Cu < min(CuOut))

# Definir número de clases
k_jenks_cu <- 5

# Clasificar con Jenks
jenks_cu <- classIntervals(CuComun, n = k_jenks_cu, style = "jenks")

# Mostrar intervalos
cat("\nIntervalos de Cu definidos por Jenks:\n")
## 
## Intervalos de Cu definidos por Jenks:
for (i in 1:(length(jenks_cu$brks) - 1)) {
  cat(paste0("Intervalo ", i, ": [", round(jenks_cu$brks[i], 2), ", ", round(jenks_cu$brks[i + 1], 2), ")\n"))
}
## Intervalo 1: [0, 108)
## Intervalo 2: [108, 304)
## Intervalo 3: [304, 560)
## Intervalo 4: [560, 890)
## Intervalo 5: [890, 1233)
# Histograma con Jenks
hist(CuComun,
     breaks = jenks_cu$brks,
     main = "Histograma de concentración de Cu común (Método de Jenks)",
     xlab = "Concentración de Cu (ppb)",
     col = "lightskyblue")

# Añadir líneas verticales para los cortes
abline(v = jenks_cu$brks, col = "red", lty = 2)

# ========================
# ANÁLISIS DE NIQUEL (Ni)
# ========================

# Extraer variable Ni
Ni <- na.omit(Muestras$Ni.ppm.)
clases_jenksNi <- classIntervals(Ni, n = 4, style = "jenks")

# Ver los cortes (breaks)
clases_jenksNi$brks
## [1]     0  4724 20400 40000 83000
hist(Ni,
     breaks = clases_jenksNi$brks,
     freq = FALSE,  # Densidad ajustada a clases desiguales
     main = "Histograma de concentración de Ni (método de Jenks)",
     xlab = "Concentración de Ni (ppm)",
     ylab = "Densidad",
     col = "lightskyblue",
     border = "white", xlim= c(0,100000))

# Añadir líneas verticales para los cortes
abline(v = clases_jenksNi$brks, col = "red", lty = 2)

# Diagrama de caja
CajaNi <- boxplot(Ni, horizontal = TRUE, col = 'gray',
                  main = "Diagrama de caja de Ni (ppm)",
                  xlab = "Concentración (ppm)")

NiOut <- CajaNi$out
NiComun <- subset(Ni, Ni < min(NiOut))

# Definir número de clases
k_jenks_ni <- 5
jenks_ni <- classIntervals(NiComun, n = k_jenks_ni, style = "jenks")

cat("\nIntervalos de Ni definidos por Jenks:\n")
## 
## Intervalos de Ni definidos por Jenks:
for (i in 1:(length(jenks_ni$brks) - 1)) {
  cat(paste0("Intervalo ", i, ": [", round(jenks_ni$brks[i], 2), ", ", round(jenks_ni$brks[i + 1], 2), ")\n"))
}
## Intervalo 1: [0, 30)
## Intervalo 2: [30, 84)
## Intervalo 3: [84, 161)
## Intervalo 4: [161, 242)
## Intervalo 5: [242, 327)
hist(NiComun,
     breaks = jenks_ni$brks,
     main = "Histograma de de concentración Ni común (Método de Jenks)",
     xlab = "Concentración de Ni (ppm)",
     col = "lightskyblue")
# Añadir líneas verticales para los cortes
abline(v = jenks_ni$brks, col = "red", lty = 2)