CARGA DE DATOS

CARGA DE DATOS

knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE,
  fig.align = "center"
)

# Carga de datos limpia para evitar errores de sintaxis
datos <- read.csv("C:/Users/Martin/Desktop/Estadistica/CMDB_Data.csv", header = TRUE, sep = ";", dec = ".", fileEncoding = "latin1")

# Limpieza básica para evitar valores en blanco o nulos
datos$SUBMITTER[datos$SUBMITTER == ""] <- "Desconocido"
datos$SUBMITTER[is.na(datos$SUBMITTER)] <- "Desconocido"
datos$SUBMITTER[tolower(datos$SUBMITTER) == "unknown"] <- "Desconocido"

# 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" ...
##  $ X0                   : 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" "0m" "" "" ...
##  $ 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 la variable

ANÁLISIS UNIVARIADO (TABLA GENERAL)

DISTRIBUCIÓN DE FRECUENCIAS POR REMITENTE (TOP 10)

# Cargar las librerías necesarias
library(dplyr)
library(gt)

# 1. CONTAR LAS MUESTRAS POR REMITENTE Y ELIMINAR DESCONOCIDOS
TDFSUB <- table(datos$SUBMITTER)
TDFSUB <- TDFSUB[names(TDFSUB) != "Desconocido"]

# 2. ORDENAR DE MAYOR A MENOR Y LIMITAR A UN MÁXIMO DE 10
TDFSUB_ORD <- sort(TDFSUB, decreasing = TRUE)
n_max <- min(10, length(TDFSUB_ORD)) # Garantiza que no haya más de 10 barras/filas
Top10_Sub <- head(TDFSUB_ORD, n_max)

# SOLUCIÓN AL ERROR: Construcción explícita del Data Frame
tabla_agrupada <- data.frame(
  Remitente = names(Top10_Sub),
  ni = as.numeric(Top10_Sub),
  stringsAsFactors = FALSE
)

# 3. CALCULAR PROPORCIONES Y PORCENTAJES (Sobre el total general válido)
total_muestras <- sum(TDFSUB_ORD)
tabla_agrupada$hi <- tabla_agrupada$ni / total_muestras
tabla_agrupada$hi_porc <- round(tabla_agrupada$hi * 100, 2)

# 4. CREAR LA FILA DE TOTALES DEL TOP MOSTRADO
Total <- data.frame(Remitente = paste("TOTAL (TOP", n_max, ")"),
                    ni = sum(tabla_agrupada$ni),
                    hi = sum(tabla_agrupada$hi),
                    hi_porc = sum(tabla_agrupada$hi_porc))

# 5. UNIR TODO EN UNA SOLA TABLA FINAL
tabla_final <- rbind(tabla_agrupada, Total)

# 6. MOSTRAR LA TABLA CON LA ESTÉTICA 'gt'
tabla_sub_gt <- tabla_final %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 1**"),
    subtitle = md(paste("Distribución de muestras (Top", n_max, "Remitentes)"))
  ) %>%
  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_sub_gt
Tabla N° 1
Distribución de muestras (Top 1 Remitentes)
Remitente ni hi hi_porc
Rare Metals Task 1366 1 100
TOTAL (TOP 1 ) 1366 1 100
Autores: Grupo 1
Semestre 2026 - 2026

CLASIFICACIÓN DE REMITENTES

TOP 5 VS OTROS REMITENTES

# 1. SEPARAR EL TOP 5 DE LOS DEMÁS REMITENTES
n_top5 <- min(5, length(TDFSUB_ORD))
Top5_Sub <- head(TDFSUB_ORD, n_top5)
Otros_Sub <- total_muestras - sum(Top5_Sub)

# 2. CREAR UN NUEVO CONJUNTO AGRUPADO SÓLO SI HAY MÁS DE 5 DATOS
if(Otros_Sub > 0) {
  Datos_Agrupados <- c(Top5_Sub, "Otros Remitentes" = Otros_Sub)
} else {
  Datos_Agrupados <- Top5_Sub
}

