Modern agricultural research began at Rothamsted in 1843, when Sir John Bennet Lawes started the Broadbalk wheat experiment which is now the world’s longest-running field experiment. Rothamsted also pioneered the application of statistics in biological research when Sir Ronald Fisher was appointed in 1919 to study the accumulated results of Broadbalk and its many subsequent experiments. Fisher soon realised the need for improved statistical techniques over the whole range of agricultural and biological research, and the groundwork for modern applied statistics was laid by him and his colleagues during the 1920s and 1930s.

Statistical computing began at Rothamsted when Fisher’s successor Frank Yates obtained an Elliot 401 computer – one of the first computers to be used away from its manufacturing base, and one of the first to be used for statistical work. This extended the tradition, started by Fisher, of conducting statistical research to solve real problems arising from biological research. The resulting new methods could now be implemented in the Rothamsted statistical programs to enable them to be used more effectively in practice.

The ideas underlying Genstat took shape in 1965–1966 when John Nelder visited the Waite Institute of the University of Adelaide to work with Graham Wilkinson who was then on secondment there from CSIRO (Commonwealth Scientific and Industrial Research Organization). Full development began at Rothamsted in 1968 when Nelder was appointed as Head of the Statistics Department.

### Release 1

The original Genstat’s (Versions 1-4) were designed in the days when computers could be run only in batch mode. Analysis programs were prepared on cards or paper tape, and the results were returned later in the day on wide sheets of output. In the 1980’s, under the leadership of Roger Payne, a new much revised version was produced with a redesigned syntax and style of operation, to make interactive use more convenient on the new generation of computers like the VAX 750. The new release, in 1987, was known as Genstat 5. However, the 5 was dropped in 2000, when the name was changed from “Genstat” to “GenStat”. This lasted until Release 18, when the original name “Genstat” was restored. The Genstat 5 command language now provides the scripting language for Genstat *for Windows*.

In addition to the new syntax, the new release also added the ability to plot high-resolution graphs, and to fit a range of standard curves (directive `FITCURVE`

). It also introduced the procedure structure. The initial test release had seven procedures.

`ALIAS`

finds out information about aliased model terms in analysis of variance.

`CHECKARGUMENT`

checks the arguments of a procedure.

`LIBEXAMPLE`

accesses examples and source code of library procedures.

`LIBHELP`

provides help information about library procedures.

`LIBINFORM`

provides information about the procedure library.

`NOTICE`

provides news and other information about Genstat.

`PERCENT`

expresses the body of a table as percentages of one of its margins.

The full release in 1987, with procedure library PL1, added 28 new procedures.

`AONEWAY`

|provides one-way analysis of variance for inexperienced users.

`APLOT`

plots residuals from an `ANOVA`

analysis.

`BIPLOT`

produces a biplot from a set of variates.

`CANCORRELATION`

does canonical correlation analysis.

`CENSOR`

pre-processes censored data before analysis by `ANOVA`

.

`CLASSIFY`

obtains a starting classification for non-hierarchical clustering.

`CONCORD`

(now `KCONCORDANCE`

) calculates Kendall’s Coefficient of Concordance.

`CORRESP`

(now `CORANALYSIS`

) does correspondence analysis, or reciprocal averaging.

`DDENDROGRAM`

draws dendrograms with control over structure and style.

`DESCRIBE`

saves and/or prints summary statistics for variates.

`DISCRIMINATE`

performs discriminant analysis.

`FIELLER`

calculates effective doses or relative potencies.

`GENPROCRUSTES`

performs a generalized Procrustes analysis.

`GLM`

analyses non-standard generalized linear models.

`KOLMOG2`

performs a Kolmogorov-Smirnoff two-sample test.

`KRUSKAL`

carries out a Kruskal-Wallis one-way analysis of variance.

`MANNWHITNEY`

performs a Mann-Whitney U test.

`MANOVA`

performs multivariate analysis of variance and covariance.

`MULTMISSING`

