Capítulo 14 Interação genótipo-vs-ambiente

Uma cultura pode ser vista como um sistema complexo com resultados (por exemplo, rendimento de grãos) que são afetados por informações genéticas, fisiológicas, pedoclimáticas e de manejo. Melhoristas e geneticistas se esforçam continuamente para aumentar a produtividade das culturas visando suprir a demanda mundial cada vez maior por alimentos. É na fase final de um programa de melhoramento de plantas que muito esforço e recursos precisam ser investidos na avaliação dos genótipos (g) a serem selecionados. Geralmente algumas centenas de genótipos precisam ser avaliados em um grande número de ambientes (e). Estes ensaios são conhecidos como ensaios multi-ambientes () e os dados destes experimentos resultam em uma matriz M de dimensões \(g \times e\) . É nesta fase do processo que surge um dos maiores desafios da análise de : compreender a interação genótipo-vs-ambiente buscando novas formas de explorá-la e utilizá-la a favor da seleção de genótipos com estabilidade produtiva satisfatória.

Funções do pacote metan, acrônimo para multi environment trial analysis serão utilizadas para análise de dados de ensaios multi-ambientes. O foi desenvolvido em linguagem R e é distribuído sob a licença GPL (General Public Licence) 3.0. Isto significa que qualquer pessoa pode: (i) utilizar o código sem nenhuma restrição/pagamento; (ii) estudar o código e adaptá-lo às suas necessidades; (iii) sugerir modificações/melhorias no código de modo a aperfeiçoá-lo para uma comunidade maior de usuários, mantendo, porém, os direitos do autor. O pacote metan fornece funções úteis para analisar dados de ensaios multi-ambientes usando métodos paramétricos e não paramétricos, incluindo, mas não limitados a:

  • Análise gráfica da interação genótipo-vs-ambiente;
  • Análise de variância individual
  • Procedimentos de validação cruzada para modelos da família AMMI e BLUP;
  • Estimativas usando AMMI com diferentes números de termos multiplicativos;
  • Índices de estabilidade baseados em AMMI;
  • Biplots baseados no modelo GGE;
  • Predição baseada em modelos de efeito misto;
  • Índices de estabilidade baseados em BLUP;
  • Componentes de variância e parâmetros genéticos em modelos de efeito misto;
  • Ferramentas gráficas para confecção de biplots.
  • Estatísticas de estabilidade paramétrica e não paramétrica.

Nesta seção, usaremos o conjunto de dados data_ge disponível no pacote metan. Para mais informações, por favor, consulte ?data_ge. Outros conjuntos de dados podem ser usados desde que as seguintes colunas estejam no conjunto de dados: ambiente, genótipo, bloco e variável(eis) resposta.

14.1 Análise gráfica da interação

A função ge_plot() pode ser usada para visualizar o desempenho do genótipo através dos ambientes. O losango preto mostra a média para cada ambiente.

a <- ge_plot (data_ge, ENV, GEN, GY)
b <- ge_plot (data_ge, ENV, GEN, GY) + ggplot2::coord_flip ()
arrange_ggplot(a, b)

Para identificar o genótipo vencedor em cada ambiente, podemos usar a função ge_winners().

ge_winners(data_ge2, ENV, GEN, resp = everything())
# # A tibble: 4 x 16
#   ENV   PH    EH    EP    EL    ED    CL    CD    CW    KW    NR    NKR   CDED 
#   <fct> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# 1 A1    H3    H1    H1    H6    H6    H8    H6    H6    H6    H2    H4    H8   
# 2 A2    H2    H1    H1    H6    H2    H2    H6    H2    H2    H2    H6    H13  
# 3 A3    H13   H13   H6    H4    H13   H6    H2    H7    H13   H13   H4    H6   
# 4 A4    H5    H5    H10   H7    H11   H5    H7    H5    H7    H11   H9    H10  
# # ... with 3 more variables: PERK <chr>, TKW <chr>, NKE <chr>

Ou obtenha a classificação dos genótipos em cada ambiente.

ge_winners(data_ge2, ENV, GEN, resp = everything (), type = "ranks")
# # A tibble: 52 x 16
#    ENV   PH    EH    EP    EL    ED    CL    CD    CW    KW    NR    NKR   CDED 
#    <fct> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#  1 A1    H3    H1    H1    H6    H6    H8    H6    H6    H6    H2    H4    H8   
#  2 A1    H9    H4    H10   H11   H13   H9    H11   H8    H13   H13   H5    H9   
#  3 A1    H4    H9    H4    H10   H10   H6    H9    H9    H9    H3    H6    H7   
#  4 A1    H5    H10   H7    H4    H9    H10   H10   H7    H2    H7    H11   H12  
#  5 A1    H2    H7    H12   H5    H8    H13   H5    H5    H1    H12   H3    H11  
#  6 A1    H10   H5    H11   H9    H2    H7    H4    H13   H4    H8    H2    H10  
#  7 A1    H7    H3    H6    H3    H3    H12   H8    H4    H3    H6    H1    H6   
#  8 A1    H13   H11   H9    H7    H1    H11   H3    H12   H8    H10   H13   H13  
#  9 A1    H6    H13   H13   H1    H7    H5    H7    H10   H5    H4    H8    H5   
# 10 A1    H11   H6    H5    H12   H4    H1    H1    H3    H10   H1    H12   H1   
# # ... with 42 more rows, and 3 more variables: PERK <chr>, TKW <chr>, NKE <chr>

Para mais detalhes sobre os testes, podemos usar ge_details()

ge_details(data_ge2, ENV, GEN, resp = everything())
# # A tibble: 10 x 16
#    Parameters PH    EH    EP    EL    ED    CL    CD    CW    KW    NR    NKR  
#    <chr>      <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#  1 Mean       "2.4~ "1.3~ "0.5~ "15.~ "49.~ "29.~ "15.~ "24.~ "172~ "16.~ "32.~
#  2 SE         "0.0~ "0.0~ "0"   "0.1" "0.2~ "0.1~ "0.0~ "0.5" "2.6~ "0.1~ "0.2~
#  3 SD         "0.3~ "0.2~ "0.0~ "1.2~ "2.7~ "2.3" "1.1~ "6.2~ "32.~ "1.6~ "3.4~
#  4 CV         "13.~ "21.~ "10.~ "8.2~ "5.5~ "7.9~ "7.3~ "25.~ "18.~ "10.~ "10.~
#  5 Min        "1.7~ "0.7~ "0.3~ "11.~ "43.~ "23.~ "12.~ "11.~ "105~ "12.~ "23.~
#  6 Max        "3.0~ "1.8~ "0.6~ "17.~ "54.~ "34.~ "18.~ "38.~ "250~ "21.~ "42 ~
#  7 MinENV     "A3 ~ "A3 ~ "A3 ~ "A3 ~ "A3 ~ "A3 ~ "A3 ~ "A3 ~ "A3 ~ "A3 ~ "A3 ~
#  8 MaxENV     "A1 ~ "A1 ~ "A1 ~ "A1 ~ "A1 ~ "A1 ~ "A1 ~ "A1 ~ "A1 ~ "A1 ~ "A1 ~
#  9 MinGEN     "H10~ "H8 ~ "H8 ~ "H12~ "H9 ~ "H12~ "H12~ "H11~ "H9 ~ "H9 ~ "H12~
# 10 MaxGEN     "H1 ~ "H1 ~ "H1 ~ "H6 ~ "H6 ~ "H6 ~ "H5 ~ "H5 ~ "H6 ~ "H13~ "H4 ~
# # ... with 4 more variables: CDED <chr>, PERK <chr>, TKW <chr>, NKE <chr>

14.2 Análise de variância individual

A função anova_ind() pode ser utilziada para realizar uma análise de variância para cada ambiente, conforme o seguinte código.

ind <- anova_ind(data_ge, ENV, GEN, REP, GY)
print(ind$GY$individual)
# # A tibble: 14 x 12
#    ENV    MEAN   MSG   FCG     PFG    MSB    FCB     PFB    MSE    CV    h2
#    <chr> <dbl> <dbl> <dbl>   <dbl>  <dbl>  <dbl>   <dbl>  <dbl> <dbl> <dbl>
#  1 E1     2.52 0.337  2.34 5.94e-2 0.0652  0.453 6.43e-1 0.144  15.1  0.573
#  2 E10    2.18 0.296 11.1  1.10e-5 0.654  24.5   7.28e-6 0.0267  7.51 0.910
#  3 E11    1.37 0.151  1.44 2.44e-1 0.377   3.59  4.86e-2 0.105  23.7  0.304
#  4 E12    1.61 0.320  5.98 6.47e-4 0.0919  1.72  2.08e-1 0.0535 14.4  0.833
#  5 E13    2.91 0.713  7.18 2.10e-4 0.0767  0.772 4.77e-1 0.0994 10.8  0.861
#  6 E14    1.78 0.131  1.73 1.53e-1 0.104   1.37  2.78e-1 0.0753 15.4  0.423
#  7 E2     3.18 0.207  1.16 3.76e-1 0.698   3.91  3.88e-2 0.179  13.3  0.136
#  8 E3     4.06 0.335  1.87 1.23e-1 0.489   2.73  9.21e-2 0.179  10.4  0.466
#  9 E4     3.68 0.531  3.86 7.12e-3 0.116   0.846 4.46e-1 0.138  10.1  0.741
# 10 E5     3.91 0.526  7.93 1.10e-4 0.219   3.30  6.02e-2 0.0664  6.59 0.874
# 11 E6     2.66 0.135  2.30 6.35e-2 0.160   2.73  9.22e-2 0.0586  9.09 0.565
# 12 E7     1.99 0.337  3.70 8.73e-3 0.381   4.19  3.22e-2 0.0910 15.2  0.730
# 13 E8     2.54 0.215  7.72 1.31e-4 0.817  29.4   2.15e-6 0.0278  6.57 0.870
# 14 E9     3.06 0.679  6.12 5.62e-4 0.583   5.25  1.60e-2 0.111  10.9  0.837
# # ... with 1 more variable: AS <dbl>

14.3 Baseada em regressão

Eberhart and Russell (1966) popularizaram a análise de estabilidade baseada em regressão. Nesse procedimento, a análise de adaptabilidade e estabilidade é realizada por meio de ajustes de equações de regressão onde a variável dependente é estimada em função de um índice ambiental, conforme o seguinte modelo:

\[ \mathop Y\nolimits_{ij} = {\beta _{0i}} + {\beta _{1i}}{I_j} + {\delta _{ij}} + {\bar \varepsilon _{ij}} \]

onde \({\beta _{0i}}\) é a média geral do genótipo i (i = 1, 2, …, I); \({\beta _{1i}}\) é a respota linear do genótipo i ao índice ambiental; Ij é o índice ambiental (j = 1, 2, …, e), onde \({I_j} = [(y_{.j}/g)- (y_{..}/ge)]\), \({\delta _{ij}}\) é o desvio da regressão, e \({\bar \varepsilon _{ij}}\) é o erro experimental. O modelo é ajustado com a função ge_reg() . Os métodos S3 plot() e summary() podem ser utilizados para explorar os resultados.

reg_model <- ge_reg(data_ge, ENV, GEN, REP, GY)
reg_model$GY$anova
# # A tibble: 17 x 6
#    SV                       Df `Sum Sq` `Mean Sq` `F value`  `Pr(>F)`
#    <chr>                 <dbl>    <dbl>     <dbl>     <dbl>     <dbl>
#  1 "Total"                 139  324.       2.33      NA     NA       
#  2 "GEN"                     9   13.0      1.44       6.28   3.05e- 7
#  3 "ENV + (GEN x ENV)"     130  311.       2.39      NA     NA       
#  4 "ENV (linear)"            1  280.     280.        NA     NA       
#  5 " GEN x ENV (linear)"     9    3.61     0.402      1.75   8.58e- 2
#  6 "Pooled deviation"      120   27.6      0.230     NA     NA       
#  7 "G1"                     12    1.11     0.0924     1.06   3.92e- 1
#  8 "G10"                    12    7.54     0.629      7.22   1.66e-11
#  9 "G2"                     12    2.95     0.246      2.82   1.14e- 3
# 10 "G3"                     12    0.699    0.0582     0.669  7.81e- 1
# 11 "G4"                     12    2.23     0.186      2.14   1.48e- 2
# 12 "G5"                     12    1.49     0.124      1.42   1.55e- 1
# 13 "G6"                     12    1.27     0.106      1.22   2.71e- 1
# 14 "G7"                     12    3.25     0.270      3.11   3.72e- 4
# 15 "G8"                     12    2.54     0.211      2.43   5.15e- 3
# 16 "G9"                     12    4.54     0.378      4.34   2.42e- 6
# 17 "Pooled error"          280   24.4      0.0870    NA     NA
reg_model$GY$regression
# # A tibble: 10 x 6
#    GEN       Y slope deviations  RMSE    R2
#    <chr> <dbl> <dbl>      <dbl> <dbl> <dbl>
#  1 G1     2.60 1.06    -0.00142 0.162 0.966
#  2 G10    2.47 1.12     0.177   0.424 0.823
#  3 G2     2.74 1.05     0.0497  0.265 0.913
#  4 G3     2.96 1.03    -0.0128  0.129 0.977
#  5 G4     2.64 0.937    0.0298  0.231 0.917
#  6 G5     2.54 0.887    0.00902 0.188 0.937
#  7 G6     2.53 0.861    0.00304 0.174 0.942
#  8 G7     2.74 0.819    0.0579  0.278 0.852
#  9 G8     3.00 1.03     0.0382  0.246 0.922
# 10 G9     2.51 1.19     0.0938  0.329 0.897
plot(reg_model)

