# biometryassist 1.5.0

## Major changes

- `multiple_comparisons()`: the `plot`, `label_height`, `rotation`, `save`, and `savename` arguments are now **deprecated** and will be removed in a future version. Use `autoplot(<result>)` for plotting (pass `label_height` and `rotation` there), and `write.csv(result$predictions, "file.csv")` for saving. The `pred`, `order`, and `pred.obj` arguments were deprecated in 1.1.0 or earlier and have now been **removed**.
- `multiple_comparisons()` gains an `adjust` argument to choose the p-value adjustment method (any `stats::p.adjust()` method, in addition to the default Tukey's HSD), and a `by` argument to run comparisons independently within groups.
- Added support for `aovlist` and `nlme::lme()` models in `multiple_comparisons()` (#107).
- Broadened model-engine support across both workflows to bring `resplot()` and the comparison functions (`multiple_comparisons()`, `pairwise_comparisons()`, `reference_comparisons()`) closer to parity:
    - The comparison functions now support `afex` (`afex_aov`), `glmmTMB`, and sommer's `mmes()` models. `glmmTMB` predictions are on the link scale with asymptotic degrees of freedom (supply `trans` to back-transform); sommer `mmes()` predictions and SEDs come from sommer's native `predict()`, also with asymptotic degrees of freedom.
    - `resplot()` now supports multi-stratum `aov` models fitted with `Error()` (`aovlist`, one panel per error stratum), `afex_aov` models, and Gaussian-family `glmmTMB` models.
    - `lme4breeding::lmebreed()` (relationship-based mixed) models are supported by both workflows: they carry class `lmerMod` and are handled by the existing `lmerMod` methods. Comparisons correctly reflect the relationship structure (validated against ASReml-R), using Kenward-Roger degrees of freedom.
    - Deliberate boundaries (with informative errors): ARTool (`art`) and sommer's legacy `mmer` models are not available for the comparison functions (ART uses aligned ranks — use `ARTool::art.con()`; refit `mmer` with `sommer::mmes()`), though both remain supported by `resplot()`. Non-Gaussian `glmmTMB` models are not valid for `resplot()`'s normal-Q-Q diagnostic and point to `DHARMa::simulateResiduals()` instead.
- New function `pairwise_comparisons()` to test selected pairwise differences (or general linear contrasts) between predicted means, returning a tidy table of estimates, predicted means and multiplicity-adjusted p-values, with a forest plot via `autoplot()`.
- New function `reference_comparisons()` to compare every level against a single reference (control) level, using an exact Dunnett test by default. It returns a means-centric table (each level's mean, the reference mean and the adjusted difference) and a means plot via `autoplot()`.


## Minor changes

- Added the ability to add buffers or double buffers around blocks. (#169)
- `autoplot()` for `multiple_comparisons()` output gains several new options (thanks to Michael Mumford, #161): `type = "line"` joins the means with a line; `include_errorbar` and `include_lettering` toggle the error bars and significance letters; `errorbar_type = "hsd"` draws a single Tukey's HSD reference bar instead of per-mean intervals; and `trans_scale = TRUE` plots back-transformed means on the model (transformed) scale with an exact back-transformed secondary axis.
- Added a vignette, "Choosing and interpreting multiple comparisons", introducing `pairwise_comparisons()` and `reference_comparisons()` alongside `multiple_comparisons()` and giving guidance on choosing a multiplicity adjustment.

## Bug Fixes

- Fixed an issue where asreml doesn't install properly on macOS because the link isn't constructed properly. (#163)
- Fixed Skeletal ANOVA table not showing 2 way interactions for 3 way factorials (#171)
- Colours are now consistent between the output of designs printed with `autoplot()` and the `export_design_to_excel()` function. (#170)
- The `export_design_to_excel()` function is now less fragile. It can handle design objects and data frames as input, and alternative names for the row and column columns. (#168 and #172)
- Fixed a bug where asreml models didn't report the correct number of residual points in `resplot()`. (#167)

# biometryassist 1.4.0

## Major changes

- Deprecated `des_info()`. This function has been superseded by `design()`, and will be removed in a future version.
- Implement `arcsin` transformation handling in `multiple_comparisons()` (#60).
- Demonstrated how to add orientation information to design plots via a vignette (#126).
- Major refactoring of `design()` in preparation for moving to a new backend later (#102). No user-facing changes.
- Added strip-plot designs (#134).
- Enabled output of p-value matrix from `multiple_comparisons()`. This required changing the `multiple_comparisons()` output object to a list, but printing to console and autoplot(<multiple_comparisons>) still work as before (#22).  

## Minor changes

- Add interval type 'none' for `multiple_comparisons()` (#125).
- Added a print method for `satab()` to reliably get the same output (#133).
- Switched from `cowplot` to `patchwork` to speed up `resplot()` (and `variogram()`) (#29).
- Added and refactored numerous tests throughout to achieve 100% test coverage and speed up tests (#104, #143, #144, #135, #148)
- Added asreml downloads for more operating systems and versions (#158).

## Bug Fixes

- Fixed a bug where hex colours don't work with `export_design_to_excel()` (#124).
- Fixed a bug where buffers weren't added to the plot if they are added after initial design creation (#123).
- Fixed a bug in `install_asreml()` where it threw an error with more than one new version (#122).
- Fixed a bug where `calculate_differences()` clashed with package "MuMIn" (#131).

# biometryassist 1.3.3

## Bug Fixes

- Fixing test issues identified by CRAN after ggplot2 4.0.0 release

# biometryassist 1.3.2

## Bug Fixes

- Updates to tests and histograms for compatibility with upcoming ggplot2 release.
- Fixed a bug where standard errors that were too small would produce plots with missing upper or lower confidence limits due to rounding the SE to zero. (#119)
- Fixed a bug that made rotated axis labels overlap the plot area (#113)

# biometryassist 1.3.1

## Bug Fixes

- Update to ensure compatibility with upcoming ggplot2 release (#111)

# biometryassist 1.3.0

## Major changes

- Switched to using S3 methods for `resplot()` to enable easier expansion to different models in future. (#100)
- Introduced a new function `export_design_to_excel()`. An excel file can now be created from a design dataframe, instead of just a graphical plot. (#74)
- Introduced a new comparison interval type in `multiple_comparisons()`. 
The new option `int.type = 'tukey'` will now create comparison intervals using Tukey's distribution rather than a _t_-distribution for a regular confidence interval. 
This has been a point of confusion when intervals don't overlap but share letters. (#66)

## Minor changes

- Model inputs are now checked for potential transformations that haven't been supplied in `multiple_comparisons()`. (#83)
- Enabled a `verbose` option for the `quiet` parameter in `install_asreml()` to give more detailed output when required. (#81)
- Added ability to group multiple resplots and variograms into a single grid via a `onepage` argument. (#73)
- Buffer plots are now implemented within the design data frame, rather than just the plotting logic (#68)

## Bug Fixes

- Fixed a bug introduced in v1.2.2 where arguments weren't passed through properly to asreml. (#98)
- Fixed a bug which broke the messages about deprecated parameters in resplot. (#97)
- Fixed a long-standing bug where logl_test would work if random terms were given in resid. (#7)


# biometryassist 1.2.2

## Major changes

- Switched to using S3 methods to get predictions in `multiple_comparisons()` to enable easier expansion to different models in future. (#92)

## Minor changes

- Added ability to produce column plots from `multiple_comparisons()` (#90)
- Add option in multiple_comparisons() to disable letter comparisons (#85)
- Enable custom colour palettes for design plots (#84)

## Bug Fixes

- Fixed CRAN warnings due to changes in the sommer package (#89)
- Fixed errors in `shapiro.test()` within `resplot()` with too many data points (#87)
- Fixed a bug where `heat_map()` didn't work properly with factor columns (#86)
- Split-plot design dataframe doesn't have the required columns (#82)

# biometryassist 1.2.1

## Bug Fixes

- The new `summary_graph()` function was accidentally left out of the CRAN submission.

# biometryassist 1.2.0

## Major changes

- Introduced the `summary_graph()` (#75) and `heat_map()` (#19) functions 
- Enabled arbitrary `row`, `column`, `block` and `treatment` columns to be provided in the `autoplot.design()` function, to enable more general plotting of designs. (#28)

## Minor changes

- Implemented the ability to plot designs with buffer plots. (#68)
- Changed `install_asreml()` to check if there is a later version before downloading.
- Enabled non-standard evaluation input of column names in `autoplot.design()`.


# biometryassist 1.1.3

## Bug fixes

- Better checking of column names in data provided to `multiple_comparisons()` to prevent breaking. (#53)
- Updated install_asreml() to work with ARM chip macOS devices. (#54)
- Wrote a vignette with instructions for installing ASReml-R. (#55)
- Fixed variogram to enable it to work with dsum models (i.e. MET models). (#61)


# biometryassist 1.1.2

## Bug fixes

- Fixed a bug introduced due to a change in names by `predictmeans()`. (#50)
- Added a check for missing `ar1()` component in `variogram()`. (#49)
- Added an error check for terms provided in the wrong order to `multiple_comparisons()` via `classify`. (#48)
- Checked if model needs the `present` argument passed to `predict.asreml()`. (#41)


# biometryassist 1.1.1

## Minor changes

- `multiple_comparisons()` now accepts power transformations and automatically back-transforms. It gains a new argument `power` to provide the transformation power applied in the model to undo. This enables more general Box-Cox transformations. (#36)
- `multiple_comparisons()` no longer produces an error when the `trans` argument is supplied and `offset` is not. It now produces a warning and sets `offset` to 0 when not provided. (#37)
- Added an option to turn off the start up message and version check. Add `options(biometryassist.check = FALSE)` to your .Rprofile file to disable. Partially fixes #6.
- Enabled new colour-blind friendly palettes (#39)

## Bug fixes

- Updated the required version of rlang (>=1.0.0)
- Fixed a bug that didn't allow labels and the x axis to be rotated independently for `autoplot.mct()` (#35)
- Fixed an issue where treatment columns were not determined correctly in `multiple_comparisons()` (#33)
- Fixed a problem with variograms displaying grey values where `NA`s have been produced. (#24 and #25) 
- Fixed some warnings that would be introduced with the forthcoming version of ggplot2 (#42)


# biometryassist 1.1.0

## Major changes

- `multiple_comparisons()` no longer requires calls to `predict.asreml()` to be passed into the function, as the predicted values are now calculated internally. Additional arguments can be passed to `predict.asreml()` via the `...` argument. (#27)

## Minor changes

- The `order` argument of `multiple_comparisons()` has been deprecated in favour of a new argument `descending`. This takes logical (`TRUE` or `FALSE`) values only, so `default` is no longer possible as it was producing incorrect results. (#8)
- `resplt()` has been deprecated in favour of `resplot()` and will be removed in a future version (#20).
- Warnings about lack of convergence are no longer output in `logl_test()`. (#17)

## Bug fixes

- Aliased levels are printed properly in `multiple_comparisons()` now. (#14)
- R.param and G.param are removed from the `asreml()` call on `resplot()` if not explicitly provided. (#21)
- Fixed a bug where `install_asreml()` would not work on macOS Monterey. (#16)


# biometryassist 1.0.0

## Minor changes

- `mct.out()` has been renamed to `multiple_comparisons()`
- `logl.test()` has been renamed to `logl_test()`
- `des.info()` has been renamed to `des_info()`


## Previous versions

For changes prior to biometryassist 1.0.0 see the BiometryTraining package at https://biometryhub.github.io/BiometryTraining/news/index.html. 
