1. CARGA DE DATOS Y LIBRERÍAS

CARGA DE DATOS Y LIBRERÍAS

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

datos <- read.csv("C:/Users/Martin/Desktop/Estadistica/CMDB_Data.csv", 
                  header = TRUE, # Indica que la primera fila contiene los nombres de las variables.
                  sep = ";",     # Define que el punto y coma 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" ...
##  $ 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]
# Cargar las librerías 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)

2. TABLA DE DISTRIBUCIÓN DE PROBABILIDAD

# 1. CREAR LA TABLA DE FRECUENCIAS Y RANGOS (TOP)
tabla_coordinate_qual <- datos %>%
  # Limpiar espacios y reemplazar valores vacíos o NA por "No clasificado"
  mutate(coordinate_qual = trimws(COORDINATES_QUAL)) %>%
  mutate(coordinate_qual = ifelse(is.na(coordinate_qual) | coordinate_qual == "", "No clasificado", coordinate_qual)) %>%
  count(coordinate_qual, name = "ni") %>%
  mutate(
    hi = ni / sum(ni),
    P  = round(hi * 100, 2)
  ) %>%
  arrange(desc(ni)) %>%
  mutate(rank = row_number())

# 2. CREAR LA FILA DE TOTALES
total_coordinate_qual <- data.frame(
  coordinate_qual = "TOTAL",
  ni              = sum(tabla_coordinate_qual$ni),
  hi              = NA, # Se omite el total en estas columnas para mayor rigor técnico
  P               = NA, 
  rank            = NA
)

# 3. UNIR TODO EN UNA SOLA TABLA FINAL
tabla_coordinate_qual_final <- bind_rows(tabla_coordinate_qual, total_coordinate_qual)

# 4. GENERAR LA TABLA VISUAL
tabla_coordinate_qual_gt <- tabla_coordinate_qual_final %>%
  filter(rank <= 20 | is.na(rank)) %>% 
  select(-rank) %>%                    
  gt() %>%
  tab_header(
    title = md("**Tabla N° 2**"),      
    subtitle = md("Distribución de probabilidad por calidad de coordenadas")
  ) %>%
  tab_source_note(
    source_note = md("Autores: Grupo 1 <br> Semestre 2026 - 2026")
  ) %>%
  cols_label(
    coordinate_qual = "Calidad de coordenadas",                   
    ni              = "Frecuencia absoluta (ni)",
    hi              = "Frec. relativa",
    P               = "Probabilidad (%)"
  ) %>%
  fmt_number(columns = c(hi, P), decimals = 2) %>%
  fmt_number(columns = ni, decimals = 0) %>%
  sub_missing(columns = c(hi, P), missing_text = "") %>% # Deja las celdas NA completamente en blanco
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = coordinate_qual == "TOTAL") 
  ) %>%
  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_coordinate_qual_gt
Tabla N° 2
Distribución de probabilidad por calidad de coordenadas
Calidad de coordenadas Frecuencia absoluta (ni) Frec. relativa Probabilidad (%)
No clasificado 527 0.39 38.58
100 m 259 0.19 18.96
0 m 200 0.15 14.64
1000 m 144 0.11 10.54
10 m 119 0.09 8.71
500 m 62 0.05 4.54
10000 m 14 0.01 1.02
0m 10 0.01 0.73
5000 m 10 0.01 0.73
250 m 9 0.01 0.66
2000 m 6 0.00 0.44
300 m 4 0.00 0.29
200 m 1 0.00 0.07
Exact 1 0.00 0.07
TOTAL 1,366

Autores: Grupo 1
Semestre 2026 - 2026

3. GRÁFICAS DE DISTRIBUCIÓN DE PROBABILIDAD (CALIDAD DE COORDENADAS)

# 1. PREPARAR DATOS PARA EL GRÁFICO (EXCLUIR TOTAL Y MOSTRAR TOP 20)
# Usamos tabla_coordinate_qual_final generada en el paso anterior
coordinate_qual_plot <- tabla_coordinate_qual_final %>%
  filter(coordinate_qual != "TOTAL", rank <= 20) %>%
  mutate(
    id = row_number(),
    etiqueta = paste0(id, ". ", coordinate_qual)
  )

# 2. AJUSTAR LOS MÁRGENES DEL LIENZO
par(mar = c(5, 5, 4, 12), xpd = TRUE)