estimates missing values for units in a multivariate data set.

`ORTHPOLYNOMIAL`

calculates orthogonal polynomials.

`QUANTILE`

calculates quantiles of the values in a variate.

`RCHECK`

checks the fit of a linear or generalized linear regression.

`SKEWSYMMETRY`

provides an analysis of skew-symmetry for an asymmetric matrix.

`SPEARMAN`

calculates Spearman’s rank correlation coefficient.

`SUBSET`

forms vectors containing subsets of the values in other vectors.

`TTEST`

performs a one- or two-sample t-test.

`VHOMOGENEITY`

tests homogeneity of variances and variance-covariance matrices.

`WILCOXON`

performs a Wilcoxon Matched-Pairs (Signed-Rank) test.

Procedure library PL2, in 1988, added 16 procedures.

`BARCHART`

(now a directive) plots a bar chart using line-printer or high-quality graphics.

`DSHADE`

produces a shaded similarity matrix by high-quality graphics.

`GRBETA`

(replaced in PL7 by `GRANDOM`

) generates pseudo-random numbers from a beta distribution.

`GRCHI`

(replaced by `GRANDOM`

) generates pseudo-random numbers from the chi-square distribution.

`GRF`

(replaced by `GRANDOM`

) generates pseudo-random numbers from the F distribution.

`GRGAMMA`

(replaced by `GRANDOM`

) generates pseudo-random numbers from the gamma distribution.

`GRLOGNORMAL`

(replaced by `GRANDOM`

) generates pseudo-random numbers from the log-Normal distribution.

`GRNORMAL`

(replaced by `GRANDOM`

) generates pseudo-random numbers from the Normal distribution.

`GRT`

(replaced by `GRANDOM`

) generates pseudo-random numbers from Student’s t distribution.

`GRWEIBULL`

(replaced by `GRANDOM`

) generates pseudo-random numbers from the Weibull distribution.

`LATTICE`

analyses square and rectangular lattice designs.

`LIBMANUAL`

prints a ‘Manual’ containing information about Library procedures.

`MANCOVA`

performs a multivariate analysis of covariance.

`NPCHECK`

checks the validity of input data for nonparametric procedures.

`NPRANK`

produces ranks, allowing for ties, for the nonparametric procedures.

`REPMEASURES`

(replaced in PL8 by `AREPMEASURES`

) checks if a set of repeated measures can be analysed as a split plot.

Then, in 1989, PL3 added 13 more procedures.

`ANTORDER`

assesses order of ante-dependence for repeated measures data.

`ANTTEST`

calculates overall tests based on a specified order of ante-dependence.

`BJESTIMATE`

fits an ARIMA model, with forecast and residual checks.

`BJFORECAST`

plots forecasts of a time series using a previously fitted ARIMA.

`BJIDENTIFY`

displays time series statistics useful for ARIMA model selection.

`CONVEXHULL`

finds the points of a single or a full peel of convex hulls.

`CUMDISTRIBUTION`

fits frequency distributions to accumulated counts.

`HANOVA`

does hierarchical analysis of variance or covariance for unbalanced data.

`LIBMANUAL`

produces a manual for the procedure library.

`LRVSCREE`

prints a scree diagram and/or a difference table of latent roots.

`SMOOTHSPECTRUM`

forms smoothed spectrum estimates for univariate time series.

`VINTERPOLATE`

performs linear & inverse linear interpolation between variates.

`VREGRESS`

performs regression across variates.

### Release 2

This was produced in 1990, and had 12 new directives.

`COLOUR`

enables the red, green and blue intensities of the Genstat colours to be modified (where permitted by the graphics device).

`DREAD`

reads the locations of points from an interactive graphical device.

`DSURFACE`

produces perspective views of two-way arrays of numbers.

`FCLASSIFICATION`

forms a classification set for each term in a formula, breaks a formula up into separate formulae (one for each term) and applies a limit to the number of factors and variates in the terms of a formula.

`MDS`

