Em direção a uma seleção multivariada eficaz em experimentos biológicos

This post is also available in English

Em nosso artigo recente na Bioinformatics, Maicon Nardino e eu descrevos um novo índice multivariado de distância genótipo-ideótipo, MGIDI, para seleção e recomendação de tratamentos em experimentos biológicos. Então, preparei este breve tutorial sobre a computação do MGIDI.

Motivação

Nardino e eu trabalhamos com dados multivariados desde que comecei meu mestrado na Universidade Federal de Santa Maria (cerca de cinco anos atrás), e selecionar genótipos com base em múltiplas características sempre foi nosso objetivo. Aqui preciso agradecer a todos os integrantes do Laboratório de Melhoramento Genético e Produção de plantas em especial ao meu orientador de Mestrado na época, Velci Queiróz de Souza. Muito obrigado por tudo!

Dados multivariados são comuns em experimentos biológicos e o uso de informação multivariada é crucial para tomar melhores decisões de recomendações de tratamentos ou seleção de genótipos. Índices clássicos para seleção multivariada, como Smith e Hazel estão disponíveis, mas a presença de multicolinearidade e a escolha arbitrária de coeficientes de ponderação podem corroer os ganhos genéticos.

Depois que um dos capítulos de minha tese de doutorado foi publicado como “Mean Performance and Stability in Multi‐Environment Trials II: Selection Based on Multiple Traits” estava convencido de que combinar princípios de diferentes técnicas multivariadas seria uma boa estratégia para a criação de um índice multivariado para seleção de genótipos em que a maioria das características são selecionadas favoravelmente. Preciso também agradecer aqui meu orientador de Doutorado, Alessandro Dal’Col Lúcio por todo apoio e parceria e os colegas de Graduação e Pós-graduação na Época. Em 2019 Nardino já era Professor de Genética e Melhoramento da Universidade Federal de Viçosa e eu Professor de Agronomia do Centro Univesitario UNIDEAU. Depois de diversas longas chamadas pelo Skype, tínhamos os fundamentos teóricos do índice MGIDI.

Fundamentos teóricos

A teoria por trás do índice MGIDI é centrada em quatro etapas principais.

  1. Reescalar as variáveis para que todas tenham um intervalo de 0-100.

  2. Usar uma análise fatorial para considerar a estrutura de correlação entre as variáveis e redução de dimensionalidade dos dados.

  3. Planejar um ideótipo com base em valores conhecidos/desejados de características.

  4. Calcular a distância entre cada genótipo para o ideótipo planejado.

O genótipo/tratamento com o menor MGIDI está então mais próximo do ideótipo e, portanto, apresenta os valores mais desejados para todas as características em estudo.

Implementação em software

O pacote R metan está sendo reconhecido e utilizado entre melhoristas, principalmente. Portanto, parecia lógico que não havia outra maneira de providenciar acesso livre e de código aberto ao índice MGIDI do que implementá-lo no metan. E aqui estamos! o índice MGIDI pode ser computado com metan::mgidi().

A última versão estável do metan está disponível no CRAN e pode ser obtida com

# A última versão estável é instalada com
install.packages("metan")

# Ou a versão de desenvolvimento do GitHub:
# install.packages ("devtools")
devtools::install_github("TiagoOlivoto/metan")

Os usuários podem computar o índice usando dados baseados em repetição ou dados baseados em média.

Usando dados baseados em repetições

Quando dados baseados em repetição estão disponíveis, ambos modelos de efeitos mistos ou fixos podem ser ajustados com gamem() e gafem(), respectivamente. Neste exemplo, iremos reproduzir os resultados da seleção do genótipos de trigo realizada em nosso artigo.

A primeira etapa é ajusar o modelo. Neste caso, um modelo de efeito misto com genótipo como efeito aleatório.

