Projeto Curso R

Author

João Leal

Projeto de Curso - Fundamentos de R Aplicados à Análise de Dados Geoquímicos

O objetivo deste projeto é reproduzir os diagramas de concórdia apresentados por Caxito et al. (2026), utilizando a linguagem R e o pacote estatístico IsoplotR. A partir dos dados suplementares originais, o fluxo de trabalho busca automatizar o processamento das razões isotópicas U-Pb utilizando as ferramentas aprendidas no curso especial ministrado pelo Dr. Danilo Cruz no Programa de Pós-Graduação em Geologia e Geoquímica da Universidade Federal do Pará (PPGG - UFPA).

Carregamento de pacotes

Para iniciar a análise, carregamos as bibliotecas fundamentais para o fluxo de dados. O pacote readxl é utilizado para a leitura do arquivo Excel que contém os dados isotópicos, enquanto o janitor auxilia na limpeza de nomes de colunas e remoção de dados vazios. Para a manipulação e organização dos dados, utilizamos o dplyr. Por fim, o pacote IsoplotR é a ferramenta para o processamento estatístico e geração dos diagramas geocronológicos.

library(readxl)
library(janitor)

Anexando pacote: 'janitor'
Os seguintes objetos são mascarados por 'package:stats':

    chisq.test, fisher.test
library(dplyr)

Anexando pacote: 'dplyr'
Os seguintes objetos são mascarados por 'package:stats':

    filter, lag
Os seguintes objetos são mascarados por 'package:base':

    intersect, setdiff, setequal, union
library(IsoplotR)

Importação de Dados

Nesta etapa, definimos o ambiente de trabalho e identificamos o arquivo de dados. A planilha utilizada contém dados suplementares de Caxito et al. (2026), focados na datação U-Pb de “carbonatos de capa” ediacaranos. Realizamos uma leitura inicial da aba “TER-A” (Amostra Terconi da Formação Guia - Faixa Paraguai), aplicando um skip = 3 para ignorar os metadados do cabeçalho e acessar diretamente a matriz de dados isotópicos.

#Definir o diretório de trabalho
setwd("C:/Users/malek/OneDrive/Área de Trabalho/Curso R/Arquivos")

#Definir o nome do arquivo
nome_do_arquivo <- ("caxito.xlsx")

#Ler a planilha TER-A da pasta com dados isotópicos de carbonatos, disponível como material suplementar em Caxito et al. (2026)
ter_a <- read_excel(nome_do_arquivo, sheet = "TER-A", skip = 3)
New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`

Limpeza e Preparação de Dados

Antes do processamento, os dados passam por uma triagem. Removemos linhas vazias e selecionamos as colunas específicas que o método read.data() do IsoplotR exige utilizando format = 1, ierr = 4 (Razões 07/35, 06/38 e correlação de erro em 2sigma%). Esta amostra servirá como base para definir o padrão de colunas que automatizará a leitura das demais planilhas do projeto.

#Remover linhas vazias
ter_a <- ter_a |> 
  remove_empty("rows")

#Selecionar as colunas para o método read.data() do isoplotR.
ter_a_select <- ter_a |> 
  select(10:14)

#Transformar os dados para o formato de leitura do isoplotR
teraupb <- read.data(ter_a_select, method = "U-Pb", format = 1, ierr = 4)

Plotando o diagrama

Esta etapa consiste na visualização dos resultados através de diagramas de Concórdia (tipo Tera-Wasserburg). O uso desse diagrama é particularmente eficaz para carbonatos, pois permite visualizar melhor a mistura com o chumbo comum inicial. Os gráficos são gerados com um gradiente de cor baseado na concentração de Urânio (ppm), facilitando a identificação de padrões de heterogeneidade química nos cristais analisados.

#Plotar o diagrama de concordia
teraupb |> 
  concordia(type = 2, show.age = 2, levels = as.numeric(ter_a$`U(ppm)`), main = "Concordia diagram for TER-A sample\n\n\n")

Tornando o Código Reprodutível

Dada a grande quantidade de planilhas (abas) no arquivo, implementamos um fluxo de automação. O código identifica todos os nomes de abas, ignora abas indicadas (nesse caso os padrões) e processa cada amostra individualmente. Para cada aba, o script seleciona as colunas baseando-se nos nomes capturados da planilha TER-A, que utilizamos como referência, converte os valores para formato numérico e remove entradas incompletas.

#Extrair o nome das abas do arquivo xlsx
abas <- excel_sheets(nome_do_arquivo)

# Capturar os nomes das colunas de referência da planilha TER-A
temp_tera <- read_excel(nome_do_arquivo, sheet = "TER-A", skip = 3, n_max = 0) |> 
  clean_names()
New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`
# Extraímos os nomes das colunas que estão nas posições 10 a 14
colunas_referencia <- colnames(temp_tera)[10:14]

# Definir abas para ignorar, caso desejado
# Como esse arquivo tem algumas planilhas com formato diferente, vamos ignora-las
ignorar <- c("WC 1", "RM", "DB") 
amostras <- abas[!abas %in% ignorar]

# Loop para processar cada planilha
for (nome_aba in amostras) {
  
  # Leitura e limpeza dos dados
  dados_brutos <- read_excel(nome_do_arquivo, sheet = nome_aba, skip = 3) |> 
    clean_names() |> 
    remove_empty("rows")
  
  # Seleção das colunas para uso no isoplotR
  dados_isoplot <- dados_brutos |> 
    select(all_of(colunas_referencia)) |> 
    mutate(across(everything(), as.numeric)) |> 
    na.omit()

    # Transformar para formato IsoplotR (Assumindo ierr=4 para 2sigma %)
    upb_data <- read.data(as.matrix(dados_isoplot), method = "U-Pb", format = 1, ierr = 4)
    
    # Gerar o diagrama de Concordia (Tera-Wasserburg)
    concordia(upb_data, 
              type = 2, 
              show.age = 2, 
              levels = as.numeric(dados_brutos$u_ppm), 
              clabel = "U (ppm)",
              main = paste("Diagrama de Concordia -", nome_aba, "\n\n\n"))

}
New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`

New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`

New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`

New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`

New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`

New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`

New names:
• `2sigma(%)` -> `2sigma(%)...9`
• `2sigma(%)` -> `2sigma(%)...11`
• `2sigma(%)` -> `2sigma(%)...13`

Por fim, podemos comparar os resultados obtidos com os diagramas publicados: