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 en el nombre del distrito
datos$DISTRICT_NAME[datos$DISTRICT_NAME == ""] <- "Desconocido"
datos$DISTRICT_NAME[is.na(datos$DISTRICT_NAME)] <- "Desconocido"
datos$DISTRICT_NAME[tolower(datos$DISTRICT_NAME) == "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" "Desconocido" ...
## $ 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
DISTRIBUCIÓN DE FRECUENCIAS POR DISTRITO (TOP 15)
# Cargar las librerías necesarias
library(dplyr)
library(gt)
# 1. CONTAR LAS MUESTRAS POR DISTRITO Y ELIMINAR DESCONOCIDOS
TDFDIST <- table(datos$DISTRICT_NAME)
TDFDIST <- TDFDIST[names(TDFDIST) != "Desconocido"]
# 2. ORDENAR DE MAYOR A MENOR Y TOMAR EL TOP 15 PARA LA TABLA GENERAL
TDFDIST_ORD <- sort(TDFDIST, decreasing = TRUE)
tabla_agrupada <- as.data.frame(head(TDFDIST_ORD, 15))
colnames(tabla_agrupada) <- c("Distrito", "ni")
# 3. CALCULAR PROPORCIONES Y PORCENTAJES (Sobre el total general válido)
total_muestras <- sum(TDFDIST_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 15
Total <- data.frame(Distrito = "TOTAL (TOP 15)",
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_dist_gt <- tabla_final %>%
gt() %>%
tab_header(
title = md("**Tabla N° 1**"),
subtitle = md("Distribución de muestras de minerales críticos (Top 15 Distritos)")
) %>%
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_dist_gt
| Tabla N° 1 | |||
| Distribución de muestras de minerales críticos (Top 15 Distritos) | |||
| Distrito | ni | hi | hi_porc |
|---|---|---|---|
| Yerington | 56 | 0.04351204 | 4.35 |
| Warren | 43 | 0.03341103 | 3.34 |
| Bingham | 41 | 0.03185703 | 3.19 |
| Butte | 37 | 0.02874903 | 2.87 |
| Cripple Creek | 34 | 0.02641803 | 2.64 |
| Pima | 34 | 0.02641803 | 2.64 |
| Gold Hill | 26 | 0.02020202 | 2.02 |
| Kiruna | 24 | 0.01864802 | 1.86 |
| Pioneer | 20 | 0.01554002 | 1.55 |
| Eureka | 18 | 0.01398601 | 1.40 |
| Miami-Inspiration | 18 | 0.01398601 | 1.40 |
| Terraville-Homestake | 18 | 0.01398601 | 1.40 |
| Carajas | 16 | 0.01243201 | 1.24 |
| Bunker Hill | 14 | 0.01087801 | 1.09 |
| Cochise | 14 | 0.01087801 | 1.09 |
| TOTAL (TOP 15) | 413 | 0.32090132 | 32.08 |
| Autores: Grupo 1 Semestre 2026 - 2026 |
|||
TOP 5 VS OTROS DISTRITOS
# 1. SEPARAR EL TOP 5 DE LOS DEMÁS DISTRITOS
Top5_Dist <- head(TDFDIST_ORD, 5)
Otros_Dist <- sum(TDFDIST_ORD) - sum(Top5_Dist)
# 2. CREAR UN NUEVO CONJUNTO AGRUPADO
Datos_Agrupados <- c(Top5_Dist, "Otros Distritos" = Otros_Dist)
# 3. ESTRUCTURAR LA NUEVA TABLA
tabla_top5 <- as.data.frame(Datos_Agrupados)
colnames(tabla_top5) <- c("ni")
tabla_top5$Distrito <- rownames(tabla_top5)
tabla_top5 <- tabla_top5[, c("Distrito", "ni")] # Reordenar columnas
# 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(Distrito = "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 5 distritos 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 5 distritos principales vs el resto | |||
| Distrito | ni | hi | hi_porc |
|---|---|---|---|
| Yerington | 56 | 0.04351204 | 4.35 |
| Warren | 43 | 0.03341103 | 3.34 |
| Bingham | 41 | 0.03185703 | 3.19 |
| Butte | 37 | 0.02874903 | 2.87 |
| Cripple Creek | 34 | 0.02641803 | 2.64 |
| Otros Distritos | 1076 | 0.83605284 | 83.61 |
| TOTAL GENERAL | 1287 | 1.00000000 | 100.00 |
| Autores: Grupo 1 Semestre 2026 - 2026 |
|||
GRÁFICA DE BARRAS LOCAL Y GLOBAL (TOP 10)
# Ajustar margen inferior por si los nombres de los distritos son largos
par(mar = c(12, 4, 4, 2) + 0.1)
# GARANTIZAR UN MÁXIMO DE 10 BARRAS
num_barras <- min(length(TDFDIST_ORD), 10)
Top_Graficas <- head(TDFDIST_ORD, num_barras)
limite_y_local <- max(Top_Graficas) * 1.2
# 1. PRIMERA GRÁFICA (LOCAL)
barplot(Top_Graficas,
main = "Gráfica 1: Top 10 Distritos (LOCAL)",
ylab = "Cantidad de muestras",
col = "pink",
las = 2, # Nombres en vertical
cex.names = 0.7,
ylim = c(0, limite_y_local))
# 2. SEGUNDA GRÁFICA (GLOBAL - EJE Y AL TOTAL DE DATOS)
# 'total_muestras' representa el 100% de los datos válidos analizados
barplot(Top_Graficas,
main = "Gráfica 2: Top 10 Distritos (GLOBAL)",
ylab = "Cantidad de muestras totales",
col = "skyblue",
las = 2,
cex.names = 0.7,
ylim = c(0, total_muestras), # El techo es el total de datos
yaxt = "n")
# 3. Dibujar el eje Y personalizado
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 (TOP 10)
par(mar = c(12, 4, 4, 2) + 0.1)
freq_abs <- Top_Graficas
# 2. DIBUJAR LA GRÁFICA Y GUARDAR SUS COORDENADAS
bar_centers <- barplot(freq_abs,
main = "Gráfica 3: Frecuencia Absoluta (Top 10 Distritos)",
ylab = "Cantidad",
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)
par(mar = c(12, 4, 4, 2) + 0.1)
# 1. TRANSFORMAR LAS CANTIDADES EN PORCENTAJES SOBRE EL TOTAL GENERAL
freq_rel_porc <- round((Top_Graficas / total_muestras) * 100, 2)
# 2. DIBUJAR LAS BARRAS Y PERSONALIZAR EL LIENZO
bar_centers_rel <- barplot(freq_rel_porc,
main = "Gráfica 4: Distribución Porcentual (Top 10 Distritos)",
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")
GRÁFICA CIRCULAR
# 1. ALISTAR LOS DATOS (TOP 5 y el resto)
Datos_Pie <- c(Top5_Dist, "Otros Distritos" = Otros_Dist)
hi_pie_porc <- round(prop.table(Datos_Pie) * 100, 1)
colores <- c("#66C2A5", "#FC8D62", "#8DA0CB", "#E78AC3", "#A6D854", "#D3D3D3")
etiquetas_leyenda <- paste0(names(Datos_Pie), " (", hi_pie_porc, "%)")
# 2. AJUSTAR EL LIENZO DE TRABAJO
par(mar = c(2, 2, 3, 14), xpd = TRUE)
# 3. DIBUJAR LA GRÁFICA CIRCULAR
pie(hi_pie_porc,
labels = NA,
col = colores,
main = "Gráfica 5: Proporción de Distritos (Top 5 vs Otros)",
radius = 0.9)
# 4. MARCAR LAS COORDENADAS DEL CUADRO DE LEYENDA
x0 <- 1.1
x1 <- 2.8
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 = "Distritos Mineros", 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.7,
bty = "n",
xjust = 0.5,
y.intersp = 1.4)
## CONCLUSIÓN CONCLUSIÓN DE LA VARIABLE
DISTRICT_NAME
Al analizar la variable univariada correspondiente al nombre del distrito (DISTRICT_NAME), se evidencia la sectorización de la actividad de recolección de muestras. Aunque existen múltiples distritos catalogados en la base de datos, el análisis de frecuencias (visible en la Gráfica 2 Global) revela una distribución fuertemente concentrada. El top 10 de distritos aglutina una porción significativa del muestreo total, dejando a la categoría residual (“Otros Distritos”) con una dispersión de datos mucho más fragmentada. Esto sugiere que las campañas de exploración geoquímica archivadas se focalizaron intensivamente en unas pocas zonas geológicas clave, las cuales representan áreas de interés prioritario para futuros estudios de viabilidad mineral.