Every function keeps its name, its arguments and the names of its results, so existing scripts run unchanged.
Every result has a class and the methods print(), summary(), plot() and data.table::as.data.table(x, component =); plots use one style (stab_theme()).
New stab_interpret(): a plain-language interpretation of every result (headline, findings, recommendations, cautions), specific to the method and computed from its numbers, with the facts behind every sentence and a guide to reading the method; format(x, style = "markdown") for reports.
New analyses: stab_eskridge() (Eskridge’s 1990 safety-first indices EV, FW, SH and ER, with Kendall’s rank correlations; Table 4 of the paper is reproduced), stab_reliability() (Annicchiarico’s reliability index), stab_superiority() (Lin and Binns’ superiority measure with its genetic and interaction parts) and stab_huehn() (Huehn’s S1 and S2 with the tests of Nassar and Huehn). Each has print(), plot() and stab_interpret().
stab_masv(): .m now takes any number of axes from 2 up to the number of non-zero interaction axes (earlier versions used two).
stab_dist(): the help page now states that the AMMI stability distance was developed by the package author.
stab_interpret() for gge_biplot() writes the findings of the view that was drawn (.which) and warns when the scaling (.svp) does not suit it; the vignette on the GGE biplot draws and interprets all twelve combinations.
gge_biplot(): new arguments .which ("which-won-where", "mean-stability", "discrimination") and .svp; the biplot data (winners, vertex genotypes, ATC ranking, environment vectors) are attached as the attribute "gge".
New components: add_anova()$Summary (CV, shares of the sums of squares), indiv_anova()$Summary and $Homogeneity (Bartlett’s test), er_anova()$Parameters, ammi()$ammi_model, ammi_biplot()$scores, ge_means()$rank_cor; new columns in stab_reg(), stab_par(), stab_asv(), stab_fox().
Column arguments accept a bare name, a string or a vector; missing plots are handled; a missing genotype-environment combination is reported by name.
indiv_anova(): each environment is now a randomized complete block analysis (replicates were left out).
er_anova(): the lines Total and Gen used the replicate sum of squares; deviations were divided by the number of replicates; the pooled error had the wrong degrees of freedom.
stab_reg(): Delta is now Eberhart and Russell’s deviation variance with its test (it was the deviation sum of squares divided by the number of replicates).
stab_par(): the parameters were divided by the number of replicates; the pooled error had (G - 1)^2 E degrees of freedom; the stability rating at alpha was +2 instead of -2; the LSD used a one-sided t; .envCov was used plot by plot.
stab_fox(): counted plots instead of environments.
stab_asv(), stab_masv(): the weights are the ratios of the sums of squares of the axes (they were ratios of singular values, applied differently).
ammi(): no longer adds an axis with a zero singular value.
ge_data help page: 60 genotypes, 11 environments, 2 replicates (it said 11, 40 and 3).
Internal
One core for means, the combined analysis and the decompositions; closed forms throughout; lme4 and rlang are no longer needed.
Ten vignettes in HTML and PDF; tests of every analysis against independent computations.