 Summary of important user-visible changes for statistics 2.1.0:
-------------------------------------------------------------------

 Backwards incompatible improvements:
 ====================================

 ** createns:
    with no 'NSMethod', builds a KDTreeSearcher for data with at most 10
    columns, not sparse, under the euclidean, cityblock, chebychev or
    minkowski distance, as MATLAB does, where it always built an
    ExhaustiveSearcher.

 ** mnrfit:
    the raw and Pearson residuals of ordinal and hierarchical models have K-1
    columns, as in MATLAB, where they had one per category; the 'display'
    option is removed, MATLAB having none.

 New functions and methods:
 ==========================

 ** fitmnr, MultinomialRegression:
    multinomial regression of nominal, ordinal and hierarchical responses
    from a matrix, a table or a formula, with predict, feval, random, coefCI,
    coefTest, testDeviance, plotResiduals, plotSlice and partial dependence,
    as in MATLAB.

 Bug fixes:
 ==========

 ** cmdscale:
    eigenvalues that are numerically zero no longer add columns of noise to
    Y; the cutoff follows the precision of D, as in MATLAB (#530).

 ** ExhaustiveSearcher, hnswSearcher, KDTreeSearcher:
    a 'P' without the minkowski distance, and a 'Scale' or 'Cov' without its
    distance, raise an error, as in MATLAB, where they were ignored.

 ** fitcknn, ClassificationKNN:
    'Exponent' takes any positive scalar, where one that was not an integer
    raised an error.

 ** knnsearch, rangesearch, createns, fitcknn, ExhaustiveSearcher,
    hnswSearcher, KDTreeSearcher:
    a Minkowski exponent of Inf gives the Chebychev distance on every search
    method, where it raised an error and a fitcknn model fitted with it
    failed in predict (#533).

 ** knnsearch, rangesearch:
    the kd-tree search lost a row whose NaN fell on a split, so knnsearch
    failed once K reached it, measured a row holding a NaN by its other
    coordinates under the Chebychev distance, and skipped rows tied at the
    worst distance when the query and a split were the same infinity;
    'IncludeTies' returned nothing when the K-th distance was NaN; a 'P'
    without the minkowski distance raises an error, where it was ignored.

 ** mnrfit:
    a character matrix response takes each row as one label (#529); a matrix
    response row holding NaN leaves its observation out, and one holding
    several 1s counts that many observations, as in MATLAB; an observation
    left out keeps a NaN row in the residuals; a single category gives an
    empty fit, as in MATLAB, where it raised an error.

 ** pdist, pdist2:
    a Minkowski exponent of Inf gives the Chebychev distance, where every
    distance was 1 (#532); the Chebychev distance is NaN for a pair where
    either row holds a NaN, as in MATLAB, and where a coordinate difference
    is Inf - Inf, as for every other metric (MATLAB passes over it).

 ** ridge:
    a predictor with no variation is taken as a constant term, where every
    coefficient was NaN (#531); fewer than two rows left after removing NaN
    raise an error.

 Improvements:
 =============

 ** mnrfit:
    string and categorical responses are accepted, and responses may be row
    vectors (#529); a matrix response holds counts, one column per category,
    with new options 'interactions', 'weights', 'iterationlimit' and
    'tolerance', as in MATLAB.

 Summary of important user-visible changes for statistics 2.1.1:
-------------------------------------------------------------------

 Important Notice: lassoglm divides its loss by the total number of binomial
                   trials, as MATLAB does, so a fit with more than one trial
                   per row gives different coefficients at a given Lambda.

 Backwards incompatible improvements:
 ====================================

 ** anovan:
    stats.varnames is a column, as in MATLAB, where it kept the shape the
    names were given in and the default names were a row.

 ** friedman:
    KendallsWCI bounds the concordance beyond chance, which is 0 where the
    columns do not differ, where it bounded the expected value of Kendall's
    W and could exclude W itself; KendallsW and the bootstrap interval are
    unchanged.

 ** lasso, lassoglm:
    'Weights' has one element per row of X, as given; a vector already
    shortened to the rows without NaN, and integer, logical, complex or
    infinite weights, raise an error (#534).

 ** lassoglm:
    the loss is divided by the total number of binomial trials, as in
    MATLAB, so a fit with more than one trial per row gives different
    coefficients at a given Lambda; 'Size' is renamed 'BinomialSize', as in
    fitglm, and 'Size' stays as an alias.

 New functions and methods:
 ==========================

 ** cohenKappa, fleissKappa:
    agreement between two raters, unweighted or weighted, with a confidence
    interval and a test, and among several raters.  MATLAB has neither.

 ** fitSVMPosterior, fitPosterior:
    fit the transformation from a two-class SVM's scores to posterior
    probabilities, a sigmoid, a step function for separated classes or a
    constant, as in MATLAB; predict then returns posterior probabilities.

 ** limitsOfAgreement, blandAltmanPlot:
    the Bland-Altman limits of agreement between two measurement methods,
    as numbers and as a plot.  MATLAB has neither.

 ** relieff:
    ranks predictors by importance with ReliefF for classification and
    RReliefF for regression, as in MATLAB.

 ** rjtest:
    the Ryan-Joiner test of normality, as in MATLAB R2026b, with p-values
    from Ryan and Joiner's approximation or by Monte Carlo simulation.

 ** sequentialfs:
    selects predictors by forward or backward sequential search on a
    cross-validated criterion, as in MATLAB; statset ('sequentialfs') gives
    its default options.

 Bug fixes:
 ==========

 ** fitcknn, fitcnb:
    a class with prior 0 could be predicted by fitcknn, its observations
    still counted as neighbours, and made fitcnb fail, saying its data had
    zero variance.

 ** fitgmdist:
    on convergence, returned the parameters of one step beyond those whose
    likelihood it reported, and a 'MaxIter' of 0 raised an error; it
    returns the parameters of the reported likelihood, as MATLAB does.

 ** glmfit:
    ran one iteration fewer than MATLAB for a given 'MaxIter', which changed
    the coefficients wherever the limit was reached; a 'MaxIter' of 0,
    returning the first weighted fit, is accepted.

 ** isoutlier:
    a 'ThresholdFactor' of 0 is accepted, as documented (#536); an integer
    factor gave thresholds rounded to integers and a single one single
    thresholds; a NaN, logical, text or complex factor raises an error, as
    in MATLAB, where it was taken.

 ** kmeans:
    stopped by 'MaxIter', returned centroids that were not the means of the
    returned clusters, and the 'final' and 'iter' displays counted one
    iteration too many.

 ** kmedoids:
    with 'Algorithm', 'pam', took one swap per iteration where MATLAB gives
    every medoid in turn its best swap, so it needed more iterations and
    labelled the clusters in another order; a 'MaxIter' of 0 returns the
    starting medoids, where it made one pass.

 ** lasso, lassoglm:
    a full weight vector raised an error whenever X or Y held NaN; the
    weights of dropped rows are dropped with them, and lassoglm takes a NaN
    weight as a missing observation, as MATLAB does (#534).

 ** lassoglm:
    hung when every response was at the edge of its range, all failures or
    all successes for 'binomial' and all zeros for 'poisson'; B is zero, as
    in MATLAB.  A 'Size' vector of any length was taken, and the wrong
    number of trials used.

 ** nnmf, tsne:
    a 'MaxIter' of 0 raised an error; they return the starting point with
    its residual or loss.

 Improvements:
 =============

 ** anovan:
    'varnames' is taken as a character matrix with one name per row, as in
    MATLAB.

 ** crosstab:
    'IncludeMissingGroups' counts missing values as a group of their own,
    as in MATLAB (#535); a single input gives a column of counts.

 ** fitcsvm, fitctree, fitcknn, fitcnb, fitcnet, fitcgam, fitcensemble,
    fitcecoc, fitclinear, fitckernel:
    a class with prior 0 is removed from the data before fitting, with a
    warning, as in MATLAB, and in fitcsvm, fitctree, fitclinear and
    fitckernel also one whose misclassification costs are all 0;
    NumObservations, RowsUsed and cross-validation count the rows kept.
    fitcdiscr keeps such a class, as MATLAB does.

 ** fitcsvm, fitcensemble, fitcecoc, fitclinear, fitckernel:
    'Cost' is taken as a structure with fields ClassNames and
    ClassificationCosts, as in MATLAB and as the other classifiers already
    did.

 ** kmeans:
    'Options' is taken as in MATLAB, where it was ignored with a warning; a
    'MaxIter' of 0 returns the starting centroids.

 ** lasso, lassoglm:
    a negative or non-integer 'MaxIter' raises an error, where it was taken;
    a 'MaxIter' of 0 returns the starting point, every coefficient 0.

 ** lassoglm:
    a binomial Y is taken as a two-column matrix of successes and trials, a
    logical vector or a two-category categorical vector, as in MATLAB, and a
    logical or two-category categorical Y for 'normal' and 'poisson' too.

 ** statset:
    a 'TolFun', 'MaxIter' or 'MaxFunEvals' of 0 is accepted, as in MATLAB;
    a non-integer count raises an error.

 Summary of important user-visible changes for statistics 2.1.2:
-------------------------------------------------------------------

 Important Notice: a row missing only some predictors is now kept by fitcsvm,
                   fitcnb, fitcecoc, fitcensemble and fitrensemble, as in
                   MATLAB, so fits on data with missing values change.

 Backwards incompatible improvements:
 ====================================

 ** dummyvar:
    a single grouping variable gives single dummy variables, as in MATLAB
    (#538).

 ** ismissing:
    a numeric or logical indicator applies to data of its own class, and a
    double on either side to every numeric and logical class, as in MATLAB;
    other pairings raise an error.

 ** nancov:
    input must be real floating point; integer and logical input raise an
    error, where integers failed or gave wrong values under 'pairwise'.

 ** nanmedian:
    the result takes the class of the input, as for median; single input
    returned double, and integer medians could saturate.

 ** nanvar, nanstd:
    input must be floating point, as for var and std; integer and logical input
    raise an error, where integers gave wrong values.

 New functions and methods:
 ==========================

 ** fscchi2:
    rank predictors for classification by chi-square tests of independence,
    from a matrix or a table.  'UseMissing' tests missing values as one more
    category or bin, as MATLAB documents; MATLAB itself ignores the option.

 ** fsrftest:
    rank predictors for regression by one-way F-tests, from a matrix or a
    table.  'UseMissing' tests missing values as one more category or bin, as
    MATLAB documents; MATLAB itself ignores the option.

 Bug fixes:
 ==========

 ** Classification and regression models:
    fitted from a table, an ordinal predictor is numeric in trees, ensembles
    and generalized additive models, as in MATLAB; empty text and missing
    strings are missing, not a category; 'Weights' may name a table variable.
    predict from a table takes a missing value and a level the model was not
    fitted on as missing, where it refused them.

 ** ClassificationDiscriminant, CompactClassificationDiscriminant:
    a query with a missing value has NaN scores and costs and takes the class
    of largest prior, as in MATLAB, where it had zero scores and the first
    class; margin returned a single NaN for it.  loss, margin and edge of the
    compact class failed on numeric or logical labels.

 ** ClassificationEnsemble:
    under 'Subspace', a learner with no score for a query does not vote on it,
    and each learner fits its rows under the ensemble's weights, as in MATLAB,
    where a learner that dropped a row kept the ensemble's prior.

 ** ClassificationEnsemble, CompactClassificationEnsemble,
    ClassificationPartitionedEnsemble:
    loss, edge, kfoldLoss and kfoldEdge: a row no learner can score for its
    missing values counts as the class of greatest prior under 'classiferror',
    'classifcost' and 'mincost' and makes any other loss and the edge NaN, as
    in MATLAB, where it was left out, so a loss could contradict predict.

 ** fitcdiscr:
    a row missing every predictor is dropped, as in MATLAB, where it was
    counted in NumObservations and the empirical prior, which changed the
    covariance and every posterior; a class left with no rows raises an error.

 ** fitcecoc, fitcensemble, fitrensemble:
    a row missing some predictors is kept, as in MATLAB, where it was dropped;
    a row is dropped only when its response or every predictor is missing or
    its weight is zero.

 ** fitcknn, fitctree, fitrtree:
    a row missing every predictor, and for trees one of weight zero, was
    counted in NumObservations, RowsUsed, X and the empirical prior; it is now
    dropped, as in MATLAB.

 ** fitcnb:
    a row missing some predictors is kept, each predictor fitted on the rows it
    is known for, where it was dropped; a row with a missing class is dropped,
    where it was a class of its own; X and Y hold the rows used, which fixes
    cross-validation after a row was dropped.  Under 'mn', a row missing some
    counts counts in the prior only, and a query missing a count has NaN
    posterior and cost, as in MATLAB.

 ** fitcsvm:
    a row missing every predictor is dropped and the prior counts every row
    kept, as in MATLAB, where a fit with partly missing rows gave another
    model.

 ** hygeinv:
    P = 0 and P = 1 give the least and greatest possible count, a sample of
    size 0 gives 0, and scalar input with no marked items no longer fails.

 ** hygepdf, hygecdf:
    accurate to about 1e-15 as the population grows, where the relative error
    reached 1e-9 at a million.

 ** hygepdf, hygernd, hygestat:
    a sample of size 0 gives probability 1 at x = 0, random values 0, and mean
    and variance 0, as in MATLAB, where it gave NaN.

 ** ismissing:
    a logical indicator was refused for double data (#537).

 ** mvksdensity:
    a row with a NaN in X or in the weights is dropped, as in MATLAB, where
    every result was NaN or wrong; a single observation is valid (#542);
    weights with no positive value in the rows kept raise an error.

 ** nancov:
    single input gives a single result under 'pairwise', for empty input and
    with no complete rows, as in MATLAB (#541).

 ** nanmean:
    a sparse X with DIM past the last dimension no longer fails.

 ** tiedrank:
    TIEFLAG and BIDIR are read as a condition is, as in MATLAB, so [] keeps the
    default (#539); an empty TOL takes the default.

 ** trimmean:
    an empty X with DIM gives the right size and checks FLAG and DIM, and a
    VECDIM past the last dimension returns X (#540); integer, logical and char
    X is computed and returned in double, where 'weighted' rounded to the
    integer class, as MATLAB does.

 Improvements:
 =============

 ** nansum:
    takes a char array, as sum does.
