1 Bibliotecas Utilizadas

library(knitr)
library(DT)
library(tidyverse)
library(readxl)
library(pheatmap)
library(RColorBrewer)
library(plotly)

2 Objetivos

O estudo tem como objetivo caracterizar compostos orgânicos voláteis (COVs), presentes no fruto da lobeira, utilizando cromatografia gasosa acoplada à um espectrômetro de massas (GC-MS), com extração por headspace.

3 Análise Cromatográfica

3.1 Preparo de Amostra

Foi utilizadoa uma amostra in natura, do fruto da lobeira, onde está amostra separanda entre casca e polpa. Após esse preparo, foram pesadas em vials de 10 mL aproximadamente 1,0 g em triplicata, a fim de verificar a reprodutibilidade, os frascos foram selados com o auxílio de um crimpador automático, utilizando tampas magnéticas.

3.2 Parâmetros Cromatográficos

As amostras foram analisadas via HS/GC-MS em cromatógrafo a gás da Agilent 7890B acoplado ao espectrômetro de massas 7000D. Os VOCs foram extraídos por 15 minutos a 750 rpm em incubadora mantida a 100 °C. O volume de injeção foi de 2,5 mL com seringa mantida a 100 °C. O gás de arraste utilizado foi o hélio 5.0 (99,999%) com velocidade linear de 30,405 cm/s e o injetor operou no modo splitless a 280 °C. Utilizou-se a coluna HP-5ms de 30 m x 250 μm x 0,25 μm. O forno operou a temperatura inicial de 40 °C por 5 minutos, seguido por rampa de 5 °C/min até 160 °C, em seguida, 1 °C/min até 170 °C, por fim, 10 °C/min até 250 °C, totalizando 47 minutos de análise. O espectrômetro de massas operou no modo EI com temperatura da fonte de íons a 300 °C, no modo SCAN a 70 eV com faixa de massa de 17-400 m/z. Os picos foram identificados com base na correlação de similaridade com os espectros padrões da biblioteca NIST 14.

4 Tratamento de Dados

Foi necessário converter os arquivos contendo os cromatogramas de (.D) para (mzML), utilizando o software da Proteo Wizard (Msconvert). Após a conversão, os arquivos foram carregados no software MZmine versão 4.9.14, onde foi realizado todo o processamento de dados com o seguinte workflow:

Fluxo de processamento de dados em GC-EI-MS
Etapa Descricao
1. Importação Entrada dos dados brutos
2. Detecção de massas Centroidização e threshold
3. EIC Construção de cromatogramas de íons extraídos
4. Deconvolução Separação de sinais sobrepostos
5. Alinhamento Comparação entre amostras (tempo de retenção e m/z)
6. Identificação Busca na biblioteca espectral NIST
7. Exportação O processamento é salvo em CSV

4.1 Parâmetros do tratamento de dados no MZmine

A tabela completa contendo os parâmetros do processamento de dados no MZmine (versão 4.9.14) está disponível no Material Suplementar:
Parâmetros

4.2 Número de picos cromatográficos identificados

##             Sample class compostos_presentes
## 1 LOBEIRA_01_CASCA casca                  23
## 2 LOBEIRA_01_POLPA polpa                  14
## 3 LOBEIRA_02_CASCA casca                  23
## 4 LOBEIRA_02_POLPA polpa                  13
## 5 LOBEIRA_03_CASCA casca                  17
## 6 LOBEIRA_03_POLPA polpa                  14

4.3 Identificação dos Compostos

Após o processamento dos dados no software MZmine, foi exportada uma tabela contendo as features detectadas, caracterizadas pela razão massa/carga (m/z), tempo de retenção (RT) e área do pico. A identificação dos compostos foi realizada no próprio software, com base na comparação dos espectros de massas obtidos com aqueles disponíveis na biblioteca espectral NIST, utilizando critérios de similaridade espectral.

dados2 <- read_xlsx("dados_brutos_lobeira.xlsx")

datatable(
  dados2 %>%
    mutate_at(vars(starts_with("Área%")), ~ round(., 2)))

4.4 CLASSIFICAÇÃO DOS COMPOSTOS

Foi realizada a contagem das classes químicas presentes em cada amostra. Embora a amostra Lobeira_03_casca tenha apresentado maior variação na quantidade de picos identificados, a classificação considerou o conjunto geral dos compostos.

dados_class <- read_xlsx("dados_classquimic.xlsx")