# 3. DIBUJAR LA GRÁFICA DE BARRAS
barras_coordinate_qual <- barplot(
  height    = coordinate_qual_plot$P,            # Usamos la columna 'P' (Probabilidad en %)
  main      = "Gráfica N° 1: Distribución de probabilidad por calidad de coordenadas (%)",
  xlab      = "Calidad de coordenadas (ID)",
  ylab      = "Probabilidad (%)",
  col       = "orchid",                
  border    = NA,
  names.arg = coordinate_qual_plot$id,           # Pone los números en el eje X
  cex.names = 1.0,
  las       = 1,                                 # Números del eje Y horizontales
  ylim      = c(0, max(coordinate_qual_plot$P, na.rm = TRUE) * 1.20) # 20% extra de espacio arriba
)

# 4. COLOCAR PORCENTAJES ENCIMA DE LAS BARRAS
text(
  x      = barras_coordinate_qual,               # Usa las coordenadas exactas de las barras
  y      = coordinate_qual_plot$P + 2.5,         # Sube un poquito el texto
  labels = paste0(coordinate_qual_plot$P, "%"),
  cex    = 0.85,
  col    = "black"
)

# 5. AGREGAR LA LEYENDA A LA DERECHA
legend(
  "topright",
  inset     = c(-0.55, 0),                       # Empuja la leyenda hacia la derecha, fuera del gráfico
  legend    = coordinate_qual_plot$etiqueta,
  fill      = "orchid",                          # Muestra un cuadrito de color al lado del nombre
  border    = NA,
  bty       = "n",                               # Quita el recuadro negro alrededor de la leyenda
  cex       = 0.8
)

4. CÁLCULO DE PROBABILIDAD (CALIDAD DE COORDENADAS)

# 1. IDENTIFICAR LA CALIDAD DE COORDENADAS CON MAYOR PROBABILIDAD 
tabla_sin_total <- tabla_coordinate_qual_final %>%
  filter(coordinate_qual != "TOTAL")

# Encontrar la calidad de coordenadas y su probabilidad máxima
coordinate_qual_mayor <- tabla_sin_total$coordinate_qual[which.max(tabla_sin_total$P)]
prob_mayor <- tabla_sin_total$P[which.max(tabla_sin_total$P)]

# 2. CONFIGURAR EL LIENZO DEL GRÁFICO DE TEXTO
par(mar = c(2, 2, 2, 2))  # Márgenes amplios para evitar cortes

# Crear un plot vacío (type = "n") sin ejes
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "", 
     xlim = c(0, 1), ylim = c(0, 1.1))

# 3. AGREGAR LOS TEXTOS AL LIENZO
# Título principal
text(
  x   = 0.5, 
  y   = 0.85, 
  labels = "CALIDAD DE COORDENADAS CON MAYOR PROBABILIDAD\n(estimación muestral)", 
  cex = 1.5, 
  col = "navy", 
  font = 2, 
  adj = 0.5
)

# Pregunta explicativa
text(
  x   = 0.5, 
  y   = 0.60, 
  labels = paste0(
    "¿Qué nivel de calidad o precisión de coordenadas\n", 
    "es más probable encontrar en los registros de muestras?\n"
  ), 
  cex = 1.3, 
  col = "black", 
  font = 1, 
  adj = 0.5
)

# Respuesta dinámica (usa las variables calculadas arriba)
text(
  x   = 0.5, 
  y   = 0.40, 
  labels = paste0(
    "Respuesta: ", coordinate_qual_mayor, "\n", 
    "Probabilidad estimada = ", sprintf("%.2f", prob_mayor), " %"
  ), 
  cex = 1.8, 
  col = "darkblue", 
  font = 2, 
  adj = 0.5
)

# 4. LÍNEA DECORATIVA SUTIL
abline(h = 0.75, col = "gray70", lty = 2, lwd = 1)

5. CONCLUSIÓN

Los resultados muestran que la categoría con mayor probabilidad en la variable de calidad de coordenadas es “No clasificado”, con una probabilidad estimada aproximada del 38,58%. Esto indica que una parte importante de los registros no presenta una clasificación explícita sobre la precisión o calidad de sus coordenadas.

Entre los registros que sí cuentan con una clasificación, la categoría “100 m” aparece como una de las más frecuentes. En términos inferenciales, si se selecciona aleatoriamente un registro de la base de datos, es más probable que su calidad de coordenadas no esté clasificada; por ello, esta variable evidencia la necesidad de revisar y completar la información espacial asociada a las muestras.