library(metan)
# Registered S3 method overwritten by 'GGally':
#   method from   
#   +.gg   ggplot2
# |=========================================================|
# | Multi-Environment Trial Analysis (metan) v1.15.0        |
# | Author: Tiago Olivoto                                   |
# | Type 'citation('metan')' to know how to cite metan      |
# | Type 'vignette('metan_start')' for a short tutorial     |
# | Visit 'https://bit.ly/pkgmetan' for a complete tutorial |
# |=========================================================|
dados <-
  read.csv("https://bit.ly/2Z0A7FL", sep = ";") %>%
  as_factor(GEN, BLOCK)

# Ajustar o modelo de efeito misto
mod <- gamem(dados,
             gen = GEN,
             rep = BLOCK,
             resp = everything(),
             verbose = FALSE)

Após ajustar o modelo misto, nós o usamos como dados de entrada na função mgidi(). Neste caso, nosso objetivo foi selecionar genótipos com ganhos negativos para os primeiros quatro caracteres em dados e ganhos positivos para os últimos 10 caracteres.

mgidi_index <-
  mgidi(mod,
        ideotype = c(rep("l", 4), rep("h", 10)),
        SI = 15,
        verbose = FALSE)
gmd(mgidi_index) %>% round_cols()
# Class of the model: mgidi
# Variable extracted: sel_dif
# # A tibble: 14 x 11
#    VAR   Factor      Xo      Xs     SD SDperc    h2     SG SGperc sense     goal
#    <chr> <chr>    <dbl>   <dbl>  <dbl>  <dbl> <dbl>  <dbl>  <dbl> <chr>    <dbl>
#  1 NSS   FA1      15.5    16.0    0.45   2.9   0.77   0.34   2.22 increase   100
#  2 SL    FA1       8.63    9.12   0.5    5.78  0.67   0.33   3.86 increase   100
#  3 SW    FA1       2.17    2.54   0.37  17.1   0.84   0.31  14.3  increase   100
#  4 NGS   FA1      40.5    42.0    1.51   3.73  0.65   0.99   2.45 increase   100
#  5 GMS   FA1       1.62    1.88   0.26  16.0   0.81   0.21  13.0  increase   100
#  6 HW    FA2      76.3    77.7    1.37   1.79  0.8    1.1    1.44 increase   100
#  7 HIS   FA2      74.7    74.2   -0.52  -0.7   0.79  -0.41  -0.55 increase     0
#  8 PH    FA3      86.5    86.4   -0.08  -0.09  0.78  -0.06  -0.07 decrease   100
#  9 SH    FA3      77.8    77.1   -0.7   -0.9   0.82  -0.57  -0.74 decrease   100
# 10 FLH   FA3      60.4    58.7   -1.68  -2.78  0.83  -1.39  -2.29 decrease   100
# 11 FLO   FA4      60.4    59.1   -1.34  -2.22  0.92  -1.24  -2.05 decrease   100
# 12 DIS   FA4       2.84    3.11   0.27   9.53  0.9    0.24   8.54 increase   100
# 13 NGSP  FA4       2.62    2.64   0.02   0.9   0.52   0.01   0.46 increase   100
# 14 GY    FA5    4380.   4621.   241.     5.5   0.72 173.     3.96 increase   100

Em seguida, obtemos a classificação genótipo/tratamento com

plot(mgidi_index)

Um dos principais diferenciais do índice MGIDI é a visualização dos pontos fortes e fracos dos genótipos/tratamentos usando o gráfico de radar a seguir. O fator com a menor contribuição estará mais próximo da borda do radar; então, o genótipo que se destaca por esse fator terá pontos fortes relacionados às características desse fator.

plot(mgidi_index, type = "contribution")

Usando uma tabela de dados bidirecional

Nesta seção, extendemos a teoria do índice MGIDI para avaliar um experimento ( Olivoto et al., 2016) com uma estrutura de tratamento fatorial qualitativo-qualitativo. O objetivo é escolher o melhor tratamento (combinação de fatores) que proporciona os valores desejados para a maioria das características avaliadas. Aqui, o objetivo é obter menores valores para P e PL e maiores valores para as demais características. Observe que a entrada necessária na função mgidi() é uma tabela bidirecional com tratamento/genótipos nos nomes das linhas e características nas colunas.