performs non-metric multidimensional scaling.

`MONOTONIC`

fits an increasing monotonic regression of y on x.

`QUESTION`

obtains a response using a Genstat menu.

`RFUNCTION`

estimates functions of parameters of a nonlinear model.

`REML`

fits a variance-components model by residual (or restricted) maximum likelihood.

`VCOMPONENTS`

defines the variance-components model for `REML`

.

`VDISPLAY`

display further output from a variance-components analysis.

`VKEEP`

copies information from a variance-components analysis into Genstat data structures.

Its first procedure library, PL4, had 20 new procedures.

`AKAIKEHISTOGRAM`

prints histograms with improved definition of groups.

`BINOMIAL`

calculates probabilities from the binomial distribution.

`BSUPDATE`

creates or updates a backing-store subfile.

`DECIMALS`

sets the number of decimals for a structure, using its round-off.

`DILUTION`

calculates Most Probable Numbers from dilution series data.

`FITPARALLEL`

carries out analysis of parallelism for non-linear functions.

`FITSCHNUTE`

fits a general 4 parameter growth model to a non-decreasing y-variate.

`FTEXT`

forms a text structure from a variate.

`GINVERSE`

calculates the generalized inverse of a matrix.

`INVNORMAL`

calculates probabilities from the inverse normal distribution.

`LINDEPENDENCE`

finds the linear relations associated with matrix singularities.

`LOGNORMAL`

calculates probabilities from the lognormal distribution.

`MENU`

initiates a menu system.

`PAIRTEST`

performs t-tests for pairwise differences.

`POISSON`

calculates probabilities from the Poisson distribution.

`RANK`

produces ranks, from the values in a variate, allowing for ties.

`RPAIR`

gives t-tests for all pairwise differences of means from regression/GLM.

`STUDENT`

calculates probabilities from Student’s t-distribution.

`VFUNCTION`

calculates functions of variance components from a REML analysis.

`VPLOT`

plots residuals from a REML analysis.

Procedure library PL5, in 1991, added 10 procedures.

`AUDISPLAY`

produces further output for an unbalanced design.

`AUNBALANCED`

performs analysis of variance for unbalanced designs.

`LVARMODEL`

analyses a field trial using the Linear Variance Neighbour model.

`MPOWER`

forms integer powers of a square matrix.

`NORMTEST`

performs tests of univariate and/or multivariate normality.

`PROBITANALYSIS`

fits probit models allowing for natural mortality & immunity.

`SAMPLE`

samples from a set of units, possibly stratified by factors.

`VTABLE`

forms a variate and set of classifying factors from a table.

`WADLEY`

fits models for Wadley’s problem, allowing alternative links & errors.

Procedure library PL6, in 1992, added 21 further procedures.

`AFALPHA`

generates alpha designs.

`AFCYCLIC`

generates block and treatment factors for cyclic designs.

`AFUNITS`

forms a factor to index the units of the final stratum of a design.

`AKEY`

generates values for treatment factors using the design key method.

`ASWEEP`

performs sweeps for model terms in an analysis of variance.

`DAPLOT`

(now replaced by `APLOT`

) plots residuals from ANOVA with interactive identification of outliers.

`DAYLENGTH`

calculates daylengths at a given period of the year.

`DBARCHART`

produces barcharts for one or two-way tables.

`EXTRABINOMIAL`

fits the models of Williams (1982) to overdispersed proportions.

`FACPRODUCT`

forms a factor with a level for every combination of other factors.

`FEXACT2X2`

does Fisher’s exact test for 2×2 tables.

`GLMM`

fits a generalized linear mixed model to binomial data.

`HEATUNITS`

calculates accumulated heat units of a temp. dependent process.

`NLCONTRASTS`

fits non-linear contrasts to quantitative factors in ANOVA.

`PDESIGN`

prints or stores treatment combinations tabulated by block factors.

`RGRAPH`

draws a graph to display the fit of a regression model.

`RIDGE`

