Skip to contents

er_anova() gives Eberhart and Russell's (1966) analysis of variance of a multi-environment trial, which splits the environments and the genotype-by-environment interaction into a linear part (the regression of each genotype on the environment index) and the deviations from regression, with a test of the deviations of every genotype, together with the stability parameters of each genotype.

Usage

er_anova(.data, .y, .rep, .gen, .env)

# Default S3 method
er_anova(.data, .y, .rep, .gen, .env)

Arguments

.data

a data frame (or data.table) with one row per plot.

.y

response: a column of .data given by name (.y = Yield or .y = "Yield") or a numeric vector of length nrow(.data).

.rep

replicate (block within environment): a column of .data or a vector, as for .y.

.gen

genotype: a column of .data or a vector, as for .y.

.env

environment: a column of .data or a vector, as for .y.

Value

An object of class c("stab_er_anova", "stab_result", "list") with the components of earlier versions:

add_anova

the combined analysis of variance of add_anova.

er_anova

Eberhart and Russell's analysis of variance (class anova): lines Total, Gen, Env + (Gen x Env), Env (linear), Gen x Env(linear), Pooled deviation, one line per genotype, Pooled error.

and a new one:

Parameters

data.table, one row per genotype: Gen, Mean, Slope (\(\hat{\beta}_i\)), SE, p.b1 (test of \(\beta_i = 1\)), S2d (\(S^2_{d_i}\)), p.S2d (test of \(S^2_{d_i} = 0\)).

Methods: print(), summary(), plot() (mean against slope, which = "slope"; residuals, which = "residuals" or "qq"), stab_interpret().

Details

With the table of means \(\mathbf{Y} = (\bar{y}_{ij})\) (\(G\) genotypes by \(E\) environments) and the environment index \(I_j = \bar{y}_{\cdot j} - \bar{y}\), every genotype is regressed on the index: $$\bar{y}_{ij} = \mu_i + \beta_i I_j + \delta_{ij}, \qquad \hat{\beta}_i = \frac{\sum_j \bar{y}_{ij}I_j}{\sum_j I_j^2}, \qquad S^2_{d_i} = \frac{\sum_j \hat{\delta}_{ij}^2}{E - 2} - \frac{s^2}{B},$$ where \(s^2\) is the pooled error mean square of the plots and \(B\) the number of replicates. On the scale of the means the analysis of variance is

Total\(GE - 1\)\(\sum_{ij}(\bar{y}_{ij} - \bar{y})^2\)
Gen\(G - 1\)\(E\sum_i(\bar{y}_{i\cdot} - \bar{y})^2\)
Env + (Gen x Env)\(G(E - 1)\)\(\sum_{ij}(\bar{y}_{ij} - \bar{y}_{i\cdot})^2\)
Env (linear)\(1\)\(G\sum_j I_j^2\)
Gen x Env (linear)\(G - 1\)\(\sum_i(\sum_j\bar{y}_{ij}I_j)^2/\sum_j I_j^2 - G\sum_j I_j^2\)
Pooled deviation\(G(E - 2)\)\(\sum_{ij}\hat{\delta}_{ij}^2\)
Pooled error\(f_e\)\(f_e s^2/B\)

Genotypes and the linear interaction are tested against the pooled deviation, the deviation of each genotype (\(E - 2\) degrees of freedom) against the pooled error. A stable genotype in the sense of Eberhart and Russell has a high mean, \(\beta_i = 1\) and \(S^2_{d_i} = 0\).

Changes from the earlier version. The lines Total and Gen used the replicate sum of squares; the deviation sums of squares were divided by the number of replicates (they are already on the scale of the means); the pooled error had \(EG(B - 1)\) instead of \(E(G - 1)(B - 1)\) degrees of freedom. All three are corrected, and the regression is computed in closed form (lme4 is no longer needed).

References

Eberhart, S. A. and Russell, W. A. (1966). Stability parameters for comparing varieties. Crop Science, 6(1), 36–40. doi:10.2135/cropsci1966.0011183X000600010011x

Singh, R. K. and Chaudhary, B. D. (2004). Biometrical Methods in Quantitative Genetic Analysis. Kalyani Publishers, New Delhi.

Author

Muhammad Yaseen (myaseen208@gmail.com), Kent M. Eskridge (keskridge1@unl.edu)

Examples

data(ge_data)
fit <-
  er_anova(
      .data = ge_data
    , .y    = Yield
    , .rep  = Rep
    , .gen  = Gen
    , .env  = Env
    )
fit
#> Eberhart and Russell's analysis: 60 genotypes, 11 environments, 2 replicates 
#> 
#>                      Df    Sum Sq Mean Sq F value Pr(>F)    
#> Total               659 268469701                           
#> Gen                  59  35831215  607309   3.777 <2e-16 ***
#> Env + (Gen x Env)   600 232638486                           
#>   Env (linear)        1 131970248                           
#>   Gen x Env(linear)  59  13847665  234706   1.460 0.0178 *  
#>   Pooled deviation  540  86820573  160779                   
#> Pooled error        649  32179784   49584                   
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
#> (60 genotype deviation lines: x$er_anova; parameters: x$Parameters)
#> 
#>              Gen  Mean  Slope     SE    p.b1    S2d     p.S2d
#>           <char> <num>  <num>  <num>   <num>  <num>     <num>
#>  1:        DN126  4481 1.7108 0.2412 0.01629  78341 6.340e-03
#>  2:       V14170  4464 1.2798 0.3003 0.37579 148757 5.436e-05
#>  3:        PR115  4444 0.8154 0.2401 0.46177  77256 6.794e-03
#>  4:     12B.2511  4414 1.6375 0.2844 0.05170 128304 2.261e-04
#>  5:       V14154  4365 0.6902 0.1384 0.05201  -7447 5.703e-01
#>  6: FAISALABAD08  4361 1.5737 0.3009 0.08897 149584 5.128e-05
#>  7:       V14168  4342 0.9673 0.2755 0.90807 117372 4.787e-04
#>  8:        NR491  4320 1.5681 0.2642 0.05997 103888 1.191e-03
#>  9:  LOCAL CHECK  4280 1.2221 0.2561 0.40827  94621 2.204e-03
#> 10:       122559  4259 0.9834 0.3015 0.95730 150380 4.849e-05
head(fit$Parameters)
#>         Gen     Mean     Slope        SE       p.b1       S2d        p.S2d
#>      <char>    <num>     <num>     <num>      <num>     <num>        <num>
#> 1: 013BT034 4247.500 0.9539767 0.2181489 0.83760871  55088.39 2.670478e-02
#> 2:   122557 4062.364 1.5159430 0.1702936 0.01425298  14201.74 2.406599e-01
#> 3:   122559 4258.591 0.9834026 0.3015181 0.95730445 150380.28 4.849012e-05
#> 4: 12B.2511 4414.409 1.6375025 0.2843871 0.05170192 128303.52 2.261371e-04
#> 5:   12FJ26 4057.227 0.7025845 0.2633342 0.28792236 102940.80 1.268556e-03
#> 6: 14B.1030 3995.409 0.9951608 0.2598803 0.98554993  98965.95 1.653205e-03
plot(x = fit, which = c("slope", "residuals", "qq")[1])