Parciar I: Recursos minerales

Antecedentes

Para el desarrollo de este trabajo se ha empleado una base de datos con información de una serie de muestras tomadas en un yacimiento mineral. Cada muestra despliega la concentración de varios elementos, en partes por millon, que se hallaron dentro del depósito.

En primera instancia, se cargarón las librerias que se emplearon a lo largo del estudio para generar el código y las gráficas correspondientes.

Análisis exploratorio

Se realizó un análisis exploratiro de los datos y la correspondiente limpieza y depuración de los mismos. Para hacerlo fue necesario cargar la base de datos a modo de data.frame. También, se empleó la función head() para hacer una primera inspeción a la matriz assay y su conjunto de datos.

La información encontrada es, naturalmente, corespondiente con la descripción inicial. Es decir, en su mayoría el data.frame está compuesto por las partes por millon de los elementos que tienen las muestras de la columna Sample_ID. Sin embargo, hay información en porcentajes que debe pasarse a concentración [ppm].Para completar esto se realiza una conversión de los faltantes y se reescribe assay.

#Se reescribe la variable para incluir la conversión de % a ppm
assay= assay %>% mutate(Fe_ppm=`Fe_%`*10000, CA_ppm=`CA_%`*10000, P_ppm=`P_%`*10000, Mg_ppm=`Mg_ %`*10000, Ti_ppm=`Ti_%`*10000, Al_ppm=`Al_%`*10000, Na_ppm=`Na_%`*10000, K_ppm=`K_%`*10000, S_ppm=`S_%`*10000)

#También se reescribe para incluir algunas conversiones de ppm a %
assay=assay %>% mutate(`Cr_%`=Cr_ppm/10000, `Pb_%`=Pb_ppm/10000, `Ni_%`=Ni_ppm/10000)

Parte de la información está mezclada con datos irrelevantes para estudio que se pretende realizar. Datos como Hole_ID, From, To, Length o Wgt_kg son metadatos prescindibles. También, para algunos elementos minerales la proporción se expresa por medio de porcentajes, lo cual es útil, pero se precisa separarla para tener un orden.

En consecuencia, creó un nuevo data.frame que sólo contuviese las partes por millón de cada elemento.

#Minerales con elementos en partes por millon [ppm]

Mineral_ppm = assay %>%  select(contains("ppm")) 

También, siguiendo el mismo principio, se seleccionaron los datos de los porcentajes para agruparlos en un nuevo data.frame.

#Porcentaje de concentración de los elementos [%]

Mineral_porcent= assay %>% select(contains("%"))
head(Mineral_porcent)
## # A tibble: 6 × 13
##   `Cu_%` `Fe_%` `CA_%` `P_%` `Mg_ %` `Ti_%` `Al_%` `Na_%` `K_%` `S_%` `Cr_%`
##    <dbl>  <dbl>  <dbl> <dbl>   <dbl>  <dbl>  <dbl>  <dbl> <dbl> <dbl>  <dbl>
## 1 0.137    3.79   0.7  0.152    0.82  0.429   8.36   2.83  2.47   0.1 0.003 
## 2 0.0199   3.57   0.72 0.148    0.92  0.409   7.61   2.32  2.55   0.1 0.0029
## 3 2.47     2.87   1.27 0.132    0.44  0.362   7.19   1.06  2.59   0.1 0.0027
## 4 0.0263   4.68   1.34 0.203    1.47  0.535   8.38   3.9   2.27   0.1 0.0032
## 5 0.0825   4.05   1.72 0.22     2.28  0.575   8.94   2.98  2.62   0.1 0.0032
## 6 0.326    3.27   1.56 0.195    1.24  0.496   7.5    2.19  2.46   0.1 0.0029
## # ℹ 2 more variables: `Pb_%` <dbl>, `Ni_%` <dbl>

Es posible apreciar que algunos de los elementos que se encuentran dentro de la variable Mineral_porcent están asociados a minerales de interes ecónomico o lo son. Se sospecha que está es la razón por la que se expresó su valor en porcentaje ya que de esta manera se podría interpretar más claramente la porporción de cada uno de estos elementos dentro de la muestra.

Limpieza de datos

Se corrubora que los datos se encuentren limpios y sin errores. Es pertinente realizar esto, puesto que, de lo contrario, eventualmente se generarían problemas en el tratamiento de datos. Esto se ejecuta tanto para los data.frames creados anteriormente como para la base de datos general.

#Para los datos de la base de datos general 
sum(is.null(assay))
## [1] 0
#Mineral_porcent
sum(is.null(Mineral_porcent))
## [1] 0
#Mineral_ppm
sum(is.null(Mineral_porcent))
## [1] 0

La base de datos no contiene valores vacíos y, por lo tanto, tampoco los data.frame creados. Gracias a esto será posible continuar trabajando sin preocupaciones.

Parte I - Interpretación de datos de assay

Metales económicamente rentables

Se busca definir las tres muestras con mayores concentraciones para elementos economicamente rentables. Por este motivo se relaiza un filtro y se crea una serie de variables que contengan aquellas tres muestras con mayor concentración en ppm. Esta información también se asocia con el Hole_id que puede proporcionar información relevante con respecto a cuál es el sitio en que hay mayor concentración de elementos de interes económico.

