Changes in version 1.7.28:

    o   Modified decomposeVar() to return statistics (but not p-values) for
	 spike-ins when get.spikes=NA. Added block= argument for
	 mean/variance calculations within each level of a blocking factor,
	 followed by reporting of weighted averages (using Fisher's method
	 for p-values). Automatically record global statistics in the
	 metadata of the output for use in combineVar().  Switched output to
	 a DataFrame object for consistency with other functions.

    o   Fixed testVar() to report a p-value of 1 when both the observed and
	 null variances are zero.

    o   Allowed passing of arguments to irlba() in denoisePCA() to assist
	 convergence. Reported low-rank approximations for all genes,
	 regardless of whether they were used in the SVD. Deprecated design=
	 argument in favour of manual external correction of confounding
	 effects. Supported use of a vector or DataFrame in technical=
	 instead of a function.

    o   Allowed passing of arguments to prcomp_irlba() in buildSNNGraph() to
	 assist convergence. Allowed passing of arguments to get.knn(),
	 switched default algorithm back to a kd-tree.

    o   Added the buildKNNGraph() function to construct a simple
	 k-nearest-neighbours graph.

    o   Fixed a number of bugs in mnnCorrect(), migrated code to C++ and
	 parallelized functions. Added variance shift adjustment,
	 calculation of angles with the biological subspace.

    o   Modified trend specification arguments in trendVar() for greater
	 flexibility. Switched from ns() to robustSmoothSpline() to avoid
	 bugs with unloaded predict.ns(). Added block= argument for
	 mean/variance calculations within each level of a blocking factor.

    o   Added option to avoid normalization in the SingleCellExperiment
	 method for improvedCV2(). Switched from ns() to smooth.spline() or
	 robustSmoothSpline() to avoid bugs.

    o   Replaced zoo functions with runmed() for calculating the median
	 trend in DM().

    o   Added block= argument to correlatePairs() to calculate correlations
	 within each level of a blocking factor. Deprecated the use of
	 residuals=FALSE for one-way layouts in design=. Preserve input
	 order of paired genes in the gene1/gene2 output when
	 pairings!=NULL.

    o   Added block= argument to overlapExprs() to calculate overlaps within
	 each level of a blocking factor. Deprecated the use of
	 residuals=FALSE for one-way layouts in design=. Switched to
	 automatic ranking of genes based on ability to discriminate between
	 groups. Added rank.type= and direction= arguments to control
	 ranking of genes.

    o   Modified combineVar() so that it is aware of the global stats
	 recorded in decomposeVar(). Absence of global statistics in the
	 input DataFrames now results in an error. Added option to method=
	 to use Stouffer's method with residual d.f.-weighted Z-scores.
	 Added weighted= argument to allow weighting to be turned off for
	 equal batch representation.

    o   Modified the behaviour of min.mean= in computeSumFactors() when
	 clusters!=NULL. Abundance filtering is now performed within each
	 cluster and for pairs of clusters, rather than globally.

    o   Switched to pairwise t-tests in findMarkers(), rather than fitting a
	 global linear model. Added block= argument for within-block
	 t-tests, the results of which are combined across blocks via
	 Stouffer's method. Added lfc= argument for testing against a
	 log-fold change threshold. Added log.p= argument to return
	 log-transformed p-values/FDRs. Removed empirical Bayes shrinkage as
	 well as the min.mean= argument.

    o   Added the makeTechTrend() function for generating a mean-variance
	 trend under Poisson technical noise.

    o   Added the multiBlockVar() function for convenient fitting of
	 multiple mean-variance trends per level of a blocking factor.

    o   Added the clusterModularity() function for assessing the
	 cluster-wise modularity after graph-based clustering.

    o   Added the parallelPCA() function for performing parallel analysis to
	 choose the number of PCs.

    o   Modified convertT() to return raw counts and size factors for
	 CellDataSet output.

    o   Deprecated exploreData(), selectorPlot() in favour of iSEE().