produces ridge regression and principal component regression analyses.

`ROBSSPM`

forms robust estimates of sum-of-squares-and-products matrices.

`SIGNTEST`

performs a one or two sample sign test.

`VEQUATE`

equates across numerical structures.

`VWALD`

prints Wald tests for fixed terms in a REML analysis.

### Release 3

This was produced in 1993, and had 10 new directives.

`DDISPLAY`

redraws the current graphical display.

`DISTRIBUTION`

estimates the parameters of continuous and discrete distributions.

`DKEEP`

saves information from the last plot on a particular device.

`DUPLICATE`

forms new data structures with attributes taken from an existing structure.

`D3HISTOGRAM`

produces 3-dimensional histograms.

`ENQUIRE`

provides details about files opened by Genstat.

`EXECUTE`

executes the statements contained within a text.

`GROUPS`

forms a factor (or grouping variable) from a variate or text, together with the set of distinct values that occur.

`SETOPTION`

sets or modifies defaults of options of Genstat directives or procedures.

`SETPARAMETER`

sets or modifies defaults of parameters of Genstat directives or procedures.

Its procedure library, PL7, had 22 new procedures.

`AGALPHA`

forms alpha designs by standard generators for up to 100 treatments.

`AGCYCLIC`

generates cyclic designs from standard generators.

`AGDESIGN`

generates generally balanced designs.

`AGFRACTION`

generates fractional factorial designs.

`AGHIERARCHICAL`

generates orthogonal hierarchical designs.

`BOXPLOT`

draws box-and-whisker diagrams or schematic plots..

`CHISQUARE`

calculates chi-square statistics for one- and two-way tables.

`DESIGN`

helps to select and generate effective experimental designs.

`DMST`

gives a high resolution plot of an ordination with minumum spanning tree.

`DREPMEASURES`

plots profiles and differences of profiles for repeated measures data.

`FACAMEND`

permutes the levels and labels of a factor.

`FDESIGNFILE`

forms a backing-store file of information for `AGDESIGN`

.

`FILEREAD`

reads data from a file, assumed to be in a rectangular array.

`GRANDOM`

generates pseudo-random numbers from probability distributions.

`PCOPROCRUSTES`

performs a multiple Procrustes analysis.

`PPAIR`

displays results of t-tests for pairwise differences in compact diagrams.

`PREWHITEN`

filters a time series before spectral analysis.

`PTDESCRIBE`

gives summary and second order statistics for a point process.

`RJOINT`

does modified joint regression analysis for variety-by-environment data.

`RUNTEST`

performs a test of randomness of a sequence of observations.

`VORTHPOLYNOMIAL`

calculates orthogonal polynomial time-contrasts for repeated measures.

`XOCATEGORIES`

performs analyses of categorical data from crossover trials.

Procedure library PL8, in 1994, added 25 further procedures.

`AFORMS`

prints data forms for an experimental design

`AGRAPH`

plots one- or two-way tables of means from `ANOVA`

.

`AMERGE`

merges extra units into an experimental design.

`APPEND`

appends a list of vectors of the same type.

`APRODUCT`

forms a new experimental design from the product of two designs.

`ARANDOMIZE`

randomizes and prints an experimental design.

`AREPMEASURES`

produces an analysis of variance for repeated measurements.

`BANK`

calculates the optimum aspect ratio for a graph.

`BOOTSTRAP`

produces bootstrapped estimates, standard errors and distributions.

`DDESIGN`

plots the plan of an experimental design.

`DIALLEL`

analyses full and half diallel tables with parents.

`DOTPLOT`

produces a Dot Plot using line-printer or high-resolution graphics.

`DPARALLEL`

displays multivariate data using parallel coordinates.

`DSCATTER`

produces a scatter-plot matrix using high-quality graphics.

`FLIBHELP`

forms a help information file for use by `LIBHELP`

&c.

`FRESTRICTEDSET`

forms vectors with the restricted subset of a list of vectors.

