CARGA DE DATOS

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

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

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

VISUALIZACIÓN DE COMPARATIVAS BÁSICAS

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

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)

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)

COMPOSICIÓN GLOBAL (GRÁFICA CIRCULAR)

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.

CONCUSIÓ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.