# Cobre 
assay %>% arrange(desc(Cu_ppm)) %>% select(Cu_ppm, Sample_ID, Hole_Id) %>% head(3)
## # A tibble: 3 × 3
##   Cu_ppm Sample_ID Hole_Id
##    <dbl> <chr>     <chr>  
## 1  10000 G-0003    MC00001
## 2  10000 G-0009    CA00003
## 3  10000 G-0012    CA00005
#Hierro 
assay %>% arrange(desc(Fe_ppm)) %>% select(Fe_ppm, Sample_ID, Hole_Id) %>% head(3)
## # A tibble: 3 × 3
##   Fe_ppm Sample_ID Hole_Id
##    <dbl> <chr>     <chr>  
## 1  80300 G-1965    CA00143
## 2  75900 G-2357    CA00144
## 3  70900 G-2578    CA00139
# Aluminio 
assay %>% arrange(desc(Al_ppm)) %>% select(Al_ppm, Sample_ID, Hole_Id) %>% head(3)
## # A tibble: 3 × 3
##   Al_ppm Sample_ID Hole_Id
##    <dbl> <chr>     <chr>  
## 1 116600 G-1157    CA00115
## 2 116600 G-1562    CA00142
## 3 110400 G-0084    CA00017
#Niquel
assay %>% arrange(desc(Ni_ppm)) %>% select(Ni_ppm, Sample_ID, Hole_Id) %>% head(3)
## # A tibble: 3 × 3
##   Ni_ppm Sample_ID Hole_Id
##    <dbl> <chr>     <chr>  
## 1   79.7 G-1956    CA00143
## 2   78.1 G-2021    CA00143
## 3   76.2 G-2026    CA00143
# Cromo 
assay %>% arrange(desc(Cr_ppm)) %>% select(Cr_ppm, Sample_ID, Hole_Id) %>% head(3)
## # A tibble: 3 × 3
##   Cr_ppm Sample_ID Hole_Id
##    <dbl> <chr>     <chr>  
## 1    125 G-2123    CA00143
## 2    113 G-2357    CA00144
## 3    104 G-0013    CA00005
# Pb
assay %>% arrange(desc(Pb_ppm)) %>% select(Pb_ppm, Sample_ID, Hole_Id) %>% head(3)
## # A tibble: 3 × 3
##   Pb_ppm Sample_ID Hole_Id
##    <dbl> <chr>     <chr>  
## 1  1368. G-2717    CA00146
## 2   925. G-0006    CA00002
## 3   826. G-2719    CA00146

Los lugares en los que se encuentran los núcleos CA00144, CA00143 y CA00142 son sitios en los que aparecen altas concentraciones tanto de Cromo, como de Niquel, Aluminio y Hierro. Si queremos estudiar esto más a detalle podría ser interesante estudiar una muestra que tenga altas concentraciones de estos cuatro elementos. Por lo tanto, se creó un filtro para analizar tres muestras que contengan altas concentraciones de estos elementos simultaneamente.

assay %>% filter(Cr_ppm >= 90 & Ni_ppm >= 74 & Al_ppm >=85000 & Fe_ppm >= 6000) %>% select(Hole_Id, Sample_ID, Cr_ppm, Ni_ppm, Al_ppm, Fe_ppm)
## # A tibble: 7 × 6
##   Hole_Id Sample_ID Cr_ppm Ni_ppm Al_ppm Fe_ppm
##   <chr>   <chr>      <dbl>  <dbl>  <dbl>  <dbl>
## 1 CA00005 G-0013       104   74.7  88800  69500
## 2 CA00143 G-2017        90   74.8  88900  64800
## 3 CA00143 G-2021        98   78.1  99900  62700
## 4 CA00143 G-2023        93   75.5  92700  67300
## 5 CA00143 G-2024        98   74    98100  69000
## 6 CA00143 G-2026        95   76.2  89900  63900
## 7 CA00144 G-2357       113   74    88900  75900

La información encontrada concuerda con el Hole_Id CA00143, en consecuencia, se recomidenda estudiar esta zona ya que tiene una alta concentración de de estos cuatro minerales de interes económico. Finalmente, es curioso notar como aquel sitio que tiene mayores concentraciones es el CA00005, es también aquel que posee las concentraciones más altas de Cobre.

Concentraciones de Cobre y Niquel

Se precica identificar cualquier muestra del campo Sample_ID que contenga una proporción de cobre (Cu) superior al 10% y Níquel (Ni) superior a 5ppm. Es decir, se tienen que hallar todas aquellas muestras que cumplan ambos criterios simultáneamente.

Primero se realiza una revisión general de ambas matrices, tanto la de Niquel como Cobre.

Est_Cu_percent= summary(assay$`Cu_%`)
Est_Cu_percent
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.00015 0.00401 0.00686 0.12757 0.02242 7.54800
Est_Ni_ppm= summary(assay$Ni_ppm)
Est_Ni_ppm
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.30   22.50   24.60   27.52   27.20   79.70

Al revisar los datos se comprendió que no existe ningún valor de cobre con una concentración superior al 10%. De hecho, el dato máximo de concentración en porcentaje de cobre es de tan sólo 7.54. Por otro lado, existe una alta canitdad de valores de concentración de Niquel mayores a \(5ppm\) debido a que la media y mediana son superiores a 20. Por este motivo se considero pertinente cambiar un poco los parámetros para la busqueda de muestras.

Entonces, se buscarán todas aquellas muestras que cumplan que contenga una proporción de cobre (Cu) superior al 3% (los cuales son datos atípicos ya que son superiores al tercer cuartil) y Níquel (Ni) mayor a 20ppm

#Filtrar los datos 
Ni_Cu=  assay %>%
        filter(`Cu_%`>3 & Ni_ppm > 5) %>%
        select(Sample_ID, Hole_Id, `Cu_%`, Ni_ppm)

#Presentación de los valores 
Ni_Cu
## # A tibble: 11 × 4
##    Sample_ID Hole_Id `Cu_%` Ni_ppm
##    <chr>     <chr>    <dbl>  <dbl>
##  1 G-0012    CA00005   5.70   27.6
##  2 G-1007    CA00020   6.24   14  
##  3 G-1204    CA00122   3.72   61.7
##  4 G-1219    CA00125   3.57   65.1
##  5 G-2747    CA00147   3.71   40.9
##  6 G-2748    CA00147   7.55   45.3
##  7 G-2749    CA00147   3.77   37.8
##  8 G-2805    CA00150   3.63   43.4
##  9 G-2806    CA00150   3.02   53  
## 10 G-2816    CA00151   4.02   56  
## 11 G-2915    CA00156   3.18   29.4

