# 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
# AUTORES: Monica Alejandro, Antonio Chulde, Wendy Montenegro, Johan Morales, Bryan Pastrano
# FECHA:
# ========================
# Cargar datos
# ========================
setwd("/cloud/project")
Sondajes <- read.csv("sondajes.csv", header = TRUE, sep = ";")
Muestras <- read.csv("assays.csv", header = TRUE, sep = ";")
# ========================
# ANALISIS DE COBRE (Cu)
# ========================
# Extraer la variable Cu
Cu <- na.omit(Muestras$Cu.ppb.)
# Calcular número de clases con Sturges
n_cu <- length(Cu)
k_cu <- ceiling(1 + log2(n_cu))
# Histograma general
hist(Cu,
breaks = k_cu,
main = "Histograma de concentración de Cu (ppb)",
xlab = "Concentración del Cu (ppb)",
ylab = "Frecuencia",
col = "lightskyblue",
ylim = c(0, 1000))

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

# Detectar outliers
CuOut <- CajaCu$out
min_out_cu <- min(CuOut)
# Filtrar valores comunes (sin outliers)
CuComun <- subset(Cu, Cu < min_out_cu)
# Recalcular clases para valores comunes
n_cu_comun <- length(CuComun)
k_cu_comun <- ceiling(1 + log2(n_cu_comun))
# Crear límites exactos
min_cu <- min(CuComun)
max_cu <- max(CuComun)
breaks_cu <- seq(from = min_cu, to = max_cu, length.out = k_cu_comun + 1)
# Imprimir límites en consola
cat("\nLímites de los intervalos del histograma de Cu común:\n")
##
## Límites de los intervalos del histograma de Cu común:
for (i in 1:(length(breaks_cu) - 1)) {
cat(paste0("Intervalo ", i, ": [", round(breaks_cu[i], 2), ", ", round(breaks_cu[i + 1], 2), ")\n"))
}
## Intervalo 1: [0, 112.09)
## Intervalo 2: [112.09, 224.18)
## Intervalo 3: [224.18, 336.27)
## Intervalo 4: [336.27, 448.36)
## Intervalo 5: [448.36, 560.45)
## Intervalo 6: [560.45, 672.55)
## Intervalo 7: [672.55, 784.64)
## Intervalo 8: [784.64, 896.73)
## Intervalo 9: [896.73, 1008.82)
## Intervalo 10: [1008.82, 1120.91)
## Intervalo 11: [1120.91, 1233)
# Histograma valores comunes
hist(CuComun,
breaks = breaks_cu,
main = "Histograma de concentración de Cu común (ppb)",
xlab = "Concentración del Cu (ppb)",
ylab = "Frecuencia",
col = 'lightskyblue',
ylim = c(0, 500),
xlim = c(0, 1400))

# Histograma de outliers
hist(CuOut,
main = "Histograma de valores atípicos de Cu (ppb)",
xlab = "Concentración de Cu (ppb)",
ylab = "Frecuencia",
col = "lightskyblue")

# ========================
# ANALISIS DE NIQUEL (Ni)
# ========================
# Extraer la variable Ni
Ni <- na.omit(Muestras$Ni.ppm.)
# Calcular número de clases con Sturges
n_ni <- length(Ni)
k_ni <- ceiling(1 + log2(n_ni))
# Histograma general
hist(Ni,
breaks = k_ni,
main = "Histograma de concentración de Ni (ppm)",
xlab = "Concentración del Ni (ppm)",
ylab = "Frecuencia",
col = 'lightskyblue', ylim = c(0, 1000), xlim = c(0, 100000))

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

# Detectar outliers
NiOut <- CajaNi$out
min_out_ni <- min(NiOut)
# Filtrar valores comunes
NiComun <- subset(Ni, Ni < min_out_ni)
# Recalcular clases para valores comunes
n_ni_comun <- length(NiComun)
k_ni_comun <- ceiling(1 + log2(n_ni_comun))
# Crear límites exactos
min_ni <- min(NiComun)
max_ni <- max(NiComun)
breaks_ni <- seq(from = min_ni, to = max_ni, length.out = k_ni_comun + 1)
# Imprimir límites en consola
cat("\nLímites de los intervalos del histograma de Ni común:\n")
##
## Límites de los intervalos del histograma de Ni común:
for (i in 1:(length(breaks_ni) - 1)) {
cat(paste0("Intervalo ", i, ": [", round(breaks_ni[i], 2), ", ", round(breaks_ni[i + 1], 2), ")\n"))
}
## Intervalo 1: [0, 29.73)
## Intervalo 2: [29.73, 59.45)
## Intervalo 3: [59.45, 89.18)
## Intervalo 4: [89.18, 118.91)
## Intervalo 5: [118.91, 148.64)
## Intervalo 6: [148.64, 178.36)
## Intervalo 7: [178.36, 208.09)
## Intervalo 8: [208.09, 237.82)
## Intervalo 9: [237.82, 267.55)
## Intervalo 10: [267.55, 297.27)
## Intervalo 11: [297.27, 327)
# Histograma valores comunes
hist(NiComun,
breaks = breaks_ni,
main = "Histograma de concentración de Ni común (ppm)",
xlab = "Concentración del Ni (ppm)",
ylab = "Frecuencia",
col = 'lightskyblue',
xlim = c(0, 350),
ylim = c(0, 500))

# Histograma de outliers
hist(NiOut,
main = "Histograma de valores atípicos de Ni (ppm)",
xlab = "Concentración de Ni (ppm)",
ylab = "Frecuencia",
col = 'lightskyblue', ylim = c(0, 150), xlim = c(0, 100000))