`GETDATA`

recovers data and information previously stored by `SAVEDATA`

.

`IFUNCTION`

estimates implicit and/or explicit functions of parameters.

`INSIDE`

determines whether points lie within a specified polygon.

`JACKKNIFE`

produces Jackknife estimates and standard errors.

`MVARIOGRAM`

fits models to an experimental variogram.

`PERIODTEST`

gives periodogram-based tests for white noise in time series.

`RUGPLOT`

draws “rugplots” to display the distribution of one or more samples.

`SAVEDATA`

saves all the current data and information for use in a future run.

`STEM`

produces a simple stem-and-leaf chart.

### Release 3.2

This was produced in 1995, and had 6 new directives.

`LIST`

lists details of the data structures currently available within Genstat.

`FKEY`

forms design keys for multi-stratum experimental designs, allowing for confounded and aliased treatments.

`FPSEUDOFACTORS`

determines patterns of confounding and aliasing from a design key, and extends the treatment model to incorporate the necessary pseudo factors.

`FVARIOGRAM`

forms auto variograms for individual variates or cross variograms for pairs of variates.

`KRIGE`

calculates kriged estimates using a model fitted to the sample variogram.

`WORKSPACE`

accesses private data structures for use in procedures.

Its procedure library, PL9, had 8 new procedures.

`ANTMVESTIMATE`

estimates missing values in repeated measurements.

`FITMULTIVARIATE`

(now `RMULTIVARIATE`

) provides multivariate linear regression with accumulated testing of terms.

`GEE`

fits models to longitudinal data by generalized estimating equations.

`KAPLANMEIER`

calculates the Kaplan-Meier estimate of the survivor function.

`KAPPA`

calculates a kappa coefficient of agreement for nominally scaled data.

`PLS`

fits a partial least squares regression model.

`RPROPORTIONAL`

fits the proportional hazards model to survival data as a generalized linear model.

`RSURVIVAL`

models survival times of exponential, Weibull or extreme-value distributions.

The main importance of Release 3.2 though, is that it provided the server for the first edition, in 1996, of Genstat *for Windows*.

### Release 4.1

This provided the server, in 1997, for the second edition of Genstat *for Windows* and, in 1998, for the third edition. It had 6 new directives.

`DCLEAR`

clears a graphics screen

`DECLARE`

declares one or more customized data structures

`STRUCTURE`

defines a customized data structure

`VPEDIGREE`

generates an inverse relationship matrix for use when fitting animal or plant breeding models by `REML`

`VSTATUS`

prints the current model settings for `REML`

`VSTRUCTURE`

defines a variance structure for random effects in `REML`

Its procedure library, PL10, had 24 new procedures.

`AGBIB`

generates balanced incomplete block designs.

`AGBOXBEHNKEN`

generates Box Behnken designs.

`AGCENTRALCOMPOSITE`

generates central composite designs.

`AGMAINEFFECT`

generates designs to estimate main effects of two-level factors.

`AGNEIGHBOUR`

generates neighbour-balanced designs.

`ASTATUS`

provides information about the settings of `ANOVA`

models and variates.

`A2PLOT`

plots effects from two-level designs with robust s.e. estimates.

`CINTERACTION`

clusters rows and columns of a two-way interaction table.

`CVAPLOT`

plots the mean and unit scores from a canonical variate analysis.

`CVASCORES`

calculates scores for individual units in canonical variate analysis.

`DPOLYGON`

draws polygons using high-resolution graphics.

`DPTMAP`

draws maps for spatial point patterns using high-resolution graphics.

`DPTREAD`

adds points interactively to a spatial point pattern.

`DRPOLYGON`

reads a polygon interactively from the current graphics device.

`FITNONNEGATIVE`

fits a generalized linear model with nonnegativity constraints.

`GRLABEL`

randomly labels two or more spatial point patterns.

`GRTHIN`

randomly thins a spatial point pattern.

`GRTORSHIFT`