Gracias a la función dim(Ni_Cu) se determió que existe un total de 11 muestras que cumplen con los criterios propuestos anteriormente. También se consideró útil asociar el Sample_ID con el Hole_ID con el fin de relacionar cada muestra con un espacio y además notar si hay núcleos que presenten más esta característica. Por ejemplo, el espacio de muestreo CA00147 presenta una cantidad atípica de muestras con este criterio.

Pautas estadísticas de clasificación de elementos

Para conocer el mineral principal que pudiera ser encontrado dentro del yamiento es primoldial discernir los elementos más comunes y en mayor concentración. Por lo tanto, se realizó un análisis estadístico de la variable Mineral_porcent con el fin de discriminar los datos.

#Resumen estadístico de los elementos presentes en Mineral_porcent
summary(Mineral_ppm)
##      Mo_ppm             Cu_ppm            Pb_ppm            Zn_ppm     
##  Min.   :  0.1000   Min.   :    1.5   Min.   :   1.30   Min.   :  7.0  
##  1st Qu.:  0.5000   1st Qu.:   40.1   1st Qu.:   6.20   1st Qu.: 84.0  
##  Median :  0.6000   Median :   68.6   Median :   7.80   Median : 95.0  
##  Mean   :  0.9477   Mean   :  852.6   Mean   :  18.76   Mean   :100.4  
##  3rd Qu.:  0.7000   3rd Qu.:  224.2   3rd Qu.:  11.20   3rd Qu.:111.0  
##  Max.   :257.1000   Max.   :10000.0   Max.   :1368.10   Max.   :247.0  
##                                                                        
##      Ag_ppm           Ni_ppm          Co_ppm          Mn_ppm      
##  Min.   : 0.050   Min.   : 1.30   Min.   : 0.50   Min.   :  71.0  
##  1st Qu.: 0.100   1st Qu.:22.50   1st Qu.:14.40   1st Qu.: 605.0  
##  Median : 0.100   Median :24.60   Median :15.90   Median : 816.0  
##  Mean   : 1.127   Mean   :27.52   Mean   :16.63   Mean   : 852.2  
##  3rd Qu.: 0.200   3rd Qu.:27.20   3rd Qu.:17.60   3rd Qu.:1029.0  
##  Max.   :73.900   Max.   :79.70   Max.   :57.90   Max.   :3126.0  
##                                                                   
##      As_ppm           U_ppm           Th_ppm           Sr_ppm     
##  Min.   : 0.500   Min.   :0.300   Min.   : 0.400   Min.   : 43.0  
##  1st Qu.: 1.000   1st Qu.:1.400   1st Qu.: 6.100   1st Qu.:193.0  
##  Median : 2.000   Median :1.600   Median : 7.000   Median :282.0  
##  Mean   : 2.185   Mean   :1.575   Mean   : 6.768   Mean   :296.7  
##  3rd Qu.: 3.000   3rd Qu.:1.800   3rd Qu.: 7.800   3rd Qu.:391.0  
##  Max.   :43.000   Max.   :7.200   Max.   :15.400   Max.   :790.0  
##                                                                   
##      Cd_ppm            Sb_ppm           Bi_ppm            V_ppm    
##  Min.   :  0.050   Min.   :0.0500   Min.   :0.05000   Min.   :  4  
##  1st Qu.:  0.200   1st Qu.:0.1000   1st Qu.:0.05000   1st Qu.: 93  
##  Median :  0.400   Median :0.1000   Median :0.10000   Median :102  
##  Mean   :  4.804   Mean   :0.1256   Mean   :0.09482   Mean   :107  
##  3rd Qu.:  0.900   3rd Qu.:0.1000   3rd Qu.:0.10000   3rd Qu.:118  
##  Max.   :736.300   Max.   :8.9000   Max.   :1.10000   Max.   :242  
##                                                                    
##      La_ppm          Cr_ppm           Ba_ppm           W_ppm         
##  Min.   : 2.90   Min.   :  5.00   Min.   :  82.0   Min.   :  0.0500  
##  1st Qu.:34.30   1st Qu.: 30.00   1st Qu.: 535.0   1st Qu.:  0.5000  
##  Median :38.70   Median : 33.00   Median : 653.0   Median :  0.7000  
##  Mean   :38.25   Mean   : 36.91   Mean   : 701.5   Mean   :  0.8815  
##  3rd Qu.:42.40   3rd Qu.: 38.00   3rd Qu.: 769.0   3rd Qu.:  0.9000  
##  Max.   :75.90   Max.   :125.00   Max.   :8793.0   Max.   :149.0000  
##                                                                      
##      Zr_ppm          Ce_ppm           Sn_ppm           Y_ppm      
##  Min.   :  3.3   Min.   :  6.00   Min.   : 0.200   Min.   : 2.90  
##  1st Qu.:228.2   1st Qu.: 64.00   1st Qu.: 1.600   1st Qu.:14.60  
##  Median :251.0   Median : 70.00   Median : 1.800   Median :16.10  
##  Mean   :248.7   Mean   : 69.47   Mean   : 1.783   Mean   :16.46  
##  3rd Qu.:271.3   3rd Qu.: 76.00   3rd Qu.: 1.900   3rd Qu.:17.70  
##  Max.   :381.2   Max.   :187.00   Max.   :31.900   Max.   :31.30  
##                                                                   
##      Nb_ppm          Ta_ppm          Be_ppm          Sc_ppm    
##  Min.   : 0.50   Min.   :0.100   Min.   :1.000   Min.   : 1.0  
##  1st Qu.:17.80   1st Qu.:1.200   1st Qu.:2.000   1st Qu.: 9.0  
##  Median :20.20   Median :1.400   Median :2.000   Median :10.0  
##  Mean   :19.92   Mean   :1.341   Mean   :1.814   Mean   :10.5  
##  3rd Qu.:22.20   3rd Qu.:1.500   3rd Qu.:2.000   3rd Qu.:11.0  
##  Max.   :31.50   Max.   :5.200   Max.   :4.000   Max.   :23.0  
##                                                                
##      Li_ppm           Rb_ppm           Hf_ppm           In_ppm       
##  Min.   :  2.60   Min.   :  4.10   Min.   : 0.100   Min.   :0.05000  
##  1st Qu.: 25.90   1st Qu.: 54.10   1st Qu.: 5.200   1st Qu.:0.05000  
##  Median : 35.50   Median : 70.70   Median : 5.800   Median :0.05000  
##  Mean   : 35.62   Mean   : 72.37   Mean   : 5.736   Mean   :0.05215  
##  3rd Qu.: 43.30   3rd Qu.: 89.00   3rd Qu.: 6.200   3rd Qu.:0.05000  
##  Max.   :106.40   Max.   :188.10   Max.   :10.100   Max.   :0.12000  
##                                                                      
##      Ge_ppm           Re_ppm           Se_ppm          Te_ppm      
##  Min.   :0.0500   Min.   :0.0050   Min.   :1.000   Min.   :0.5000  
##  1st Qu.:0.0600   1st Qu.:0.0050   1st Qu.:1.000   1st Qu.:0.5000  
##  Median :0.0900   Median :0.0050   Median :1.000   Median :0.5000  
##  Mean   :0.1147   Mean   :0.0141   Mean   :1.007   Mean   :0.5004  
##  3rd Qu.:0.1300   3rd Qu.:0.0050   3rd Qu.:1.000   3rd Qu.:0.5000  
##  Max.   :0.7100   Max.   :8.5870   Max.   :3.000   Max.   :1.2000  
##                   NA's   :2                                        
##      Tl_ppm           Fe_ppm          CA_ppm           P_ppm     
##  Min.   :0.5000   Min.   : 1700   Min.   :  2200   Min.   : 250  
##  1st Qu.:0.5000   1st Qu.:37900   1st Qu.:  9100   1st Qu.:1490  
##  Median :0.5000   Median :41200   Median : 12100   Median :1750  
##  Mean   :0.6091   Mean   :42117   Mean   : 15640   Mean   :1742  
##  3rd Qu.:0.7000   3rd Qu.:44700   3rd Qu.: 17300   3rd Qu.:1960  
##  Max.   :2.0000   Max.   :80300   Max.   :313100   Max.   :3220  
##                                                                  
##      Mg_ppm          Ti_ppm          Al_ppm           Na_ppm     
##  Min.   : 3100   Min.   :  110   Min.   :  2800   Min.   :  140  
##  1st Qu.:11100   1st Qu.: 4470   1st Qu.: 78900   1st Qu.:27760  
##  Median :13200   Median : 5100   Median : 82900   Median :33930  
##  Mean   :14327   Mean   : 5210   Mean   : 82461   Mean   :32422  
##  3rd Qu.:16700   3rd Qu.: 5560   3rd Qu.: 87300   3rd Qu.:38410  
##  Max.   :43800   Max.   :11090   Max.   :116600   Max.   :59900  
##                                                                  
##      K_ppm           S_ppm      
##  Min.   :  800   Min.   : 1000  
##  1st Qu.:17400   1st Qu.: 1000  
##  Median :22800   Median : 1000  
##  Mean   :21886   Mean   : 1179  
##  3rd Qu.:26900   3rd Qu.: 1000  
##  Max.   :44900   Max.   :15000  
## 

