1. CARGA DE DATOS Y LIBRERIAS

CARGA DE DATOS Y LIBRERIAS

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]
# Cargar librerias necesarias 
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gt)

Se cargaron correctamente los datos para el análisis de sistemas de referencia geográficos.

2. TABLAS DE DISTRIBUCIÓN DE FRECUENCIAS

2.1 ANÁLISIS POR SISTEMA DE COORDENADAS

# 1. FRECUENCIA ABSOLUTA INICIAL
TDFDATUM <- table(datos$DATUM) # cuenta cuantas veces aparece el dato en la variable

# 2. CREAR EL OBJETO DATA FRAME
tabla_agrupada <- as.data.frame(TDFDATUM)    # se tranforma en una tabla de filas y columnas
colnames(tabla_agrupada) <- c("Datum", "ni") # se asignan nombres a las columnas

# 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) # se calcula hi (frecuencia relativa)
tabla_agrupada$hi_porc <- round(tabla_agrupada$hi * 100, 2)     # convierte a porcentaje y redondea a 2 decimales

# 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

2.2 TABLA AGRUPADA

# 1. FILTRAR REGISTROS VACÍOS O "No clasificado"
TDF_limpia <- table(datos$DATUM)  # cuenta cuantas veces aparece el dato en la variable                
TDF_limpia <- TDF_limpia[names(TDF_limpia) != ""] # se eliminan los valores vacios 

# 2. CONVERTIR LA TABLA EN UN DATAFRAME OPERATIVO
tabla_final_completa <- as.data.frame(TDF_limpia)  # se tranforma en una tabla de filas y columnas
colnames(tabla_final_completa) <- c("Datum", "ni") # se asignan nombres a las columnas

# 3. CALCULAR FRECUENCIA RELATIVA Y PORCENTAJE
tabla_final_completa$hi <- tabla_final_completa$ni / sum(tabla_final_completa$ni) # se calcula hi (frecuencia relativa)
tabla_final_completa$hi_porc <- round(tabla_final_completa$hi * 100, 2) # convierte a porcentaje y redondea a 2 decimales


# 4. AGREGAR FILA DE TOTAL
Total_completo <- data.frame(
  Datum = "TOTAL",
  ni = sum(tabla_final_completa$ni),
  hi = sum(tabla_final_completa$hi),
  hi_porc = sum(tabla_final_completa$hi) * 100
)

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

# Renderizar la tabla en el documento
tabla_datum_completa_gt
Tabla N° 2
Distribución de frecuencias por Sistema Datum
Datum ni hi hi_porc
NAD27 39 0.02995392 3
WGS84 1263 0.97004608 97
TOTAL 1302 1.00000000 100
Autores: Grupo 1
Semestre 2026 - 2026

3. VISUALIZACIÓN DE COMPARATIVAS BÁSICAS

3.1 GRÁFICA DE BARRAS LOCAL

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

3.2 GRÁFICA DE BARRAS GLOBAL

# 2. SEGUNDA GRÁFICA 
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")  #oculta el eje Y automático

# 3. Dibujar el eje Y personalizado incluyendo el 1366
axis(2, at = c(seq(0, 1200, by = 200), 1366), las = 1)

4. ANÁLISIS DE FRECUENCIA ABSOLUTA

ANÁLISIS DE FRECUENCIA ABSOLUTA

# 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" # por si hay algún dato sin clasificación 

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

5. ANÁLISIS DE FRECUENCIA RELATIVA

ANÁLISIS DE FRECUENCIA RELATIVA

# Preparar datos porcentuales basados en la frecuencia limpia
freq_rel_porc <- round(prop.table(freq_abs) * 100, 2) # Multiplicamos esas proporciones por 100 para convertirlas en porcentajes con dos decimales.

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

6. COMPOSICIÓN GLOBAL

GRÁFICA CIRCULAR

# Colores y etiquetas porcentuales para el gráfico circular
hi_datum_porc <- round(prop.table(freq_abs) * 100, 1) # Convertimos a porcentajes con 1 decimal..

# 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.

7. CONCLUSIÓN

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.