performs a random toroidal shift on a spatial point pattern.

`LIBVERSION`

provides the name of the current Genstat 5 Procedure Library.

`PTBOX`

generates a box bounding or surrounding a spatial point pattern.

`PTCLOSEPOLYGON`

closes open polygons.

`PTREMOVE`

removes points interactively from a spatial point pattern.

`SPLINE`

calculates a set of basis functions for M-, B- or I-splines.

`STANDARDIZE`

standardizes columns of a data matrix to have mean 0 & variance 1.

Procedure library PL11 was produced in 1999 to accompany the fourth edition of Genstat *for Windows*. It added 11 procedures.

`AGLATIN`

generates mutually orthogonal Latin squares.

`AGSEMILATIN`

generates semi-Latin squares.

`APOLYNOMIAL`

forms the equation for a polynomial contrast fitted by `ANOVA`

.

`CONFIDENCE`

calculates simultaneous confidence intervals (D.M. Smith)

`GALOIS`

forms addition and multiplication tables for a Galois finite field .

`MANTEL`

assesses the association between similarity matrices.

`PERMUTE`

forms all possible permutations of the integers 1…*n*.

`PRIMEPOWER`

decomposes a positive integer into its constituent prime powers.

`REPLICATION`

(now replaced by `ASAMPLESIZE`

) calculates the replication necessary to detect a treatment effect.

`RSCREEN`

performs screening tests for generalized or multivariate linear models.

`YTRANSFORM`

estimates the parameter lambda of a single parameter transformation.

### Release 4.2

This provided the server, in 2000, for the fifth edition of GenStat *for Windows*. We later realized that it should have been named Release 5, to synchronize the numbering. Instead that was done for the sixth edition, when the server release number jumped from 4.2 to 6. Release 4.2 had 7 new directives.

`D3GRAPH`

plots a 3-dimensional graph.

`DFINISH`

ends a sequence of related high-resolution plots.

`DSTART`

starts a sequence of related high-resolution plots.

`VRESIDUAL`

defines the residual term for a REML model.

`XAXIS`

defines the x-axis in each window for high-resolution graphics.

`YAXIS`

defines the y-axis in each window for high-resolution graphics.

`ZAXIS`

defines the z-axis in each window for high-resolution graphics.

Its procedure library, PL12, had 8 new procedures.

`AFLABELS`

forms a variate of unit labels for a design.

`AGSQLATTICE`

generates square lattice designs.

`DTIMEPLOT`

produces horizontal bars displaying a continuous time record.

`FRIEDMAN`

performs Friedman’s non-parametric analysis of variance.

`GRMULTINORMAL`

generates multivariate normal pseudo-random numbers.

`MEDIANTETRAD`

gives robust identification of multiple outliers in 2-way tables.

`PARTIALCORRELATIONS`

calculates partial correlations for a list of variates.

`TRELLIS`

does a trellis plot.

Procedure library PL13, in 2001, contained 13 new procedures:

`AFIELDRESIDUALS`

display residuals in field layout.

`ALLPAIRWISE`

performs a range of all pairwise multiple comparison tests..

`AMMI`

allows exploratory analysis of genotype x environment interactions.

`AUDISPLAY`

saves output from analysis of an unbalanced design (by `AUNBALANCED`

).

`EDINVNORMAL`

calculates the equivalent deviate for inverse normal distributions.

`FBASICCONTRASTS`

breaks a model term down into its basic contrasts.

`FFRAME`

forms multiple windows in a plot-matrix for high-resolution graphics.

`FPROJECTIONMATRIX`

forms a projection matrix for a set of model terms.

`GSTATISTIC`

calculates the gamma statistic of agreement for ordinal data.

`JOIN`

joins or merges two sets of vectors together, based on classifying keys.

`KERNELDENSITY`

uses kernel density estimation to estimate a sample density.

`MVFILL`

replaces missing values in a vector with the previous non-missing value.

`RSEARCH`

helps search through models for a regression or glm.