La información anterior expresa los valores estadísticos de distribución de tendencia central más relevantes para estudiar individualmente cada uno de los elementos presentes en el yacimiento. Estos son: el valor mínimo y máximo, la media, la mediana y, finalmente, el primer y tercer cuartil.

Entonces, se busca comprar cuál son los elementos más comunes. En consecuencia, se estudian los datos teniendo en cuenta la desviación estándar de los mismos. Para ello se observa la diferencia entre los máximos y minimos y se puede tener una idea del rango intercuartil. De esta manera será posible identificar superficialmente cuáles son aquellos elementos que tienen valores más sesgados.

Para hacer este análisis se tiene en cuenta la media y la mediana. No obstante, no se utilizan indiscriminadamente. La media se emplea para distribuciones normales con pocos valores atípicos. Por el contrario, la mediana se utiliza para indicar la tendencia central en distribuciones númericas sesgadas.

Por ejemplo, en el caso del Cu el valor mínimo es de \(1.5\) mientras que el máximo es de \(10,000\). Esto deja en evidencia que existe una ditribución sesgada de los datos. Por lo tanto, es recomendable usar la mediana (\(68.6\)) y no la media (\(816.0\)) para la interpretación de la concentración del cobre en este yacimiento.

Desviación estándar

Con el objetino de comprender la distribución de los elementos se emplea la desviación estándar. Una desviación estándar baja indica que la mayor parte de la concentración tienden a estar agrupada cerca de su media, es decir, con pocos valores atípicos. Por el contrariro, un valor alto muestra que los datos de concentración se extienden sobre un rango de valores más amplio. De esta manera se podrá saber que criterio emplear según cada elemento y así hallar el valor de concentración central.

\[ \sigma^2_n =\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2 \]

#Se identifica la desviación estándar