14.4 Índice de confiança genotípico

Annicchiarico (1992) propôs um método de estabilidade em que o parâmetro de estabilidade é medido pela superioridade do genótipo em relação à média de cada ambiente, de acordo com o seguinte modelo:

\[ {Z_ {ij}} = \frac{{{Y_ {i}}}} {{{{\bar Y} _ {. J}}}} \times 100 \]

O índice de confiança genotípico do genótipo i (\(W_i\)) é então estimado da seguinte forma:

\[ W_i = Z_{i.} / E - \alpha \times sd (Z_{i.}) \]

Onde \(\alpha\) é o quantil da distribuição normal padrão a uma dada probabilidade de erro (\(\alpha \approx 1.64\) a 0.05). O método é implementado usando a função Annicchiarico() . O índice de confiança é estimado considerando todos os ambientes, os ambientes favoráveis (índice positivo) e os ambientes desfavoráveis (índice negativo), como segue:

ann <- Annicchiarico(data_ge, ENV, GEN, REP, GY)
ann$GY$general
# # A tibble: 10 x 6
#    GEN       Y Mean_rp Sd_rp    Wi  rank
#    <chr> <dbl>   <dbl> <dbl> <dbl> <dbl>
#  1 G1     2.60    96.5  7.38  91.5     6
#  2 G10    2.47    90.3 18.9   77.5    10
#  3 G2     2.74   103.  12.1   94.5     4
#  4 G3     2.96   111.   4.59 108.      1
#  5 G4     2.64    99.1  8.03  93.7     5
#  6 G5     2.54    95.5  7.74  90.2     8
#  7 G6     2.53    95.5  7.61  90.4     7
#  8 G7     2.74   105.  12.5   96.0     3
#  9 G8     3.00   113.   8.87 107.      2
# 10 G9     2.51    91.6 13.8   82.3     9

14.5 Índice de superioridade genotípico

A função superiority() implementa o método não-paramétrico proposto por Lin and Binns (1988), que considera que a medida de superioridade geral da cultivar para dados de cultivar x localização é definida como quadrado médio da distância entre a resposta da cultivar e a média de resposta máxima em todas as localidades, de acordo com o seguinte modelo.

\[ P_i = \sum \limits_{j = 1} ^ n {(y_ {ij} - y _ {. J}) ^ 2 / (2n)} \] onde n é o número de ambientes. Da mesma forma que o índice de confiança genotípico, o índice de superioridade é calculado por todos os ambientes, para os favoráveis e para os desfavoráveis.

super <- superiority(data_ge, ENV, GEN, GY)
super$GY$index
# # A tibble: 10 x 8
#    GEN       Y   Pi_a   R_a   Pi_f   R_f    Pi_u   R_u
#    <chr> <dbl>  <dbl> <dbl>  <dbl> <dbl>   <dbl> <dbl>
#  1 G1     2.60 0.169      5 0.228      4 0.125       6
#  2 G10    2.47 0.344     10 0.475     10 0.245      10
#  3 G2     2.74 0.126      3 0.149      3 0.108       5
#  4 G3     2.96 0.0410     1 0.0723     1 0.0175      2
#  5 G4     2.64 0.173      6 0.289      5 0.0853      4
#  6 G5     2.54 0.240      8 0.382      8 0.133       7
#  7 G6     2.53 0.238      7 0.377      7 0.134       8
#  8 G7     2.74 0.149      4 0.318      6 0.0214      3
#  9 G8     3.00 0.0412     2 0.0882     2 0.00588     1
# 10 G9     2.51 0.291      9 0.390      9 0.217       9

14.6 Estratificação ambiental

Um método que combina análise de estabilidade e estratificação ambiental usando análise fatorial foi proposto por Murakami and Cruz (2004). Este método é implementado com a função ge_factanal(), como segue:

fato <- ge_factanal(data_ge, ENV, GEN, REP, GY)
plot(fato)
print(fato$GY$PCA)
# # A tibble: 14 x 4
#    PCA   Eigenvalues  Variance Cumul_var
#    <chr>       <dbl>     <dbl>     <dbl>
#  1 PC1      5.60e+ 0  4.00e+ 1      40.0
#  2 PC2      2.51e+ 0  1.79e+ 1      58.0
#  3 PC3      2.41e+ 0  1.72e+ 1      75.1
#  4 PC4      1.37e+ 0  9.80e+ 0      84.9
#  5 PC5      1.13e+ 0  8.05e+ 0      93.0
#  6 PC6      4.87e- 1  3.48e+ 0      96.5
#  7 PC7      3.03e- 1  2.16e+ 0      98.6
#  8 PC8      1.29e- 1  9.25e- 1      99.6
#  9 PC9      6.24e- 2  4.46e- 1     100  
# 10 PC10     1.72e-16  1.23e-15     100  
# 11 PC11     1.41e-16  1.01e-15     100  
# 12 PC12    -1.74e-16 -1.25e-15     100  
# 13 PC13    -2.67e-16 -1.91e-15     100  
# 14 PC14    -3.01e-16 -2.15e-15     100
print(fato$GY$FA)
# # A tibble: 14 x 8
#    Env        FA1     FA2      FA3     FA4     FA5 Communality Uniquenesses
#    <chr>    <dbl>   <dbl>    <dbl>   <dbl>   <dbl>       <dbl>        <dbl>
#  1 E1    -0.881    0.327   0.00927 -0.0631  0.274        0.963      0.0369 
#  2 E10   -0.942   -0.158  -0.0820   0.113   0.174        0.962      0.0380 
#  3 E11   -0.929   -0.233  -0.0336  -0.242   0.110        0.989      0.0111 
#  4 E12   -0.848    0.135   0.0263   0.0941  0.241        0.805      0.195  
#  5 E13   -0.940    0.108  -0.0842  -0.0637 -0.235        0.961      0.0391 
#  6 E14   -0.150   -0.123  -0.916   -0.0872  0.265        0.954      0.0463 
#  7 E2    -0.198   -0.0521 -0.126   -0.969   0.0328       0.997      0.00266
#  8 E3    -0.0806   0.910   0.341   -0.0173 -0.110        0.963      0.0370 
#  9 E4     0.209    0.543  -0.272   -0.728  -0.120        0.957      0.0433 
# 10 E5    -0.777    0.392  -0.269   -0.0470 -0.267        0.904      0.0963 
# 11 E6    -0.524    0.569  -0.309   -0.174  -0.238        0.781      0.219  
# 12 E7    -0.244    0.342  -0.520    0.297   0.619        0.918      0.0820 
# 13 E8     0.00161 -0.0589 -0.914   -0.226  -0.143        0.911      0.0891 
# 14 E9    -0.0794  -0.291  -0.0183  -0.0539  0.927        0.954      0.0463
print(fato$GY$env_strat)
# # A tibble: 14 x 6
#    Env   Factor  Mean   Min   Max    CV
#    <chr> <chr>  <dbl> <dbl> <dbl> <dbl>
#  1 E1    FA1     2.52 1.97   2.90 13.3 
#  2 E10   FA1     2.18 1.54   2.57 14.4 
#  3 E11   FA1     1.37 0.899  1.68 16.4 
#  4 E12   FA1     1.61 1.02   2    20.3 
#  5 E13   FA1     2.91 1.83   3.52 16.8 
#  6 E5    FA1     3.91 3.37   4.81 10.7 
#  7 E3    FA2     4.06 3.43   4.57  8.22
#  8 E6    FA2     2.66 2.34   2.98  7.95
#  9 E14   FA3     1.78 1.43   2.06 11.7 
# 10 E8    FA3     2.54 2.05   2.88 10.5 
# 11 E2    FA4     3.18 2.61   3.61  8.25
# 12 E4    FA4     3.68 3.02   4.27 11.5 
# 13 E7    FA5     1.99 1.39   2.55 16.8 
# 14 E9    FA5     3.06 1.94   3.72 15.6

A maneira mais fácil de calcular os índices de estabilidade acima mencionados é usando a função ge_stats().

stat_ge <- ge_stats(data_ge, ENV, GEN, REP, GY)

Se você deseja exportar um resumo dos resultados, a maneira mais simples é usando função summary().

summary(stat_ge, export = TRUE)

Este comando criará um arquivo de texto chamado ge_stats summary.txt no diretório de trabalho atual.

14.7 O modelo AMMI

O modelo linear mais simples com efeito de interação usado na análise de EMA é

\[ {y_{ijk}} = {\rm{ }}\mu {\rm{ }} + \mathop \alpha \nolimits_i + \mathop \tau \nolimits_j + \mathop {(\alpha \tau )}\nolimits_{ij} + \mathop \gamma \nolimits_{jk} + {\rm{ }}\mathop \varepsilon \nolimits_{ijk} \]

onde \({y_{ijk}}\) é a variável resposta observada no k-ésimo bloco do i-ésimo genótipo no j-ésimo ambiente (i = 1, 2, …, g; j = 1, 2, …, e; k = 1, 2, …, b); \(\mu\) é a média geral; \(\mathop\alpha\nolimits_i\) é o efeito principal do genótipo i; \(\mathop \tau \nolimits_j\) é o principal efeito do ambiente j; \(\mathop {(\alpha \tau )}\nolimits_{ij}\) é o efeito de interação do genótipo i com o ambiente j; \(\mathop \gamma \nolimits_{jk}\) é o efeito do bloco k no ambiente j; e \({\rm{ }}\mathop \varepsilon \nolimits_{ijk}\) é o erro aleatório assumindo \(i.i.d \sim N(0, \sigma^2 )\).

Métodos que combinam diferentes princípios estatísticos ganharam espaço na análise de por volta da década 1960, com destaque especial ao estudo de Gollob (1968), que propôs um método que combina os benefícios da análise de fatores e análise de variância em um único método para estudar a estabilidade . Naquela época este método era conhecido como FANOVA. Atualmente este mesmo método foi popularizado por Gauch (1988) com o acrônimo AMMI.

A análise AMMI utiliza análise aditiva de variância aos fatores principais (genótipo e ambiente) e decomposição por valores singulares ao residual do modelo aditivo, isto é, o efeito da interação genótipo-vs-ambiente somado ao erro experimental. Esta matriz dos efeitos não aditivos, então, pode ser aproximadamente exibida por meio de biplots Gabriel (1971). Este método tem ganhado destaque nas últimas décadas, principalmente devido a rápida evolução computacional, o que tornou possível as complexas decomposições de matrizes de alta ordem.

De posse de uma matriz de dupla entrada oriunda de ensaios multiambientes, a estimativa da variável resposta do i-ésimo genótipo no j-ésimo ambiente é obtida utilizando AMMI de acordo com o seguinte modelo:

\[ {y_{ij}} = \mu + {\alpha_i} + {\tau_j} + \sum\limits_{k = 1}^k {{\lambda _k}{a_{ik}}} {t_{jk}} + {\rho _{ij}} + {\varepsilon _{ij}} \]

onde \({\lambda_k}\) é o valor singular para o k-ésimo eixo do componente principal; \(a_{ik}\) é o i-ésimo elemento do k-ésimo autovetor de genótipos; \(t_{jk}\) é o j-ésimo elemento do k-ésimo autovetor de ambientes. Um resíduo \(\rho _{ij}\) permanece, se todos os k-PCAs não são considerados, onde k = \(min(G-1; E-1)\).

14.7.1 Ajuste do modelo

O modelo AMMI é ajustado com a função performs_ammi(). O primeiro argumento é os dados, no nosso exemplo data_ge. Os próximos argumentos (ENV, GEN e REP) são os nomes das colunas que contém os níveis dos fatores ambiente, genótipo, repetição, respectivamente. No argumento resp são declaradas as variáveis resposta. Uma única variável pode ser analizada (como em nosso exemplo) ou, um vetor de variáveis, usando, por exemplo resp = c(GY, HM).