# 3. ESTRUCTURAR LA NUEVA TABLA EXPLÍCITAMENTE (Para evitar el mismo error)
tabla_top5 <- data.frame(
  Remitente = names(Datos_Agrupados),
  ni = as.numeric(Datos_Agrupados),
  stringsAsFactors = FALSE
)

# 4. CALCULAR PROPORCIONES
tabla_top5$hi <- tabla_top5$ni / sum(tabla_top5$ni)
tabla_top5$hi_porc <- round(tabla_top5$hi * 100, 2)

# 5. FILA DE TOTALES GENERALES
Total_Clasif <- data.frame(Remitente = "TOTAL GENERAL", 
                           ni = sum(tabla_top5$ni), 
                           hi = sum(tabla_top5$hi), 
                           hi_porc = sum(tabla_top5$hi_porc))

tabla_final_clasif <- rbind(tabla_top5, Total_Clasif)

# 6. ACOPLAR Y MOSTRAR LA TABLA CON LA ESTÉTICA 'gt'
tabla_clasif_gt <- tabla_final_clasif %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 2**"),
    subtitle = md("Comparativa de los remitentes principales vs el resto")
  ) %>%
  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_clasif_gt
Tabla N° 2
Comparativa de los remitentes principales vs el resto
Remitente ni hi hi_porc
Rare Metals Task 1366 1 100
TOTAL GENERAL 1366 1 100
Autores: Grupo 1
Semestre 2026 - 2026

VISUALIZACIÓN DE COMPARATIVAS BÁSICAS

GRÁFICA DE BARRAS LOCAL Y GLOBAL (TOP 10)

# Ajustar margen inferior generoso por si los nombres de instituciones/personas son largos
par(mar = c(12, 4, 4, 2) + 0.1)

limite_y_local <- max(Top10_Sub) * 1.2

# 1. PRIMERA GRÁFICA (LOCAL)
barplot(Top10_Sub, 
        main = paste("Gráfica 1: Top", n_max, "Remitentes (LOCAL)"), 
        ylab = "Cantidad de muestras aportadas",                               
        col = "pink", 
        las = 2,               # Nombres rotados en vertical
        cex.names = 0.7,       
        ylim = c(0, limite_y_local))    

# 2. SEGUNDA GRÁFICA (GLOBAL - EJE Y AL TOTAL DE DATOS USADOS)
# 'total_muestras' es el 100% de la base de datos validada
barplot(Top10_Sub, 
        main = paste("Gráfica 2: Top", n_max, "Remitentes (GLOBAL)"),
        ylab = "Cantidad de muestras totales",
        col = "skyblue",
        las = 2,
        cex.names = 0.7,
        ylim = c(0, total_muestras), # El techo es obligatoriamente el total
        yaxt = "n") 

# 3. Dibujar el eje Y personalizado anclado al total
puntos_eje <- unique(round(c(seq(0, total_muestras, length.out = 5), total_muestras)))
axis(2, at = puntos_eje, las = 1)

ANÁLISIS DE FRECUENCIA ABSOLUTA

ANÁLISIS DE FRECUENCIA ABSOLUTA

par(mar = c(12, 4, 4, 2) + 0.1)
freq_abs <- Top10_Sub

# 2. DIBUJAR LA GRÁFICA Y GUARDAR SUS COORDENADAS
bar_centers <- barplot(freq_abs, 
                       main = paste("Gráfica 3: Frecuencia Absoluta (Top", n_max, ")"),
                       ylab = "Cantidad aportada",
                       col = "orange",
                       las = 2,          
                       cex.names = 0.7,  
                       ylim = c(0, max(freq_abs) * 1.2))

# 3. PONER LAS ETIQUETAS NUMÉRICAS ENCIMA DE LAS BARRAS
text(x = bar_centers,                    
     y = freq_abs,         
     labels = freq_abs,                  
     pos = 3,                            
     cex = 0.8,
     col = "black")

ANÁLISIS DE FRECUENCIA RELATIVA (PORCENTAJES)

ANÁLISIS DE FRECUENCIA RELATIVA (PORCENTAJES)