Desviaciones = data.frame(lapply(Mineral_ppm, sd, na.rm = TRUE))

Como era de esperarse el Cobre presenta la desviación estándar con el valor más alto. Es decir, es aquel mineral con una concentración más atípica. Esto implica que existe alguna zona dentro del yacimiento donde se presenta una mayor o menor cantidad de este elemento.

Siguiendo esta lógica lo mismo ocurre con aquellos minerales con que presentan también valores altos de desviación estándar.

Skewness

A pesar de lo mencionado anteriormente, aún existe la duda de hacia dónde se distribuyen estos datos atípicos de la concentración. En otras palabras, se debe conocer una manera para determinar si la desviación es consecuencia de una mayor o menor concentración del elemento en el yacimiento.

La medida estadística que describe la simetría de la distribución alrededor de un promedio es el skewness. Mientras más cercano a cero sea el valor del sesgo, entonces, la distribución será más simetrica. En este caso interesa saber si el sesgo es positivo, pues la distribución tendrá una cola asimétrica extendida hacia los valores positivos. Lo que se traduce en que habrá una mayor concentración del elemento en ciertas zonas.

\[ \tilde{\mu}_3=\frac{\sum_{i}^N(X_i-\bar{X})^3}{(N-1)\cdot \sigma^3} \]

# Se identifica el Skewness
Sesgo = data.frame(lapply(Mineral_ppm, skewness, na.rm = TRUE))

Con los datos de la matriz Sesgo se hará un anális de dos concentraciones de dos elementos escogidos arbitrariamente. Uno de ellos tienen un Skewness positivo y el otro negativo.

Análisis gráfica Niquel

Para el primer caso se escogió el Niquel (Ni) que tiene una desviación estándar relativamente baja (\(10.368\)) y un sesgo positivo y en parte asimétrico (\(2.488\)).

Esto indica que los valores de concentración están sesgados de forma positiva, ya que la mediana (\(24.60\)) es menor que la media (\(27.52\)). Lo cual permite deducir una cola en el histograma que se exienda hacía la derecha. Además, la mayoría de las concentraciones deben rondar el valor de la mediana. Esto se puede concluir a partir de que la desviación estándar no es particularmente alta.

ggplot(data = data.frame(x = Mineral_ppm$Ni_ppm), aes(x))+ geom_density(fill = "lightslategray", alpha = 0.5) +
  geom_vline(aes(xintercept = mean(x), color = "Media"), linetype = "solid", size = 1) +
  geom_vline(aes(xintercept = median(x), color = "Mediana"), linetype = "solid", size = 1) +
  scale_color_manual(values = c(Media = "royalblue4", Mediana = "tomato3")) +
  labs(title = "Histograma Ni_ppm", subtitle = "Concentración del Niquel",x = "Concentración [PPM]", y = "Densidad")+
  theme(plot.title=element_text(size=14, face='bold', color='darkslategray'))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

En la gráfica se aprecia la presencia de una cierta desviación de forma positiva pues existe una concentración atipica de datos entre los valores de 40 y 80 partes por millon en concentración de Niquel. El pico del histográma, efectivamente, está en concordancia con la mediana y se nota más claramente como la media es mayor.

A pesar de que existe un aumento positivo en la concentración de niquel, este es pequeño. Gracias al histograma de densidad y los datos anteriormente mencionados, se considera que no hay un cambio tan significativo en la frecuencia de concentración de Niquel.

Basicamente, en este yacimiento el Niquel tiene un concentración relativamente constante en partes por millon de \(24.60\). A pesar de que existe una zona de muestreo que parece indicar que hay de un aumento en la concentración, el valor de sesgo es de \(2.488\) lo cual es un indicativo cuantitativo de que ese aumento no es tan relevante.

Análisis gráfica Berilio

El análisis gráfico del Berilio sólo se hace con el fin de mostrar un sesgo negativo y se tienen en cuenta los mismos criterios que para el anterior análisis. Por tanto, no es necesario explayarse más de la cuenta.

La mediana es de \(2.00\) y la media de \(1.814\). También, la desviación estándar es de \(0.4335\) un valor bajo que indica que la concentración está bien distribuida. No obstante, el sesgo es negativo \(-0.876\). Esto se explica por un valor mínimo atípico y con una frecuencia alta del mismo, en este caso \(1.00\).

ggplot(data = data.frame(x = Mineral_ppm$Be_ppm), aes(x))+ geom_density(fill = "lightslategray", alpha = 0.5) +
  geom_vline(aes(xintercept = mean(x), color = "Media"), linetype = "solid", size = 1) +
  geom_vline(aes(xintercept = median(x), color = "Mediana"), linetype = "solid", size = 1) +
  scale_color_manual(values = c(Media = "royalblue4", Mediana = "tomato3")) +
  labs(title = "Histograma Be_ppm", subtitle = "Concentración del Berilio",x = "Concentración [PPM]", y = "Densidad")+
  theme(plot.title=element_text(size=14, face='bold', color='darkslategray'))

Elementos dominantes en el yacimiento

Ahora que se conoce la desviación estándar y el sesgo es posible crear un filtro para descubrir que valores tomar para comparar los elementos.

Como se expresó anteriormente para conocer el dato estadístico necesario para análizar una muestra se importante precisar si hay una distribución atípica. De esta manera, se podrá discernir si emplear la media o la mediana como el criterio de comparación. Entonces, los datos con valores de desviación estándar mayores a \(10\) se consideran altos como resultado se usa la mediana.

#Media y mediana de cada uno de los datos 
 
Mean_ppm = data.frame(lapply(Mineral_ppm, mean, na.rm = TRUE))
Median_ppm = data.frame(lapply(Mineral_ppm, median, na.rm = TRUE))

Me_Med_sd <- rbind (Mean_ppm, Median_ppm, Desviaciones)

