Proyecto estrictamente académico. Datos: EarthChem PetDB (CC BY 4.0), descargados el 13/10/2026. Web del proyecto: https://crisrumiguano-art.github.io/geoquimica-earthchem-ml/
Se lee la base limpia (159 760 análisis de roca total × 75 variables). La primera vez se descarga del repositorio del proyecto (26 MB).
knitr::opts_chunk$set(
echo = TRUE, # muestra el código en el documento
message = FALSE, # sin mensajes de carga de paquetes
warning = FALSE, # sin advertencias
fig.align = "center" # gráficos centrados
)
library(e1071) # asimetría y curtosis (install.packages("e1071"))
if (!file.exists("data/earthchem_limpio.csv.gz")) {
dir.create("data", showWarnings = FALSE)
download.file("https://github.com/crisrumiguano-art/geoquimica-earthchem-ml/raw/main/data/earthchem_limpio.csv.gz",
"data/earthchem_limpio.csv.gz", mode = "wb")
}
base <- read.csv(gzfile("data/earthchem_limpio.csv.gz", encoding = "UTF-8"), check.names = FALSE)
dim(base) # filas y columnas## [1] 159760 75
Se toma la columna de la variable y se quitan las filas vacías (vacío = no medido, nunca cero).
ni cuenta los casos de cada categoría y hi los expresa en porcentaje; la moda es la categoría con más casos.
orden <- c("0 fresca", "1 leve", "2 moderada", "3 extensa", "4 casi total", "5 total") # ordinal: su orden natural
conteo <- table(factor(x, levels = orden)) # cuenta cada categoría, en ese orden
categoria <- names(conteo)
ni <- as.vector(conteo) # frecuencia absoluta
hi <- round(ni / sum(ni) * 100, 2) # frecuencia relativa (%)
Ni <- cumsum(ni) # acumulada absoluta (solo ordinales)
Hi <- round(cumsum(ni) / sum(ni) * 100, 2) # acumulada relativa (%)
TDF <- data.frame(categoria, ni, hi, Ni, Hi)
knitr::kable(TDF, caption = "Tabla N° 1: distribución de frecuencias")| categoria | ni | hi | Ni | Hi |
|---|---|---|---|---|
| 0 fresca | 15594 | 46.90 | 15594 | 46.90 |
| 1 leve | 4523 | 13.60 | 20117 | 60.51 |
| 2 moderada | 8489 | 25.53 | 28606 | 86.04 |
| 3 extensa | 3958 | 11.90 | 32564 | 97.94 |
| 4 casi total | 529 | 1.59 | 33093 | 99.53 |
| 5 total | 155 | 0.47 | 33248 | 100.00 |
## [1] "0 fresca"
## [1] "1 leve"
Diagrama de barras (altura = ni) y diagrama circular (porción = hi).
par(mfrow = c(1, 2), mar = c(9, 5, 4, 1)) # 2 gráficos lado a lado
colores <- gray.colors(length(ni), start = .25, end = .85) # un gris por categoría
barplot(ni, names.arg = categoria, las = 2, col = colores, ylab = "Cantidad", # barras: altura = ni
main = "Gráfica No. 7: Grado de alteración", cex.names = .8, cex.main = .9)
par(mar = c(1, 1, 4, 1))
pie(hi, labels = paste0(hi, "%"), col = colores, clockwise = TRUE, cex = .75, # circular: porción = hi
main = "Gráfica No. 8: Grado de alteración (%)", cex.main = .9)
legend("topright", legend = categoria, fill = colores, cex = .6, bty = "n")La categoría más frecuente (moda) es 0 fresca, con el 46,9 % de los 33 248 casos con dato, repartidos en 6 categorías. Casi la mitad de los análisis informados son de rocas frescas. Los de rocas muy alteradas se deben usar con cuidado en los elementos que el agua mueve con facilidad (K, Rb, Ba).