resultado <- dados_class %>%
  select(`Fuction Organic`, LOBEIRA_01_CASCA, LOBEIRA_01_POLPA) %>%
  
  pivot_longer(
    cols = starts_with("LOBEIRA"),
    names_to = "amostra",
    values_to = "intensidade"
  ) %>%
  
  
  filter(intensidade > 0) %>%

  
  group_by(amostra, `Fuction Organic`) %>%

  
  summarise(qtd = n(), .groups = "drop") %>%
  
  pivot_wider(
    names_from = amostra,
    values_from = qtd,
    values_fill = 0)

resultado
## # A tibble: 7 × 3
##   `Fuction Organic` LOBEIRA_01_CASCA LOBEIRA_01_POLPA
##   <chr>                        <int>            <int>
## 1 Alcino                           1                0
## 2 Aldeído                          3                1
## 3 Furano                           1                1
## 4 Sesquiterpenos                   1                0
## 5 Álcool                           2                3
## 6 Éster                           13                7
## 7 Éter                             2                2

4.5 Filtragem

Foi montada uma tabela indicando se cada composto identificado pertence exclusivamente à polpa, exclusivamente à casca ou se está presente em ambas as partes do fruto. A classificação foi realizada com base na presença/ausência dos compostos nas réplicas analisadas.

tabela_compostos <- dados2 %>%
  mutate(
    presente_casca = ifelse(`LOBEIRA_01_CASCA` > 0 | `LOBEIRA_02_CASCA` > 0 | `LOBEIRA_03_CASCA` > 0, TRUE, FALSE),
    presente_polpa = ifelse(`LOBEIRA_01_POLPA` > 0 | `LOBEIRA_02_POLPA` > 0 | `LOBEIRA_03_POLPA` > 0, TRUE, FALSE),
    categoria = case_when(
      presente_casca & presente_polpa ~ "Ambos",
      presente_casca & !presente_polpa ~ "Somente Casca",
      !presente_casca & presente_polpa ~ "Somente Polpa",
      TRUE ~ "Nenhum"
    )
  ) %>%
  select(compound, CAS, categoria)

datatable(tabela_compostos)

5 HEATMAP

dados <- as.data.frame(dados)

matriz_bruta <- apply(dados[, 3:ncol(dados)], 2, as.numeric)

matriz_heatmap <- t(matriz_bruta)

colnames(matriz_heatmap) <- trimws(as.character(dados[[1]]))

vetor_classes <- trimws(tolower(as.character(dados[[2]])))
anotacao_topo <- data.frame(Grupo = vetor_classes)

rownames(anotacao_topo) <- colnames(matriz_heatmap) 

paleta_metabolomica <- colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(100)

cores_grupos <- list(
  Grupo = c("casca" = "#D95F02", "polpa" = "#1B9E77") 
)

pheatmap(matriz_heatmap,
         scale = "row",                      
         cluster_rows = TRUE,                
         cluster_cols = TRUE,                
         annotation_col = anotacao_topo,     
         annotation_colors = cores_grupos,   
         color = paleta_metabolomica,        
         border_color = NA,                  
         show_colnames = TRUE,               
         show_rownames = TRUE,               
         fontsize_row = 7,                   
         fontsize_col = 8,                   
         angle_col = "90")                 

6 PCA

dados_pca <- apply(dados[, 3:ncol(dados)], 2, as.numeric)

pca_res <- prcomp(dados_pca, center = TRUE, scale. = TRUE)

variancia <- pca_res$sdev^2 / sum(pca_res$sdev^2)
pc1_var <- round(variancia[1] * 100, 1)
pc2_var <- round(variancia[2] * 100, 1)

df_scores <- as.data.frame(pca_res$x)
df_scores$Amostra <- dados[[1]] 
df_scores$Classe <- trimws(tolower(as.character(dados[[2]]))) 

pca_plotly <- plot_ly(
  data = df_scores, 
  x = ~PC1, 
  y = ~PC2, 
  color = ~Classe,
  colors = c("casca" = "#D95F02", "polpa" = "#1B9E77"),
  text = ~Amostra, 
  hoverinfo = "text+x+y",
  type = "scatter", 
  mode = "markers", 
  marker = list(size = 12, line = list(color = 'rgba(0, 0, 0, 0.5)', width = 1))
) %>%
  layout(
    title = "PCA Interativo - Compostos Voláteis (Lobeira)",
    xaxis = list(title = paste0("PC1 (", pc1_var, "%)"), zeroline = TRUE),
    yaxis = list(title = paste0("PC2 (", pc2_var, "%)"), zeroline = TRUE))

pca_plotly