# Filtrar y crear el nuevo data.frame

Elementos_ppm<- Me_Med_sd

# Aplicar las reglas de selección
for (col in 1:ncol(Me_Med_sd)) {
  if (Me_Med_sd[3, col] > 10) {
    Elementos_ppm[2, col] <- Me_Med_sd[2, col]
  } else {
    Elementos_ppm[2, col] <- Me_Med_sd[1, col]
  }
}

Dentro del data.frame Elementos_ppm se escogen los valores que cumplan con el criterio de la desviación estándar planteado anteriormente. Es decir, si la desviación estándar es baja se considedará media ya que esta medida de tendencia central se ve afectada por los datos atípicios. Por el contrariro si existen una alta desviación estándar, mayor cantidad de datos atípicos, se escoge la mediana.

Elementos_ppm = Elementos_ppm[2,1:46]

Gráficas mayor concentración de elementos en el yacimiento

Para esta serie de gráficos se empleó una escala logarítmica con el fin de poder vizualizarlos mejor. Ocurre que se tiene una distribución muy desigual, el valor de tendencia central de mediana mayor es de \(816.00_{ppm}\) correspondiente al manganeso (Mn) y el menor es el Reino (Re) con tan sólo \(0.005_{ppm}\).

Gráfica de concentración (ppm) teniendo en cuenta la mediana

Nombres=names(Median_ppm)
Median_ppm= rbind(Nombres,Median_ppm)

# Transponer el data.frame
Median_ppm= t(Median_ppm)

# Crear un vector con los nuevos nombres de columna
nombres_columnas <- c("Elementos", "Concentración")

# Asignar nuevos nombres a las columnas de la matriz transpuesta
colnames(Median_ppm) <- nombres_columnas

# Convertir la matriz transpuesta en un nuevo data.frame
Median_ppm <- as.data.frame(Median_ppm)

# Convertir la columna ColumnaNumerica a numérico
Median_ppm$Concentración <- as.numeric(Median_ppm$Concentración)


# Ordenar el data.frame por la columna Frecuencia
Median_ppm <- Median_ppm[order(Median_ppm$Concentración),]

# Convertir la columna 'Categoria' en un factor ordenado
Median_ppm$Elementos <- factor(Median_ppm$Elementos, levels = Median_ppm$Elementos)

# Crear la gráfica de barras organizada de menor a mayor
ggplot(Median_ppm, aes(x = Elementos, y = Concentración)) +
  geom_bar(stat = "identity", fill = "lightslategray", alpha = 0.8, color = "black", size = 0.1) +
  labs(title = "Concentración [ppm] vs. Elementos", subtitle = "Datos extraidos a partir de la mediana", x = "Elementos", y = "Concentración [PPM]") + scale_y_log10(labels = scales::number_format(accuracy = 1)) +theme(axis.text.x = element_text(angle = 90, hjust = 1), plot.title = element_text(size = 14, face = 'bold', color = 'darkslategray'))

Gráfica de concentración (ppm) teniendo en cuenta la media

#Nombres=names(Median_ppm)
Mean_ppm= rbind(Nombres, Mean_ppm)

# Transponer el data.frame
Mean_ppm= t(Mean_ppm)

# Crear un vector con los nuevos nombres de columna
nombres_columnas <- c("Elementos", "Concentración")

# Asignar nuevos nombres a las columnas de la matriz transpuesta
colnames(Mean_ppm) <- nombres_columnas

# Convertir la matriz transpuesta en un nuevo data.frame
Mean_ppm <- as.data.frame(Mean_ppm)

# Convertir la columna ColumnaNumerica a numérico
Mean_ppm$Concentración <- as.numeric(Mean_ppm$Concentración)


# Ordenar el data.frame por la columna Frecuencia
Mean_ppm <- Mean_ppm[order(Mean_ppm$Concentración),]

# Convertir la columna 'Categoria' en un factor ordenado
Mean_ppm$Elementos <- factor(Mean_ppm$Elementos, levels = Mean_ppm$Elementos)

# Crear la gráfica de barras organizada de menor a mayor
ggplot(Mean_ppm, aes(x = Elementos, y = Concentración)) +
  geom_bar(stat = "identity", fill = "lightslategray", alpha = 0.8, color = "black", size = 0.1) +
  labs(title = "Concentración [ppm] vs. Elementos", subtitle = "Datos extraidos a partir de la media", x = "Elementos", y = "Concentración [PPM]") + scale_y_log10(labels = scales::number_format(accuracy = 1)) +theme(axis.text.x = element_text(angle = 90, hjust = 1), plot.title = element_text(size = 14, face = 'bold', color = 'darkslategray'))

Comparativa de concentración según la media o mediana.

Al comparar las gráficas existe una clara diferencia entre la posición que ocupan los valores de algunos de los elementos. Esto depende de la desviación estándar ya que existen valores atípicos para algunos de ellos. Por lo tanto, anteriormente se creó la variable Elementos_ppm que discrimina entre lo valores de la media o mediana. Así se creó este data.frame para realizar la siguiente gráfica.

Gráfica de concentración (ppm) teniendo en cuenta la desviación estándar para clasificar entre media y mediana

#Nombres=names(Median_ppm)
Elementos_ppm= rbind(Nombres, Elementos_ppm)

# Transponer el data.frame
Elementos_ppm= t(Elementos_ppm)

head(Elementos_ppm)
##        1        2                  
## Mo_ppm "Mo_ppm" "0.947706422018349"
## Cu_ppm "Cu_ppm" "68.6"             
## Pb_ppm "Pb_ppm" "7.8"              
## Zn_ppm "Zn_ppm" "95"               
## Ag_ppm "Ag_ppm" "1.12660550458716" 
## Ni_ppm "Ni_ppm" "24.6"
# Crear un vector con los nuevos nombres de columna
nombres_columnas <- c("Elementos", "Concentración")

# Asignar nuevos nombres a las columnas de la matriz transpuesta
colnames(Elementos_ppm) <- nombres_columnas

# Convertir la matriz transpuesta en un nuevo data.frame
Elementos_ppm <- as.data.frame(Elementos_ppm)

# Convertir la columna ColumnaNumerica a numérico
Elementos_ppm$Concentración <- as.numeric(Elementos_ppm$Concentración)


# Ordenar el data.frame por la columna Frecuencia
Elementos_ppm <- Elementos_ppm[order(Elementos_ppm$Concentración),]

#Elementos_ppm
# Convertir la columna 'Categoria' en un factor ordenado
Elementos_ppm$Elementos <- factor(Elementos_ppm$Elementos, levels = Elementos_ppm$Elementos)

# Crear la gráfica de barras organizada de menor a mayor
ggplot(Elementos_ppm, aes(x = Elementos, y = Concentración)) +
  geom_bar(stat = "identity", fill = "lightslategray", alpha = 0.8, color = "black", size = 0.1) +
  labs(title = "Concentración [ppm] vs. Elementos", subtitle = "Clasificación de media o mediana según desviación estándar", x = "Elementos", y = "Concentración [PPM]") + scale_y_log10(labels = scales::number_format(accuracy = 1)) +theme(axis.text.x = element_text(angle = 90, hjust = 1), plot.title = element_text(size = 14, face = 'bold', color = 'darkslategray'))

Minerales dominantes en el yacimiento

Ahora que se conoce cuales son los elementos dominantes dentro del yacimiento es posible hacer una correlación litológica para definir cuales podrían ser los minerales principales.

Litology= read_xlsx("PARCIAL1.xlsx", sheet = "Litology")

Resumen litológico, mineralizaciones y alteraciones

# Conteo de datos de Litología general 
T_Litology = data.frame(table(Litology$Lithology))

# Conteo de datos primer grupo de mineralizaciones en la litología 
T_Mine1= data.frame(table(Litology$Mineralization_1))
T_MinStyle1 = data.frame(table(Litology$`Min Style_1`))
T_MinInten = data.frame(table(Litology$`Min Intensity_1`))

# Conteo de datos segundo grupo de mineralizaciones en la litología 

T_Mine2 = data.frame(table(Litology$Mineralization_2))
T_MinStyle2 = data.frame(table(Litology$`Min Style_2`))
T_MinInten2 = data.frame(table(Litology$`Min Intensity_2`))

# Conteo de datos de alteraciones en la litología 

T_Alte= data.frame(table(Litology$Alteration))
T_AlteStyle=data.frame(table(Litology$`Alteration Style`))
T_AlteInten= data.frame(table(Litology$`Alteration Intensity`))

Vizualización de datos de litología, mineralización y alteración

#Resumen datos de litología 
ggplot(T_Litology, aes(x = reorder(Var1, -Freq), y = Freq)) +
  geom_bar(stat = "identity", fill = "darkolivegreen4", alpha = 0.8, color = "black", size = 0.1) + # Estilo de las barras
  labs(title = "Clases de litología", subtitle = "Frecuencia de litologías en los núcleos de muestreo",x = "Litologías", y = "Frecuencia")+
  theme(plot.title=element_text(size=14, face='bold', color='darkslategray')) + coord_flip()

#Resumen datos de primera mineralización 
ggplot(T_Mine1, aes(x = reorder(Var1, -Freq), y = Freq)) +
  geom_bar(stat = "identity", fill = "darkolivegreen4", alpha = 0.8, color = "black", size = 0.1) + # Estilo de las barras
  labs(title = "Clases de mineralización", subtitle = "Frecuencia del primer grupo de mineralizaciones",x = "Tipo de mineralización", y = "Frecuencia")+
  theme(plot.title=element_text(size=14, face='bold', color='darkslategray')) + coord_flip()

#Resumen datos de segunda mineralización 
ggplot(T_Mine2, aes(x = reorder(Var1, -Freq), y = Freq)) +
  geom_bar(stat = "identity", fill = "darkolivegreen4", alpha = 0.8, color = "black", size = 0.1) + # Estilo de las barras
  labs(title = "Clases de mineralización", subtitle = "Frecuencia del segundo grupo de mineralizaciones",x = "Tipo de mineralización", y = "Frecuencia")+
  theme(plot.title=element_text(size=14, face='bold', color='darkslategray')) + coord_flip()

#Resumen datos de tipo de alteración  
ggplot(T_Alte, aes(x = reorder(Var1, -Freq), y = Freq)) +
  geom_bar(stat = "identity", fill = "darkolivegreen4", alpha = 0.8, color = "black", size = 0.1) + # Estilo de las barras
  labs(title = "Clases de alteración", subtitle = "Frecuencia de tipos de alteraciones presentes en la litología",x = "Tipo de alteración", y = "Frecuencia")+
  theme(plot.title=element_text(size=14, face='bold', color='darkslategray')) + coord_flip()

Mineralogía

Daniel y Karla les toca hacer el análisis. Coméntenme qué necesitan, también puedo sacar gráficas para la intensidad y estilo de mineralización o alteración.

Parte II - Generación de gráficas

Promedio de concentración de Plomo en todas las muestras

Anteriormente se creó un data.frame que contiene todas las medias de cada una de las variables de Mineral_ppm. Por lo tanto, si se busca conocer el promedio de concentración de Plomo (Pb) sólo sería necesario selecionar el valor correspondiente que se halla en la matriz.

Mean_ppm %>%
        filter(Elementos== "Pb_ppm") %>%
        select(Elementos, Concentración)