AMMI_model <- performs_ammi(data_ge, ENV, GEN, REP, GY)
# variable GY 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df  Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV  13 279.574 21.5057   62.33 0.00e+00          .           .
#   REP(ENV)  28   9.662  0.3451    3.57 3.59e-08          .           .
#        GEN   9  12.995  1.4439   14.93 2.19e-19          .           .
#    GEN:ENV 117  31.220  0.2668    2.76 1.01e-11          .           .
#        PC1  21  10.749  0.5119    5.29 0.00e+00       34.4        34.4
#        PC2  19   9.924  0.5223    5.40 0.00e+00       31.8        66.2
#        PC3  17   4.039  0.2376    2.46 1.40e-03       12.9        79.2
#        PC4  15   3.074  0.2049    2.12 9.60e-03        9.8          89
#        PC5  13   1.446  0.1113    1.15 3.18e-01        4.6        93.6
#        PC6  11   0.932  0.0848    0.88 5.61e-01          3        96.6
#        PC7   9   0.567  0.0630    0.65 7.53e-01        1.8        98.4
#        PC8   7   0.362  0.0518    0.54 8.04e-01        1.2        99.6
#        PC9   5   0.126  0.0252    0.26 9.34e-01        0.4         100
#  Residuals 252  24.367  0.0967      NA       NA          .           .
#      Total 536 389.036  0.7258      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# All variables with significant (p < 0.05) genotype-vs-environment interaction
# Done!

Note que os argumentos inseridos na função obedecem a ordem dos argumentos requiridos na função [veja args(waas)]. Se obedecida esta ordem de avaliação, não é necessário declarar qual argumento está sendo inserido. Por exemplo, se mudássemos a ordem de entrada, teríamos um código semelhante a waas(data_ge, gen = GEN, env = ENV, REP, resp = c(PH, ED, TKW, NKR)).

14.7.2 Analise residual

O pacote metan conta com uma opção para análise residual do modelo AMMI ajustado. Gráficos podem ser obtidos utilizando o seguinte comando.

plot(AMMI_model)

A figura acima, obtida com a função autoplot(), mostra 4 gráficos. Os dois primeiros são os mais importantes. O primeiro (Residual vs fitted) pode ser utilizado para identificar a homogeneidade das variâncias. Uma distribuição aleatória dos pontos no gráfico deve ser observada. Quando um padrão de distibuição é observado –como, por exemplo, a distribuição dos pontos em forma de funil– uma investigação deve ser realizada, pois este padrão indica a possiblidade de heterogeneidade das variâncias. O segundo gráfico (Normal Q-Q) nos informa quanto a normalidade dos resíduos, ou seja, é desejado que os pontos sejam distribuídos ao redor da linha diagonal.

14.7.3 Escolha do número de termos multiplicativos

Conforme já discutido, a análise AMMI aplica a técnica de decomposição por valores singulares na matriz dos efeitos não aditivos do modelo (A). Logo, esta matriz pode ser aproximada pela pelo seguinte modelo: \(A = U \lambda V^T\), onde onde U é uma matriz g \(\times\) e contendo os vetores singulares de \(AA^T\) e formam a base ortonormal para os efeitos de genótipos; \(V^T\) é uma matriz e \(\times\) e que contém os vetores singulares de \(\mathbf{A^TA}\) e formam a base ortonormal para os efeitos de ambientes; e \(\lambda\) é uma matriz diagonal e \(\times\) e contendo k-valores singulares de \(A^TA\) , onde k = \(min(G-1; E-1)\). Assim, diferentes modelos (dependendo do número de termos multiplicativos utilizados) podem ser utilziados para predizer o rendimento do genótipo i no ambiente j. A tabela abaixo mostra os possíveis modelos. No modelo AMMI0 apenas os efeitos aditivos são considerados. No modelo AMMI1, o primeiro termo multiplicativo é considerado, e assim por diante, até o modelo AMMIF, onde \(min(G-1;E-1)\) termos são considerados.

Família AMMI Resposta esperado do genótipo i no ambiente j
AMMI0 \(\hat{y}_{ij} = \bar{y}_{i.} + \bar{y}_{.j} - \bar{y}_{..}\)
AMMI1 \(\hat{y}_{ij} = \bar{y}_{i.} + \bar{y}_{.j} - \bar{y}_{..} +\lambda_1 a_{i1}t_{j1}\)
AMMI2 \(\hat{y}_{ij} = \bar{y}_{i.} + \bar{y}_{.j} - \bar{y}_{..} +\lambda_1 a_{i1}t_{j1}+\lambda_2 a_{i2}t_{j2}\)
AMMIF \(\hat{y}_{ij} = \bar{y}_{i.} + \bar{y}_{.j} - \bar{y}_{..} +\lambda_1 a_{i1}t_{j1}+\lambda_2 a_{i2}t_{j2}+...+\lambda_p a_{ip}t_{jp}\)

A escolha do número de termos multiplicativos a ser utilizado é baseada em basicamente dois critérios de sucesso de análise: Postdiscritive sucess e Predictive sucess. Por definição, Predictive sucess significa literalmente a afirmação prévia do que acontecerá em algum momento futuro. Neste contexto, testes de validação cruzada (cross-validation) podem ser utilizadas para avaliar o sucesso preditivo dos membros de modelos da familia AMMI (Tiago Olivoto, Lúcio, et al. 2019a). Por outro lado, Postdiscritive sucess significa fazer uma afirmação ou dedução sobre algo que aconteceu no passado. Na escolha do número de termos multiplicativos da análise AMMI este sucesso pode ser calculado utilizando testes como o proposto por Gollob (1968).

14.7.3.1 Postdiscritive sucess

No objeto anova gerado pela função waas() testes de hipóteses são realizados e probabilidades de erro são atribuídas para cada modelo considerando a distribuição de graus de liberdade proposto por Gollob (1968). Assim é possível identificar qual é o número ideal de termos a ser considerado na predição. Em nosso exemplo, dois termos foram significativos a 5% de probabilidade de erro.

14.7.3.2 Predictive sucess

O pacote metan fornece uma solução completa para validaçao cruzada do modelo AMMI. Utilizando a função cv_ammif() , por exemplo, é possível realizar um teste de cross-validation para a família de modelos AMMI (AMMI0-AMMIF) usando dados com repetições. Automaticamente, a primeira validação é realizada considerando a AMMIF (todos possíveis IPCAs são usados). Considerando esse modelo, o conjunto de dados original é dividido em dois conjuntos de dados: dados de modelagem e dados de validação. O conjunto de dados “modelagem” possui todas as combinações (genótipo vs ambiente) com R-1 repetições. O conjunto de dados “validação” tem uma repetição. O diagrama abaixo representa o procedimento realizado.

A divisão do conjunto de dados em dados de modelagem e validação depende do design informado. Considerando um delineamento de blocos completos casualizados (DBC), blocos completos são aleatoriamente selecionados dentro de ambientes, como mostrado por Tiago Olivoto, Lúcio, et al. (2019a). O bloco restante serve dados de validação. Se design = "CRD" for informado, assim declarando que um delineamento intericamente casualizado (DIC) foi usado, observações são aleatoriamente selecionadas para cada tratamento (combinação genótipo-vs-ambiente). Este é o mesmo procedimento sugerido por Gauch (1988). Os valores estimados para o membro da família AMMI em estudo são então comparados com os dados de “validação” e um erro de predição \(\hat{z}_{ij}\) é estimado para cada tratamento. A raiz quadrada do quadrado médio da diferença de predição (RMSPD) é calculado. Este procedimento é repetido n vezes, utilizando o argumento nboot = n. Ao final do procedimento, o algorítimo armazena as n estimativas do RMSPD para o modelo em questão, e um novo modelo é então testado seguindo os mesmos passos.

Como exemplo, a função cv_ammi() é usada para calcular um procedimento de validação cruzada para os modelos AMMI0, AMMI2 e AMMIF (9 eixos).

AMMI0 <- cv_ammi(data_ge, ENV, GEN, REP, GY, naxis = 0) # AMMI0
AMMI2 <- cv_ammi(data_ge, ENV, GEN, REP, GY, naxis = 2) # AMMI2
AMMI9 <- cv_ammi(data_ge, ENV, GEN, REP, GY, naxis = 9) # AMMIF
  • AMMI0 para AMMIF A função cv_ammif() é usada para calcular um procedimento de validação cruzada para todos os membros do modelo da família AMMI. Nesse caso, AMMI0-AMMI9.
