CARGA DE DATOS
knitr::opts_chunk$set(
echo = TRUE, # Muestra el código R en el reporte final.
message = FALSE,
warning = FALSE, # Message y warning evitan que se impriman alertas o mensajes de carga estorbosos en el HTML.
fig.align = "center" # Centra automáticamente todas las gráficas generadas
)
# Cargar datos desde la ruta local unificada
datos <- read.csv("C:/Users/USER/Documents/PROYECTO ESTADISTICA/CMDB_Data.csv",
header = TRUE, # Indica que la primera fila contienen los nombres de las variables.
sep = ";", # Define que los puntos y comas es el separador de las columnas del archivo.
dec = ".", # Establece el punto como el operador decimal para los números.
fileEncoding = "latin1")
# Verificación inicial del set de datos
str(datos)
## 'data.frame': 1366 obs. of 103 variables:
## $ ï..LAB_ID : chr "C355417" "C360759" "C360762" "C360763" ...
## $ PREVIOUS_LAB_ID1 : chr "" "" "" "" ...
## $ PREVIOUS_LAB_ID2 : chr "" "" "" "" ...
## $ PREVIOUS_LAB_ID3 : chr "" "" "" "" ...
## $ FIELD_ID : chr "RM0001" "RM0027" "RM0030" "RM0031" ...
## $ JOB_ID : chr "MRP11968" "MRP12307" "MRP12307" "MRP12307" ...
## $ PREVIOUS_JOB_ID1 : chr "" "" "" "" ...
## $ PREVIOUS_JOB_ID2 : chr "" "" "" "" ...
## $ PREVIOUS_JOB_ID3 : chr "" "" "" "" ...
## $ SUBMITTER : chr "Rare Metals Task" "Rare Metals Task" "Rare Metals Task" "Rare Metals Task" ...
## $ PROJECT_NAME : chr "Critical and Rare Metals" "Critical and Rare Metals" "Critical and Rare Metals" "Critical and Rare Metals" ...
## $ DATE_SUBMITTED : chr "30/6/2011" "31/8/2011" "31/8/2011" "31/8/2011" ...
## $ COLLECTION : chr "Mackay-Keck Ore Deposits Collection" "Mackay-Stanford Ore Deposits Collection" "Mackay-Stanford Ore Deposits Collection" "Mackay-Stanford Ore Deposits Collection" ...
## $ COLLECTION_ID : chr "PHNC08_39_1183" "OD21441" "OD22811" "OD25716" ...
## $ CONTINENT : chr "North America" "South America" "South America" "Africa" ...
## $ COUNTRY : chr "United States" "Chile" "Chile" "South Africa" ...
## $ STATE_PROVINCE : chr "Nevada" "Antofagasta" "Tarapacá" "Transvaal" ...
## $ COUNTY : chr "Lyon" "El Loa" "El Tamarugal" "" ...
## $ DISTRICT_NAME : chr "Yerington" "Chuquicamata" "Collahuasi/Quebrada Blanca" "" ...
## $ DEPOSIT_NAME : chr "Pumpkin Hollow" "" "" "" ...
## $ MINE_NAME : chr "Pumpkin Hollow" "Chuquicamata mine" "Collahuasi district" "" ...
## $ DISTRICT_NAME_COLLECT: chr "Yerington" "" "" "" ...
## $ DEPOSIT_NAME_COLLECT : chr "" "" "" "" ...
## $ MINE_NAME_COLLECT : chr "Pumpkin Hollow" "Chuquicamata" "Poduosa mine" "Messina Mines Ltd." ...
## $ LOCATE_DESC : chr "" "" "Level 25" "" ...
## $ LATITUDE : chr "38,94021" "-22,2871" "-21,0309" "-24,7" ...
## $ LONGITUDE : chr "-119,05178" "-68,8991" "-68,74951" "29,3" ...
## $ DATUM : chr "WGS84" "WGS84" "WGS84" "" ...
## $ LATITUDE_COLLECT : chr "38,92492" "22,28944" "" "" ...
## $ LONGITUDE_COLLECT : chr "-119,1071" "-68,90111" "" "" ...
## $ DATUM_COLLECT : chr "" "WGS84" "" "" ...
## $ COORDINATES_QUAL : chr "100 m" "Exact" "" "" ...
## $ COORDINATES_SOURCE : chr "1) iTouchMap.com, approx, A. Orkild-Norton; 2) Mineral Resource Deposit Database Deposit ID 10174173, ore body, M. Granitto" "1) Mindat.org, approx, A. Orkild-Norton; 2) Open-File Report 2017-1079 ID 549, mine, M. Granitto" "1) No coordinates; 2) Mineral Resource Deposit Database Deposit ID 10057511, district, M. Granitto" "1) No coordinates; 2) Google Earth Pro, approx ctr of former province of Transvaal, M. Granitto" ...
## $ PRIMARY_CLASS : chr "rock" "rock" "rock" "rock" ...
## $ SYSTEM_TYPE : chr "IOA-IOCG" "Porphyry Cu-Mo-Au" "Porphyry Cu-Mo-Au" "IOA-IOCG" ...
## $ DEPOSIT_TYPE : chr "IOCG" "Supergene Cu" "Porphyry Cu" "IOCG" ...
## $ SAMPLE_DESC : chr "Nearly solid chalcopyrite mixed with small light brown irregular inclusions of unknown mineralogy; clouds of ma"| __truncated__ "Chalcocite-bronchatite-antlerite(?); highly microfractured igneous rock with green copper sulfates coating microfractures" "Bornite-chalcopyrite; mostly massive chalcopyrite with numerous inclusions of micro-chalcopyrite and widely sca"| __truncated__ "Massive chalcopyrite, IOCG in shear zone; mostly massive fine grain cuprite with widely distributed malachite t"| __truncated__ ...
## $ Al_pct_AES_ST : chr "0,33" "6,65" "0,46" "0,7" ...
## $ Ca_pct_AES_ST : chr "1,1" "0,4" "-0,1" "0,3" ...
## $ Fe_pct_AES_ST : chr "42,4" "0,25" "6,98" "27,8" ...
## $ K_pct_AES_ST : chr "-0,1" "6,1" "0,2" "-0,1" ...
## $ Mg_pct_AES_ST : chr "0,57" "0,1" "0,01" "0,33" ...
## $ Mn_pct_AES_ST : chr "0,02" "-0,01" "-0,01" "-0,01" ...
## $ P_pct_AES_ST : chr "-0,01" "0,01" "0,05" "0,01" ...
## $ S_pct_AES_ST : chr "" "" "" "" ...
## $ Si_pct_AES_ST : chr "" "" "" "" ...
## $ Ti_pct_AES_ST : chr "0,01" "0,11" "-0,01" "-0,01" ...
## $ F_pct_ISE_Fuse : chr "" "" "" "" ...
## $ Ag_ppm_MS_ST : chr "58" "6" "468" "16" ...
## $ As_ppm_MS_ST : chr "-30" "-30" "90" "-30" ...
## $ Au_ppm : chr "" "" "" "" ...
## $ Au_AM : chr "" "" "" "" ...
## $ B_ppm_AES_ST : int NA NA NA NA NA NA NA NA NA NA ...
## $ Ba_ppm_AES_ST : chr "-0,5" "924" "121" "174" ...
## $ Be_ppm_AES_ST : int -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 ...
## $ Bi_ppm_MS_ST : chr "1,5" "3,6" "190" "0,4" ...
## $ Cd_ppm_MS_ST : chr "3,6" "-0,2" "0,9" "-0,2" ...
## $ Ce_ppm_MS_ST : chr "0,4" "8,8" "16,3" "3,5" ...
## $ Co_ppm_MS_ST : chr "209" "-0,5" "1,3" "44,8" ...
## $ Cr_ppm_AES_ST : int -10 -10 -10 30 20 20 60 40 20 10 ...
## $ Cs_ppm_MS_ST : chr "0,5" "1,4" "0,2" "-0,1" ...
## $ Cu_ppm_AES_ST : chr "50000,11111" "23300" "50000,11111" "50000,11111" ...
## $ Dy_ppm_MS_ST : chr "-0,05" "0,32" "1,38" "0,37" ...
## $ Er_ppm_MS_ST : chr "-0,05" "0,22" "0,77" "0,23" ...
## $ Eu_ppm_MS_ST : chr "-0,05" "0,14" "0,17" "0,1" ...
## $ Ga_ppm_MS_ST : chr "5" "15" "6" "3" ...
## $ Gd_ppm_MS_ST : chr "-0,05" "0,45" "1,5" "0,39" ...
## $ Ge_ppm_MS_ST : int -1 5 -1 -1 3 8 8 1 2 2 ...
## $ Hf_ppm_MS_ST : int -1 4 -1 -1 5 13 12 2 3 6 ...
## $ Ho_ppm_MS_ST : chr "-0,05" "0,07" "0,25" "0,07" ...
## $ In_ppm_MS_ST : chr "6,4" "-0,2" "3,7" "0,2" ...
## $ La_ppm_MS_ST : chr "0,2" "4,6" "7,2" "1,7" ...
## $ Li_ppm_AES_ST : int -10 -10 -10 -10 30 20 20 20 -10 20 ...
## $ Lu_ppm_MS_ST : chr "-0,05" "-0,05" "0,08" "-0,05" ...
## $ Mo_ppm_MS_ST : chr "-2" "60" "3" "2" ...
## $ Nb_ppm_MS_ST : chr "-1" "4" "-1" "-1" ...
## $ Nd_ppm_MS_ST : chr "0,2" "3,8" "9,1" "1,7" ...
## $ Ni_ppm_AES_ST : chr "144" "6" "-5" "48" ...
## $ Pb_ppm_MS_ST : chr "23" "16" "188" "39" ...
## $ Pd_ppm_FA_MS : chr "" "" "" "" ...
## $ Pr_ppm_MS_ST : chr "-0,05" "1,09" "2,21" "0,46" ...
## $ Pt_ppm_FA_MS : chr "" "" "" "" ...
## $ Rb_ppm_MS_ST : chr "1,2" "148" "7,1" "0,7" ...
## $ Re_ppm_MS_HF : chr "" "" "" "" ...
## $ Sb_ppm_MS_ST : chr "1,2" "2,4" "2,9" "0,3" ...
## $ Sc_ppm_AES_ST : int -5 -5 -5 -5 11 6 15 10 5 6 ...
## $ Se_ppm_MS_ST : int NA NA NA NA NA NA NA NA NA NA ...
## $ Sm_ppm_MS_ST : chr "-0,1" "0,6" "1,6" "0,4" ...
## $ Sn_ppm_MS_ST : chr "2" "3" "106" "-1" ...
## $ Sr_ppm_AES_ST : chr "26,6" "114" "22,5" "38,4" ...
## $ Ta_ppm_MS_ST : chr "-0,5" "-0,5" "-0,5" "-0,5" ...
## $ Tb_ppm_MS_ST : chr "-0,05" "0,07" "0,23" "-0,05" ...
## $ Te_ppm_MS_ST : chr "" "" "" "" ...
## $ Th_ppm_MS_ST : chr "0,2" "9,7" "2,6" "0,2" ...
## $ Tl_ppm_MS_ST : chr "-0,5" "0,5" "-0,5" "-0,5" ...
## $ Tm_ppm_MS_ST : chr "-0,05" "-0,05" "0,08" "-0,05" ...
## $ U_ppm_MS_ST : chr "0,3" "1,75" "0,63" "34,8" ...
## $ V_ppm_AES_ST : int 51 24 -5 493 68 20 40 159 39 61 ...
## $ W_ppm_MS_ST : chr "-1" "28" "22" "11" ...
## [list output truncated]
Se cargaron correctamente los datos para el análisis de sistemas de referencia geográficos.
TABLAS DE PARES DE VALORES
# Cargar librerias necesarias
library(dplyr)
library(gt)
# 1. FRECUENCIA ABSOLUTA INICIAL
TDFDATUM <- table(datos$DATUM)
# 2. CREAR EL OBJETO DATA FRAME
tabla_agrupada <- as.data.frame(TDFDATUM) # Convierte la tabla de frecuencias en un marco de datos
colnames(tabla_agrupada) <- c("Datum", "ni") # Asignamos el nombre "Datum" (con mayúscula inicial para estética)
# 3. REEMPLAZAR LA CADENA VACÍA ("") POR "No clasificado"
tabla_agrupada$Datum <- as.character(tabla_agrupada$Datum)
tabla_agrupada$Datum[tabla_agrupada$Datum == ""] <- "No clasificado"
# 4. CÁLCULOS DE FRECUENCIA RELATIVA Y PORCENTAJE
tabla_agrupada$hi <- tabla_agrupada$ni / sum(tabla_agrupada$ni)
tabla_agrupada$hi_porc <- round(tabla_agrupada$hi * 100, 2)
# 5. CREAR FILA DE TOTAL
Total <- data.frame(Datum = "TOTAL",
ni = sum(tabla_agrupada$ni),
hi = sum(tabla_agrupada$hi),
hi_porc = sum(tabla_agrupada$hi) * 100)
# 6. UNIR TABLA FINAL BÁSICA
tabla_final <- rbind(tabla_agrupada, Total)
# 7. MOSTRAR LA TABLA CON LA ESTÉTICA 'gt'
tabla_datum_gt <- tabla_final %>%
gt() %>%
tab_header(
title = md("**Tabla N° 1**"),
subtitle = md("Distribución de muestras según el Datum <br> (Sistema de referencia de coordenadas)")
) %>%
tab_source_note(
source_note = md("Autores: Grupo 1 <br> Semestre 2026 - 2026")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black",
row.striping.include_table_body = TRUE
)
# Renderizar la tabla en el documento
tabla_datum_gt
| Tabla N° 1 | |||
| Distribución de muestras según el Datum (Sistema de referencia de coordenadas) |
|||
| Datum | ni | hi | hi_porc |
|---|---|---|---|
| No clasificado | 64 | 0.04685212 | 4.69 |
| NAD27 | 39 | 0.02855051 | 2.86 |
| WGS84 | 1263 | 0.92459736 | 92.46 |
| TOTAL | 1366 | 1.00000000 | 100.00 |
| Autores: Grupo 1 Semestre 2026 - 2026 |
|||
PROCESAMIENTO DE VARIABLES Y TABLAS DE FRECUENCIAS
# Cargar librerias necesarias
library(dplyr)
library(gt)
# 1. FILTRAR REGISTROS VACÍOS O "No clasificado"
TDF_limpia <- table(datos$DATUM)
TDF_limpia <- TDF_limpia[names(TDF_limpia) != ""]
# 2. CONVERTIR LA TABLA EN UN DATAFRAME OPERATIVO
tabla_final_completa <- as.data.frame(TDF_limpia)
colnames(tabla_final_completa) <- c("Datum", "ni") # Usamos "Datum" con mayúscula inicial para la estética
# 3. CÁLCULO DE PORCENTAJES Y FRECUENCIAS ACUMULADAS
tabla_final_completa$hi_porc <- round((tabla_final_completa$ni / sum(tabla_final_completa$ni)) * 100, 2)
tabla_final_completa$Niasc <- cumsum(tabla_final_completa$ni)
tabla_final_completa$Hiasc <- round(cumsum(tabla_final_completa$hi_porc), 2)
tabla_final_completa$Nidsc <- rev(cumsum(rev(tabla_final_completa$ni)))
tabla_final_completa$Hidsc <- round(rev(cumsum(rev(tabla_final_completa$hi_porc))), 2)
# 4. AGREGAR FILA DE TOTAL
Total_completo <- data.frame(Datum = "TOTAL",
ni = sum(tabla_final_completa$ni),
hi_porc = sum(tabla_final_completa$hi_porc),
Niasc = NA, Hiasc = NA, Nidsc = NA, Hidsc = NA)
# 5. CONSOLIDAR LA TABLA
tabla_con_total <- rbind(tabla_final_completa, Total_completo)
# 6. MOSTRAR LA TABLA CON LA ESTÉTICA 'gt'
tabla_datum_completa_gt <- tabla_con_total %>%
gt() %>%
tab_header(
title = md("**Tabla N° 2**"),
subtitle = md("Distribución de Frecuencias Completa por Sistema Datum")
) %>%
tab_source_note(
source_note = md("Autores: Grupo 1 <br> Semestre 2026 - 2026")
) %>%
tab_options(
table.border.top.color = "black",
table.border.bottom.color = "black",
heading.border.bottom.color = "black",
heading.border.bottom.width = px(2),
column_labels.border.top.color = "black",
column_labels.border.bottom.color = "black",
column_labels.border.bottom.width = px(2),
table_body.hlines.color = "gray",
table_body.border.bottom.color = "black",
row.striping.include_table_body = TRUE
) %>%
sub_missing(
columns = c(Niasc, Hiasc, Nidsc, Hidsc),
missing_text = "NA"
)
# Renderizar la tabla en el documento
tabla_datum_completa_gt
| Tabla N° 2 | ||||||
| Distribución de Frecuencias Completa por Sistema Datum | ||||||
| Datum | ni | hi_porc | Niasc | Hiasc | Nidsc | Hidsc |
|---|---|---|---|---|---|---|
| NAD27 | 39 | 3 | 39 | 3 | 1302 | 100 |
| WGS84 | 1263 | 97 | 1302 | 100 | 1263 | 97 |
| TOTAL | 1302 | 100 | NA | NA | NA | NA |
| Autores: Grupo 1 Semestre 2026 - 2026 |
||||||
GRÁFICA DE BARRAS LOCAL Y GLOBAL
# 1. PRIMERA GRÁFICA (LOCAL)
barplot(TDF_limpia,
main = "Gráfica 1: Muestras de Elementos Críticos por Datum (LOCAL)", # Título actualizado
ylab = "Cantidad de depósitos por Datum", # Etiqueta en el eje y
xlab = "Sistema Datum", # Etiqueta en el eje x
col = "lightgreen",
las = 1, # Rota todas las etiquetas numéricas del eje Y
cex.names = 0.8, # Controla el tamaño de la fuente en el eje X
ylim = c(0, 1200))
# 2. SEGUNDA GRÁFICA (GLOBAL - Ocultando el eje Y automático con yaxt = "n")
barplot(TDF_limpia,
main = "Gráfica 2: Muestras de Elementos Críticos por Datum (GLOBAL)",
ylab = "Cantidad de muestras por Datum",
xlab = "Sistema Datum",
col = "mediumpurple",
las = 1,
cex.names = 0.8,
ylim = c(0, 1366),
yaxt = "n")
# 3. Dibujar el eje Y personalizado incluyendo el 1366
axis(2, at = c(seq(0, 1200, by = 200), 1366), las = 1)
VISUALIZACIÓN DE DATOS
# Configuración de márgenes para las etiquetas
par(mar = c(5, 4, 4, 2)) # Se usa para dar espacio y evitar que los textos de los ejes se corten.
# Gráfica de barras absolutas utilizando la variable limpia sin vacíos
freq_abs <- TDF_limpia
names(freq_abs)[names(freq_abs) == ""] <- "No clasificado"
bar_centers <- barplot(freq_abs,
main = "Gráfica 3: Distribución de Frecuencias por DATUM", # Título principal del gráfico.
ylab = "Frecuencia Absoluta (ni)", # Etiqueta en el eje y.
xlab = "Datum", # Etiqueta en el eje x.
col = "gold",
las = 1, # Rota todas las etiquetas numéricas del eje Y para que se lean horizontalmente.
cex.names = 0.8, # Controla el tamaño de la fuente de los nombres de las categorías del eje X
ylim = c(0, max(freq_abs) * 1.2)) # Amplía el límite del eje Y a 1200.
# Añadir etiquetas de valor encima de las barras
text(x = bar_centers,
y = freq_abs,
labels = freq_abs, #El texto real que se va a escribir (el número de muestras)
pos = 3, #Indica que el texto se colocará exactamente "arriba" de la coordenada indicada
cex = 0.9, #Escala del tamaño del texto de la etiqueta
col = "darkblue",
font = 2) #Aplica estilo en negrita
ANÁLISIS DE FRECUENCIA RELATIVA (PORCENTAJES)
# Preparar datos porcentuales basados en la frecuencia limpia
freq_rel_porc <- round(prop.table(freq_abs) * 100, 2) #Convierte una tabla de frecuencias absolutas en frecuencias relativas proporcionales (suman 1)
# Graficamos el porcentaje relativo.
bar_centers_rel <- barplot(freq_rel_porc,
main = "Gráfica 4: Distribución Porcentual por DATUM",
ylab = "Porcentaje (%)",
xlab = "Datum",
col = "darkred",
las = 1,
cex.names = 0.9,
ylim = c(0, 110),
yaxt = "n", #Desactiva el eje Y por defecto para que podamos dibujar uno personalizado y estilizado.
yaxs = "i") #Ajusta las barras perfectamente al origen (cero) del eje vertical, quitando el espacio vacío de la base.
# Eje Y personalizado
axis(2, at = seq(0, 100, by = 20), labels = paste0(seq(0, 100, by = 20), "%"), las = 1)
# Etiquetas de porcentaje encima de las barras
text(x = bar_centers_rel,
y = freq_rel_porc,
labels = paste0(freq_rel_porc, "%"), #Une cadenas de texto sin dejar espacios intermedios.
pos = 3,
cex = 0.85,
col = "black",
font = 2)
GRÁFICA CIRCULAR
# Colores y etiquetas porcentuales para el gráfico circular
hi_datum_porc <- round(prop.table(freq_abs) * 100, 1) # Calculamos proporciones porcentuales redondeadas a 1 decimal para simplificar la lectura en el gráfico circular.
# Definimos un vector con códigos de color en formato hexadecimal para personalizar las porciones.
colores_datum <- c("#66C2A5","#8DA0CB", "#E78AC3")
# Preparamos las etiquetas uniendo el valor numérico obtenido con el carácter "%".
etiquetas_datum <- paste0(hi_datum_porc, "%")
# Generar gráfico circular
pie(hi_datum_porc,
labels = etiquetas_datum,
col = colores_datum,
main = "Gráfica 5: Distribución de Muestras por Datum",
cex = 1.1) # Aumenta sutilmente el tamaño del texto de los porcentajes para mejorar la visibilidad.
# Leyenda lateral estructurada
legend("topright",
legend = names(freq_abs),
fill = colores_datum, # Asigna los mismos colores que usamos en la gráfica a los cuadros indicadores de la leyenda.
title = "Sistemas Datum",
cex = 0.8,
bty = "o") # Dibuja un contorno exterior lineal alrededor del cuadro de la leyenda.
CONCLUSIÓN DE LA VARIABLE DATUM
El análisis de la variable DATUM confirma que la mayoría de los registros operan bajo el sistema WGS 84, una tendencia que coincide directamente con la alta densidad de depósitos documentados en la región de América. El predominio de este estándar geodésico en las minas archivadas es un factor altamente positivo, ya que garantiza una compatibilidad espacial inmediata y permite integrar la información histórica en sistemas modernos de prospección sin requerir transformaciones cartográficas complejas.