##        Elementos Concentración
## Pb_ppm    Pb_ppm      18.76487

En este caso la columna Concentración equivale a la concentración promedio. No obstante, este valor también podría hallarse fácilmente aplicando la función mean, que arroja la media aritmética, de un conjunto de datos.

mean(assay$Pb_ppm)
## [1] 18.76487

Como se puede corruborar, el valor es el mismo.

Distribución de datos del Ag_ppm

A continuación se hará un análisis estadístico simple de la plata dentro del yacimiento. Con el fin de realizar esto lo primero a tener en cuenta es el resumen estadístico que nos muestra los datos de distribución de la concentración de plata.

summary(assay$Ag_ppm)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.050   0.100   0.100   1.127   0.200  73.900

Sólo con análizar la información presente en el Summary es posible tener idea de cómo está distribuida la plata.

Los datos de concentración de plata en el yacimiento revelan un rango interesante de distribución. El valor mínimo de 0.050 ppm es el punto de partida, y es notable que la mediana y el primer cuartil sean iguales, indicando una simetría en la distribución dentro de este rango. Esto sugiere que aproximadamente el 25% de las muestras caen en el rango entre el valor mínimo y 0.100 ppm, y la mitad de las muestras tienen una concentración igual o inferior a 0.100 ppm. Sin embargo, es importante destacar que la simetría puntual se limita a este rango específico. El tercer cuartil de 0.200 ppm y la presencia de valores atípicos como el máximo de 73.900 ppm indican una variabilidad significativa en la concentración de plata en el yacimiento más allá de este intervalo. Para una comprensión completa de la distribución y la gestión de esta variabilidad, se requiere un análisis más detallado, como un histograma o un diagrama de caja y bigotes (box plot).

Gráfico de cajas y bigotes de la Plata

ggplot(assay, aes(x = factor(1), y = Ag_ppm)) +
  geom_boxplot(width = 0.5, fill = "cadetblue4", color = "black", alpha=0.6) + 
  geom_point(aes(y = median(Ag_ppm)), shape = 23, fill = "coral3", color = "black", size = 3) + 
  labs(x = "Plata (Ag)", y = "Concentración [ppm]") +
  scale_fill_manual(values = c("lightblue")) + 
  scale_color_manual(values = c("cadetblue", "coral")) + 
  theme_minimal() + coord_cartesian(ylim = c(0, 0.7))

Ya que existía una presencia de datos atípicos demasiado marcada fue necesario realizar una exageración en el eje \(y\) sólo para mostrar aquellos vaolres que se encontrar en el rango de entre 0 y 0.7. Esto se hizo para que se pudiera ver la caja como tal y de esta manera apreciar que los datos se encuentran normalmente distribuidos en el primer cuartil y el tercer cuartil. Siendo, además, la mediana coincidente con el primer cuartil.

Histograma de frecuencias de la Plata

La concentración de plata es sesgada positivamente, ya que el valor de la mediana (0.100 ppm) es menor que la media (1.127 ppm), y el tercer cuartil (0.200 ppm) es significativamente mayor que la mediana. Además, el valor del skewness positivo (7.251) confirma este sesgo hacia la derecha en la distribución, sugiriendo que hay valores extremadamente altos que están aumentando la media. Sin embargo, la desviación estándar (4.449) indica una dispersión moderada de los datos alrededor de la media. Esto último implica que la concentración de datos atípicos es ínifa y no debe tenerse en cuenta.

ggplot(data = data.frame(x = Mineral_ppm$Ag_ppm), aes(x))+ geom_density(fill = "lightslategray", alpha = 0.5) +
  geom_vline(aes(xintercept = mean(x), color = "Media"), linetype = "solid", size = 1) +
  geom_vline(aes(xintercept = median(x), color = "Mediana"), linetype = "solid", size = 1) +
  scale_color_manual(values = c(Media = "royalblue4", Mediana = "tomato3")) +
  labs(title = "Histograma Ag_ppm", subtitle = "Concentración de Plata",x = "Concentración [PPM]", y = "Densidad")+
  theme(plot.title=element_text(size=14, face='bold', color='darkslategray')) + coord_cartesian(xlim = c(0, 40))

Como se ve en la gráfica del histograma los datos atípicos no están distribuidos uniformemente en alguna zona. Simplemente son variaciones anómalas de la concentración de la plata que se pueden explicar debido a procesos geólogicos puntuales que ocurrieron en las zonas de muestreo.

Gráfico de dispersión de cobre y plata

La gráfica de disperión permitirá visualizar los datos de Plata y Cobre, que a pesar de ser distintos, se pretender destacar las similitudes en el conjunto de datos. Esto será útil cuando se buscan valore atípicos y, a su vez, entender la distribución de los datos de ambas variables.

ggplot(assay, aes(x= Cu_ppm, y=Ag_ppm, color=Cu_ppm))+  geom_point() + geom_smooth()+ labs(title = "Grafico de dispersión Cu vs. Ag", subtitle = "Relación entre la concentración de Cobre y Plata",x = "Cobre [ppm]", y = "Plata [ppm]")+ theme(plot.title=element_text(size=14, face='bold', color='darkslategray'))
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'

Ya que los datos forman una banda que se extiende desde la parte inferior a la superior derecha se considera que existe una correlación positiva entre el cobre y la plata.

Cálculo de la correlacion

Para tener una medida cuantitativa de la correlación empleamos la función cor(). Esto indicia el grado de correlación que puede ser un valor en el rango de -1 a 1. Donde, -1 implica una correlación nula y 1 significa que la correlación es perfecta.

cor(assay$Cu_ppm, assay$Ag_ppm)
## [1] 0.7629199

El valor de la correlación entre el cobre y la plata dentro del yacimiento es de \(0.7629\) lo cual implica que existe una correlación positiva fuerte.