AMMIF <- cv_ammif(data_ge, ENV, GEN, REP, GY)
  • Validação cruzada para previsão de BLUP A função cv_blup () fornece uma validação cruzada de dados baseados em replicação usando modelos mistos. Por padrão, blocos completos são selecionados aleatoriamente para cada ambiente. Usando o argumento `random ’, é possível escolher os efeitos aleatórios do modelo, como mostrado abaixo.

  • Genótipo e genótipo versus ambiente como efeitos aleatórios

BLUP_g <- cv_blup(dados_ge, ENV, GEN, REP, GY, random = "gen")
  • Ambiente, replicação dentro do ambiente e interação como efeitos aleatórios
BLUP_e <- cv_blup(dados_ge, ENV, GEN, REP, GY, random = "env")
  • Um modelo aleatório (todos os termos como efeitos aleatórios)
BLUP_ge <- cv_blup(dados_ge, ENV, GEN, REP, GY, random = "all")

14.8 Imprimindo os meios das estimativas RMSPD

bind_mod <- bind_cv(AMMIF, BLUP_g, bind = "means")
print(bind_mod$RMSPD)
# # A tibble: 11 x 6
#    MODEL        mean     sd      se  Q2.5 Q97.5
#    <fct>       <dbl>  <dbl>   <dbl> <dbl> <dbl>
#  1 BLUP_g_RCBD 0.405 0.0249 0.00176 0.357 0.453
#  2 AMMI2       0.411 0.0242 0.00171 0.369 0.460
#  3 AMMI4       0.416 0.0234 0.00166 0.373 0.462
#  4 AMMI3       0.416 0.0215 0.00152 0.377 0.457
#  5 AMMI5       0.422 0.0232 0.00164 0.377 0.464
#  6 AMMI6       0.422 0.0219 0.00155 0.381 0.462
#  7 AMMI7       0.425 0.0199 0.00141 0.381 0.458
#  8 AMMI8       0.427 0.0204 0.00145 0.387 0.462
#  9 AMMIF       0.429 0.0213 0.00150 0.390 0.469
# 10 AMMI1       0.430 0.0251 0.00178 0.384 0.479
# 11 AMMI0       0.430 0.0283 0.00200 0.370 0.485

A tabela acima mostra as estatísticas descritivas (média, desvio padrão, erro padrão da média e quantis 2,5% e 97,5%) das 100 estimativas RMSPD para cada modelo, e são apresentadas a partir do modelo mais preciso (menor média RMSPD) para o modelo menos preciso (maior média RMSPD).

14.9 Plotagem dos valores RMSPD

Os valores das estimativas RMSPD obtidas no processo de validação cruzada podem ser plotados usando a função plot ().

library(metan)
bind1 <- bind_cv(AMMI0, AMMI2, AMMI9)
bind2 <- bind_cv (AMMIF, BLUP_g, BLUP_e, BLUP_ge)
a <- plot(bind1, violino = TRUE)
b <- plot(bind2,
          width.boxplot = 0.6,
          order_box = TRUE,
          plot_theme = theme_metan_minimal ())
arrange_ggplot(a, b, tag_levels = list(letters[1:2]))

Seis estatísticas são mostradas neste boxplot. A média (losango preto), a mediana (linha preta), as dobradiças inferior e superior que correspondem ao primeiro e terceiro quartis (percentis 25 e 75, respectivamente). O bigode superior se estende da dobradiça até o maior valor não mais que \(1,5 \times {IQR}\) a partir da dobradiça (em que IQR é o intervalo entre quartis). O bigode mais baixo se estende da dobradiça ao menor valor, no máximo \(1,5 \times {IQR}\) da dobradiça. Dados além do final dos bigodes são considerados pontos extremos. Se a condição violin = TRUE, uma plotagem de violino é adicionada junto com o boxplot. Um gráfico de violino é uma exibição compacta de uma distribuição contínua exibida da mesma maneira que um gráfico de caixa.

14.9.1 Valores estimados pelo modelo AMMI

Em nosso exemplo, o modelo AMMI2 foi o que apresentou o menor RMSPD, sendo então o mais indicado para estimar a variável GY. A estimativa considerando dois termos multiplicativos pode realizada utilizando a função predict(), tendo como argumentos o modelo AMMI ajustado (AMMI_model) e o número de termos multiplicativos considerados na estimação (naxis).

predicted <- predict(AMMI_model, naxis = 2)
predicted$GY
# # A tibble: 140 x 8
#    ENV   GEN       Y RESIDUAL Ypred ResAMMI[,1] YpredAMMI[,1] AMMI0
#    <fct> <fct> <dbl>    <dbl> <dbl>       <dbl>         <dbl> <dbl>
#  1 E1    G1     2.37  -0.0843  2.45     0.0693           2.52  2.45
#  2 E1    G10    1.97  -0.344   2.32    -0.360            1.96  2.32
#  3 E1    G2     2.90   0.311   2.59     0.0735           2.66  2.59
#  4 E1    G3     2.89   0.0868  2.80    -0.00963          2.79  2.80
#  5 E1    G4     2.59   0.100   2.49     0.0144           2.50  2.49
#  6 E1    G5     2.19  -0.196   2.38    -0.0317           2.35  2.38
#  7 E1    G6     2.30  -0.0797  2.38     0.0238           2.40  2.38
#  8 E1    G7     2.77   0.186   2.59     0.186            2.77  2.59
#  9 E1    G8     2.90   0.0493  2.85     0.0852           2.94  2.85
# 10 E1    G9     2.33  -0.0307  2.36    -0.0515           2.31  2.36
# # ... with 130 more rows

As seguintes variáveis são retornadas: ENV é o ambiente; GEN é o genótipo; Y é o valor observado; resOLS é o residual (\(\hat{z}_{ij}\)) estimado pelos Mínimos Quadrados Ordinários, onde \(\hat{z}_{ij} = y_{ij} - \bar{y}_{i.} - \bar{y}_{.j} + \bar{y}_{..}\); Ypred é o valor estimado pelos mínimos quadrados ordinários (\(\hat{y}_{ij} = y_{ij} -\hat{z}_{ij}\)); ResAMMI é o residual estimado pelo modelo AMMI (\(\hat{a}_{ij}\)) considerando o número de termos multiplicativos informado na função (neste caso 2), onde \(\hat{a}_{ij} = \lambda_1a_{i1}t_{j1}\); YpredAMMI é o valor estimado pelo modelo AMMI \(\hat{ya}_{ij} = \bar{y}_{i.} + \bar{y}_{.j} - \bar{y}_{..}+\hat{a}_{ij}\); e AMMI0 é o valor estimado quando nenhum termo multiplicativo é usado, ou seja, \(\hat{y}_{ij} = \bar{y}_{i.} + \bar{y}_{.j} - \bar{y}_{..}\).

14.9.2 Índices de estabilidade baseados em AMMI

(Tiago Olivoto, Lúcio, et al. 2019a) demonstraram que a média ponderada dos escores absolutos (WAAS, Weighted Average of Absolute Scores), pode ser utilizada como um índice quantitativo de estabilidade na análise AMMI. Utilizando a função get_model_data() é possível obter facilmente este índice para diversas variáveis com poucas linhas de código. Veja o exemplo abaixo, com quatro variáveis. Este índice também é computado em uma estrutura de modelo misto. Veja o exemplo aqui.

waas(data_ge2, ENV, GEN, REP,
     resp = c(PH, ED, TKW, NKR)) %>%
 get_model_data(what = "WAAS")
# variable PH 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV   3  7.719  2.5728 127.913 4.25e-07          .           .
#   REP(ENV)   8  0.161  0.0201   0.897 5.22e-01          .           .
#        GEN  12  1.865  0.1554   6.929 6.89e-09          .           .
#    GEN:ENV  36  5.397  0.1499   6.686 5.01e-14          .           .
#        PC1  14  4.466  0.3190  14.230 0.00e+00       82.8        82.8
#        PC2  12  0.653  0.0545   2.430 8.40e-03       12.1        94.9
#        PC3  10  0.277  0.0277   1.240 2.76e-01        5.1         100
#  Residuals  96  2.153  0.0224      NA       NA          .           .
#      Total 191 22.692  0.1188      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# variable ED 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV   3  306.0  101.99  43.386 2.70e-05          .           .
#   REP(ENV)   8   18.8    2.35   0.906 5.15e-01          .           .
#        GEN  12  212.9   17.74   6.838 8.95e-09          .           .
#    GEN:ENV  36  398.2   11.06   4.263 7.60e-09          .           .
#        PC1  14  212.2   15.16   5.840 0.00e+00       53.3        53.3
#        PC2  12  134.7   11.23   4.330 0.00e+00       33.8        87.1
#        PC3  10   51.3    5.13   1.980 4.38e-02       12.9         100
#  Residuals  96  249.1    2.59      NA       NA          .           .
#      Total 191 1583.2    8.29      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# variable TKW 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV   3  37013   12338   11.13 3.16e-03          .           .
#   REP(ENV)   8   8869    1109    1.21 3.03e-01          .           .
#        GEN  12  44633    3719    4.05 4.41e-05          .           .
#    GEN:ENV  36 164572    4571    4.98 1.73e-10          .           .
#        PC1  14 104276    7448    8.11 0.00e+00       63.4        63.4
#        PC2  12  33361    2780    3.03 1.20e-03       20.3        83.6
#        PC3  10  26935    2694    2.93 3.00e-03       16.4         100
#  Residuals  96  88171     918      NA       NA          .           .
#      Total 191 507829    2659      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# variable NKR 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV   3  237.0   79.01  15.843 0.000997          .           .
#   REP(ENV)   8   39.9    4.99   0.635 0.746348          .           .
#        GEN  12  227.8   18.99   2.418 0.008726          .           .
#    GEN:ENV  36  602.7   16.74   2.132 0.001839          .           .
#        PC1  14  337.4   24.10   3.070 0.000600         56          56
#        PC2  12  192.2   16.02   2.040 0.028500       31.9        87.9
#        PC3  10   73.1    7.31   0.930 0.509500       12.1         100
#  Residuals  96  753.7    7.85      NA       NA          .           .
#      Total 191 2463.8   12.90      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# All variables with significant (p < 0.05) genotype-vs-environment interaction
# Done!
# Class of the model: waas
# Variable extracted: WAAS
# # A tibble: 13 x 5
#    GEN      PH    ED   TKW   NKR
#    <chr> <dbl> <dbl> <dbl> <dbl>
#  1 H1    0.318 0.667 2.72  0.929
#  2 H10   0.230 0.973 2.15  0.506
#  3 H11   0.201 0.649 1.26  0.836
#  4 H12   0.364 0.315 0.558 0.228
#  5 H13   0.363 0.838 0.514 0.946
#  6 H2    0.342 1.08  4.41  0.404
#  7 H3    0.374 0.486 4.10  0.252
#  8 H4    0.294 0.378 3.07  0.281
#  9 H5    0.168 0.567 0.738 0.611
# 10 H6    0.270 0.409 1.64  1.60 
# 11 H7    0.228 0.384 3.44  0.518
# 12 H8    0.315 0.653 4.91  0.941
# 13 H9    0.146 0.907 5.50  0.888

Além do índice WAAS mostrado acima, os seguintes índices de estabilidade baseados em AMMI podem ser calculados usando a função AMMI_indexes():

  • AMMI stability value, ASV, (Purchase, Hatting, and Deventer 2000).

\[ ASV = \sqrt {{{\left[ {\frac{{IPCA{1_{ss}}}}{{IPCA{2_{ss}}}} \times \left( {IPCA{1_{score}}} \right)} \right]}^2} + {{\left( {IPCA{2_{score}}} \right)}^2}} \]

  • Soma dos valores absolutos dos escores IPCA, SIPC

\[ SIP{C_i} = \sum\nolimits_{k = 1}^P {\left| {\mathop {\lambda }\nolimits_k^{0.5} {a_{ik}}} \right|} \]

  • Média dos autovetores elevados ao quadrado, EV

\[ E{V_i} = \sum\nolimits_{k = 1}^P {\mathop a\nolimits_{ik}^2 } /P \]

descritos por Sneller, Kilgore-Norquest, and Dombek (1997), onde P é o número de IPCA retido por meio de testes F

  • valor absoluto da contribuição relativa dos IPCAs para a interação (Zali et al. 2012).

\[ Z{a_i} = \sum\nolimits_{k = 1}^P {{\theta _k}{a_{ik}}} \]

Onde \({\theta _k}\) é o percentual da soma de quadrados explicada pelo k -ésimo IPCA. índices de selecção simultâneas (SSI) são calculados pela soma dos ranques dos índices Za ASV, SIPC e EV e o ranque da variável dependente (Farshadfar 2008) que resulta em ssiASV, ssiSIPC, ssiEV, e ssiZa, respectivamente.

A função AMMI_index () tem dois argumentos. O primeiro (x) é o modelo, que deve ser um objeto da classe waas. O segundo, (order.y) é a ordem para a variável resposta. Por padrão, ele é definido como nulo, o que significa que a variável resposta é ordenada em ordem decrescente. Se x é uma lista com mais de uma variável, então order.y deve ser um vetor com o mesmo comprimento de x. Cada elemento do vetor deve ser um dos “h” ou “l”. Se “h” for usado, a variável resposta será ordenada em ordem decrescente. Se “l” for usado, a variável resposta será ordenada em ordem crescente da média dos genótipos. Usando o operador %>% é possível estruturar uma sequência lógica de operações. Vamos construir esse modelo.

stab_indexes <- 
  data_ge %>%
  waas(ENV, GEN, REP, GY, verbose = FALSE) %>%
  AMMI_indexes()
print(stab_indexes)
# Variable GY 
# ---------------------------------------------------------------------------
# AMMI-based stability indexes
# ---------------------------------------------------------------------------
# # A tibble: 10 x 7
#    GEN       Y   ASV  SIPC     EV     ZA  WAAS
#    <chr> <dbl> <dbl> <dbl>  <dbl>  <dbl> <dbl>
#  1 G1     2.60 0.346 0.463 0.0149 0.100  0.151
#  2 G10    2.47 1.23  2.07  0.210  0.437  0.652
#  3 G2     2.74 0.249 1.54  0.179  0.216  0.283
#  4 G3     2.96 0.113 0.552 0.0207 0.0797 0.106
#  5 G4     2.64 0.594 1.04  0.0521 0.219  0.326
#  6 G5     2.54 0.430 0.997 0.0433 0.186  0.270
#  7 G6     2.53 0.265 1.14  0.0911 0.172  0.233
#  8 G7     2.74 0.663 1.79  0.191  0.303  0.428
#  9 G8     3.00 0.574 1.18  0.0669 0.225  0.327
# 10 G9     2.51 0.983 1.50  0.131  0.336  0.507

14.9.3 Biplots

O pacote metan conta com gráficos gerados pelo pacote ggplot2, o que lhe confere um alto nível de personalização. A função utilizada para obtenção dos diferentes tipos de biplots será a plot_scores(). Para maiores detalhes veja ?plot_._scores.

14.9.3.1 Biplot tipo 2: GY x PC1

O biplot conhecido como AMMI1 é confeccionado utilizando o argumento type = 2 na função plot_scores(). O biplot AMMI1 é utilizado para identificar tanto a estabilidade quando a produtividade dos genótipos. Neste tipo de biplot, os genótipos com escores do PC1 próximos de zero e à direita da linha vertical, são considerados os mais estáveis e com rendimento superior a média geral.

p3 <-plot_scores(AMMI_model)
p4 <-plot_scores(AMMI_model,
                 col.segm.env = "transparent") +
                 theme_gray() +
                 theme(legend.position = c(0.1, 0.9),
                       legend.background = element_rect(fill = NA))

arrange_ggplot(p3, p4, tag_levels = list(c("p3","p4")))
Biplot AMMI1 gerado pelo pacote metan

Figure 14.1: Biplot AMMI1 gerado pelo pacote metan

14.9.3.2 biplot tipo 1: IPCA1 x IPCA2

O biplot conhecido como AMMI2 é confeccionado utilizando o argumento type = 1 (padrão) na função plot_scores(). O biplot AMMI2 representa os dois primeiros IPCAs oriundos da decomposição por valor singular da matriz dos efeitos da interação e é utilizado para realizar inferências quanto aos padrões da interação genótipo vs ambiente. Neste caso, os dois primeiros IPCAs explicam 66.2% da da soma de quadrados da interação.


p1 <-plot_scores(AMMI_model, type = 2)
p2 <-plot_scores(AMMI_model,
                 type = 2,
                 polygon = TRUE,
                 col.gen = "black",
                 col.env = "gray70",
                 col.segm.env = "gray70",
                 axis.expand = 1.5)
arrange_ggplot(p1, p2, tag_levels = list(c("p1","p2")))
Biplot AMMI2, gerado pelo pacote metan

Figure 14.2: Biplot AMMI2, gerado pelo pacote metan

14.9.3.3 Rendimento nominal x IPCA1

Com o objetivo de identificar possíveis mega-ambientes, bem como visualizar o padrão which-won-where do conjunto de dados, um gráfico com o rendimento nominal (\(\mathop {\hat y} \nolimits_ {ij}^*\) ) em função dos escores PCA1 dos ambientes é também confecionado pela função plot_scores() utilizando o argumento type = 4. Neste gráfico, cada genótipo é representado por uma linha reta com a equação \(\hat y_{ij}^* = \mu_i + PCA1_i \times PCA1_j\) , onde \(\hat y_{ij}^*\) é o rendimento nominal para o genótipo i no ambiente J; \(\mu\) é a média geral do genótipo i; \(PC{1_i}\) é o escore PCA1 do genótipo i e \(PC{1_j}\) é o escore PCA1 do ambiente j. O genótipo vencedor em um determinado ambiente possui o maior rendimento nominal nesse ambiente.

plot_scores(AMMI_model,
            type = 4,
            size.tex.pa = 2,
            x.lab = "Rendimento nominal (Mg/ha)",
            y.lab = "Escore dos ambientes no PCA1")
Gráfico do tipo 'which-won-where' baseado no modelo AMMI

Figure 14.3: Gráfico do tipo ‘which-won-where’ baseado no modelo AMMI

14.10 O modelo GGE

O modelo GGE (Genotype plus Genotype-vs-Environment interaction) tem sido amplamente utilizado para avaliação de genótipos e identificação de mega-ambientes em ensaios multi-ambientais (MET). Este modelo considera um biplot que é construído pelos dois primeiros componentes principais (PC1 e PC2) derivados da decomposição por valores singulares de dados oriundos de um MET centrados no ambiente (Yan et al. 2007).

Comunmente, o rendimento médio do genótipo i no ambiente j é descrito pelo seguinte modelo linear geral, ignorando quaisquer erros aleatórios

\[ \hat y_{ij} + \mu + \alpha_i + \beta_j + \phi_{ij} \]

onde \(\hat y_{ij}\) é o rendimento médio do genótipo i no ambiente j, \(i = 1, ... g; j = 1, ... e\) sendo g e e o número de genótipos e ambientes, respectivamente; \(\mu\) é a média geral; \(\alpha_i\) é o efeito principal do genótipo i; \(\beta_j\) é o efeito principal do ambiente j e \(\phi_{ij}\) é o efeito de interação entre genótipo i e o ambiente j. Quando \(\phi_{ij}\) é submetido a Decomposição por Valor Singular (SVD), temos o bem conhecido modelo AMMI, visto anteriormente. No modelo GGE, o termo \(\alpha_i\) é deletado do modelo acima, permitindo que a variação explicada por este termo seja absorvida por \(\phi_{ij}\). Em seguida, esta matriz de dados –agora centrada no ambiente– é submetida a SVD (Yan et al. 2007; Yan and Kang 2003). Explicitamente, temos

\[ {\phi_{ij} = \hat y_{ij}} - \mu - \beta_j = \sum\limits_{k = 1}^p \xi_{ik}^*\eta_{jk}^* \]

onde \(\xi_{ik}^* = \lambda_k^ \alpha \xi_{ik}\); \(\eta_{jk}^* = \lambda_k^{1-\alpha}\eta_{jk}\) sendo \(\lambda_k\) o k-ésimo autovalor da SVD (\(k = 1, ... p\)), com \(p \le min (e, g)\); \(\alpha\) é o fator de partição do valor singular para o Componente Principal (PC) k (Yan 2002); \(\xi_{ik}^*\) e \(\eta_{jk}^*\) são os escores do PC k para genótipo i e ambiente j, respectivamente.

A função gge() do pacote metan é usada para ajustar o modelo GGE. De acordo com Yan and Kang (2003), a função suporta quatro métodos de centralização de dados, dois métodos de escalonamento de dados e três opções para particionamento de valor singular:

14.10.1 Data centering

  • 0 ou none: para dados não centralizados;
  • 1 ou global: para dados centralizados globalmente (E + G + GE);
  • 2 ou environment: (padrão), para dados centrados no ambiente (G + GE);
  • 3 ou double: para dados centrados duplamente (GE). Um biplot não pode ser produzido sem modelos produzidos sem centralização.

14.10.2 Data scaling

  • 0 ou none: (padrão) para nenhum escalonamento;
  • 1 ou sd: Cada valor é dividido pelo desvio padrão do seu ambiente correspondente (coluna). Isso colocará todos os ambientes com aproximadamente o mesmo intervalo de valores.

14.10.3 Singular value partition

  • 1 ou genotype: O valor singular é inteiramente particionado nos autovetores de Genótipo (\(\alpha = 1\)), Também chamado de row metric preserving;
  • 2 ou environment: (padrão) O valor singular é inteiramente particionado nos autovetores de ambiente (\(\alpha = 0\)), também chamado de column metric preserving;
  • 3 ou symmetrical: O valor singular é simetricamente dividida nos autovetores de genótipo e ambiente (\(\alpha = 0,5\)). Esta partição é mais frequentemente usada na análise AMMI.

14.10.4 Ajustando o modelo GGE

Para ajustar o modelo GGE, usaremos os dados em data_ge, que contém dados do rendimento de grãos avaliados em 10 genótipos conduzidos em 14 ambientes. Primeiro de tudo, vamos criar uma tabela bidirecional para esses dados usando a função make_mat().

ge_table = make_mat(data_ge, GEN, ENV, GY)
print.data.frame(ge_table, digits = 3)
#       E1  E10   E11  E12  E13  E14   E2   E3   E4   E5   E6   E7   E8   E9
# G1  2.37 2.31 1.356 1.34 3.00 1.53 3.04 4.08 3.49 4.17 2.81 1.90 2.27 2.78
# G10 1.97 1.54 0.899 1.02 1.83 1.86 3.15 4.11 4.27 3.37 2.48 2.24 2.70 3.15
# G2  2.90 2.30 1.491 1.99 3.03 1.43 3.23 4.57 3.72 3.83 2.54 1.99 2.05 3.36
# G3  2.89 2.34 1.568 1.76 3.47 2.06 3.61 4.13 4.13 4.13 2.98 2.16 2.85 3.29
# G4  2.59 2.17 1.370 1.53 2.64 1.86 3.19 3.85 3.30 3.78 2.70 1.98 2.30 3.72
# G5  2.19 2.14 1.326 1.69 2.57 1.78 3.14 3.74 3.38 3.47 2.43 1.66 2.71 3.30
# G6  2.30 2.21 1.501 1.39 2.91 1.80 3.29 3.43 3.40 3.57 2.34 1.76 2.54 3.04
# G7  2.77 2.44 1.364 1.95 3.18 1.94 2.61 4.10 3.02 4.05 2.67 2.55 2.58 3.14
# G8  2.90 2.57 1.683 2.00 3.52 1.99 3.44 4.11 4.14 4.81 2.91 2.26 2.88 2.83
# G9  2.33 1.74 1.125 1.41 2.95 1.57 3.09 4.51 3.90 3.93 2.77 1.39 2.49 1.94

A função gge() ajusta um modelo GGE baseado em uma tabela bidirecional (ge_table em nosso caso) com genótipos nas linhas e ambientes em colunas, ou em um data.frame contendo pelo menos as colunas para genótipos, ambientes e variável(is) resposta.

# Usando um data frame
gge_model <- gge(data_ge, ENV, GEN, GY)

O modelo acima foi ajustado considerando (i) column metric preserving (onde o valor singular é inteiramente particionado nos autovetores do ambiente); (ii) environment centered (o biplot conterá uma informação mista de G + GEI); e nenhum método de escalonamento. Para alterar estas configurações padrão, use os argumentos svp, centering e scaling, respectivamente. Por favor, note que no segundo exemplo o argumento table foi definido como TRUE para indicar que os dados de entrada são uma tabela bidirecional.

14.10.5 Valores estimados pelo modelo GGE

predicted <- predict(gge_model, naxis = 2)
print(predicted$GY, digits = 3)
# # A tibble: 10 x 14
#       E1   E10   E11   E12   E13   E14    E2    E3    E4    E5    E6    E7    E8
#  * <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#  1  2.51  2.14 1.35   1.59  2.95  1.76  3.20  4.14  3.78  3.97  2.70  1.95  2.56
#  2  1.93  1.62 0.988  1.07  2.07  1.66  3.08  3.99  3.78  3.28  2.43  1.69  2.48
#  3  2.67  2.33 1.47   1.75  3.09  1.82  3.19  4.04  3.59  4.03  2.70  2.08  2.54
#  4  2.83  2.44 1.56   1.88  3.40  1.83  3.26  4.18  3.73  4.32  2.83  2.10  2.59
#  5  2.50  2.25 1.39   1.64  2.71  1.83  3.09  3.81  3.32  3.65  2.52  2.11  2.47
#  6  2.32  2.06 1.27   1.46  2.52  1.78  3.09  3.87  3.46  3.54  2.49  1.99  2.47
#  7  2.40  2.11 1.31   1.52  2.65  1.78  3.12  3.92  3.52  3.66  2.54  2.00  2.49
#  8  2.78  2.49 1.56   1.88  3.17  1.87  3.17  3.93  3.40  4.04  2.68  2.21  2.52
#  9  2.99  2.54 1.64   2.00  3.71  1.84  3.33  4.33  3.89  4.61  2.96  2.11  2.64
# 10  2.27  1.78 1.15   1.30  2.82  1.64  3.28  4.43  4.28  4.03  2.79  1.65  2.62
# # ... with 1 more variable: E9 <dbl>

14.10.6 Visualizando o Biplot

A função genérica plot() é usada para gerar um biplot usando como entrada o modelo ajustado da classe gge. O tipo de biplot é escolhido pelo argumento type na função. Dez tipos de biplots estão disponíveis de acordo com Yan and Kang (2003).

  • type = 1 Um biplot básico.
  • type = 2 Desempenho médio vs. estabilidade
  • type = 3 Que ganhou onde.
  • type = 4 Descriminação vs. representatividade
  • type = 5 Examinar um ambiente.
  • type = 6 Ranquear os ambientes.
  • type = 7 Examinar um genótipo.
  • type = 8 Ranquear os genótipos.
  • type = 9 Comparar dois genótipos.
  • type = 10 Relação entre os ambientes.

Neste material, para cada tipo de biplot, dois gráficos são produzidos. Um com as configurações padrão e outro para mostrar algumas opções gráficas da função.

14.10.6.1 Biplot tipo 1: Um biplot básico

Esta é a configuração padrão no gráfico da função, portanto, este biplot é produzido apenas chamando plot(model), como mostrado abaixo.

p1 <- plot(gge_model)
p2 <- plot(gge_model,
           col.gen = "blue",
           size.text.env = 2)
arrange_ggplot(p1, p2)

14.10.6.2 Biplot tipo 2: Desempenho médio vs. estabilidade

Neste biplot, a visualização da média e da estabilidade dos genótipos é obtida desenhando uma coordenada média de ambiente (AEC) no biplot obtido com row metric preserving. Primeiro, um ambiente médio, representado pelo pequeno círculo, é definido pelas médias dos escores PC1 e PC2 dos ambientes. A linha que passa pela origem do biplot e pelo AEC pode ser chamada de média. As projeções de marcadores genotípicos nesse eixo deve, portanto, aproximar o rendimento médio dos genótipos. Assim, o G8 foi claramente o genótipo de maior rendimento, em média.

A ordenada de AEC é a linha que passa pela origem do biplot e é perpendicular à abscissa do AEC. Portanto, se a abscissa AEC representa o G, a ordenada AEC deve aproximar o GEI associado a cada genótipo, que é uma medida de variabilidade ou instabilidade dos genótipos (Yan et al. 2007). Uma projeção maior na ordenada AEC, independentemente da direção, significa maior instabilidade. Em nosso exemplo, o G3 foi o mais estável e o segundo genótipo mais produtivo, enquanto o G9 apresentou alta instabilidade.

gge_model <-gge(data_ge, ENV, GEN, GY, svp = "genotype")
p1 <-plot(gge_model, type = 2)
p2 <-plot(gge_model,
          type = 2,
          col.gen = "black",
          col.env = "gray",
          axis_expand = 1.5)
arrange_ggplot(p1, p2)

14.10.6.3 Biplot tipo 3: quem ganhou onde

Neste biplot (obtido com particionamento de valores singulares simétrico) um polígono é desenhado juntando os genótipos (G7, G8, G9, G10 e G4) que estão localizadas mais distante da origem do biplot fazendo com que todos os outros genótipos fiquem contidos no polígono. Os genótipos vértex têm os vetores mais longos, em suas respectivas direções, que é uma medida da capacidade de resposta aos ambientes. Estes genótipos estão, portanto, entre os genótipos mais responsivos. Todos os outros genótipos são menos responsivos em suas respectivas direções.

As linhas perpendiculares aos lados do polígono dividem o biplot em setores. Cada setor tem um genótipo vértice. Por exemplo, o setor com o genótipo-vértice G4 pode ser referido como o setor G4. Um ambiente (E9), foi enquadrado neste setor. Como regra geral, o genótipo vértex é o genótipo de mais alto rendimento em todos os ambientes que compartilham o setor com ele (Yan et al. 2007). Neste caso, G4 teve o maior rendimento em E9, como mostrado na tabela acima.

gge_model <-gge(data_ge, ENV, GEN, GY, svp = "symmetrical")
p1 <-plot(gge_model, type = 3)
p2 <-plot(gge_model,
          type = 3,
          size.shape.win = 5,
          large_label = 6,
          col.gen = "black",
          col.env = "gray",
          annotation = FALSE,
          title = FALSE)
arrange_ggplot(p1, p2)

14.10.6.4 Biplot tipo 4: Discriminação vs. representatividade

p1 <-plot(gge_model, type = 4)
p2 <-plot(gge_model,
          type = 4,
          plot_theme = theme_gray())+
  theme(legend.position = "bottom")
arrange_ggplot(p1, p2)

14.10.6.5 Biplot tipo 5: Examinar um ambiente

A identificação de genótipos mais adaptados a um ambiente pode ser facilmente alcançada utilizando o biplot GGE. Por exemplo, para visualizar o desempenho de diferentes genótipos em um dado ambiente, por exemplo, E10, simplesmente desenhe uma linha que passa pela origem biplot e o marcador do E10. Os genótipos podem ser classificados de acordo com suas projeções no eixo E10 com base em seu desempenho neste ambiente, na direção apontada pela seta. Em nosso exemplo, no E10, o genótipo de maior rendimento foi o genótipo G8 e o genótipo de menor rendimento foi G10. A ordem dos genótipos foi G8 > G7 > G3 > G2 > G4 > G1 > G6 > G5 > G9 > G10.

gge_model <-gge(data_ge, ENV, GEN, GY, svp = "symmetrical")
p1 <-plot(gge_model, type = 5, sel_env = "E10")
p2 <-plot(gge_model,
          type = 5,
          sel_env = "E10",
          col.gen = "black",
          col.env = "black",
          size.text.env = 10,
          axis_expand = 1.5)
arrange_ggplot(p1, p2)

14.10.6.6 Biplot tipo 6: ranquear os ambientes

Neste biplot o ambiente “ideal” é usado como o centro de um conjunto de linhas concêntricas que servem para medir a distância entre um ambiente e o ambiente “ideal”. Como o foco principal neste biplot são os ambientes, a partição de valor singular usada é “ambiente” (padrão). Pode ser visto que E13 é o mais próximo do ambiente ideal e, portanto, é o mais desejável de todos os 14 ambientes. E4 e E9 foram os ambientes de teste menos desejados.

gge_model <- gge(data_ge, ENV, GEN, GY)
p1 <- plot(gge_model, type = 6)
p2 <- plot(gge_model,
           type = 6,
           col.gen = "black",
           col.env = "black",
           size.text.env = 10,
           axis_expand = 1.5)
arrange_ggplot(p1, p2)

14.10.6.7 Biplot tipo 7: examinar um genótipo

Semelhante à visualização dos desempenhos genotípicos em um determinado ambiente (biplot 5), a visualização da média e da estabilidade dos genótipos é obtida desenhando-se uma AEC no biplot com foco no genótipo, ou row metric preserving (Yan et al. 2007).

gge_model <- gge(data_ge, ENV, GEN, GY, svp = "genotype")
p1 <- plot(gge_model, type = 7, sel_gen = "G8")
p2 <- plot(gge_model,
           type = 7,
           sel_gen = "G8",
           col.gen = "black",
           col.env = "black",
           size.text.env = 10,
           axis_expand = 1.5)
arrange_ggplot(p1, p2)

14.10.6.8 Biplot tipo 8: ranquear os genótipos

Este biplot compara todos os genótipos com o genótipo “ideal”. O genótipo ideal, representado pelo pequeno círculo com uma seta apontando para ele, é definido como tendo o maior rendimento em todos os ambientes. Ou seja, tem o maior rendimento médio e é absolutamente estável. Os genótipos são classificados com base em sua distância do genótipo ideal (Yan et al. 2007). Em nosso exemplo, o G3 e o G8 superaram os outros genótipos.

gge_model <- gge(data_ge, ENV, GEN, GY, svp = "genotype")
p1 <- plot(gge_model, type = 8)
p2 <- plot(gge_model,
           type = 8,
           col.gen = "black",
           col.env = "gray",
           size.text.gen = 6)
arrange_ggplot(p1, p2)

14.10.6.9 Biplot tipo 9: comparar dois genótipos

Para comparar dois genótipos, por exemplo, G10 e G8, desenhe uma linha de conexão para conectá-los e trace uma linha perpendicular que passa pela origem do biplot e é perpendicular à linha de conexão. Vemos que um ambiente, E9, está do mesmo lado da linha perpendicular do G10, e os outros 13 ambientes estão do outro lado da linha perpendicular, junto com o G8. Isso indica que G10 produziu mais do que o G8 no E9, mas G8 produziu mais que o G10 nos outros 13 ambientes (Yan et al. 2007).

gge_model <- gge(data_ge, ENV, GEN, GY, svp = "symmetrical")
p1 <- plot(gge_model, type = 9, sel_gen1 = "G8", sel_gen2 = "G10")
p2 <- plot(gge_model,
           type = 9,
           sel_gen1 = "G8",
           sel_gen2 = "G10",
           col.gen = "black",
           title = FALSE,
           annotation = FALSE)
arrange_ggplot(p1, p2)

14.10.6.10 Biplot tipo 10: relação entre os ambientes

gge_model <-gge(data_ge, ENV, GEN, GY)
p1 <-plot(gge_model, type = 10)
p2 <-plot(gge_model,
          type = 10,
          col.gen = "black",
          title = FALSE,
          annotation = FALSE)
arrange_ggplot(p1, p2)

14.11 Modelos mistos na avaliação de MET

Assumindo \(\mathop\alpha\nolimits_i\) e \(\mathop {(\alpha \tau )}\nolimits_{ij}\) como sendo de efeitos aleatórios, o modelo em pode ser convenientemente reescrito utilizando o seguinte modelo linear misto: \[ \label{meq} {\boldsymbol{y = X\beta + Zu + \varepsilon }} \]

onde y é um vetor \(n[ = \sum\nolimits_{j = 1}^e {(gb)]} \times 1\), \({\boldsymbol{y}} = {\rm{ }}{\left[ {{y_{111}},{\rm{ }}{y_{112}},{\rm{ }} \ldots ,{\rm{ }}{y_{geb}}} \right]^\prime }\); \(\boldsymbol{\beta}\) é um vetor \(eb \times 1\) de efeitos fixos, \({\boldsymbol{\beta }} = [\mathop \gamma \nolimits_{11} ,\mathop \gamma \nolimits_{12} ,...,\mathop \gamma \nolimits_{eb} ]'\); u é um vetor \(m[ = g + ge] \times 1\) de efeitos aleatórios, \({\boldsymbol{u}} = {\rm{ }}{\left[ {{\alpha _1},{\alpha _2},...,{\alpha _g},\mathop {(\alpha \tau )}\nolimits_{11} ,\mathop {(\alpha \tau )}\nolimits_{12} ,...,\mathop {(\alpha \tau )}\nolimits_{ge} } \right]^\prime }\); X é uma matriz delineamento de dimensão \(n \times eb\) relacionando y a \({\boldsymbol{\beta }}\); Z é uma matriz delineamento de dimensão \(m\times n\) relacionando y a \(\boldsymbol{u}\); e \({\boldsymbol{\varepsilon }}\) é um vetor n×1 de erros aleatórios, \({\boldsymbol{\varepsilon }} = {\rm{ }}{\left[ {{y_{111}},{\rm{ }}{y_{112}},{\rm{ }} \ldots ,{\rm{ }}{y_{geb}}} \right]^\prime }\)

Os vetores aleatórios \({\boldsymbol{\beta }}\) e \(\boldsymbol{u}\) são assumidos como normais e independentemente distribuídos com média zero e matrizes de variância-covariância G e R, respectivamente, de tal forma que

\[ \left[ \begin{array}{l}{\boldsymbol{u}}\\{\boldsymbol{\varepsilon }}\end{array} \right]\sim N\left( {\left[ \begin{array}{l}{\boldsymbol{0}}\\{\boldsymbol{0}}\end{array} \right]{\boldsymbol{,}}\left[ {\begin{array}{*{20}{c}}{\boldsymbol{G}}&{\boldsymbol{0}}\\{\boldsymbol{0}}&{\boldsymbol{R}}\end{array}} \right]} \right) \]

A matriz de variância-covariância G tem muitas formas possíveis. A estrutura mais simples -e a opção padrão na maioria dos pacotes estatísticos para modelos mistos- são os componentes de variância, de modo que

\[ {\boldsymbol{G}} = \left[ {\begin{array}{*{20}{c}}{\mathop {\hat \sigma }\nolimits_\alpha ^2 {{\boldsymbol{I}}_g}}&0\\0&{\mathop {\hat \sigma }\nolimits_{\alpha \tau }^2 {{\boldsymbol{I}}_{ge}}}\end{array}} \right] \]

e \({\boldsymbol{R}} = \mathop {\hat \sigma }\nolimits_\varepsilon ^2 {{\boldsymbol{I}}_n}\), sendo \(\mathop {\hat \sigma }\nolimits_\alpha ^2\), \(\mathop {\hat \sigma }\nolimits_{\alpha \tau }^2\) e \(\mathop {\hat \sigma }\nolimits_\varepsilon ^2\) as variâncias para genótipo, interação genótipo-ambiente e erros aleatórios, respectivamente.

Os vetores \({\boldsymbol{\beta }}\) e \(\boldsymbol{u}\) são estimados considerando a bem conhecida equação de modelo misto Henderson (1975).

\[ \label{ad} \left[ {\begin{array}{*{20}{c}}{{\boldsymbol{\hat \beta }}}\\{{\boldsymbol{\hat u}}}\end{array}} \right]{\boldsymbol{ = }}{\left[ {\begin{array}{*{20}{c}}{{\boldsymbol{X'}}{{\boldsymbol{R}}^{\ - {\boldsymbol{1}}}}{\boldsymbol{X}}}&{{\boldsymbol{X'}}{{\boldsymbol{R}}^{ - {\boldsymbol{1}}}}{\boldsymbol{Z}}}\\{{\boldsymbol{Z'}}{{\boldsymbol{R}}^{ - {\boldsymbol{1}}}}{\boldsymbol{X}}}&{{\boldsymbol{Z'}}{{\boldsymbol{R}}^{ - {\boldsymbol{1}}}}{\boldsymbol{Z + }}{{\boldsymbol{G}}^{ - {\boldsymbol{1}}}}}\end{array}} \right]^ - }\left[ {\begin{array}{*{20}{c}}{{\boldsymbol{X'}}{{\boldsymbol{R}}^{ - {\boldsymbol{1}}}}{\boldsymbol{y}}}\\{{\boldsymbol{Z'}}{{\boldsymbol{R}}^{ - {\boldsymbol{1}}}}{\boldsymbol{y}}}\end{array}} \right] \]

Onde o sobescrito \(^{-1}\) e \(^-\) representam as inversas e inversas generalizadas das matrizes, respectivamente. A estimativa dos componentes de variância em \({\boldsymbol{\hat G}}\) e \({\boldsymbol{\hat R}}\), pode ser realizada sem maiores problemas utilizando ANOVA convencional quando os dados são balanceados. Quando este pressuposto não é cumprido, a estimativa baseada em Restricted Maximum Likelihood (REML) utilizando o algoritmo Expectation-Maximization (Dempster, Laird, and Rubin 1977) é a mais indicada.

Desde a década de 1990, os modelos mistos vêm ganhando cada vez mais espaço na avaliação de MET, pois permitem a estimativa de parâmetros genéticos e ambientais, bem como a predição dos valores genotípicos de forma não-viciada (Smith, Cullis, and Thompson 2005). Da mesma forma, modelos mistos reduzem os ruídos de análises realizadas com dados desbalanceados e também de variáveis que não assumem aditividade, características frequentemente observadas em MET (Hu 2015). Na avaliação dos dados oriundos de MET é de interesse do pesquisador predizer o “verdadeiro” rendimento \(w_{ij}\) dado os rendimentos observados \(y_{ij}\). Quando um fator é considerado fixo, as inferências são limitadas apenas aos níveis testados deste fator e os efeitos são estimados por Best Linear Unbiased Estimator, ou BLUE . Para efeitos aleatórios, onde deseja-se expandir as inferências para uma população de tratamentos (ou ambientes), a predição é realizada por Best Linear Unbiased Predictor, ou BLUP (Henderson 1975). Eq.

14.11.1 Ajustando o modelo

A função waasb() do pacote metan será utilizada para a análise dos dados de nosso exemplo utilizando o modelo misto descrito acima, considerando como aleatório os efeitos de genótipo e da interação genótipo-vs-ambiente.


BLUP_model <- waasb(data_ge, ENV, GEN, REP,
                    resp = c(GY, HM),
                    verbose = FALSE)

A função get_model_data() pode ser utilizada para extrair importantes informações do modelo ajustado com a função waasb().

  • Resumo do experimento
get_model_data(BLUP_model, "details")
# # A tibble: 14 x 3
#    Parameters GY                  HM              
#    <chr>      <chr>               <chr>           
#  1 Mean       "2.67"              "48.09"         
#  2 SE         "0.05"              "0.21"          
#  3 SD         "0.92"              "4.37"          
#  4 CV         "34.56"             "9.09"          
#  5 Min        "0.67 (G10 in E11)" "38 (G2 in E14)"
#  6 Max        "5.09 (G8 in E5)"   "58 (G8 in E11)"
#  7 MinENV     "E11 (1.37)"        "E14 (41.03)"   
#  8 MaxENV     "E3 (4.06)"         "E11 (54.2)"    
#  9 MinGEN     "G10 (2.47) "       "G2 (46.66) "   
# 10 MaxGEN     "G8 (3) "           "G5 (49.3) "    
# 11 wresp      "50"                "50"            
# 12 mresp      "100"               "100"           
# 13 Ngen       "10"                "10"            
# 14 Nenv       "14"                "14"
  • Teste de razão de máxima verossimilhanças (LRT)
get_model_data(BLUP_model, "lrt")
# # A tibble: 4 x 8
#   VAR   model    npar logLik   AIC   LRT    Df `Pr(>Chisq)`
#   <chr> <chr>   <int>  <dbl> <dbl> <dbl> <dbl>        <dbl>
# 1 GY    GEN        44  -224.  537. 19.3      1     1.11e- 5
# 2 GY    GEN:ENV    44  -237.  562. 44.8      1     2.15e-11
# 3 HM    GEN        44  -867. 1821.  7.86     1     5.07e- 3
# 4 HM    GEN:ENV    44  -894. 1876. 62.8      1     2.27e-15

O teste LRT indicou diferenças significativas para os efeitos aleatórios de genótipo e interação genótipo-vs-ambiente. Assim, a utilização de modelos mistos é indicada para predição do rendimento em nosso exemplo.

  • Componentes da variância
get_model_data(BLUP_model, "vcomp")
# # A tibble: 3 x 3
#   Group        GY    HM
#   <chr>     <dbl> <dbl>
# 1 GEN      0.0280 0.490
# 2 GEN:ENV  0.0567 2.19 
# 3 Residual 0.0967 2.84

14.11.2 Análise dos resíduos

A função autoplot() também pode ser utilizada para a investigação dos pressupostos do modelo neste exemplo. Dois gráficos que são gerados mas não mostrados por padrão são vistos neste exemplo.

plot(BLUP_model)

14.11.3 Parâmetros genéticos

get_model_data(BLUP_model, "genpar")
# Class of the model: waasb
# Variable extracted: genpar
# # A tibble: 9 x 3
#   Parameters              GY     HM
#   <chr>                <dbl>  <dbl>
# 1 Phenotypic variance  0.181 5.52  
# 2 Heritability         0.154 0.0887
# 3 GEIr2                0.313 0.397 
# 4 h2mg                 0.815 0.686 
# 5 Accuracy             0.903 0.828 
# 6 rge                  0.370 0.435 
# 7 CVg                  6.26  1.46  
# 8 CVr                 11.6   3.50  
# 9 CV ratio             0.538 0.415

Além dos componentes de variância para os efeitos aleatórios declarados, alguns importantes parâmetros genéticos são mostrados. Heribatility é a herdabilidade no sentido amplo (\(\mathop h\nolimits_g^2\)) estimada por \(\mathop h\nolimits_g^2 = \mathop \sigma \nolimits_g^2 /\left( {\mathop \sigma \nolimits_g^2 + \mathop \sigma \nolimits_i^2 + \mathop \sigma \nolimits_e^2 } \right)\) onde \((\mathop \sigma \nolimits_g^2 )\) é a variância genotípica; \((\mathop \sigma \nolimits_i^2 )\) é a variância da interação GE; e \((\mathop \sigma \nolimits_e^2 )\) é a variância residual. GEIr2 é o coeficiente de determinação do efeito da interação GE (\(\mathop r\nolimits_i^2\) ) estimado por \(\mathop r\nolimits_i^2 = \mathop \sigma \nolimits_i^2 /\left( {\mathop \sigma \nolimits_g^2 + \mathop \sigma \nolimits_i^2 + \mathop \sigma \nolimits_e^2 } \right)\); Heribatility of means é a herdabilidade da média assumindo ausência de valores perdidos \((\mathop h\nolimits_{gm}^2 )\), estimada por \(\mathop h\nolimits_{gm}^2 = \mathop \sigma \nolimits_g^2 /\left[ {\mathop \sigma \nolimits_g^2 + \mathop \sigma \nolimits_i^2 /a + \mathop \sigma \nolimits_e^2 /\left( {ab} \right)} \right]\), onde a e b são o número de ambientes e blocos, respectivamente; Accuracy é a acurácia de seleção (Ac), estimada por \(Ac = \sqrt{\mathop h\nolimits_{gm}^2}\) ; rge é a correlação genótipo-ambiente \((\mathop r\nolimits_{ge})\) estimada por \(\mathop r\nolimits_{ge} = \mathop \sigma \nolimits_g^2 /\left({\mathop \sigma \nolimits_g^2 + \mathop \sigma \nolimits_i^2} \right)\); CVg é o coeficiente de variação genotípico, estimado por \({\left({\mathop \sigma \nolimits_g^2 /\mu } \right)^{0.5}} \times 100\), onde \(\mu\) é a média geral; CVr é o coeficiente de variação residual, estimado por \({\left( {\mathop \sigma \nolimits_e^2 /\mu} \right)^{0.5}} \times 100\) ; CV ratio é a razão entre o coeficiente de variação genotípico e residual.

14.11.4 Médias preditas

  • Imprimindo os BLUPs preditos para genótipos

print(BLUP_model$GY$BLUPgen)
# # A tibble: 10 x 6
#     Rank GEN     BLUPg Predicted    LL    UL
#    <dbl> <fct>   <dbl>     <dbl> <dbl> <dbl>
#  1     1 G8     0.269       2.94  2.78  3.11
#  2     2 G3     0.229       2.90  2.74  3.07
#  3     3 G2     0.0570      2.73  2.57  2.90
#  4     4 G7     0.0543      2.73  2.56  2.89
#  5     5 G4    -0.0264      2.65  2.48  2.81
#  6     6 G1    -0.0575      2.62  2.45  2.78
#  7     7 G5    -0.112       2.56  2.40  2.73
#  8     8 G6    -0.114       2.56  2.39  2.73
#  9     9 G9    -0.134       2.54  2.37  2.71
# 10    10 G10   -0.166       2.51  2.34  2.67

blupGEN mostra a média predita para os genótipos testados. BLUPg é o efeito genotípico \((\hat{g}_{i})\) estimado por \(\hat{g}_{i} = h_g^2(\bar{y}_{i.}-\bar{y}_{..})\) onde \(h_g^2\) é o efeito shrinkage para genótipo, estimado por \(\mathop h\nolimits_g^2 = (\mathop {\hat \sigma }\nolimits_i^2 + E\mathop {\hat \sigma }\nolimits_g^2 )/(\mathop {\hat \sigma }\nolimits_i^2 + \mathop {\hat \sigma }\nolimits_\varepsilon ^2 + E\mathop {\hat \sigma }\nolimits_g^2 ).\). Predicted é a média predita por \(\hat{g}_{i}+\mu\) onde \(\mu\) é a média geral. LL e UL são os limites inferiore e superior, respectivamente estimado por \((\hat{g}_{i}+\mu)\pm{CI}\). \(CI\) é o intervalo de confiança para predição BLUP, assumindo uma dada probabilidade de erro, onde \(CI = t\times\sqrt{((1-Ac)\times{\mathop \sigma \nolimits_g^2)}}\) onde \(t\) é o valor t-Student para um teste bilateral a uma dada probabilidade de erro; \(Ac\) é a acurácia de seleçao; e \(\mathop \sigma \nolimits_g^2\) é a variância genotípica.

  • plotando os BLUPs preditos para genótipos
p1 <-plot_blup(BLUP_model)
p2 <-plot_blup(BLUP_model,
               col.shape  =  c("gray20", "gray80"),
               y.lab = "Genótipos",
               x.lab = "Rendimento de grãos predito") + coord_flip()

arrange_ggplot(p1, p2, tag_levels = list(c("p1", "p2")))
Médias preditas para genótipos considerando um modelo misto

Figure 14.4: Médias preditas para genótipos considerando um modelo misto

  • Imprimindo os BLUPs estimados para as combinações genótipo x ambiente (primeiras 10 entradas)

print(BLUP_model$GY$BLUPint)
# # A tibble: 420 x 7
#    ENV   GEN   REP     BLUPg  BLUPge `BLUPg+ge` Predicted
#    <fct> <fct> <fct>   <dbl>   <dbl>      <dbl>     <dbl>
#  1 E1    G1    1     -0.0575 -0.0621    -0.120       2.46
#  2 E1    G1    2     -0.0575 -0.0621    -0.120       2.44
#  3 E1    G1    3     -0.0575 -0.0621    -0.120       2.31
#  4 E1    G2    1      0.0570  0.207      0.264       2.84
#  5 E1    G2    2      0.0570  0.207      0.264       2.82
#  6 E1    G2    3      0.0570  0.207      0.264       2.69
#  7 E1    G3    1      0.229   0.0885     0.318       2.89
#  8 E1    G3    2      0.229   0.0885     0.318       2.87
#  9 E1    G3    3      0.229   0.0885     0.318       2.75
# 10 E1    G4    1     -0.0264  0.0601     0.0337      2.61
# # ... with 410 more rows

A saída acima os BLUPs estimados para as combinações genótipo x ambiente. BLUPg é o efeito genotípico, descrito acima; BLUPge é o efeito genotípico do genótipo i no ambiente j \((\hat{g}_{ij})\) estimado por \(\hat{g}_{ij} = h_g^2(\bar{y}_{i.}-\bar{y}_{..})+h_{ge}^2(y_{ij}-\bar{y}_{i.}-\bar{y}_{.j}+\bar{y}_{..})\), onde \(h_{ge}^2\) é o efeito shrinkage para a interação GE, estimado por \(\mathop h\nolimits_{ge}^2 = \mathop {\hat \sigma }\nolimits_i^2 /(\mathop {\hat \sigma }\nolimits_i^2 + \mathop {\hat \sigma }\nolimits_\varepsilon ^2)\); BLUPg+ge é \(BLUP_g+BLUP_{ge}\); Predicted é a média predita (\(\hat{y}_{ij}\)) estimada por \(\hat{y}_{ij} = \bar{y}_{.j}+BLUP_{g+ge}\).

Para obter os valores acima para cada variável do modelo basta utilizar a função get_model_data(), por exemplo:

14.11.5 Índices de estabilidade baseados em BLUP

14.11.5.1 O índice WAASB

Recentemente, (Tiago Olivoto, Lúcio, et al. 2019a) propuseram um índice de estabilidade, WAASB (Weighted Average of Absolute Scores), que combina as características do modelo AMMI e BLUP. O índice é baseado na média ponderada dos escores absolutos obtidos pela decomposição por valores singulares da matriz BLUP dos efeitos da interação em um modelo de efeito misto, conforme a seguite equação.

\[ 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 escores absolutos do genótipo i; \(IPCA_{ik}\) é o escore do genótipo i no k-esimo IPCA; e \(EP_k\) é a variância explicada pelo k IPCA para \(k = 1,2, .., p\), sendo \(p = min (g-1; e-1)\). O genótipo mais estável é aquele com o menor valor de WAASB (Tiago Olivoto, Lúcio, et al. 2019a).

Devido a aplicação da ténica de decomposição por valores singulares, é possível a confecção de biplots semelhantes ao método AMMI, considerando agora, um modelo de efeito misto. Para isto, a função plot_scores é utilizada utilizando como argumento de o modelo ajustado BLUP_model. Tiago Olivoto, Lúcio, et al. (2019a) e Tiago Olivoto, Lúcio, et al. (2019b) propuseram a utilização do índice WAASB na ordenada do biplot AMMI1, substituindo os valores do IPCA1 pelos valores do WAASB. Este biplot é criado utilizando type = 3 na função.

p5 = plot_scores(BLUP_model, type = 3)
p6 = plot_scores(BLUP_model, type = 3) +
                 theme_gray() +
                 theme(legend.position = c(0.1, 0.9),
                       legend.background = element_rect(fill = NA))

arrange_ggplot(p5, p6, tag_levels = list(c("p5","p6")))
Biplot AMMI2 gerado pelo pacote metan

Figure 14.5: Biplot AMMI2 gerado pelo pacote metan

Os quadrantes propostos nesta interpretação representam as quatro classificações propostas por Tiago Olivoto, Lúcio, et al. (2019a) em relação à interpretação conjunta da produtividade e estabilidade. Os genótipos ou ambientes incluídos no quadrante I podem ser considerados genótipos instáveis –ou ambientes com alta capacidade de discriminação, mas com produtividade abaixo da média geral. No quadrante II 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 fornecerem altas magnitudes da variável resposta, apresentam boa capacidade de discriminação. Os genótipos dentro do quadrante III têm baixa produtividade, mas podem ser considerados estáveis devido aos valores mais baixos do 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. Os genótipos dentro do quadrante IV são altamente produtivos e estáveis.

14.11.5.2 O índice WAASBY

Um novo índice de superioridade que considera tanto a estabilidade quanto a produtividade para a classificação dos genótipos também foi proposto por Tiago Olivoto, Lúcio, et al. (2019a), considerando a seguinte equação.

\[ 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 superioridade para o genótipo i que pondera entre desempenho e estabilidade; \(rG_i\) e \(rW_i\) são os valores escalonados (0-100) para GY e WAASB, respectivamente; \(\theta_Y\) e \(\theta_S\) são os pesos para GY e WAASB, respectivamente.

Este índice permite atribuir pesos para estabilidade e produtividade na classificação dos genótipos. Para isto, o argumento wresp da função waasb() é usado. Por exemplo, se o objetivo é selecionar genótipos com alto rendimento (independentemente de sua estabilidade), então o wresp = 100 deve ser usado. Nesse caso, a classificação do índice WAASBY corresponderá perfeitamente à classificação da variável de resposta. Por outro lado, visando selecionar genótipos altamente estáveis (independentemente da produtividade), então o wresp = 0 deve ser usado. Nesse caso, a classificação do índice WAASBY corresponderá perfeitamente à classificação do índice WAASB. Qualquer valor entre 0 e 100 pode ser usado no argumento wresp para ponderar entre o desempenho médio e a estabilidade. Em nosso exemplo, o índice WAASBY foi calculado considerando wresp = 50 (padrão da função), o que significa pesos iguais para desempenho e estabilidade médios. Para plotar os valores de WAASBY, o código a seguir é usado.

p1 <- plot_waasby(BLUP_model)
p2 <- plot_waasby(BLUP_model,
                  col.shape = c("black", "gray")) +
  coord_flip()

O reescalonamento da variável resposta e do índice WAASB é necessário para que eles sejam diretamente comparáveis. Por padrão, a variável resposta é reescalonada de forma que o valor máximo (genótipo com a maior média) seja 100 e o valor mínimo (genótipo com a menor média) seja 0. Digamos que para uma determinada variável, menores valores são desejados, então o argumento mresp = 100 (padrão) deve ser ajustado para mresp = 0.

Par obter o índice WAASBY para múltiplas variáveis, por exemplo, basta utilizar a função get_model_data(), como mostrado abaixo.

waas(data_ge2, ENV, GEN, REP,
     resp = c(PH, ED, TKW, NKR),
     wresp = rep(65, 4)) %>%
 get_model_data(what = "WAASY")
# variable PH 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV   3  7.719  2.5728 127.913 4.25e-07          .           .
#   REP(ENV)   8  0.161  0.0201   0.897 5.22e-01          .           .
#        GEN  12  1.865  0.1554   6.929 6.89e-09          .           .
#    GEN:ENV  36  5.397  0.1499   6.686 5.01e-14          .           .
#        PC1  14  4.466  0.3190  14.230 0.00e+00       82.8        82.8
#        PC2  12  0.653  0.0545   2.430 8.40e-03       12.1        94.9
#        PC3  10  0.277  0.0277   1.240 2.76e-01        5.1         100
#  Residuals  96  2.153  0.0224      NA       NA          .           .
#      Total 191 22.692  0.1188      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# variable ED 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV   3  306.0  101.99  43.386 2.70e-05          .           .
#   REP(ENV)   8   18.8    2.35   0.906 5.15e-01          .           .
#        GEN  12  212.9   17.74   6.838 8.95e-09          .           .
#    GEN:ENV  36  398.2   11.06   4.263 7.60e-09          .           .
#        PC1  14  212.2   15.16   5.840 0.00e+00       53.3        53.3
#        PC2  12  134.7   11.23   4.330 0.00e+00       33.8        87.1
#        PC3  10   51.3    5.13   1.980 4.38e-02       12.9         100
#  Residuals  96  249.1    2.59      NA       NA          .           .
#      Total 191 1583.2    8.29      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# variable TKW 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV   3  37013   12338   11.13 3.16e-03          .           .
#   REP(ENV)   8   8869    1109    1.21 3.03e-01          .           .
#        GEN  12  44633    3719    4.05 4.41e-05          .           .
#    GEN:ENV  36 164572    4571    4.98 1.73e-10          .           .
#        PC1  14 104276    7448    8.11 0.00e+00       63.4        63.4
#        PC2  12  33361    2780    3.03 1.20e-03       20.3        83.6
#        PC3  10  26935    2694    2.93 3.00e-03       16.4         100
#  Residuals  96  88171     918      NA       NA          .           .
#      Total 191 507829    2659      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# variable NKR 
# ---------------------------------------------------------------------------
# AMMI analysis table
# ---------------------------------------------------------------------------
#     Source  Df Sum Sq Mean Sq F value   Pr(>F) Proportion Accumulated
#        ENV   3  237.0   79.01  15.843 0.000997          .           .
#   REP(ENV)   8   39.9    4.99   0.635 0.746348          .           .
#        GEN  12  227.8   18.99   2.418 0.008726          .           .
#    GEN:ENV  36  602.7   16.74   2.132 0.001839          .           .
#        PC1  14  337.4   24.10   3.070 0.000600         56          56
#        PC2  12  192.2   16.02   2.040 0.028500       31.9        87.9
#        PC3  10   73.1    7.31   0.930 0.509500       12.1         100
#  Residuals  96  753.7    7.85      NA       NA          .           .
#      Total 191 2463.8   12.90      NA       NA       <NA>        <NA>
# ---------------------------------------------------------------------------
# 
# All variables with significant (p < 0.05) genotype-vs-environment interaction
# Done!
# Class of the model: waas
# Variable extracted: WAASY
# # A tibble: 13 x 5
#    GEN      PH    ED   TKW   NKR
#    <chr> <dbl> <dbl> <dbl> <dbl>
#  1 H1     73.6 78.1   84.5  42.7
#  2 H10    22.0 18.8   34.8  56.3
#  3 H11    42.5 39.2   56.6  56.3
#  4 H12    27.5 51.5   41.0  35  
#  5 H13    49.2 60.2   70.7  25.1
#  6 H2     66.3 54.9   62.5  51.6
#  7 H3     59.4 57.9   52.1  48.5
#  8 H4     68.6 59.4   59.8  98.7
#  9 H5     85.3 61.6   69.9  75.2
# 10 H6     67.5 95.7   90.3  34.5
# 11 H7     41.4 62.8   55.8  42.6
# 12 H8     11.6 32.2   17.3  29.2
# 13 H9     45.5  7.93   0    48.4

14.11.5.3 Diferentes cenários para a estimativa do WAASBY

No exemplo a seguir, aplicaremos a função wsmp() (weighting the stability and the mean performance) ao modelo previamente ajustado BLUP_model visando planejar diferentes cenários de estimação do WAASBY alterando os pesos atribuídos à estabilidade e ao desempenho médio. O número de cenários é definido pelo argumento increment. Por padrão, vinte e um cenários diferentes são simulados. Neste caso, o índice de superioridade WAASBY é calculado considerando os seguintes pesos: estabilidade = 100; desempenho médio = 0. Em outras palavras, apenas a estabilidade é considerada para a classificação dos genótipos. Na próxima iteração, os pesos se tornam 95/5 (uma vez que increment = 5). No terceiro cenário, os pesos se tornam 90/10, e assim por diante até esses pesos se tornarem 0/100. Na última iteração, a classificação do genótipo para o WAASBY corresponde perfeitamente às classificações da variável resposta.

scenarios <- wsmp(BLUP_model)
p1 <- plot(scenarios)
p2 <- plot(scenarios, type = 2)
arrange_ggplot(p1, p2, tag_levels = list(c("p1", "p2")))

A função genérica plot() é então usada para plotar o objeto. Dois heatmaps são criados. O primeiro tipo mostra a classificação do genótipo dependendo do número de eixos de componentes principais usados para estimar o índice WAASB. Um dendrograma baseado na distância euclidiana é usado para agrupar a classificação dos genótipos. O segundo tipo mostra a classificação do genótipo dependendo da relação WAASB/GY. As classificações obtidas no cenário 100/0 consideram exclusivamente a estabilidade para o ranking de genótipos. Por outro lado, o cenário 0/100 considera exclusivamente a produtividade para o ranking de genótipos.

14.11.5.4 Performance e média harmônica dos valores genotípicos

A função Resende_indexes() computa os índices Média Harmônica dos Valores Genotípicos (MHVG), Performance Relativa dos Valores Genotípicos (PRVG) e Média Harmônica da Performance Relativa dos Valores Genotipicos (MHPRVG), conforme descrito em Colombari Filho et al. (2013). Estes índices são calculados para cada genótipo de acordo com as seguintes equações.

\[ MHVG_i = \frac{1}{e}\sum\limits_{j = 1}^e {\frac{1}{{G{v_{ij}}}}} \]

\[ PRVG_i = \frac{1}{e}\sum\limits_{j = 1}^e {G{v_{ij}}/{\mu_j}} \]

\[ MHPRVG_i = \frac{1}{e}\sum\limits_{j = 1}^e {\frac{1}{{G{v_{ij}}/{\mu_j}}}} \]

onde e é o número de ambientes incluídos na análise, \(Gv_{ij}\) é o valor genotípico (BLUP) para o genótipo i no ambiente j.

Indexes <- Resende_indexes(BLUP_model)
print(Indexes$GY)
# # A tibble: 10 x 10
#    GEN       Y  HMGV HMGV_R  RPGV RPGV_Y RPGV_R HMRPGV HMRPGV_Y HMRPGV_R
#    <fct> <dbl> <dbl>  <dbl> <dbl>  <dbl>  <dbl>  <dbl>    <dbl>    <dbl>
#  1 G1     2.60  2.32      6 0.969   2.59      6  0.967     2.59        6
#  2 G10    2.47  2.11     10 0.913   2.44     10  0.896     2.40       10
#  3 G2     2.74  2.47      4 1.03    2.74      4  1.02      2.73        4
#  4 G3     2.96  2.68      2 1.11    2.96      2  1.10      2.95        2
#  5 G4     2.64  2.39      5 0.990   2.65      5  0.988     2.64        5
#  6 G5     2.54  2.30      8 0.954   2.55      7  0.952     2.55        8
#  7 G6     2.53  2.30      7 0.954   2.55      8  0.952     2.55        7
#  8 G7     2.74  2.52      3 1.04    2.77      3  1.03      2.76        3
#  9 G8     3.00  2.74      1 1.13    3.01      1  1.12      3.00        1
# 10 G9     2.51  2.18      9 0.926   2.48      9  0.917     2.45        9

14.12 AMMI ou BLUP? Decisão em cada caso!

Vimos anteriormente que um membro da família de modelos AMMI (AMMI2) é o mais preciso na predição da variável resposta em nosso exemplo. Após analizar-mos os mesmos dados utilizando modelos mistos, nos surge a seguinte questão. Qual é o método mais preciso para predizer a variável resposta em nosso exemplo? A resposta a esta pergunda será dada agora. O pacote metan também conta com uma função para cross-validation considerando o modelo misto acima. A idéia é simples. Relizaremos uma validação cruzada semelhante àquela realizada no modelo AMMI e compararemos o RMSPD dos valores preditos utilizando BLUP com aqueles obtidos pelo modelo AMMI.

A função cv_blup() realiza uma validação cruzada para experimentos com repetição usando modelos mistos. Por padrão, blocos completos são selecionados aleatoriamente em cada ambiente. O procedimento para calcular o RMSPD é idêntico ao apresentado na análise AMMI.

valida_blup <- cv_blup(data_ge, ENV, GEN, REP, GY, nboot = 20)

Para unir os resultados obtidos pelas funções cv_ammif() e cv_blup() a função bind_cv(). Usando o argumento bind = "means" é possível concatenar os valores médios obtidos por cada modelo.

val_means <- bind_cv(AMMIF, valida_blup, bind = "means")
val_means$RMSPD
# # A tibble: 11 x 6
#    MODEL        mean     sd      se  Q2.5 Q97.5
#    <fct>       <dbl>  <dbl>   <dbl> <dbl> <dbl>
#  1 BLUP_g_RCBD 0.408 0.0232 0.00518 0.370 0.439
#  2 AMMI2       0.411 0.0242 0.00171 0.369 0.460
#  3 AMMI4       0.416 0.0234 0.00166 0.373 0.462
#  4 AMMI3       0.416 0.0215 0.00152 0.377 0.457
#  5 AMMI5       0.422 0.0232 0.00164 0.377 0.464
#  6 AMMI6       0.422 0.0219 0.00155 0.381 0.462
#  7 AMMI7       0.425 0.0199 0.00141 0.381 0.458
#  8 AMMI8       0.427 0.0204 0.00145 0.387 0.462
#  9 AMMIF       0.429 0.0213 0.00150 0.390 0.469
# 10 AMMI1       0.430 0.0251 0.00178 0.384 0.479
# 11 AMMI0       0.430 0.0283 0.00200 0.370 0.485

Um gráfico boxplot também pode ser obtido utilizando o argumento bind = "boot" (padrão).

val_plot <- bind_cv(AMMIF, valida_blup)
p1 <-plot(val_plot)
p2 <-plot(val_plot,
          width.boxplot = 0.6,
          col.boxplot = "cyan")
arrange_ggplot(p1, p2)