data_ns <- read.csv ("https://bit.ly/3jKx8Jo", sep = ";")
str(data_ns)
# 'data.frame':	8 obs. of  11 variables:
#  $ TRAT: chr  "WS_100DR" "WS_30T_40DR_30B" "WS_50T_50DR" "WS_50DR_50B" ...
#  $ P   : num  91.5 96.8 93.5 96.8 103.5 ...
#  $ PL  : num  0.99 1.14 1.32 1.12 1.31 1.1 1.38 1.29
#  $ L   : num  93.2 85.2 71.5 86.8 79 ...
#  $ TIL : num  3.56 5.48 6.55 4.47 3.53 5.42 5.33 4.42
#  $ SSM : num  582 794 702 626 550 ...
#  $ GY  : num  5301 6459 6079 5697 5485 ...
#  $ HW  : num  79.2 79.2 79.2 79.5 78.8 ...
#  $ W   : num  261 264 224 263 270 ...
#  $ GLU : num  30.1 29.9 27.9 29.6 27.6 ...
#  $ PROT: num  11.8 11.9 12.6 12.6 12.7 ...
   
data_mat <- column_to_rownames (data_ns, "TRAT")
# Definir o vetor de ideótipo
ide_vect <- c("l", "l", rep ("h", 8))
ide_vect
#  [1] "l" "l" "h" "h" "h" "h" "h" "h" "h" "h"


mgidi_data_ns <-
  mgidi(data_mat,
        ideotype = ide_vect,
        verbose = FALSE)
gmd(mgidi_data_ns) %>% round_cols()
# Class of the model: mgidi
# Variable extracted: sel_dif
# # A tibble: 10 x 8
#    VAR   Factor      Xo      Xs     SD SDperc sense     goal
#    <chr> <chr>    <dbl>   <dbl>  <dbl>  <dbl> <chr>    <dbl>
#  1 PL    FA1       1.21    1.14  -0.07  -5.49 decrease   100
#  2 L     FA1      81.7    85.2    3.59   4.4  increase   100
#  3 HW    FA1      79.2    79.2    0.03   0.04 increase   100
#  4 GLU   FA1      28.7    29.8    1.12   3.91 increase   100
#  5 PROT  FA1      12.3    11.9   -0.4   -3.28 increase     0
#  6 P     FA2      97.2    96.8   -0.47  -0.48 decrease   100
#  7 W     FA2     256.    264.     7.78   3.04 increase   100
#  8 TIL   FA3       4.84    5.48   0.64  13.1  increase   100
#  9 SSM   FA3     663.    794.   132.    19.9  increase   100
# 10 GY    FA3    5941.   6459    518.     8.73 increase   100

O índice MGIDI indicou o tratamento WS_30T_40DR_30B (30% de N no estágio de perfilhamento, 40% de N no estágio de duplo anel e 30% de N no estágio de emborrachamento com uso de enxofre) como o tratamento de melhor desempenho. Este tratamento fornece os valores desejados (valor menor ou maior) para 9 das 10 características analisadas, portanto, a taxa de sucesso, neste caso, foi de 90%.

O MGIDI na prática

O índice MGIDI permite um processo de seleção único e fácil de interpretar. Além de lidar com variáveis colineares, o índice MGIDI não requer o uso de nenhum peso econômico, proporcionando ganhos mais equilibrados. Isso significa que o índice MGIDI pode ajudar melhoristas a garantir ganhos de longo prazo em características primárias (por exemplo, rendimento de grãos) sem comprometer os ganhos genéticos de características secundárias (por exemplo, altura da planta).

Nosso Material suplementar fornece os códigos utilizados em nosso artigo que podem ser facilmente adaptados em estudos futuros. Outra função útil do pacote metan que pode facilitar a implementação de índices multi-trait em estudos futuros é coincidence_index(),que tornará mais fácil comparar os índices MGIDI, Smith-Hazel e FAI-BLUP em estudos futuros .

Siga nosso artigo no Research Gate.
Compartilhe este post nas suas redes sociais.
Aproveite o índice MGIDI.

Next
Previous