par(mar = c(12, 4, 4, 2) + 0.1)

# 1. TRANSFORMAR LAS CANTIDADES EN PORCENTAJES (SOBRE EL TOTAL GENERAL)
freq_rel_porc <- round((Top10_Sub / total_muestras) * 100, 2)  

# 2. DIBUJAR LAS BARRAS Y PERSONALIZAR EL LIENZO
bar_centers_rel <- barplot(freq_rel_porc, 
                           main = paste("Gráfica 4: Distribución Porcentual (Top", n_max, ")"), 
                           ylab = "Porcentaje del Total (%)", 
                           col = "orchid", 
                           las = 2, 
                           cex.names = 0.7,
                           ylim = c(0, max(freq_rel_porc) * 1.3), 
                           yaxt = "n",       
                           yaxs = "i")       

# 3. CONSTRUIR UN EJE Y PERSONALIZADO
axis(2, at = seq(0, max(freq_rel_porc) + 2, length.out = 5), 
     labels = paste0(round(seq(0, max(freq_rel_porc) + 2, length.out = 5), 1), "%"), 
     las = 1, cex.axis = 0.8) 

# 4. COLOCAR LAS ETIQUETAS CON EL SÍMBOLO "%" EN LAS BARRAS
text(x = bar_centers_rel, 
     y = freq_rel_porc, 
     labels = paste0(freq_rel_porc, "%"), 
     pos = 3, 
     cex = 0.8, 
     col = "black")

COMPOSICIÓN GLOBAL (GRÁFICA CIRCULAR)

GRÁFICA CIRCULAR

# 1. CALCULAR PORCENTAJES Y COLORES
hi_pie_porc <- round(prop.table(Datos_Agrupados) * 100, 1) 
colores <- c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3", "#A6D854", "#D3D3D3")
# Si hay menos de 6 categorías, ajustamos los colores para evitar advertencias
colores <- colores[1:length(Datos_Agrupados)] 
etiquetas_leyenda <- paste0(names(Datos_Agrupados), " (", hi_pie_porc, "%)")

# 2. AJUSTAR EL LIENZO DE TRABAJO
par(mar = c(2, 2, 3, 16), xpd = TRUE)

# 3. DIBUJAR LA GRÁFICA CIRCULAR 
pie(hi_pie_porc, 
    labels = NA,  
    col = colores, 
    main = "Gráfica 5: Proporción por Remitente", 
    radius = 0.9) 

# 4. MARCAR LAS COORDENADAS DEL CUADRO DE LEYENDA (Ajustadas a nombres largos)
x0 <- 1.1    
x1 <- 3.5    
y1 <- 0.9    
y0 <- -0.5   

# 5. DIBUJAR EL CUADRO BLANCO DE FONDO
rect(xleft = x0, ybottom = y0, xright = x1, ytop = y1, col = "white", border = "black")

# 6. PONER EL TÍTULO DENTRO DE LA TARJETA
text(x = (x0 + x1)/2, y = y1 - 0.15, labels = "Remitentes de Datos", font = 2, cex = 0.9)

# 7. LLENAR LA TARJETA CON LOS COLORES Y PORCENTAJES
legend(x = (x0 + x1)/2,             
       y = y1 - 0.25,      
       legend = etiquetas_leyenda, 
       fill = colores, 
       cex = 0.65,          
       bty = "n",                    
       xjust = 0.5,                  
       y.intersp = 1.4)

CONCLUSIÓN

CONCLUSIÓN DE LA VARIABLE SUBMITTER

El análisis univariado de la variable SUBMITTER revela la estructura de autoría y contribución dentro de la base de datos minera. Al observar la Gráfica 2 (Global), cuyo eje escala al total absoluto de la muestra, queda en evidencia el peso específico de las principales instituciones o investigadores que remiten los datos. Se aprecia que el esfuerzo de recolección y catalogación no es equitativo; un número muy reducido de entidades concentra la mayor parte de las aportaciones al registro de minerales críticos. Esto resalta la dependencia de la base de datos sobre unos pocos actores clave para mantener la densidad de la información exploratoria.