Changes in version 3.14.0: o limma license upgraded to GPL (>=2) instead of LGPL to match R itself. o Many updates to the User's Guide. Sections have been added on reading single channel Agilent and Illumina data. The chapter on experimental designs has been split into three chapters on single-channel, common reference and two-color designs respectively. The material on the fixed effect approach to technical replication has been deleted. There are new sections on nested interactions for factorial designs and on multi-level designs. o The links to the Apoa1, Weaver and Bob1 datasets in the User's Guide have been updated to help users download the data themselves if they wish to repeat the case study analyses. o The help page for camera() now cites published paper Wu and Smyth (NAR, 2012). In view of the results of this paper, the claim is no longer made on help page for geneSetTest() that genes might be treated as independent when the experimental units are genetically identical mice. o Minor edits to CITATION file. o New function propTrueNull() for fast estimation of the proportion of true null hypotheses from a vector of p-values. o New function zscore() to compute z-score equivalents for deviates from any continuous distribution. Includes the functionality of the older functions zscoreGamma() and zscoreT() as special cases. o roast() now accepts observation level weights, through a new argument 'weights'. o loessFit() now applies minimum and maximum bounds by default to avoid zero or infinite weights. Equal weights are now treated as if the weights were NULL, even all zero weights, so that the lowess code is called instead of the loess code. o When there are no weights, loessFit() now extracts residuals directly from the C code output instead of computing in R. o fitFDist() now permits missing values for x or zero values for df1 even when there is a covariate. This means that squeezeVar() and eBayes() now work with trends even when not all the data values are informative. o New argument 'file' for convest(), implementing edits contributed by Marcus Davy. Arguments doplot and dereport renamed to 'plot' and 'report'. o Two improvements for plotMDS(). It now coerces labels to be character, and now makes extra room on the plot when the text labels are wide. o plotMDS() no longer gives an error when the requested number of top genes is greater than the total number of rows of data. o Code speed-up for alias2SymbolTable() o any(duplicated()) replaced by anyDuplicated() in several functions. o Fix to voom() so that it computes weights correctly even when the design matrix is not of full rank. o Bug fix for roast() when the fitted model has only one coefficient. Changes in version 3.12.0: o read.maimages() with source="agilent" now reads median foreground estimates instead of mean foreground. New option source= "agilent.mean" preserves earlier meaning of source="agilent". o Agilent single-channel case study added to User's Guide. o removeBatchEffect() now corrects for continuous covariates as well as qualitative factors. o new function camera() performs competitive gene set tests while adjusting for inter-gene correlation. o new function interGeneCorrelation() estimates the average intergene correlation for a set of genes. o columns in output from roast() have been re-ordered. o arguments 'selected' and 'selected2' renamed to 'index' and 'index2' in functions barcodeplot(), geneSetTest() and wilcoxGST(). o default labels for barcodeplot() are now somewhat more explicit. o new function rankSumTestWithCorrelation extends the Wilcoxon-Mann-Whitney test to allow for correlation between cases in one of the groups. geneSetTest() now calls this function instead of wilcox.test, with a consequence improvement in speed. o The lfc (log-fold-change) cutoff argument of topTable() is now applied to the minimum absolute logFC when ranking by F-statistic. Previously lfc was only used when ranking by t-statistic. o new methods "fast" and "affy" for normalizeCyclicLoess(), with "fast" becoming the default method. New argument 'cyclic.method' for normalizeBetweenArrays() gives access to the different cyclic loess methods. o There were problems with using the argument gene.weights in mroast(). This argument is now permitted to be of the same length as the number of probes in the data set. It is then automatically subsetted for each gene set. o mroast() now uses mid-p-values by default when adjusting for multiple testing. o neqc(), nec() and normexp.fit.control() now give user-friendly error messages when no negative control probes or no regular probes are found. Changes in version 3.10.0: o New function voom() allows RNA-Seq experiments to be analysed using the standard limma pipeline. An RNA-Seq case study is added to User's Guide. o treat(), roast() and mroast() can now estimate and work with a trend on the prior variance, bringing them into line with eBayes(). o barcodeplot() and barcodeplot2() merged into one function. o removeBatchEffect() can now correct for two batch factors. o plotMDS is now an S3 generic function. This allows MDS plots to be redrawn with new labels without needing to repeat the distance or scaling calculations. New S4 class "MDS" to hold the multidimensional scaling information output from plotMDS. o getEAWP() now gets probe annotation from the expression rownames of an EList object, if no other probe annotation is available. o topRomer() now ranks gene sets by secondary columns as well the primary criterion specified, to give a more meaningful ranking when the p-values are tied. o wilcoxGST() now accepts signed or unsigned test statistics. Change to p-value calculation in geneSetTest() when rank.only=FALSE to avoid zero p-values and follow recommendation of Phipson and Smyth (SAGMB, 2010). o plotMA() now recognizes ElistRaw and EList objects appropriately. o Default span for normalizeCyclicLoess increased from 0.4 to 0.7. Speed improved when weights=NULL. o Weaver case study (Section 11.5) in User's Guide is updated and rewritten. Data classes ElistRaw and Elist now described in the quick start section of the User's Guide. Other minor updates to User's Guide. o Bug fix for normalizeBetweenArrays() when object is an EListRaw and method="cyclicloess". Previously this function was applying cyclicloess to the raw intensities, then logging. Now it logs first, then applies cyclicloess. o Bug fix to avereps() for EList objects x when x$other is not empty.