Changes in version 1.6.0:

    o   Supported parallelization in buildSNNGraph(), overlapExprs() with
	 BPPARAM options.

    o   Forced zero-derived residuals to a constant value in
	 correlatePairs(), overlapExprs().

    o   Allowed findMarkers() to return IUT p-values, to identify uniquely
	 expressed genes in each cluster. Added options to specify the
	 direction of the log-fold changes, to focus on upregulated genes in
	 each cluster.

    o   Fixed bug in correlatePairs() when per.gene=TRUE and no spike-ins
	 are available.  Added block.size argument to control caching.

    o   Switched all C++ code to use the beachmat API. Modified several
	 functions to accept ANY matrix-like object, rather than only base
	 matrix objects.

    o   quickCluster() with method="igraph" will now merge based on
	 modularity to satisfy min.size requirements. Added max.size option
	 to restrict the size of the output clusters.

    o   Updated the trendVar() interface with parametric, method arguments.
	 Deprecated the trend="semiloess" option in favour of
	 parametric=TRUE and method="loess". Modified the NLS equation to
	 guarantee non-negative coefficients of the parametric trend.
	 Slightly modified the estimation of NLS starting parameters. Second
	 d.f. of the fitted F-distribution is now reported as df2 in the
	 output.

    o   Modified decomposeVar() to automatically use the second d.f. when
	 test="f".

    o   Added option in denoisePCA() to return the number of components or
	 the low-rank approximation. The proportion of variance explained is
	 also stored as an attribute in all return values.

    o   Fixed a variety of bugs in mnnCorrect().

Changes in version 1.4.0:

    o   Switched default BPPARAM to SerialParam() in all functions.

    o   Added run argument to selectorPlot(). Bug fix to avoid adding an
	 empty list.

    o   Added exploreData() function for visualization of scRNA-seq data.

    o   Minor bug fix to DM() when extrapolation is required.

    o   Added check for centred size factors in trendVar(), decomposeVar()
	 methods. Refactored trendVar() to include automatic start point
	 estimation, location rescaling and df2 estimation.

    o   Moved spike-in specification to the scater package.

    o   Deprecated isSpike<- to avoid confusion over input/output types.

    o   Generalized sandbag(), cyclone() to work for other classification
	 problems.

    o   Added test="f" option in testVar() to account for additional
	 scatter.

    o   Added per.gene=FALSE option in correlatePairs(), expanded accepted
	 value types for subset.row. Fixed an integer overflow in
	 correlatePairs(). Also added information on whether the permutation
	 p-value reaches its lower bound.

    o   Added the combineVar() function to combine results from separate
	 decomposeVar() calls.

    o   Added protection against all-zero rows in technicalCV2().

    o   Added the improvedCV2() function as a more stable alternative to
	 technicalCV2().

    o   Added the denoisePCA() function to remove technical noise via
	 selection of early principal components.

    o   Removed warning requiring at least twice the max size in
	 computeSumFactors(). Elaborated on the circumstances surrounding
	 negative size factors. Increased the default number of window sizes
	 to be examined. Refactored C++ code for increased speed.

    o   Allowed quickCluster() to return a matrix of ranks for use in other
	 clustering methods. Added method="igraph" option to perform
	 graph-based clustering for large numbers of cells.

    o   Added the findMarkers() function to automatically identify potential
	 markers for cell clusters.

    o   Added the overlapExprs() function to compute the overlap in
	 expression distributions between groups.

    o   Added the buildSNNGraph() function to build a SNN graph for cells
	 from their expression profiles.

    o   Added the correctMNN() function to perform batch correction based on
	 mutual nearest neighbors.

    o   Streamlined examples when mocking up data sets.

Changes in version 1.2.0:

    o   Transformed correlations to a metric distance in quickCluster().

    o   Removed normalize() in favour of scater's normalize().

    o   Switched isSpike()<- to accept a character vector rather than a
	 logical vector, to enforce naming of spike-in sets. Also added
	 warning code when the specified spike-in sets overlap.

    o   Allowed compute*Factors() functions to directly return the size
	 factors.

    o   Added selectorPlot() function for interactive plotting.

    o   Switched to a group-based weighted correlation for one-way layouts
	 in correlatePairs() and correlateNull(), and to a correlation of
	 residuals for more complex design matrices.

    o   Added phase assignments to the cyclone() output.

    o   Implemented Brennecke et al.'s method in the technicalCV2()
	 function.

    o   Updated convertTo() to store spike-in-specific size factors as
	 offsets.

    o   Moved code and subsetting into C++ to improve memory efficiency.

    o   Switched to loess-based trend fitting as the default in trendVar(),
	 replaced polynomial with semi-loess fitting.

    o   Added significance statistics to output of decomposeVar(), with only
	 the p-values replaced by NAs for spike-ins.

    o   Updated documentation and tests.

Changes in version 1.0.0:

    o   New package scran, for low-level analyses of single-cell RNA
	 sequencing data.