Combinando AMMI e BLUP

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 |
## |=========================================================|
library(rio)
library(ggforce)
## Carregando pacotes exigidos: ggplot2

# gerar tabelas html
print_tbl <- function(table, digits = 3, ...){
  knitr::kable(table, booktabs = TRUE, digits = digits, ...)
}


df_ge <- import("http://bit.ly/df_ge", setclass = "tbl")

Índices univariados

A função waasb() calcula o WAASB, acrônimo para Weighted Average of the Absolute Scores obtidos pela decomposição por valores singulares dos BLUPs para interação genótipo-ambiente obtidos por um Modelo Linear de Efeito Misto1. O índice WAASB para um determinado genótipo ((i\)) é dado por:

$$ WAASB_i = \sum_ {k = 1} ^ {p} | IPCA_ {ik} \times EP_k | / \sum_ {k = 1} ^ {p} EP_k $$

onde \(WAASB_i\) é a média ponderada dos scores absolutos do \(i\)-ésimo genótipo; \(IPCA_{ik}\) são os scores do \(i\)-ésimo genótipo no \(k\)-ésimo IPCA; \(EP_k\) é a variância explicada no \(k\)-ésimo IPCA para \(k = 1,2, .., p\), \(p = min (g-1; e-1)\). O modelo é ajustado com a função waasb(). Tanto waasb() quanto gamem_met() ajustam o mesmo modelo.

model_waasb <- 
  waasb(df_ge,
        env = ENV,
        gen = GEN,
        rep = BLOCO,
        resp = everything(), 
        verbose = FALSE)

# índice WAASB
waasb_ind <- gmd(model_waasb, "WAASB")
## Class of the model: waasb
## Variable extracted: WAASB
print_tbl(waasb_ind)
GEN ALT_PLANT ALT_ESP COMPES DIAMES COMP_SAB DIAM_SAB MGE NFIL MMG NGE
H1 0.319 0.349 0.084 0.695 0.802 0.156 1.155 0.249 3.488 2.548
H10 0.287 0.232 0.163 0.879 0.871 0.184 1.160 0.392 2.473 0.701
H11 0.210 0.210 0.122 0.579 0.487 0.160 0.421 0.597 0.801 0.777
H12 0.298 0.334 0.490 0.344 0.574 0.553 2.122 0.165 1.589 1.893
H13 0.258 0.200 0.308 0.758 0.769 0.350 1.736 0.730 0.423 4.467
H2 0.312 0.332 0.210 0.990 0.972 0.377 2.858 0.634 3.857 2.249
H3 0.340 0.322 0.527 0.364 0.541 0.386 1.892 0.466 3.080 2.065
H4 0.268 0.252 0.326 0.321 0.506 0.329 1.633 0.443 2.769 0.095
H5 0.171 0.101 0.301 0.465 0.365 0.310 1.184 0.573 0.476 2.148
H6 0.232 0.170 0.601 0.528 0.688 0.536 3.098 0.317 0.591 3.901
H7 0.209 0.154 0.442 0.301 0.408 0.469 2.351 0.226 2.550 1.016
H8 0.334 0.336 0.456 0.640 0.917 0.466 2.995 0.273 4.496 2.508
H9 0.208 0.071 0.374 0.913 0.644 0.330 3.324 0.415 5.127 3.357

Biplots

Como o índice WAASB é baseado em decomposição por valores singulares, é possível obter os mesmos biplots utilizados na análise AMMI convencional

p1 <- plot_scores(model_waasb, var = 9)
p2 <- plot_scores(model_waasb, type = 2, var = 9)
p1 + p2

No método WAASB, o seguinte biplot representa quatro classificações relativas à interpretação conjunta de desempenho médio e estabilidade (para genótipos) ou discriminação (ambientes).

  • Quadrante I. Os genótipos incluídos neste quadrante podem ser considerados genótipos instáveis e com produtividade abaixo da média geral. Ambientes neste quadrante apresentam alta capacidade de discriminação.

  • Quadrante II. Neste quadrante estão incluídos os genótipos instáveis, embora com produtividade acima da média geral. Os ambientes incluídos neste quadrante merecem atenção especial, pois, além de proporcionarem altas magnitudes da variável resposta, apresentam boa capacidade de discriminação.

  • Quadrante III. Os genótipos deste quadrante apresentam baixa produtividade, mas podem ser considerados estáveis, devido aos menores valores de WAASB. Quanto menor esse valor, mais estável o genótipo pode ser considerado. Os ambientes incluídos neste quadrante podem ser considerados pouco produtivos e com baixa capacidade de discriminação.

  • Quadrante IV. Os genótipos dentro deste quadrante são altamente produtivos e amplamente adaptados devido à alta magnitude da variável de resposta e baixos valores do índice WAASB.

p3 <- plot_scores(model_waasb, type = 3, var = 9)
p4 <- plot_scores(model_waasb,
                  type = 3,
                  var = 9,
                  highlight = c("H1", "H6"),
                  plot_theme = theme_metan_minimal(),
                  title = FALSE)

arrange_ggplot(p3, p4, tag_levels = "a", guides = "collect")

# extendendo o plot

desc <- c("Esses híbridos têm rendimento de grãos acima da média geral. \ N
Eles são mais estáveis do que aqueles acima da linha horizontal")
plot_scores(model_waasb,
            type = 3,
            var = 9, 
            x.lab = "Massa de mil grãos (g)",
            y.lab = "Média poderada dos escores absolutos (WAASB)",
            col.segm.env = "transparent") +
geom_mark_rect(aes(filter =  Code  %in% c("H13", "H4", "H6"),
                     label = "Descrição",
                     description = desc),
               label.fontsize = 9,
               show.legend = F,
               con.cap = 0,
               con.colour = "red",
               color = "red",
               expand = 0.015,
               label.buffer = unit(2, "cm"))+
theme_gray()+
theme(legend.position = c(0.1, 0.9),
      legend.background = element_blank(),
      legend.title = element_blank(),
      aspect.ratio = 1)

A seleção simultânea para desempenho médio e estabilidade é baseada no índice WAASBY1. Este índice considera a estabilidade (WAASB) e o desempenho médio (variável dependente, Y) para classificação de genótipos considerando o seguinte modelo:

$$ WAASB{Y_i} = \frac {{\left ({r {G_i} \times {\theta _Y}} \right) + \left ({r {W_i} \times {\theta _S}} \right)}} {{{\theta _Y} + {\theta _S}}} $$

onde \(WAASBY_i\) é o índice de seleção simultânea para o \(i\)-ésimo genótipo que pondera entre desempenho e estabilidade; \(rY_i\) e \(rW_i\) são os valores reescalados (0-100) para a variável dependente e WAASB, respectivamente; \(\theta _Y\) e \(\theta_S\) são os pesos da variável dependente e WAASB, respectivamente. Os valores redimensionados são usados para tornar WAASB e Y diretamente comparáveis. Os valores máximo e mínimo para redimensionar a variável dependente dependerão do objetivo da seleção. Por exemplo, assumindo que o valor mais alto para a variável dependente é melhor, digamos, para rendimento de grãos, o genótipo com a média mais alta terá \(rY_i = 100\) após o reescalonamento. Por outro lado, se o valor mais baixo é melhor, digamos, para altura de espiga, o genótipo com a média mais baixa terá \(rY_i = 100\) após o reescalonamento. O genótipo com o menor WAASB terá \(rW_i = 100\). De fato, o índice WAASBY já é computado com a função waasb(), então, agora, basta extrair-mos os valores

waasby_ind <- gmd(model_waasb, what = "WAASBY")
## Class of the model: waasb
## Variable extracted: WAASBY
print_tbl(waasby_ind, digits = 2)
GEN ALT_PLANT ALT_ESP COMPES DIAMES COMP_SAB DIAM_SAB MGE NFIL MMG NGE
H1 56.11 50.00 77.57 66.95 59.29 75.15 81.33 71.33 67.43 37.13
H10 15.67 30.34 70.88 18.77 12.46 76.95 53.08 33.31 36.89 55.36
H11 50.49 35.19 77.99 44.89 40.60 82.94 70.55 15.99 66.65 51.53
H12 32.40 15.51 10.74 59.58 32.80 0.00 27.40 72.03 42.44 39.86
H13 60.66 51.56 53.71 54.64 45.26 54.11 65.77 50.00 77.44 45.99
H2 55.35 31.89 73.47 42.27 25.21 56.32 56.61 38.98 55.68 60.34
H3 45.68 39.07 15.64 69.09 42.06 45.92 48.36 31.83 54.28 27.47
H4 64.55 54.09 75.48 69.57 46.85 76.07 73.83 26.27 57.94 93.69
H5 91.30 72.23 72.79 67.42 78.05 80.59 80.66 30.84 77.51 76.52
H6 71.67 67.13 50.00 83.57 73.40 51.37 53.89 57.77 96.81 31.23
H7 53.15 54.14 52.44 73.83 78.55 48.39 42.71 63.26 59.24 46.29
H8 3.72 2.32 38.69 35.11 16.28 41.53 15.75 52.27 16.85 27.26
H9 47.17 61.03 47.35 5.61 35.04 58.49 0.00 27.84 0.00 17.29

plot_waasby(model_waasb, var = "MMG")

Índices multivariados

Índice de estabilidade multitrait (MTSI)

A função mtsi() é usada para calcular o índice de estabilidade multi-trait (MTSI)2. Neste caso, com o modelo calculado com os argumentos padrões, todas as variáveis analizadas são para ter ganhos positivos desejados.

mtsi_model <- mtsi(model_waasb, verbose = FALSE)

# Autovalores e variância explicada
print_tbl(mtsi_model$PCA)
PC Eigenvalues Variance (%) Cum. variance (%)
PC1 4.914 49.141 49.141
PC2 2.550 25.502 74.643
PC3 1.122 11.217 85.860
PC4 0.613 6.134 91.994
PC5 0.403 4.031 96.025
PC6 0.198 1.984 98.009
PC7 0.090 0.899 98.908
PC8 0.067 0.668 99.575
PC9 0.038 0.380 99.955
PC10 0.004 0.045 100.000

# Diferencial de seleção para estabilidade
print_tbl(mtsi_model$sel_dif_stab)
TRAIT Xo Xs SD SDperc
ALT_PLANT 0.265 0.245 -0.020 -7.583
ALT_ESP 0.236 0.225 -0.011 -4.477
COMPES 0.339 0.193 -0.146 -43.109
DIAMES 0.598 0.580 -0.018 -3.011
COMP_SAB 0.657 0.584 -0.074 -11.202
DIAM_SAB 0.354 0.233 -0.121 -34.269
MGE 1.995 1.170 -0.825 -41.364
NFIL 0.422 0.411 -0.010 -2.446
MMG 2.440 1.982 -0.458 -18.783
NGE 2.133 2.348 0.215 10.091

# Diferencial de seleção para performance
print_tbl(mtsi_model$sel_dif_trait)
VAR Factor Xo Xs SD SDperc h2 SG SGperc sense goal
ALT_PLANT FA 1 2.485 2.595 0.110 4.421 0.035 0.004 0.155 increase 100
ALT_ESP FA 1 1.343 1.438 0.095 7.042 0.000 0.000 0.000 increase 100
COMP_SAB FA 1 29.011 29.715 0.705 2.429 0.000 0.000 0.000 increase 100
COMPES FA 2 15.163 15.338 0.175 1.156 0.000 0.000 0.000 increase 100
DIAM_SAB FA 2 15.970 16.150 0.180 1.128 0.134 0.024 0.151 increase 100
NFIL FA 2 16.123 16.367 0.244 1.511 0.000 0.000 0.000 increase 100
DIAMES FA 3 49.537 50.538 1.001 2.020 0.377 0.377 0.761 increase 100
MGE FA 3 172.939 183.691 10.752 6.217 0.204 2.197 1.270 increase 100
MMG FA 3 338.666 352.773 14.107 4.165 0.000 0.000 0.000 increase 100
NGE FA 3 511.644 524.125 12.481 2.439 0.000 0.000 0.000 increase 100

Índice MGIDI

O índice MGIDI[] pode ser visto como o índice MTSI com um peso de 100 para o desempenho médio. Este índice é calculado com a função mgidi(). Aqui, usaremos os dados de exemplo df_g.

# dados
df_g <- import("http://bit.ly/df_g", setclass = "tbl")
gen_mod <- 
  gamem(df_g,
        gen = GEN,
        rep = BLOCO,
        resp = everything(),
        verbose = FALSE)


mgidi_mod <- mgidi(gen_mod)
## 
## -------------------------------------------------------------------------------
## Principal Component Analysis
## -------------------------------------------------------------------------------
## # A tibble: 10 x 4
##    PC    Eigenvalues `Variance (%)` `Cum. variance (%)`
##    <chr>       <dbl>          <dbl>               <dbl>
##  1 PC1          6.63          66.3                 66.3
##  2 PC2          1.59          15.9                 82.2
##  3 PC3          1.14          11.4                 93.6
##  4 PC4          0.46           4.6                 98.2
##  5 PC5          0.14           1.39                99.6
##  6 PC6          0.03           0.26                99.8
##  7 PC7          0.01           0.11                99.9
##  8 PC8          0.01           0.05               100. 
##  9 PC9          0              0.01               100  
## 10 PC10         0              0                  100  
## -------------------------------------------------------------------------------
## Factor Analysis - factorial loadings after rotation-
## -------------------------------------------------------------------------------
## # A tibble: 10 x 6
##    VAR         FA1   FA2   FA3 Communality Uniquenesses
##    <chr>     <dbl> <dbl> <dbl>       <dbl>        <dbl>
##  1 ALT_PLANT -0.83 -0.38  0.2         0.87         0.13
##  2 ALT_ESP   -0.84 -0.29  0.23        0.85         0.15
##  3 COMPES    -0.39 -0.92 -0.05        0.99         0.01
##  4 DIAMES    -0.84 -0.38  0.29        0.94         0.06
##  5 COMP_SAB  -0.88  0     0.18        0.8          0.2 
##  6 DIAM_SAB  -0.36 -0.91 -0.03        0.95         0.05
##  7 MGE       -0.74 -0.65  0           0.98         0.02
##  8 NFIL      -0.21 -0.08  0.97        0.99         0.01
##  9 MMG       -0.93 -0.28 -0.2         0.98         0.02
## 10 NGE       -0.04 -0.94  0.33        0.99         0.01
## -------------------------------------------------------------------------------
## Comunalit Mean: 0.9358222 
## -------------------------------------------------------------------------------
## Selection differential 
## -------------------------------------------------------------------------------
## # A tibble: 10 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 ALT_PLA~ FA1      2.46   2.87  0.412  16.8  0.973  0.401  16.3  increa~   100
##  2 ALT_ESP  FA1      1.31   1.64  0.327  24.9  0.978  0.319  24.3  increa~   100
##  3 DIAMES   FA1     48.7   52.1   3.35    6.87 0.913  3.06    6.28 increa~   100
##  4 COMP_SAB FA1     28.5   29.7   1.26    4.43 0.942  1.19    4.17 increa~   100
##  5 MGE      FA1    168.   214.   45.3    26.9  0.933 42.2    25.1  increa~   100
##  6 MMG      FA1    334.   378.   43.7    13.1  0.929 40.6    12.2  increa~   100
##  7 COMPES   FA2     15.2   16.4   1.15    7.53 0.831  0.953   6.26 increa~   100
##  8 DIAM_SAB FA2     15.9   16.9   1.00    6.32 0.824  0.828   5.21 increa~   100
##  9 NGE      FA2    505.   556.   51.4    10.2  0.715 36.7     7.28 increa~   100
## 10 NFIL     FA3     15.8   16.9   1.10    6.97 0.784  0.863   5.47 increa~   100
## ------------------------------------------------------------------------------
## Selected genotypes
## -------------------------------------------------------------------------------
## H2 H6
## -------------------------------------------------------------------------------

# radar plot
plot(mgidi_mod)


# pontos fortes e fracos
plot(mgidi_mod, type = "contribution", genotypes = "all")

print_tbl(mgidi_mod$sel_dif)
VAR Factor Xo Xs SD SDperc h2 SG SGperc sense goal
ALT_PLANT FA1 2.462 2.874 0.412 16.753 0.973 0.401 16.305 increase 100
ALT_ESP FA1 1.313 1.640 0.327 24.873 0.978 0.319 24.328 increase 100
DIAMES FA1 48.739 52.087 3.349 6.870 0.913 3.059 6.276 increase 100
COMP_SAB FA1 28.463 29.723 1.260 4.426 0.942 1.187 4.171 increase 100
MGE FA1 168.436 213.692 45.256 26.869 0.933 42.224 25.068 increase 100
MMG FA1 333.815 377.517 43.702 13.092 0.929 40.603 12.163 increase 100
COMPES FA2 15.233 16.380 1.147 7.530 0.831 0.953 6.259 increase 100
DIAM_SAB FA2 15.887 16.892 1.005 6.324 0.824 0.828 5.211 increase 100
NGE FA2 504.651 556.058 51.407 10.187 0.715 36.747 7.282 increase 100
NFIL FA3 15.795 16.896 1.101 6.973 0.784 0.863 5.466 increase 100

  1. Olivoto, T., Lúcio, A. D. C., Silva, J. A. G., Marchioro, V. S., Souza, V. Q., & Jost, E. (2019). Mean Performance and Stability in Multi‐Environment Trials I: Combining Features of AMMI and BLUP Techniques. Agronomy Journal, 111(6), 2949–2960. https://doi.org/10.2134/agronj2019.03.0220 ↩︎

  2. Olivoto, T., Lúcio, A. D. C., Silva, J. A. G., Sari, B. G., & Diel, M. I. (2019). Mean Performance and Stability in Multi‐Environment Trials II: Selection Based on Multiple Traits. Agronomy Journal, 111(6), 2961–2969. https://doi.org/10.2134/agronj2019.03.0221 ↩︎

Previous
Next