31 May 2026: limma 3.68.4

- New function normalizeBetweenSamples(). Similar to
  normalizeBetweenArrays() but works on ELists.

19 May 2026: limma 3.68.3

- Fix filtering error in Agilent rat case study in User's Guide.
- Update references in User's Guide and help pages.
- Update URLs in help pages.

05 May 2026: limma 3.68.1 and 3.68.2

- Restore topTableF() to avoid breaking packages a4Base, stageR, and
  sva, although omitting the usage entry on the help page.

29 Apr 2026: limma 3.68.0 (Bioconductor 3.23 Release Branch)

22 Apr 2026: limma 3.67.4

- Remove topTableF(), which has been deprecated for many years.

22 Apr 2026: limma 3.67.3

- Update NEWS.Rd ready for Bioc 3.23 release.

20 Apr 2026: limma 3.67.2

- New argument `treat.lfc` for topSplice() to allow TREAT fold-change
  thresholding with diffSplice() output.

11 Apr 2026: limma 3.67.1

- New arguments `offset` and `offset.prior` for voom(). voom() now
  supports offsets in DGEList objects.

- In normalizeCyclicLoess(), default for `adaptive.span` becomes `TRUE`,
  and the `span` is chosen using the default settings of 
  chooseLoessSpan().

30 Oct 2025: limma 3.67.0 (Bioconductor 3.23 Developmental Branch)
30 Oct 2025: limma 3.66.0 (Bioconductor 3.22 Release Branch)

21 Oct 2025: limma 3.65.7

- New argument `upshot` for treat().

18 Oct 2025: limma 3.65.6

- makeContrasts() now uses the contrast names if `contrasts` is a
  named vector.

- Fix typo (pointed out by Marcel Schilling) in error message from
  makeContrasts() when the variable names are not syntactically
  valid.

- Update NEWS.Rd ready for Bioconductor 3.22 release.

01 Oct 2025: limma 3.65.5

- Bug fix to contrastAsCoef() when the `contrast` matrix is not of
  full column rank.

- Add "differential usage" concept tags to appropriate help pages.

29 Aug 2025: limma 3.65.4

- The default for `adaptive.span` in voom() and
  voomWithQualityWeights() is now `TRUE`. All the voom functions now
  use chooseLowessSpan() by default to choose the `span`.

- New argument `xlab` for plotSplice() to allow labeling in terms of 
  transcripts or other splicing events instead of exons.

- The help pages for diffSplice(), topSplice() and plotSplice() have
  been updated to emphasize differential transcript usage instead of
  differential exon usage or differential splicing.

30 Jul 2025: limma 3.65.3

- Bug fix for topTable() when `confint=TRUE` and either `p.value` is
  less than 1 or `lfc` is greater than zero.

28 Jul 2025: limma 3.65.2

- New argument `span` for fitFDistUnequalDF1(), squeezeVar() and eBayes().

- Minor edits to poolVar() and update help page.

- Complete remaining dates for release versions in NEWS.Rd.

21 May 2025: limma 3.65.1

- Revise help page for lmFit(), removing out-of-date mention of
  default correlation.

- The columns of the `covariates` matrix in removeBatchEffect() are
  now mean-corrected.

- removeBatchEffect() now gives a message if `design` is not
  specified.

16 Apr 2025: limma 3.65.0 (Bioconductor 3.22 Developmental Branch)
16 Apr 2025: limma 3.64.0 (Bioconductor 3.21 Release Branch)

15 Apr 2025: limma 3.63.14

- Update User's Guide.

09 Apr 2025: limma 3.63.13

- plotSA() no longer plots genes with df.residual=0 and no longer
  gives a warning when such genes are present.

04 Apr 2025: limma 3.63.12

- Bug fix to gene-wise variance pooling in diffSplice() when the
  residual df are unequal. Previously the exon-wise variances were
  not weighted by df when pooling.

29 Mar 2025: limma 3.63.11

- Update NEWS.Rd for Bioc 3.21 release. Add dates for historical releases.

19 Mar 2025: limma 3.63.10

- Update limma-Tests.Rout.save for R 4.5.0.

10 Mar 2025: limma 3.63.9

- New argument `legacy` for diffSplice.MArrayLM().

- Bug fix to diffSplice.MArrayLM() when fitFDistUnequalDF1() was
  called with `robust=TRUE`, i.e., whenever `robust=TRUE` and the
  number of transcripts differs between genes.

02 Mar 2025: limma 3.63.8

- Simes output from diffSplice.MArrayLM() was wrongly named when
  converted to full Simes method in version 3.36.6. Now fixed.

02 Mar 2025: limma 3.63.7

- diffSplice.MArrayLM() now allows for exons with df.residual=0 and
  sigma=NA.

02 Mar 2025: limma 3.63.6

- In topSplice(), the default for `test` is now "F" instead of
  "simes".

- diffSplice() is now an S3 generic function with a method 
  for MArrayLM objects.

- diffSplice() now adjusts transcript-level p-values using the full
  Simes method, instead of a modified Simes method leaving out the
  largest p-value for each gene that has been used until now. This 
  will cause the Simes p-values returned by diffSplice() to be
  slightly more conservative than before.

- The `gene.genes` data.frame returned by diffSplice() now has row
  names set to the gene IDs. Previously the last exon ID for each gene
  was used.

24 Feb 2025: limma 3.63.5

- diffSplice() now returns Bonferroni adjusted p-values as an
  alternative to Simes method.

23 Feb 2025: limma 3.63.4

- New argument `directional` for camera() and cameraPR().

 9 Jan 2025: limma 3.63.3

- Corrections to voomaLmFit() help page. Add Li (2024) PhD Thesis as
  reference.

10 Nov 2024: limma 3.63.2

- vooma() now allows missing values in both `y` and
  `predictor`, provided there are no entirely missing rows and
  provided all non-NA y values have a non-NA predictor.

 3 Nov 2024: limma 3.63.1

- voomaLmFit() now allows missing values in `y` and
  `predictor`, provided there are no entirely missing rows and
  provided all non-NA y values have a non-NA predictor.

- voomaLmFit() now allows `predictor` to be either a matrix or a
  column vector with genewise values.

30 Oct 2024: limma 3.63.0 (Bioconductor 3.21 Developmental Branch)
30 Oct 2024: limma 3.62.0 (Bioconductor 3.20 Release Branch)

30 Sep 2024: limma 3.61.12

- squeezeVar() now returns no moderation with df.prior=0 when there
  only two variances.

- Convert C code from free/Free to R_Free.

25 Sep 2024: limma 3.61.11

- Convert C code from Calloc to R_Calloc ready for R 4.5.0.

22 Sep 2024: limma 3.61.10

- Update NEWS.Rd ready for Bioconductor 3.20 release.

- Revise eBayes() help page to further clarify `legacy` and `fc`
  arguments.

 4 Aug 2024: limma 3.61.9

- Bug fix to squeezeVar() when the fitFDistUnequalDF1() has been run
  with `robust=TRUE`. The `prior.df` were being set equal instead of
  using shrunk prior degrees of freedom for the upper outliers.

- Mention voomLmFit() as producing unequal residual df in fitFDist.Rd.

 1 Aug 2024: limma 3.61.8

- New function fitFDistUnequalDF1(), which improves on fitFDist() and
  fitFDistRobustly(), with special attention to contexts where the
  df1 argument is unequal between cases and can include small
  fractional values, such as those resulting from the edgeR 4.0
  quasi-likelihood pipeline.

- New argument `legacy` for squeezeVar(). If `legacy=FALSE`, then it
  uses fitFDistUnequalDF1() instead of fitFDist() or
  fitFDistRobustly(). If `legacy=NULL` then fitFDistUnequalDF1() will
  be used when the degrees of freedom `df` are not all equal.

- New argument `legacy` for eBayes() and treat(). If `legacy=FALSE`,
  then the new hyperparameter estimation implemented via
  fitFDistUnequalDF1() will be used, otherwise the legacy method will
  be used. If `legacy=NULL` then the new method will be used when the
  residual degrees of freedom are not all equal.

- Improved checking for the class of the input in backgroundCorrect.R.

30 Jul 2024: limma 3.61.7

- Clean up some code in fitFDistRobustly().

29 Jul 2024: limma 3.61.6

- Use `identical()` instead of `==` in `if()` in squeezeVar().

22 Jul 2024: limma 3.61.5

- Use of the stats package digamma() function in limma programming
  replaced with logmdigamma() from the statmod package. Slight
  improvements to speed, accuracy and code simplicity. Results from
  limma empirical Bayes should remain the same to at least 13
  significant figures.

15 Jul 2024: limma 3.61.4

- New argument `keep.EList` for voomaLmFit(). The observation weights
  generated by voomaLmFit() are now stored only if `keep.EList=TRUE`.

- Remove argument `zero.weights` from the MArrayLM method for
  plotMD() and plotMA().

15 Jul 2024: limma 3.61.3

- Fix bug in the MArrayLM methods for plotMD() and plotMA(), which
  were attempting to access a `weights` component of the fitted model
  object, analogously to what plotMD() does with the EList or MAList
  objects, but MArrayLM objects do not contain a `weights` component.
  The `zero.weights` argument of plotMD.MArrayLM() and
  plotMA.MArrayLM() is now ignored.

- contrasts.fit() now converts the coefficient name "(Intercept)"
  created automatically by model.matrix() to "Intercept", same as is
  done by makeContrasts(). This should avoid inconsistent coefficient
  names between the fitted model object and contrast matrices created
  by makeContrasts().

14 Jun 2024: limma 3.61.2

- New argument `adaptive.span` for voomWithQualityWeights().

- New argument `adaptive.span` for normalizeCyclicLoess().

- voom() now returns the chosen `span` if `adaptive.span=TRUE`.

19 May 2024: limma 3.61.1

- voomaByGroup() now uses the overall mean-variance trend for groups
  with only one sample for which a separate trend is not estimable.

- Bug fix to voomaByGroup() to save variance plot parameters
  correctly. Was giving an error message because plot parameters
  from vooma() were not accessible.

- Bug fix to vooma() when save.plot=TRUE. Previously the plot
  parameters were not being saved to the final object.

- Add Mengbo Li as author for vooma().

- Add Ravindra et al (2023) reference to voomaByGroup() help page.

- Edit to voomaByGroup() help page to emphasize that only simple
  `design` matrices are allowed.

01 May 2024: limma 3.61.0 (Bioconductor 3.20 Developmental Branch)
01 May 2024: limma 3.60.0 (Bioconductor 3.19 Release Branch)

23 Apr 2024: limma 3.59.10

- Update test output for redone Bioc 3.19 organism packages.

22 Apr 2024: limma 3.59.9

- Fix to detectionPValues() example.

08 Apr 2024: limma 3.59.8

- Upate NEWS.Rd for limma 3.60.0 ready for Bioconductor 3.19 release.

08 Apr 2024: limma 3.59.7

- Add Goknur Giner to author list in DESCRIPTION.

- Increase defaults for `small.n` and `min.span` in
  chooseLowessSpan().

- Add comment to give creation date in kooperberg() code.

- voom() now calls chooseLowessSpan() to choose an optimal `span` if
  `adaptive.span=TRUE`.
  
- vooma() and voomaLmFit() now call chooseLowessSpan() to choose an
  optimal `span`. The `power` setting is reduced from 0.4 to 1/3 but
  other parameters remain the same. The chosen span value is slightly
  increased but remains less than 0.5 if there are at least 2500
  genes in the analysis.

- The plotMD() example now uses a darker green ("green3" instead of
  "green").

- Edits to chooseLowessSpan() help page. The example code now uses
  log-scale for the x-axis of the plot.

- Fix typos in goana.Rd.

- Update test output for Bioc 3.19 organism packages.

15 Mar 2024: limma 3.59.6

- Add RNA-seq to package description.

- Add Charity Law and Mengbo Li to author list.

- Fix typos in changelog.txt.

04 Mar 2024: limma 3.59.5

- row.names of `targets` component from voomaLmFit() now set to sample
  names.

04 Mar 2024: limma 3.59.4

- New function voomaLmFit() to automate estimation of sample weights
  and intrablock correlation from vooma().

- New argument `save.plot` for vooma().

- Argument `legacy` for vooma() renamed to `legacy.span`.

- Edits to vooma.Rd title and description.

- New argument `adaptive.span` for voom().

- The plot information saved by voom() with `save.plot=TRUE` now
  includes `pch` and `cex` plotting character settings.

13 Feb 2024: limma 3.59.3

- New argument `legacy` for vooma() to optionally restore the old
  default settings for `span`, for users who want backward
  compatibility.

 4 Feb 2024: limma 3.59.2

- vooma() argument `covariate` renamed to `predictor`.

- Changes to title and xlab for vooma variance trend plot when
  `predictor` is non-NULL.

- The default `span` set by vooma() is slightly increased. It is still
  dependent on the number of genes but the curve is now slightly
  higher curve.

- The order of arguments for vooma() is adjusted to match voom() and
  lmFit().

- Example added to the vooma() help page.

- Edits to the help pages for voom(), voomWithQualityWeights(),
  vooma() and 11RNAseq.Rd.

30 Oct 2023: limma 3.59.1

- Minor edits to decideTests.Rd.

- Update limma-Tests.Rout.save for Bioconductor 3.18 organism
  packages.

25 Oct 2023: limma 3.59.0 (Bioconductor 3.19 Developmental Branch)
25 Oct 2023: limma 3.58.0 (Bioconductor 3.18 Release Branch)

24 Oct 2023: limma 3.57.12

- Add warning to lmFit() and more explanation to lmFit.Rd to explain
  that correlation cannot be combined with method="robust".

18 Oct 2023: limma 3.57.11

- Update NEWS.Rd for imminent Bioconductor 3.18 Release.

11 Oct 2023: limma 3.57.10

- Fix behaviour of topTable() with `adjust.method=NULL` so that it
  gives "BH" adjustment as documented. Previously the argument was
  passed to p.adjust() which gave "holm" adjustment.

29 Sep 2023: limma 3.57.9

- Simplify the x-axis for the mean-variance plot from vooma() when
  `covariate` is non-NULL. The x-axis is now the fitted values for the
  multiple regression of the quarter-root-variances on log-expression
  and the covariate.

23 Sep 2023: limma 3.57.8

- New argument `covariate` for vooma() to allow variance trend
  modelling as a function of log-expression and this covariate
  simultaneously.

02 Aug 2023: limma 3.57.7

- limma now imports statmod rather than suggesting it.

19 Jun 2023: limma 3.57.6

- Add BiocStyle to Suggests field of DESCRIPTION.

18 Jun 2023: limma 3.57.5

- Add cameraPR() to 10GeneSetTests.Rd help topic.

11 Jun 2023: limma 3.57.4

- Use LaTeX includepdf to import usersguide.pdf into Sweave vignette.

- Expand Introduction vignette.

10 Jun 2023: limma 3.57.3

- Convert Introduction vignette from Sweave and pdf to Rmarkdown and
  html.

 3 Jun 2023: limma 3.57.2

- Add new argument 'group' for removeBatchEffect(). Revise help page
  example to use the new argument.

 6 May 2023: limma 3.57.1

- treat() now works when there are NA coefficients. Previously it gave
  an error if any estimated coefficient was NA.

25 Apr 2023: limma 3.57.0 (Bioconductor 3.18 Developmental Branch)
25 Apr 2023: limma 3.56.0 (Bioconductor 3.17 Release Branch)

22 Apr 2023: limma 3.55.10

- Revisions to Notes section at the end of the User's Guide. Refer to
  package description and help pages instead listing individual
  co-authors. Remove citations of software projects using limma
  because most are out-of-date.

22 Apr 2023: limma 3.55.9

- Update NEWS.Rd for imminent Bioconductor 3.17 Release.

21 Apr 2023: limma 3.55.8

- Update URLs in help pages.

- Update URL for Rsubread RNAseqCaseStudy in User's Guide.

- Convert CITATION to bibentry() instead of citEntry().

10 Apr 2023: limma 3.55.7

- Update limma-Tests.Rout.save for R 4.3.0beta and new Bioconductor
  organism packages.

28 Mar 2023: limma 3.55.6

- Update two reference URLs in propTrueNull() help page.

28 Feb 2023: limma 3.55.5

- Fix a problem with inconsistent pathway names from KEGG. Due to a
  change on the KEGG website, pathway names from getGeneKEGGLinks()
  have "path:" prefixes but pathway names from getKEGGPathwayNames()
  do not. To make the pathway names consistent, getGeneKEGGLinks() now
  removes the "path:" prefix.

- New (non-exported) function .removePrefix().

26 Jan 2023: limma 3.55.4

- Update NEWS.Rd.

- Minor correction to sampleInfoFromGEO() help page details section.

26 Jan 2023: limma 3.55.3

- Rename readSampleInfoFromGEO() to sampleInfoFromGEO().

22 Dec 2022: limma 3.55.2

- Add new argument `p.value` for topGO() and topKEGG().

29 Nov 2022: limma 3.55.1

- eBayes() now checks whether `fit` is a list object before
  undertaking other tests.

- Revise voom.Rd to specify that y-values in voom plot are sqrt
  residual standard deviations.

- Update limma-Tests.Rout.save for Bioc 3.16 annotation packages.

 2 Nov 2022: limma 3.55.0 (Bioconductor 3.17 Developmental Branch)
 2 Nov 2022: limma 3.54.0 (Bioconductor 3.16 Release Branch)

29 Oct 2022: limma 3.53.11

- Fix typos in User's Guide. Update some spellings to American
  English.

26 Sep 2022: limma 3.53.10

- Fix bug introduced in 3.53.9 whereby kegga.MArrayLM was returning GO
  results instead of KEGG results.

18 Sep 2022: limma 3.53.9

- Rename argument `prior.prob` to `null.prob` in goana() and kegga().

18 Sep 2022: limma 3.53.8

- New function goanaTrend() to estimate a covariate-dependent trend in
  the probability of differential expression for use in goana() and
  kegga() with `trend=TRUE`. The trend estimated by goanaTrend() is
  squeezed slightly towards constancy to provide stability when the
  number of DE genes is small. The amount of squeezing decreases with
  the number of DE genes.

- goana() and kegga() now call goanaTrend() when the `trend` argument
  is used. When `plot=TRUE` the plot is now created by goanaTrend()
  instead of by barcodeplot().

11 Sep 2022: limma 3.53.7

- Update goana() and kegga() code to catch NA gene IDs or covariate
  values.

- goana() and kegga() no longer give an error when a trend is
  estimated but there are no DE genes.

- Trends estimated by goana() and kegga() are now squeezed slightly
  towards constancy to provide stability when the number of DE genes
  is small.

20 Aug 2022: limma 3.53.6

- Add new argument `fc` to topTable() and topTableF().
  Change default for `lfc` to NULL instead of 0.

24 Jul 2022: limma 3.53.5

- Update help page reference URLs with DOIs.

11 Jul 2022: limma 3.53.4

- Fix typos in camera.Rd.

 5 Jun 2022: limma 3.53.3

- Use https instead of http links when reading from rest.kegg.jp.

15 May 2022: limma 3.53.2

- lmFit() now checks explicitly for NAs in the design matrix.

10 May 2022: limma 3.53.1

- Update alias2Symbol.Rd for Bioconductor 3.16.

27 Apr 2022: limma 3.53.0 (Bioconductor 3.16 Developmental Branch)
27 Apr 2022: limma 3.52.0 (Bioconductor 3.15 Release Branch)

15 Apr 2022: limma 3.51.8

- Update News.Rd ready for the Bioconductor 3.15 release.

- Rerun package tests using the latest developmental packages,
  including organism packages.

 8 Apr 2022: limma 3.51.7

- Update reference in vooma() help page.

 6 Apr 2022: limma 3.51.6

- Fix bug on lmFit() when `object` is a data.frame. lmFit() was not
  adding `Amean` to the output object in that case. Bug was introduced
  in limma 3.51.3.

17 Feb 2022: limma 3.51.5

- Fix typo ggplots to gplots in details section of coolmap() help page.

10 Feb 2022: limma 3.51.4

- Allow the `trend` argument of eBayes() to specify a general variance
  covariate.

14 Jan 2022: limma 3.51.3

- More detailed checking and error messages when the `object` input to
  lmFit() is a data.frame.

19 Dec 2021: limma 3.51.2

- New function readSampleInfoFromGEO().

27 Nov 2021: limma 3.51.1

- Improve checking for incorrectly specified `contrasts` argument in
  contrasts.fit().

- Rerun case study in Section 17.4 of the User's Guide
  (time-course experiment with Agilent rat microarrays)

27 Oct 2021: limma 3.51.0 (Bioconductor 3.15 Developmental Branch)
27 Oct 2021: limma 3.50.0 (Bioconductor 3.14 Release Branch)

24 Oct 2021: limma 3.49.5

- Update News.Rd ready for the Bioconductor 3.14 release.

- Rerun package tests using the latest developmental packages,
  including organism packages.

 8 Aug 2021: limma 3.49.4

- Expand details section of help page of barcodeplot().

 6 Aug 2021: limma 3.49.3

- Fix bug in plotMDS.MDS() (introduced in 3.47.12) when new `dim.plot`
  values are set.

 3 Aug 2021: limma 3.49.2

- Fix bug in read.idat() when `annotation` contains NA values.

- Revise plots in Section 18.1.10 of User's Guide so that coloring of
  X and Y genes is consistent.

24 Jun 2021: limma 3.49.1

- Expand explanation of fry() mixed p-values on the fry() help page.
 
20 May 2021: limma 3.49.0 (Bioconductor 3.14 Developmental Branch)
20 May 2021: limma 3.48.0 (Bioconductor 3.13 Release Branch)

18 May 2021: limma 3.47.16
 
- Fix minor bug in kegga.default() when there is only one pathway and
  `trend=TRUE`.

- Add `var.explained` argument to plotMDS.default().

10 May 2021: limma 3.47.15
 
- Use \doi{} for accessing doi URLs in help pages.

 9 May 2021: limma 3.47.14
 
- Update test output for Bioconductor 3.13 organism packages.

- Update NEWS.Rd for Bioconductor 3.13 release.

 1 May 2021: limma 3.47.13
 
- Fix typo in voom() warning when negative counts are detected.

28 Mar 2021: limma 3.47.12

- Rewrite the MDS calculations performed by plotMDS(). The function no
  longer calls cmdscale() but instead performs the necessary
  eigenvector computations directly. Proportion of variance explained
  by each dimension is now computed. The `ndim` argument is now
  removed. All eigenvectors are now stored so that plotMDS.MDS does
  not need to recompute them when different dimensions are plotted.

24 Mar 2021: limma 3.47.11

- The average log-expression column written by write.fit() now has
  column heading "AveExpr" to match the output from topTable().
  The column was previously called "A".

 8 Mar 2021: limma 3.47.10

- New argument `fc` for treat() so that the fold-change threshold can
  optionally be specified on the fold-change scale rather than as a
  log2-fold-change.

- Additional documentation for the `design` argument of `lmFit`
  using the term "samples" instead of "arrays" and mentioning that
  the design matrix defaults to `object$design` when that component
  is not NULL.

 8 Mar 2021: limma 3.47.9

- Help page for voom() now explains that the design matrix will be
  set from the `group` factor of the DGEList object if available.

16 Feb 2021: limma 3.47.8

- The upper/lower calculation introduced yesterday in
  duplicateCorrelation() didn't allow for NA correlations for some
  genes. Now fixed.

- Edit duplicateCorrelation() help page including new code example.

15 Feb 2021: limma 3.47.7

- duplicateCorrelation() now bounds the genewise correlations away
  from the upper and lower bounds by 0.01 so that the correlation
  matrix will be positive-definite.

31 Jan 2021: limma 3.47.6

- duplicateCorrelation() now sets `weights` same as lmFit(). Setting
  `weights=NULL` in the function call no longer overwrites weights
  found in `object`.

31 Jan 2021: limma 3.47.5

- duplicateCorrelation() now checks whether the block factor is
  spanned by the design matrix. If so, it returns intrablock
  correlations of zero with a warning. Previously this usage error
  was not specifically trapped and could lead to correlations that
  were or NA or close to 1 depending on floating point errors.

- duplicateCorrelation() now issues a simplified message when design
  is not of full rank and uses message() to do so instead of cat().

- Fix to value returned by duplicateCorrelation() when no blocks or
  duplicates are present.

31 Jan 2021: limma 3.47.4

- Edit coolmap() help page to clarify which heatmap.2() arguments are
  reserved and which can be included in the coolmap call.

22 Dec 2020: limma 3.47.3

- Add new arguments `path` and `bgxpath` for read.idat().

- read.idat() now checks for existence of input files before calling
  illuminaio read functions.

20 Dec 2020: limma 3.47.2

- read.idat() now checks for gzipped IDAT files and, if detected,
  gives an informative error message.

22 Nov 2020: limma 3.47.1

- Explicitly setting `weights=NULL` in a call to lmFit() no longer
  over-rides the `weights` value found in `object`.

- Default settings in lmFit() changed from `ndups=` and `spacing=1`
  to `ndups=NULL` and `spacing=NULL`. No change to function behavior
  from a user point of view.

28 Oct 2020: limma 3.47.0 (Bioconductor 3.13 Developmental Branch)
28 Oct 2020: limma 3.46.0 (Bioconductor 3.12 Release Branch)

19 Oct 2020: limma 3.45.19

- Subsetting and contrasts.fit() now work on MArrayLM objects even
  if the cov.coefficients component is absent.

18 Oct 2020: limma 3.45.18

- Add Note to voom.Rd to emphasise that voom is not an appropriate
  tool to analyse TPM, FPKM, CPM or any similar measures normalized
  for library size.

17 Oct 2020: limma 3.45.17

- In voom.Rd, recommend voomLmFit as an alternative for sparse counts.

17 Oct 2020: limma 3.45.16

- Update package test output file for org.Hs.eg.db version 3.12.0.

16 Oct 2020: limma 3.45.15

- Update NEWS.Rd ready for the Bioconductor 3.12 release.

- volcanoplot() now prompts user to run eBayes() if the object
  doesn't contain p-values.

12 Sep 2020: limma 3.45.14

- Revise the help page for plotMDS() to clarify that the function can
  produce PCA plots as well as PCoA plots.

 3 Sep 2020: limma 3.45.13

- Revise write.fit() so that column names of the output file are
  correct when `digits=NULL` and the `fit` object contains only one
  coefficient column. Previously the same contrast name was repeated
  as the column name for the coefficients, t-statistics and p.values,
  making them hard to distinguish.

 2 Sep 2020: limma 3.45.12

- write.fit() now outputs a blank column heading for the row names
  so that the number of column names in the delimited output file
  will agree with the number of columns (similar to write.csv in the
  base package).

- Add more explanation about "heirarchical" method in the details
  section of the decideTests() help page.

24 Aug 2020: limma 3.45.11

- Edits to the eBayes help page.

 7 Aug 2020: limma 3.45.10

- Add checks and more informative error messages to getEAWP() and
  lmFit() when the data object is missing, NULL or has zero rows.

14 Jul 2020: limma 3.45.9

- Add new function chooseLowessSpan().

11 Jul 2020: limma 3.45.8

- fitFDist() with a non-NULL `covariate` now fits a smoother trend
  (with fewer spline knots) than before unless there are at least
  30 observations. This also affects squeezeVar() and eBayes() with
  `trend=TRUE`.

12 Jun 2020: limma 3.45.7

- The previous change to TestResults subsetting caused an error in
  plotWithHighlights() if `status` was a TestResults object and
  `values` was not NULL. Now fixed.

- Rerun the E.coli and mammary subset case studies in the User's
  Guide.

10 Jun 2020: limma 3.45.6

- Subsetting for RGList, MAList, EListRaw, EList, MArrayLM or
  TestResults objects now accepts arguments other than `i` or `j`
  but ignores them without an error. This is relevant if a user
  adds a `drop` argument by analogy with matrix subsetting. Previously
  that produced an error.

- Subsetting of TestResults now requires two arguments, same as all
  of the other data object classes listed above. Previously single
  index subsetting (for example object[i]) was allowed.

- Add example to EList-class help page.

 9 Jun 2020: limma 3.45.5

- Improved treatment of zero weights by weighted.median().

- Minor revisions to weightedLowess help page.

- Edit concept entries for help files.

- More consistent use of rep.int(), rep_len() and rep() throughout
  the package.

- Replace NA with NA_real_ where appropriate.

 8 Jun 2020: limma 3.45.4

- Add new argument `output.style` to weightedLowess().

- Revise and expand the weightedLowess help page.

 6 Jun 2020: limma 3.45.3

- Add a message to topTableF() to warn that the function is
  obsolete and will be removed in a future version of limma.
  Remove usages of topTableF() from the User's Guide.

 6 Jun 2020: limma 3.45.2

- Remove obsolete function toptable(), which has been officially 
  deprecated in favor of topTable() since 1 Feb 2018.

- Update test file results to match updated organism packages.

28 Apr 2020: limma 3.45.1

- Bug fix to arrayWeights() when `y` contains NAs, the design matrix
  has several columns and some but not all genes have no residual df.

28 Apr 2020: limma 3.45.0 (Bioconductor 3.12 Developmental Branch)
28 Apr 2020: limma 3.44.0 (Bioconductor 3.11 Release Branch)

26 Apr 2020: limma 3.43.11

- Update installation section of User's Guide.

26 Apr 2020: limma 3.43.10

- Update NEWS.Rd for imminent Bioconductor 3.11 release.

- Add references to edgeR::voomLmFit() in the voom() and
  voomWithQualityWeights() help pages.

26 Apr 2020: limma 3.43.9

- fitFDist() now allows a covariate trend even with fewer than 4
  useable observations. (Useable means positive residual df and
  finite variance and covariate values.)

14 Apr 2020: limma 3.43.8

- Add new argument `package` to changeLog(). changeLog() now works
  for any package rather than only for limma.

12 Apr 2020: limma 3.43.7

This revision consists of code speed-ups:
- Convert code usages of any(is.na(x)) to anyNA(x).
- Convert code usages of all(!x) to !any(x).
- Convert code usages of all(df.residual==0) to max(df.residual)==0.

12 Apr 2020: limma 3.43.6

- Fix to classifyTestsF() when one or more of the coefficients have
  zero variance. Previously the zero variance will introduce NAs into
  the correlation matrix and hence cause an error. This is now
  avoided. This also fixes eBayes() when one or more of the
  coefficients are identically zero (usually caused by an all-zero
  contrast).

 6 Mar 2020: limma 3.43.5

- Improved treatment of NA coefficients by contrasts.fit().
  contrasts.fit() has always removed coefficients that were NA because
  of singularities in the design matrix, but any extra NA coefficients
  caused by NA expression values would cause all the stdev.unscaled
  values returned by contrasts.fit() to be NA for those genes.
  contrasts.fit() now returns non-NA coefficients and
  non-NA stdev.unscaled values if all the NA coefficients are
  multiplied by zero contrast multipliers.

- Speed improvement for contrasts.fit() if some input coefficients are
  not involved (have zero multipliers) in any of the contrasts.

- contrasts.fit() now preserves the `pivot` component of the fit
  object instead of removing it.

- More explanation of `covariates` argument to removeBatchEffects().

- Improvements to subsetting MArrayLM objects by column. Previously
  the presence of non-estimable coefficients sometimes caused the
  cov.coefficient matrix to be subsetted incorrectly; that is now
  fixed. Subsetting zero columns is now allowed even when F-statistics
  are present.

16 Feb 2020: limma 3.43.4

- voom now checks explicitly for NA or negative counts and gives an
  informative error message.

- Cleaning up of internal code to avoid partial matching of function
  arguments, attributes or list component names. The automatic package
  tests are now run with the warnPartialMatchArgs,
  warnPartialMatchAttr and warnPartialMatchDollar options all set to
  TRUE.

03 Feb 2020: limma 3.43.3

- The previous change to contrasts.fit() caused an error if the
  contrast matrix had 0 columns. That case is now handled again.

29 Jan 2020: limma 3.43.2

- contrasts.fit() is now faster in the case that most elements of the
  `contrasts` argument are zero.

28 Jan 2020: limma 3.43.1

- Fix bug in contrasts.fit() when some coefficients are NA due to NA
  expression values and the corresponding contrast multipliers are
  zero. The new code fixes the improvement originally introduced in
  limma 3.35.9. The new code will return non-NA contrasts if the NA
  coefficients all get 0 weight in the contrast. Previous code was
  correct if all genes had the same NA coefficients but could give an
  avoidable NA result if some genes had NA coefficients but the
  first gene did not.

30 Oct 2019: limma 3.43.0 (Bioconductor 3.11 Developmental Branch)
30 Oct 2019: limma 3.42.0 (Bioconductor 3.10 Release Branch)

28 Oct 2019: limma 3.41.20

- Update NEWS.Rd for Bioconductor 3.10 release.

- Update limma-Tests.Rout.save for updated org.Hs.eg.db package.

28 Oct 2019: limma 3.41.19

- Fix bug in barcodeplot() when `index` or `index2` are character
  vectors.

13 Oct 2019: limma 3.41.18

- Update Yoruba case study in User's Guide to call voom() and
  duplicateCorrelation() twice instead of once.

- Use "RNA-seq" and "ChIP-seq" capitalization consistently instead of
  "RNA-Seq" and "ChIP-Seq".

- Add arguments `block`, `correlation` and `weights` to voom() and
  remove the `...` argument.

 1 Oct 2019: limma 3.41.17

- New arguments `xlab`, `ylab` and `main` for plotFB(). The default
  plot title now includes the column name from the data object.
  Default for `pch` increased to 0.3.

 9 Sep 2019: limma 3.41.16

- Update Users Guide: update Rsubread reference, correct remarks
  about prior distribution for 1/sigma^2 in Section 13.2 and rerun
  the Yoruba and Pasilla case studies.

- Add head() and tail() S3 methods for all limma data classes.

24 July 2019: limma 3.41.15

- Add argument `gene.weights` to fry() so as to match the arguments
  and behavior of mroast(). Previously gene weights could be input to
  fry() only through the `index` argument.

- Revise fry() so that the mixed p-values take account of gene
  weights. Previously gene weights were not used in fry's mixed
  p-value calculation.

22 July 2019: limma 3.41.14

- The new Bailey (1980) t-statistic transformation becomes the
  default approximation for roast() and mroast() as it is now for
  zscoreT(). To achieve this, the default t-statistic normalizing
  transformation used by `roast` and `mroast` when
  \code{approx.zscore=TRUE} is changed "hill" to "bailey". The `fast`
  argument for roast() and mroast() is removed and instead a new
  argument `legacy` is added to allow users to revert to behaviour
  prior to limma 3.41.9 if they wish to reproduce legacy results
  exactly.

- Increase default number of rotations `nrot` used by roast() and 
  mroast() from 999 to 1999. Expand comments on the help page
  recommending larger values of `nrot` for publication purposes.

21 July 2019: limma 3.41.13

- Complete rewrite of zscoreT(), which is now somewhat faster and
  offer two new options for the normalizing transformation. The new
  argument `method` indicates which transformation is used when
  `approx=TRUE`. The default approximation method is changed from
  "hill" to "bailey".

- Update the `fast` option for roast() and mroast() to use the
  improved Bailey (1980) transformation instead of Wallace (1959) for
  normalizing t-statistics. If \code{fast=FALSE} the Hill (1970)
  transformation continues to be used, as it has since 2014.

- Rename first argument of tZScore() from `x` to `z`.

21 July 2019: limma 3.41.12

- Make tZScore() slightly faster.

19 July 2019: limma 3.41.11

- Fix bug for the `fast` roast option introduced yesterday.

18 July 2019: limma 3.41.10

- Add new argument `fast` to roast() and mroast() to optionally use
  an even faster although slightly less accurate approximation
  from Wallace (1959) when converting t-statistics to z-scores.

17 July 2019: limma 3.41.9

- roast() and mroast() now perform rotations in chunks to minimize
  memory usage. Memory usage now remains bounded regardless of the
  number of rotations used.

17 July 2019: limma 3.41.8

- Reduce the memory usage of roast() and mroast() by overwriting
  objects where possible in the internal code instead of creating new
  objects.

16 July 2019: limma 3.41.7

- Improve zscoreT() so that `approx=TRUE` allows NA values and works
  correctly for all valid df values.  Previously `approx=TRUE`
  returned NA results for `df` infinite or <= 0.05. A simple robust
  approximation from Wallace (1959) has been introduced to handle
  very large or very small `df` values. Previously `approx=FALSE`
  treated any `df` greater than 10000 as infinite; this threshold is
  now raised to 1e300.

26 June 2019: limma 3.41.6

- Fix bug in roast() when `index` is a character vector of geneids or
  rownames.

17 June 2019: limma 3.41.5

- plotWithHighlights and plotMD.MArrayLM now gives special treatment
  to the case that `status` is a TestResults object.

- new S3 unique() method for TestResults objects.

16 June 2019: limma 3.41.4

- New S3 subsetting method for TestResults objects. Previously a
  subsetted TestResults object became an ordinary numeric matrix, but
  now the TestResults class is preserved. Single index subsetting is
  also allowed but produces a numeric vector.

 7 June 2019: limma 3.41.3

- Update the arguments of voomWithQualityWeights() to match the
  revisions to arrayWeights() in limma versions 3.39.6 and 3.39.10.
  New argument `var.group`.

17 May 2019: limma 3.41.2

- The approxfun() call in vooma() now sets
  `ties=list("ordered",mean)`. This doesn't change the output but
  is slightly faster and avoids a warning message in R >= 3.6.0.

- limma now depends on R >= 3.6.0 because of the use of a list value
  for the `ties` argument of approxfun().

- The approx() call in fitFDistRobustly() now uses `ties=mean`
  instead of `ties=list("ordered",mean)` because the `x` argument is
  not generally pre-ordered.

16 May 2019: limma 3.41.1

- All uses of the approx() function now set
  `ties=list("ordered",mean)`. The change was prompted by a change in
  R 3.6.0 whereby using the default for `ties` generates a warning
  message whenever ties are present in `x`. The new code gives the
  same results but is very slightly faster and avoids the warning
  message.

 3 May 2019: limma 3.41.0 (Bioconductor 3.10 Developmental Branch)
 3 May 2019: limma 3.40.0 (Bioconductor 3.9 Release Branch)

27 Apr 2019: limma 3.39.19

- Update tests/limma-Tests.Rout.save for org.Hs.eg.db version 3.8.1.

org.Hs.eg.db 3.8.1

22 Apr 2019: limma 3.39.18

- Update tests/limma-Tests.Rout.save for updated versions of organism
  packages.

21 Apr 2019: limma 3.39.17

- Update NEWS.Rd ready for Bioconductor 3.9 release.

19 Apr 2019: limma 3.39.16

- The approxfun() call in voom() now sets
  `ties=list("ordered",mean)`. This doesn't change the output but
  is slightly faster and avoids a warning message in R >= 3.6.0.

12 Apr 2019: limma 3.39.15

- voom() now checks for experiments that have no replication. In this
  case it now returns weights that are all 1, with an informative
  warning but no error.

24 Feb 2019: limma 3.39.14

- The function FStat() is now removed. It was a convenience wrapper
  for classifyTestsF() with fstat.only=TRUE but is not used often
  enough to justify itself.

- classifyTestsP() is no longer exported as it is not intended to be
  called by users.

- The above two changes allow classifyTests.Rd to focus more clearly
  on nested F-tests.

24 Feb 2019: limma 3.39.13

- The function classifyTestsT() is now removed, having been
  superceded by more sophisticated multiple testing methods.

15 Feb 2019: limma 3.39.12

- arrayWeights() now checks for and skips over any genes with zero
  residual variances.

14 Feb 2019: limma 3.39.11

- contrasts.fit() now removes any test statistics or p-values found
  in the fit object. This avoids a mis-match between coefficients and
  test statistics if eBayes() has been run on the object previously.

14 Feb 2019: limma 3.39.10

- arrayWeights() now chooses between the REML and original
  gene-by-gene algorithm automatically by default. REML is chosen
  when there are no prior weights or missing values and gene-by-gene
  is used otherwise.

14 Feb 2019: limma 3.39.9

- The old function ebayes(), which was deprecated a year ago in favor
  of eBayes(), is now removed.

14 Feb 2019: limma 3.39.8

- Further simplifications and improvements to the arrayWeights() code
  when method="genebygene".

- New argument 'prior.n' for arrayWeights() to control the prior
  weight with which the array weights are squeezed towards unity.

12 Feb 2019: limma 3.39.7

- The fitted() and residuals() methods for MArrayLM objects now give
  informative error message if the object contains contrasts
  instead of the original coefficients.

12 Feb 2019: limma 3.39.6

- Major rewrite of arrayWeights() to improve speed and stability.
  The arrayWeightsSimple() function has been removed and its
  functionality incorporated into arrayWeights(), including the
  new 'var.group' argument to simplify specification of the 
  variance design matrix.

31 Jan 2019: limma 3.39.5

- New argument 'var.group' for arrayWeightsSimple().

23 Jan 2019: limma 3.39.4

- Rewrite Filtering chapter of User's Guide.

02 Dec 2018: limma 3.39.3

- Add Research Fields to the biocViews entry in the package
  DESCRIPTION file.

- Add two references to the voom help page.

02 Nov 2018: limma 3.39.2

- Add more details to the warning about approximations in the
  contrasts.fit() help page.

- Update package tests output file to match the Bioconductor 3.8
  release of the org.Hs.eg.db package.

- Convert src/init.c to use LF (Unix) line endings.

01 Nov 2018: limma 3.39.1

- Minor edit to decideTests() help page.

31 Oct 2018: limma 3.39.0 (Bioconductor 3.9 Developmental Branch)
31 Oct 2018: limma 3.38.0 (Bioconductor 3.8 Release Branch)

29 Oct 2018: limma 3.37.11

- New function plotExonJunc() to plot results from diffSplice() when
  exon-exon junctions as well as exons are included in the count
  matrix.

- Update NEWS.Rd for Bioconductor 3.8 Release.

14 Oct 2018: limma 3.37.10

- Edit to barcodeplot() so that it no longer assumes that 'statistic'
  has unique names. Previously it returned an error if
  names(statistic) contained any duplicated values.

14 Oct 2018: limma 3.37.9

- New argument hl.col for volcanoplot(), allowing users to specify
  the color for the gene names when highlight > 0.

14 Oct 2018: limma 3.37.8

- Minor additions to the barcodeplot() and qqt() help pages.

20 Sep 2018: limma 3.37.7

- Reverting the p-value adjustment in cumOverlap() back to the
  original directed Bonferroni method, because it is more powerful
  when the number of Ids contributing to the significant overlap is
  small.

20 Sep 2018: limma 3.37.6

- Bug fix for cumOverlap(), which was under-counting overlaps in some
  cases. cumOverlap() now uses Holm's method for p-value adjustment
  and computes an overall p-values by Simes method.

18 Sep 2018: limma 3.37.5

- The colors "blue", "red" and "yellow" used by coolmap() changed to
  "blue2", "red2" and "yellow2" when used in a color panel with white.

25 Aug 2018: limma 3.37.4

- Minor bug fix to the mixed p-value from roast() and mroast() when
  set.statistic="floormean".

11 Jul 2018: limma 3.37.3

- goana.Rd now explains more explicitly that p-values are unadjusted
  for multiple testing.

- arrayWeights.Rd now mentions minimum dimensions for expression
  object.

21 June 2018: limma 3.37.2

- Add advice on how to choose 'lfc' to the treat() help page.

 1 May 2018: limma 3.37.1

- new function logsumexp().

 1 May 2018: limma 3.37.0 (Bioconductor 3.8 Developmental Branch)
 1 May 2018: limma 3.36.0 (Bioconductor 3.7 Release Branch)

18 Apr 2018: limma 3.35.15

- Update the User's Guide case study that analyses Lrp- E. Coli
  samples and profiled by Affymetrix arrays.

25 Mar 2018: limma 3.35.14

- The treat() default for 'lfc' changed from lfc=0 to lfc=log2(1.2).

- More updates to the case study in Section 17.4 of the Users' Guide
  to download data, use gene symbols, change filtering and include
  GO analysis. The F-test and probe-averaging analyses are now
  removed.

18 Mar 2018: limma 3.35.13

- Update the Agilent single-channel case study in Section 17.4 of the
  Users' Guide to use the Agilent gIsWellAboveBG detection column.

22 Feb 2018: limma 3.35.12

- kegga() and goana() now check whether a data.frame has been input
  by mistake and generates an error. Previously a data.frame value
  for 'de' was interpreted as a list of gene sets without any error.

- bug fix for goana() when 'covariate' is specified and some of the
  'universe' genes don't have GO annotation.

18 Feb 2018: limma 3.35.11

- coolmap() will now accept an arbitrary vector of colors. A new
  preset "whitered" panel is now also supported.

18 Feb 2018: limma 3.35.10

- ebayes(), which was replaced by eBayes() in 2003, is now formally
  deprecated.

- Comments added to voom.Rd and eBayes.Rd to clarify the relationship
  between limma-trend and voom.

16 Feb 2018: limma 3.35.9

- Improved treatment of NA coefficients by contrasts.fit().
  contrasts.fit() has always removed coefficients that were NA because
  of singularities in the design matrix, but any extra NA coefficients
  caused by NA expression values would cause all the coefficients
  returned by contrasts.fit() to be NA for those genes.
  contrasts.fit() now returns non-NA coefficients if the input NA
  coefficients are multiplied by zero contrast multipliers.
  This improvement is only for the coefficients themselves. The
  corresponding stdev.unscaled values returned by constrasts.fit()
  for such genes will still be NA.

 4 Feb 2018: limma 3.35.8

- Fix to roast(), mroast() and fry(), which were not allowing gene-
  level precision weights to be passed via the 'weights' argument.
  These functions now allow 'weights' to be a vector equal to nrow(y),
  same as for lmFit().

 1 Feb 2018: limma 3.35.7

- toptable() is now officially deprecated in favor of topTable().

23 Jan 2018: limma 3.35.6

- Fix to roast(), mroast() and fry(), which were not allowing array
  weights (or sample weights) to be passed via the 'weights' argument.
  These functions now allow 'weights' to be a vector equal to ncol(y),
  same as for lmFit().

21 Dec 2017: limma 3.35.5

- voomWithQualityWeights() now returns 'sample.weights' as a column
  of the 'targets' data.frame instead of as a separate vector.

13 Dec 2017: limma 3.35.4

- "TestResults" objects now include a 'labels' attribute, defaulting
  to c("Down","NotSig","Up").

 3 Dec 2017: limma 3.35.3

- New arguments 'quote' and 'row.names' for write.fit(). Write.fit()
  now outputs row.names by default, which previously were suppressed.

26 Nov 2017: limma 3.35.2

- Documentation edit: clarify default gene ID system used by kegga()
  when species="dme".

13 Nov 2017: limma 3.35.1

- Update wsva.Rd to describe correct number of columns for output.

31 Oct 2017: limma 3.35.0 (Bioconductor 3.7 Developmental Branch)
31 Oct 2017: limma 3.34.0 (Bioconductor 3.6 Release Branch)

11 Oct 2017: limma 3.33.14

- Update NEWS.Rd for changes since the Bioconductor 3.5 release.

 4 Oct 2017: limma 3.33.13
 
- Bug fixes for beadCountWeights(). Default is now set correct for
  'design' and the function now works correctly when 'y' is an EList
  object contain bead standard errors but not standard deviations.

29 Sep 2017: limma 3.33.12
 
- Bug fixes for plotSplice() which, in some circumstances, was not
  highlight significant exons.

29 Sep 2017: limma 3.33.11
 
- New argument 'sort.by' for topSplice().

21 Sep 2017: limma 3.33.10
 
- volcanoplot() didn't work with MArrayLM objects produced by
  treat(). Now fixed.

10 Sep 2017: limma 3.33.9
 
- read.idat() can now handle idat files in SNP format.

10 Sep 2017: limma 3.33.8
 
- Bug fix to cameraPR() when 'index' contains character row names.

30 Jul 2017: limma 3.33.7

- Bug fix to camera() when 'index' contains character row names.

25 Jul 2017: limma 3.33.6

- alias2SymbolUsingNCBI() now always produces a data.frame.
  Previously a single-column data.frame was returned as a vector.

- Default value for 'style' in volcanoplot() changed to "p-value"
  instead of "p". This doesn't change the behavior of the function.

16 Jul 2017: limma 3.33.5

- goana.default() code is rewritten to more closely match
  kegga.default. Slight speed improvement. Prior probabilities are now
  computed using the restricted universe with GO annotation instead of
  the whole universe.

15 Jul 2017: limma 3.33.4

- New argument 'restrict.universe' for the default kegga() method.
  The default is now not to the restrict the universe to genes with
  KEGG annotation.

- Bug fix for kegga() when trend=TRUE or a prior.prob or covariate is
  specified. Previously the Down p-values were substantially too small
  and the Up p-values were too large.

12 May 2017: limma 3.33.3

- plotWithHighlights() checks whether 'status' is a factor and
  converts to character.

 1 May 2017: limma 3.33.2

- The gene.info.file argument of alias2SymbolUsingNCBI() will now
  optionally accept a data.frame instead of a file name.

25 Apr 2017: limma 3.33.1

- diffSplice() now treats any NA geneid as a separate gene with one
  exon. Previously all NA geneids were treated as the same gene.

25 Apr 2017: limma 3.33.0 (Bioconductor 3.6 Developmental Branch)
25 Apr 2017: limma 3.32.0 (Bioconductor 3.5 Release Branch)

22 Apr 2017: limma 3.31.22

- Minor edits to coolmap.Rd.

- New function cameraPR() giving a pre-ranked version of camera().

12 Apr 2017: limma 3.31.21

- plotSA() now plots quarter-root variances instead of
  log2(variances).

 7 Apr 2017: limma 3.31.20

- New argument 'style' for volcanoplot(). The default is now to use
  -log10(p-value) for the y-axis instead of the B-statistic.

- NEWS.Rd updated to contain changes since version 3.30.0.

 5 Mar 2017: limma 3.31.19

- New argument 'xlab' for barcodeplot().

- length() methods removed all limma data objects (objects of class
  EList, EListRaw, RGList, MAList or MArrayLM). length(x) will now
  return the number of list components in the object rather than the
  number of elements in the expression matrix.

 4 Mar 2017: limma 3.31.18

- Bug fix to mroast(), which was ignoring 'geneid' argument.

 4 Mar 2017: limma 3.31.17
 
- Bug fix to printHead() for arrays with 1 column.

 2 Mar 2017: limma 3.31.16

- New function alias2SymbolUsingNCBI(), which converts gene aliases
  or synonyms into official gene symbols using an NCBI gene-info
  file.

27 Feb 2017: limma 3.31.15

- C functions are now registered using R_registerRoutines.

- New 'plot' argument for wsva(). Variables from wsva() are now
  normalized in size.

19 Feb 2017: limma 3.31.14

- new function wsva() for weighted surrogate variable analysis.

08 Feb 2017: limma 3.31.13

- barcodeplot() now ranks statistics from low to high, instead of
  from high to low, following the usual style of axes in R plots.
  This means that left and right are now interchanged.

08 Feb 2017: limma 3.31.12

- Default for 'legend' argument of plotWithHighlights() changed from
  "topleft" to "topright".

02 Feb 2017: limma 3.31.11

- New argument 'col' for plotSA().  plotSA() now longer plots a
  lowess curve trend, but if appropriate both high and low outlier
  variances are highlighted in a different color.

25 Jan 2017: limma 3.31.10

- Fix two bugs in fitFDist() introduced in version 3.31.9. If the
  estimated 'df2' was infinite, and 'covariate' was not NULL, a
  scalar 'scale' value was returned instead of a vector. Similarly,
  if the 'covariate' vector took on only one unique value, a scalar
  'scale' was returned instead of a vector. The function now returns
  a vector 'scale' whenever covariate is not NULL.

12 Jan 2017: limma 3.31.9

- Bug fix to fitFDist() when 'covariate' is not NULL. The new
  estimate for df2 will usually be slightly lower than before.  This
  affects the eBayes(trend=TRUE) pipeline.  The difference will have
  an appreciable effect on downstream results when the number of
  genes is small.

- fitFDist() now estimates the scale by mean(x) when df2 is estimated
  to be Inf.  This will make the results from eBayes() less
  conservative than before when df.prior=Inf.

- Bug fix to fitFDist() when 'x' contains NA values and 'df1' has
  length 1.  When 'covariate' is non-NULL, fitFDist() will now return
  an NA result without an error if there are too few observations to 
  do the estimation.

 8 Jan 2017: limma 3.31.8

- decideTests() is now an S3 generic function with a default method
  and a method for MArrayLM objects.  decideTests() now selects all
  null hypotheses as rejected if p.value=1.

14 Dec 2016: limma 3.31.7

- Bug fix for contrastAsCoef() when there is more than one contrast.
  Previously the coefficients for the transformed design matrix were
  correct only for the first contrast.

28 Nov 2016: limma 3.31.6

- plotSA() now indicates, by way of an open plotting symbol, any
  points that have low robust df.prior values.

25 Nov 2016: limma 3.31.5

- Clearer error message from fitFDistRobustly() when some variances
  are zero.

16 Nov 2016: limma 3.31.4

- Bug fix for kegga() when the universe is explicitly specified.

10 Nov 2016: limma 3.31.3

- Bug fix for fitFDistRobustly() when there is an extreme outlier.
  Previously floating point underflow for the outlier p-value could
  cause an error.

27 Oct 2016: limma 3.31.2

- New function coolmap(). This is essentially a wrapper for the
  heatmap.2() function in the ggplots package, but with sensible
  default settings for genomic log-expression data.

26 Oct 2016: limma 3.31.1

- Argument 'replace.weights' removed from voomWithQualityWeights().
  The function now always produces an EList, similar to voom(). The
  default behavior of the function is unchanged.

18 Oct 2016: limma 3.31.0 (Bioconductor 3.5 Developmental Branch)
18 Oct 2016: limma 3.30.0 (Bioconductor 3.4 Release Branch)

17 Oct 2016: limma 3.29.25

- Update help page of id2indices() to use MSigDB version 5.2.

- Revise help page for voom().

16 Oct 2016: limma 3.29.24

- Update section on RNA-seq in User's Guide.

16 Oct 2016: limma 3.29.23

- New 'plot' argument for plotMDS(), to optionally return an MDS
  object without making a plot.

14 Oct 2016: limma 3.29.22

- NEWS.Rd updated for Bioconductor 3.4 release.

- More informative error message from voom() when there is only one
  row of data.

 6 Sep 2016: limma 3.29.21

- New arguments 'pch.y' and 'pch.z' for plotRLDF.

22 Aug 2016: limma 3.29.20

- Bug fix to fitFDistRobustly(), which in some circumstances was
  trying to save extra (undocumented) results that had not been
  computed.

17 Aug 2016: limma 3.29.19

- duplicateCorrelation() now expands weights using expandAsWeights(),
  making it consistent with lmFit().

16 Aug 2016: limma 3.29.18

- New function cumOverlap() to analyse the overlap between two
  ordered lists.

24 Jul 2016: limma 3.29.17

- Update Phipson et al (2016) reference for robust empirical Bayes.

21 Jul 2016: limma 3.29.16

- Added more explanation about the 'batch2' and 'covariates'
  arguments to the help page for removeBatchEffect().

18 Jul 2016: limma 3.29.15

- More informative error message from getEAWP() and lmFit() when
  'object' is a non-normalized data object.

28 Jun 2016: limma 3.29.14

- Bug fix for fry() when 'index' has NULL names.

26 Jun 2016: limma 3.29.13

- The lowess line drawn by plotSA() is now more robust with respect
  to NA variances.

23 Jun 2016: limma 3.29.12

- goana() now works for any species for which an Entrez Gene based
  organism package exists.

- The 'species' argument of kegga() can now accept any Bioconductor
  species abbreviation.

- topGO() now breaks ties by the number of genes in the GO Term and
  by the name of the Term if the p-values are equal. (This is the
  same behavior as topKEGG.)

22 Jun 2016: limma 3.29.11

- alias2Symbol() and alias2SymbolTable() now work for any species for
  which an Entrez Gene based organism package exists.

15 Jun 2016: limma 3.29.10

- new argument 'annotation' for read.idat(), to allow users to read
  any required columns from the manifest file.

14 Jun 2016: limma 3.29.9

- normalizeBetweenArrays() now checks whether the input 'object' is a
  data.frame, and converts to a matrix if possible.

13 Jun 2016: limma 3.29.8

- new function detectionPValues() to compute detection p-values from
  negative control probes.

12 Jun 2016: limma 3.29.7

- new argument 'verbose' for read.idat().

- Example code added to duplicateCorrelation.Rd.

 4 Jun 2016: limma 3.29.6

- The default settings for the 'inter.gene.cor' and 'use.neg.cor'
  arguments of camera() have been changed.  camera() now uses by
  default a preset value for the inter-gene correlation. This has the
  effect that it tends to rank highly co-regulated,
  biologically-interpretable more highly than before.

22 May 2016: limma 3.29.5

- New function fitmixture() to estimate genewise fold changes and
  expression values from mixture experiments.  Previously this
  funtion was only available as part of the illumina package available
  from http://bioinf.wehi.edu.au/illumina

- New function logcosh() to compute log(cosh(x)) accurately without
  floating underflow or overflow.

11 May 2016: limma 3.29.4

- Slight change to fry() standardize="posterior.sd" method.

10 May 2016: limma 3.29.3

- New flexibility for the roast() and mroast() functions, similar to
  that previously implemented for fry().  The index vector for each
  gene set can now be a data.frame, allowing each gene set to have
  its own set of gene weights.  The indices can now optionally be a
  vector of gene names instead of a vector of indices.  The
  'array.weights' and 'trend.var' arguments have been removed, but
  instead roast() and mroast() can now accept, via '...', any
  argument that would be normally passed to lmFit() or eBayes().
  In particular, roast() and mroast() now support the robust empirical
  Bayes option of squeezeVar(). Array weights can still be set using
  the 'weights' argument, as for lmFit().

- bug fix to propTrueNull() when method="hist" and all the p-values
  are less than 1/nbins.

 5 May 2016: limma 3.29.2

- minor speed improvements for squeezeVar() and fry().

 4 May 2016: limma 3.29.1

- unnecessary argument 'design' removed from fitted.MArrayLM.

- bug fix to fry() with robust=TRUE.

- bug fix to alias2Symbol() with expand.symbol=TRUE.

 4 May 2016: limma 3.29.0 (Bioconductor 3.4 Developmental Branch)
 4 May 2016: limma 3.28.0 (Bioconductor 3.3 Release Branch)

29 April 2016: limma 3.27.20

- update NEWS.Rd ready for Bioconductor 3.3 release.

18 April 2016: limma 3.27.19

- bug fix for fry(), which is some cases was reversing the sign of a
  contrast effect.

15 April 2016: limma 3.27.18

- tmixture.vector() now handles unequal df in a better way.  This
  will be seen in slightly changed B-statistics from topTable when
  the residual or prior df are not all equal.

14 April 2016: limma 3.27.17

- Improved capabilities and power for fry().  fry() has two new
  arguments, 'geneid' and 'standardize'.  The index argument of
  fry() can now be a list of data.frames containing identifiers and
  weights for each set.  The options introduced by the standardize
  argument allows fry() to be more powerful when genes have unequal
  variances.  fry() now accepts any arguments that would be suitable
  for lmFit() or eBayes().

13 April 2016: limma 3.27.16

- alias2Symbol() and alias2SymbolTable() now load the name space of
  the relevant organism package org.XX.eg.db instead of loading the
  package.

10 April 2016: limma 3.27.15

- goana() now loads the name spaces of GO.db and org.XX.eg.db instead
  of loading the packages.  This keeps the user search path cleaner.

22 March 2016: limma 3.27.14

- bug fix for Active Proportions from roast() when gene.weights are
  set.

 1 March 2016: limma 3.27.13

- update references to Phipson et al (2016) article on robust
  empirical Bayes.

11 February 2016: limma 3.27.12

- new argument 'save.plot' for voom().

- bug fix for kegga() when 'covariate' or 'prior.prob' are not NULL
  and when not all genes in the universe have annotation.

27 January 2016: limma 3.27.11

- kegga() now checks for missing values in 'gene.pathway' or
  'pathway.names'.

26 January 2016: limma 3.27.10

- kegga() gives better error message when there are no annotated genes
  in the universe.

- topKEGG() now breaks tied p-values by number of genes in pathway and
  by name of pathway.

- diffSplice() now returns genewise residual variances.

- plotRLDF() now uses squeezeVar() to estimate how by how much the
  within-group covariance matrix is moderated.  It has new arguments
  'trend' and 'robust' as options to the empirical Bayes estimation
  step.  It also has new argument 'var.prior' to allow the prior
  variances to be optionally supplied.  Argument 'df.prior' can now be
  a vector of genewise values.

11 Jan 2016: limma 3.27.9

- bug fix for kegga(), which wasn't passing the 'convert' argument
  to getGeneKEGGLinks().

 8 Jan 2016: limma 3.27.8

- goana() now supports species="Pt" (chimpanzee).

- kegga() has several new arguments and now supports any species
  supported by KEGG.  kegga() can now accept annotation as a
  data.frame, meaning that it can work from user-supplied annotation.

- new functions getGeneKEGGLinks() and getKEGGPathwayNames() to get
  pathway annotation from the rest.kegg website.

- removeExt() has new 'sep' argument.

29 Dec 2015: limma 3.27.7

- roast(), mroast(), fry() and camera() now require the 'design'
  matrix to be set.  Previously the design matrix defaulted to a
  single intercept column.

- Bug fix to plotRLDF(), to ensure 'top' is included in output object
  even if all the rows of data are used.

- gls.series() now gives a more informative error message when the
  correlation is equal to 1 or -1.

 1 Dec 2015: limma 3.27.6

- Slightly improved algorithm for producing the df2.shrunk values
  returned by fitFDistRobustly().  fitFDistRobustly() now returns
  tail.p.value, prob.outlier and df2.outlier as well as previously
  returned values.  The minimum df.prior value returned by
  eBayes(fit, robust=TRUE) may be slightly smaller than previously.

- update 'sort' argument of fry() to be the same as for mroast().

- edit help page for vennDiagram().

15 Nov 2015: limma 3.27.5

- update NEWS.Rd for Bioconductor 3.2 Release.

- plotRLDF() now produces more complete output and the output is
  more completely documented.  It can now be used as a complete LDF
  analysis for classification based on training data.  The argument
  'main' has been removed as an explicit argument because it and
  other plotting arguments are better passed using the ... facility.
  New arguments 'ndim' and 'plot' have been added.  The first allows
  all possible discriminant functions to be completed even if only
  two are plotted.  The second allows dicriminant functions to be
  computed without a plot.

- If a targets data.frame is provided to read.maimages() through the
  'files' argument, then read.maimages() now overwrites its rownames
  on output to agree with the column names of the RGList object.

 6 Nov 2015: limma 3.27.4

- Bug fix to tricubeMovingAverage() when length of series is even
  and span is close to 1.

30 Oct 2015: limma 3.27.3

- Add a check in camera() that dataset must contain as least three
  genes.

29 Oct 2015: limma 3.27.2

- Fix to NAMESPACE.  The function utils::winMenuAddItem(), which is
  needed to add a GUI menu item for the limma User's Guide, is now
  imported only conditionally in Windows.

27 Oct 2015: limma 3.27.1

- Functions needed from the grDevices, graphics, stats and utils
  packages are now imported explicitly into the NAMESPACE.

- Two changes to barcodeplot():  new argument 'alpha' to set
  semitransparency of positional bars in some circumstances;
  the default value for 'quantiles' is increased slightly.

- Bug fix to camera(), which was not accepting character values
  for index when weights were non-NULL.

- camera() now gives explicit error when too few residual df.

14 Oct 2015: limma 3.27.0 (Bioconductor 3.3 Developmental Branch)
14 Oct 2015: limma 3.26.0 (Bioconductor 3.2 Release Branch)

 7 Oct 2015: limma 3.25.18

- mroast() now sorts significant gene sets by proportion of genes
  changing as well as p-values and set size.  When p-values are 
  equal, sets with a higher proportion of changing genes will now
  rank higher in ordered results.

 6 Oct 2015: limma 3.25.17

- Checking for NA coefficients in lmFit() is now done more
  efficiently.

- bug fix for fry() when the gene set has a small number of genes.

- more informative error message from lmscFit() when correlation is
  NA.

19 Sep 2015: limma 3.25.16

- fry() now produces "mixed" (non-directional) p-values and FDRs as
  well as directional p-values and FDRs.

- tricubeMovingAverage() has new argument 'power' and old argument
  'full.length' is removed.
  
- tricubeMovingAverage() now checks whether span is correctly
  specified.  It now gives identical results for any span>=1 or any
  span<=0.

- the 'genes' argument of controlStatus() now accepts EListRaw or
  Elist objects.

- avearrays() now gives a more informative error message if input
  argument 'x' is not a matrix.

- getEAWP() now works on all eSet objects, not just ExpressionSet,
  provided there is an data element called "exprs".

 5 Aug 2015: limma 3.25.15

- argument truncate.term for topKEGG() renamed to 'truncate.path'.

20 July 2015: limma 3.25.14

- camera() has a new argument inter.gene.cor.  This allows a preset
  inter gene correlation to be set for each test test, resulting in
  potentially less conservative tests.

- All data classes (EListRaw, EList, RGList, MAList, MArrayLM) now 
  require two arguments for subsetting.  This restores the behavior
  in limma version 3.19.10 and earlier.  In limma 3.19.11 through
  3.25.13, subsetting by one argument y[i] was equivalent to y[i,].
  This will now give an error message.

- The contrast argument of roast() can now optionally be a character
  string giving the name of a column of the design matrix.

- lmFit() now treats infinite expression values as NA.  In the past,
  this was done somewhat inconsistently.

 7 July 2015: limma 3.25.13

- New 'tolerance' argument for read.idat() to allow manifest and idat
  to differ by a certain number of probes

- A minor change for when lmFit() is run on a single gene: a simple
  vector data 'object' is now coerced to a matrix with one row
  instead of one column  

26 June 2015: limma 3.25.12

- lmFit() and friends now always produce an output component 'rank'
  that returns the column rank of the design matrix.  Previously it
  depended on the options used whether this component was given.

23 June 2015: limma 3.25.11

- camera(), fry(), mroast() and romer() now give a more informative
  error message when the index list is empty.

- camera() no longer gives NA results when a gene has a residual
  variance exactly zero.

23 June 2015: limma 3.25.10

- bug fix to write.fit() when method="global" and fit contains more
  than one column.

 8 June 2015: limma 3.25.9

- plotMD() can now accept arguments 'array' or 'coef' as appropriate
  as synonyms for 'column'.  This may help users transitioning from
  plotMA ot plotMD.

 7 June 2015: limma 3.25.8

- Improved power for the romer() function.  The empirical Bayes
  shrinkage of the residuals, removed on 4 April, has been
  re-instated in a corrected form.  It can optionally be turned off
  using the 'shrink.resid' argument.

 5 June 2015: limma 3.25.7

- The dimnames<- method for EListRaw objects now sets rownames for
  the background matrix Eb as well as for the foreground matrix E.

 3 June 2015: limma 3.25.6

- new function kegga() to conduct KEGG pathway over-representation
  analyses.  kegga() is an S3 generic function with a method for
  MArrayLM fitted model objects.

20 May 2015: limma 3.25.5

- bug fix for plotWithHighlights(). Legend was not displaying
  correctly when there were no background points.

20 May 2015: limma 3.25.4

- goana() with trend now chooses the span of the tricube smoother
  based on the number of differentially expressed genes.  Larger
  spans give smoother trends and are used for smaller numbers of
  genes.  Arguments 'species' and 'plot' are no longer part of
  goana.MArrayLM() and are instead passed to goana.default().

- speedup for ids2indices().

- bug fix to plotMD.RGList.

28 April 2015: limma 3.25.3

- arguments hi.pch, hi.col and hi.cex of plotWithHighlights() renamed
  to hl.pch, hl.col and hl.cex.  ('hl' is short for 'highlight'.)

- fix bug in auROC() introduced in 3.25.2.

25 April 2015: limma 3.25.2

- auROC() now allows for tied stat values.

22 April 2015: limma 3.25.1

- Update citation for the limma review article (Ritchie et al,
  NAR 2015).

- Update Liu et al reference for voomWithQualityWeights().

- topGO() has a new argument 'truncate.term' to limit number of
  characters appearing in a column.

17 April 2015: limma 3.25.0 (Bioconductor 3.2 Developmental Branch)
17 April 2015: limma 3.24.0 (Bioconductor 3.1 Release Branch)

14 April 2015: limma 3.23.17

- adding back legacy arguments 'pch', 'col' and 'cex' as alternative
  arguments for plotWithHighlights() to ensure background
  compatibility.

- edit help pages for plotMD, plotMA and plotWithHighlights.

13 April 2015: limma 3.23.16

- add note to help page for genas() explaining it is not yet
  implemented for use with observation weights.

13 April 2015: limma 3.23.15

- update User's Guide.

- fix bug in plotWithHighlights() introduced in previous version.

13 April 2015: limma 3.23.14

- new function plotMD() for mean-difference plots.  This will take
  over functionality of plotMA() function.

- mdplot() has new arguments 'columns' and 'main'.

- arguments 'pch', 'col' and 'cex' of plotWithHighlights() renamed to
  'hi.pch', 'hi.col' and 'hi.cex'.  Improved help page for
  plotWithHighlights().

- plot() methods removed for EList, MAList and MArrayLM objects.
  Use plotMD() instead.

- genas() now gives an error message when applied to fitted model for
  which the coefficient correlations are gene-specific.

- topTable() now gives an information error message if eBayes() or
  treat() have not already been run on the fitted model object.

- NEWS.Rd updated for imminent Bioconductor 3.1 release.

8 April 2015: limma 3.23.13

- new function fry(), which provides a fast version of mroast()
  when there is little heteroscedasticity between genes.
 
- minor change to mroast() output so that FDR values are never
  smaller than p-values when midp=TRUE.
 
 4 April 2015: limma 3.23.12

- camera(), roast(), mroast() and romer() now give a warning if
  any arguments found in ... are not used.

- In the romer() function, the empirical Bayes shrinkage of the
  residuals, introduced 5 October 2009, has been removed.  The
  results will revert to being somewhat more conservative.

- speed improvement for romer() when the "mean" or "floormean" set
  statistics are used.

- topGO() can now sort gene ontology results by several p-value
  columns at once, using the minimum of the columns.  The default is
  now to sort results using all the p-value columns found in the
  results instead of just by the first column.

- new arguments 'plot' and 'covariate' for goana().  The help files
  goana.Rd and goana.MArrayLM.Rd are consolidated into one file.

13 March 2015: limma 3.23.11

- new argument 'legend' for plotDensities, allowing user to
  reposition the legend.

1 March 2015: limma 3.23.10

- fix a bug in the MAList method for plotDensities that was
  introduced with the use of NextMethod() in version 3.21.16.

24 Feb 2015: limma 3.23.9

- Update citation to the recent limma review article, which is now in
  advance access publication.

16 Jan 2015: limma 3.23.8

- When loading suggested packages within function calls, usages of
  require() have been converted to requireNamespace() wherever
  possible.  Functions from suggested packages are called using ::.

- Acknowledgements edited in User's Guide.

12 Jan 2015: limma 3.23.7

- fix URLs for a number of references in help pages.

- fix bug in plotMDS.default introduced with limma 3.23.5

8 Jan 2015: limma 3.23.6

- Limma review article (Ritchie et al, NAR, 2015) now accepted for
  publication.  Updating references in User's Guide, help
  files and CITATION to refer to this article.

29 Dec 2014: limma 3.23.5

- bug fix to plotMDS when gene.selection="common" and top=nrow(x).

- plotMDS() now traps problems when the distances are all zero or if
  one or more of the dimensions are degenerate.

- CITATION file now refers to Ritchie et al (NAR, 2015).

27 Dec 2014: limma 3.23.4

- new 'col' argument for voomWithQualityWeights() so that barplot of 
  sample weights can be colour-coded by the user.

13 Dec 2014: limma 3.23.3

- improvements to lowess C code.

- the argument names for predFCm() changed slightly.  Old argument
  'VarRel' replaced by logical argument 'var.indep.of.fc'.  Old
  argument 'prop' replaced by 'all.de'.  New argument
  'prop.true.null.method' passes through method to propTrueNull.

25 Nov 2014: limma 3.23.2

- plotMDS() now stores 'axislabel', depending on the method used to
  compute distances, and using this for axis labels.

- vennDiagram now fills circles with specified colors.

- voomWithQualityWeights() now stores the sample weights in the
  sample.weights component output EList objects.  The values stored
  in $weights are unchanged, they are still the combined 
  observation and sample weights.

- plotMA method for EListRaw objects.

- nec() and neqc() now remove the Eb component if it exists in an
  EListRaw object.

20 Oct 2014: limma 3.23.1

- romer() is now an S3 generic function.

14 Oct 2014: limma 3.23.0 (Bioconductor 3.1 Developmental Branch)
14 Oct 2014: limma 3.22.0 (Bioconductor 3.0 Release Branch)

10 Oct 2014: limma 3.21.21

- arrayWeights() has a new argument var.design, allowing the array
  weights to be a function of covariates.  When plot=TRUE, the
  graphics parameters are now reset to original values on exit.

- new function voomWithQualityWeights(), combining capabilities of
  voom() and arrayWeights().

10 Oct 2014: limma 3.21.20

- barcodeplot() is now able to plot different weights for different
  genes, as specified by the new argument 'gene.weights'.

- new function plotExons() to plot log-fold-changes by exon for a
  given gene.

- plotSplice() now plots strand information if this can be found.

- first argument of plotMA() and plotMA3by2() is now 'object' instead
  of 'MA'.

- mdplot() now accepts arguments 'xlab' and 'ylab'.

- all default methods for S3 generic functions are now registered in
  NAMESPACE.

22 Sep 2014: limma 3.21.19

- Section on "How to get help" in User's Guide now refers to
  Bioconductor support site.

19 Sep 2014: limma 3.21.18

- new argument 'robust' for diffSplice(), giving access to robust
  empirical Bayes variance moderation.

19 Sep 2014: limma 3.21.17

- getEAWP() will now find a weights matrix in an ExpressionSet object
  if it exists.

- The contrast argument to roast() and mroast() can now optionally be
  a character string giving a column name of the design matrix.

18 Sep 2014: limma 3.21.16

- new function plotWithHighlights(), which is now used as the
  low-level function for plotMA() and for the plot methods for
  limma data objects.

- Updates to the two RNA-seq case studies in the User's Guide.

- plotDensities S3 methods now use NextMethod().

 8 Sep 2014: limma 3.21.15

- speed improvement for goana().

- improved plotting for voomaByGroup().

26 Aug 2014: limma 3.21.14

- Improvements to goana() and topGO() help files.  Argument 'weights'
  renamed to 'prior.prob'.

- Bug fix for read.maimages: default value for 'quote' was not being
  set correctly for source="agilent.mean" or source="agilent.median".

18 Aug 2014: limma 3.21.13

- Speed improvement for the calculation of Simes adjusted p-values by
  diffSplice().

- argument 'level' for diffSplice() renamed to 'test', with possible
  values "simes", "F" or "t".

 8 Aug 2014: limma 3.21.12

- The definition of the M and A axes for an MA-plot of single channel
  data is changed slightly.  Previously the A-axis was the average of
  all arrays in the dataset -- this has been definition since MA-plots
  were introduced for single channel data in April 2003.  Now an
  artificial array is formed by averaging all arrays other than the
  one to be plotted.  Then a mean-difference plot is formed from the
  specified array and the artificial array.  This change ensures the 
  specified and artificial arrays are computed from independent data,
  and ensures the MA-plot will reduce to a correct mean-difference
  plot when there are just two arrays in the dataset.

 7 Aug 2014: limma 3.21.11

- diffSplice() now includes Simes adjusted p-values

- topSplice() has a new level="hybrid" argument for ranking genes by
  Simes adjusted p-values.

- goana() is now an S3 generic function.

- goana() can now optionally adjust for gene length or abundance
  bias.

27 June 2014: limma 3.21.10

- remove col argument from plotMDS(), as it handled by ... as are
  other graphics arguments.

- vennDiagram() now supports circles of different colors for any
  number of circles.  Previously this was supported only up to three
  sets.  

23 June 2014: limma 3.21.9

- new function goana() for gene ontology analysis of DE results from
  a linear model fit.

- symbols2indices() renamed to ids2indices().

- update to helpMethods().

- keyword entries revised for many Rd files.

- bug fix to topTableF() and topTable() ordering of Amean values when
  ranking is by F-statistic and a lfc or p.value filter has been set.

18 June 2014: limma 3.21.8

- improvements to roast() and mroast().  The directional (up and
  down) tests done by roast() now use both the original rotations
  and their opposite signs, effectively doubling the number of
  effective rotations.  The two-sided tests are now done explicitly
  by rotation instead of doubling the smallest one-sided p-value.
  The two-sided p-value is now called "UpOrDown" in the roast()
  output.

16 June 2014: limma 3.21.7

- bug fix to read.ilmn() when sep=",".

- biocViews keywords updated.

 3 June 2014: limma 3.21.6

- roast() and mroast() have a new argument 'approx.zscore'.  By
  default they now use approx=TRUE when calling zscoreT().

- zscoreT() can now optionally use a fast approximation instead of
  the slower exact calculation.

- plotMDS() can now optionally plot samples using symbols instead of
  text labels.

- many Rd files have been reformated to avoid over long lines in the
  pdf manual.

 1 June 2014: limma 3.21.5

- Further change to removeBatchEffect(), which now calls lmFit() to
  estimate the batch effect.  This means that removeBatchEffect() can
  now take into account weights and other arguments that will affect
  the linear model fit.  This also corrects a problem, introduced by
  the previous change, when the batch effect was confounded with the
  design matrix.

20 May 2014: limma 3.21.4

- Change to removeBatchEffect() when there is a non-trivial design
  matrix.  Previously batch adjustments were made only within the
  treatment levels defined by the design matrix.  The behavior of
  removeBatchEffect() is now more consistent that of linear modelling
  with lmFit() with batches as additive effects.

19 May 2014: limma 3.21.3

- Remove unnecessary call to eBayes() from topTable when ranking by
  F-statistic for a subset of the coefficients.

13 May 2014: limma 3.21.2

- Subsetting columns of a MArrayLM object should not subset the
  design matrix.  Now fixed.

12 April 2014: limma 3.21.1

- Update to Pasilla case study in User's Guide.

12 April 2014: limma 3.21.0 (Bioconductor 2.15 Developmental Branch)
12 April 2014: limma 3.20.0 (Bioconductor 2.14 Release Branch)

 7 April 2014: limma 3.19.30

- Update to Pasilla case study in User's Guide.

30 March 2014: limma 3.19.29

- duplicateCorrelation() now traps errors arising from mixedModel2()
  or La.svd().  Rows that produce errors are assigned an NA
  correlation which does not contribute to the consensus value.

21 March 2014: limma 3.19.28

- updating NEWS.Rd ready for Bioconductor 2.14 release.

21 March 2014: limma 3.19.27

- new function read.idat() to read files from Illumina expression
  beadarrays in IDAT format.

- new plot() methods for RGList, MAList, EList and MArrayLM class
  objects.  In each case, produces similar result to plotMA().

- the array argument of plotMA.MArrayLM has been renamed to coef, and
  the default is changed from 1 to ncol(MA).

21 March 2014: limma 3.19.26

- Updates to help pages.  The topic page 10Other.Rd is deleted.
  The topic pages GeneSetTesting.Rd and RNAseq.Rd renamed to
  10GeneSetTests.Rd and 11RNAseq.Rd and their content is expanded.
  The example for weightedLowess.Rd is revised to take less time.

20 March 2014: limma 3.19.25

- improvements to plotSplice(), which now highlights signficant exons
  and plots exon position annotation.

- New Pasilla case study added to User's Guide, demonstrating
  differential splicing analysis of RNA-seq data.

- New topic help pages for Gene Set Testing and RNA-seq analysis.
  The topic pages are now linked from the package introduction page
  accessible by ?limma.

15 March 2014: limma 3.19.24

- new functions diffSplice(), topSplice() and plotSplice() to detect
  differentially spliced genes from exon-level expression data.

5 March 2014: limma 3.19.23

- biocViews updated in DESCRIPTION file.

28 February 2014: limma 3.19.22

- topTreat() now includes ... argument which is passed to topTable().

- camera(), roast() and mroast() restored as S3 generic functions
  with a default method only.

27 February 2014: limma 3.19.21

- camera(), roast() and mroast() now use getEAWP() to interpret the 
  data object.  This means that they now work on any class of data
  object that lmFit() will.  They are no longer generic functions.

- topTable() with confint=TRUE now produces confidence intervals
  based on the t-distribution instead of on the normal distribution.
  It also now accepts a numeric value for the confint argument to 
  specify a confidence level other the default of 0.95.

21 February 2014: limma 3.19.20

- Bug fix: fitFDistRobustly() was failing when there were missing
  values or zero df values and covariate was NULL.

18 February 2014: limma 3.19.19

- new function tricubeMovingAverage() for smoothing a time series.

- The enrichment worms shown by barcodeplot() now use
  tricubeMovingAverage().  This makes the worms much smoother than
  previously.

- plotMA3by2() now accepts single channel data objects as well as
  two color.

- Bug fix: the mroast methods for EList and MAList objects were
  ignoring the midp, p.adjust and sorting arguments.

11 February 2014: limma 3.19.18

- The new subsetting code of 13 Dec 2013 introduced a bug whereby
  MArrayLM objects couldn't be subsetted by column name.  Now fixed.

 5 February 2014: limma 3.19.17

- The change to read.ilmn() in 3.19.16 caused an error when the
  Illumina probe IDs were not all unique.  The probe IDs are now used
  as row.names for the annotation data.frame only when they are
  unique.

31 January 2014: limma 3.19.16

- treat() now has new arguments robust and winsor.tail.p which are
  passed through to robust empirical Bayes estimation.

- barcodeplot() has a new option to add enrichment worms to the plot.

- vennDiagram() wasn't passing extra arguments (...) to plot() when
  the number of sets was greater than 3.  Now fixed.

- read.ilmn() now sets the same probe IDs as rownames for both the 
  expression matrix E and the annotation data.frame genes.

- beadCountWeights() can now work with either probe-wise standard
  errors or probe-wise standard deviations.

- new function weightedLoess() which fits a lowess curve with
  prior weights.  Unlike previous implementations of lowess or loess,
  the weights are used in calculating which neighbouring points to
  include in each local regression as well as in the local
  regression itself.

- weightedLoess() now becomes the default method used by loessFit()
  to fit the loess curve when there are weights.  The previous locfit
  and loess() methods are offered as options.

14 Jan 2014: limma 3.19.15

- romer() now uses propTrueNull(method="lfdr") instead of convest().
  This makes romer() substantially faster when the number of genes
  is large.

11 Jan 2014: limma 3.19.14

- update citation of Law et al (2014) reference for voom().

- roast() and mroast() now permit array weights and observation
  weights to both be specified.

- bug fix to mroast() which was not accepting array.weights.

17 Dec 2013: limma 3.19.13

- make sure that F is recomputed when the columns of an MArrayLM
  are subsetted.

12 Dec 2013: limma 3.19.12

- linear model fit functions lm.series(), mrlm.series() and
  gls.series() no longer drop the dimensions of the components of
  the fitted object when there is just coefficient or just one gene.
  Previously this was done inconsistently in some cases but not
  others.  Now the matrix components always keep dimensions.

11 Dec 2013: limma 3.19.11

- New function subsetListOfArrays(), which is used to simplify the
  subsetting code for RGList, MAList, EList, EListRaw and MArrayLM
  objects.

 7 Dec 2013: limma 3.19.10

- Bug fix to topTreat().  Rownames were incorrectly ordered when p<1.

- topTable() will now work on an MArrayLM fit object that is missing
  the lods component, for example as produced by treat().

 6 Dec 2013: limma 3.19.9

- Fix to tmixture.vector() to allow it work even with just one gene.
  This allows the eBayes() to work on fit objects with just one row.

 3 Dec 2013: limma 3.19.8

- lmFit() now works even when there is only one gene (one row of
  data).

 2 Dec 2013: limma 3.19.7

- bug fix to genas(), which was not handling vector df.prior
  correctly when the fit object was generated using robust=TRUE.

- genas() now uses fit$df.total from the MArrayLM object.  This 
  prevents df.total from exceeding the total pooled residual df
  for the dataset.  The genas() results will change slightly for
  datasets for which df.prior was very lage.

- bug fix to squeezeVar().  Previously there was an error when
  robust=TRUE and trend=FALSE and some of the estimated df.prior
  were infinite.

- The ctrlpath argument of read.ilmn() now defaults to the same as
  path for regular probes.  This means that only one path setting
  is required if the regular and control probe profiles are in the
  same directory.

- avereps() was never intended to be applied to RGList or EListRaw
  objects.  It now gives an error when applied to these objects
  instead of returning a matrix of questionable value.

18 Nov 2013: limma 3.19.6

- plotDensities() is now an S3 generic function with methods for
  RGList, MAList, EListRaw and EList objects.

13 Nov 2013: limma 3.19.5

- NAMESPACE now exports plotFB methods.

- bug fix to x-axis label for some plotMA methods.

13 Nov 2013: limma 3.19.4

- plotFB now an S3 generic function with methods for RGList and EList
  data objects.

10 Nov 2013: limma 3.19.3

- edits to help pages for read.ilmn, neqc, beadCountWeights, voom and
  vooma.

 4 Nov 2013: limma 3.19.2

- bug fix to topTable() and topTableF() when sorting by F-statistic
  combined with p-value or lfc cutoffs.

23 Oct 2013: limma 3.19.1

- Update cross reference to affy package in
  normalizeBetweenArrays.Rd.

- Revise auROC.Rd help page.  Remove cross reference to ROC package.

- Vignette limma.Rnw renamed to intro.Rnw and moved to vignette
  directory.

- NEWS.Rd updated to reflect changes in Bioconductor 2.13 Release.

15 Oct 2013: limma 3.19.0 (Bioconductor 2.14 Developmental Branch)
15 Oct 2013: limma 3.18.0 (Bioconductor 2.13 Release Branch)

11 Oct 2013: limma 3.17.28

- Add comment to RNA-seq case study in User's Guide about conflict
  with plotMA() function in BiocGenerics.

11 Oct 2013: limma 3.17.27

- plotMA() is now an S3 generic function.

2 Oct 2013: limma 3.17.26

- Improved error message from loessFit() when locfit package is
  needed but not available.

29 Sept 2013: limma 3.17.25

- loessFit() now uses the locfit.raw in the locfit package when
  weights are provided instead of loess in the stats package.  The
  function now runs very efficiently even on very long data vectors.
  The output results will change slightly when weights are provided.

- Roles of contributors now specified in author field of DESCRIPTION
  file using standard codes.

- Bug fix to subsetting for MArrayLM objects: the df.total component
  was not being subsetted.

- Removing defunct Berkeley Press links to published Smyth (2004)
  article in several Rd files.  Replacing with link to Preprint.

- Adding link to Phipson (2013) thesis in two Rd files.

- Minor cleaning up of normexp.c source code.  Remove unused variable
  and keep constant representing infinity within floating point 
  range.

19 Sept 2013: limma 3.17.24

- roast() now calls mroast() if the index vector is a list.

- Bug fix to mroast(), which had been ignoring the weights.

1 Sept 2013: limma 3.17.23

- New function contrastAsCoef(), which reforms a design matrix so
  that one or more specified contrasts become coefficients.  This
  function is called by roast().

22 August 2013: limma 3.17.22

- Add Majewski et al reference to genas.Rd.

- Add Phipson et al and Sartor et al references to squeezeVar.Rd.

- Add Phipson et al reference to eBayes.Rd.

3 August 2013: limma 3.17.21

- fix typo in User's Guide.

29 July 2013: limma 3.17.20

- duplicateCorrelation() now uses the weights matrix when block is
  set.  Previously the weights were ignored when block was used.

26 July 2013: limma 3.17.19

- genas() now returns NA results and a message when no genes satisfy
  the criterion for inclusion in the analysis.

26 July 2013: limma 3.17.18

- argument chooseMethod for genas() renamed to subset.  Option "n"
  renamed to "all".  Some editing of help page and streamlining of
  code for genas().

21 July 2013: limma 3.17.17

- edits to normalizeBetweenArrays help page (i) to further clarify
  which normalization methods are available for single-channel data
  and which are available for two-color data and (ii) to give a cross
  citation to the neqc() function for Illumina BeadChips.

26 June 2013: limma 3.17.16

- bug fix to eBayes(robust=TRUE) when some of the df.prior values are
  infinite.

 5 June 2013: limma 3.17.15

- new function beadCountWeights() to estimate quantitative weights
  from the bead counts for each probe for Illumina BeadArrays.

- voom() now outputs lib.size as a column of targets instead of as a
  separate component.

- cbind for EList and EListRaw objects now recognizes a design matrix
  if it is present.

- plotMDS() now checks explicitly that there are at least 3 samples
  to plot.

27 May 2013: limma 3.17.14

- normexp.fit.detection.p() now tolerates some non-monotonicity in
  the detection p-pvalues as a function of expression.

27 May 2013: limma 3.17.13

- Update lmscFit and voom references.

- Update voomaByGroup documentation.

12 May 2013: limma 3.17.12

- New references added for separate channel analysis and voom.

 9 May 2013: limma 3.17.11

- New merge methods for EList and EListRaw objects.

 5 May 2013: limma 3.17.10
 
- read.ilmn() no longer adds the probe IDs to the gene annotation
  data.frame, leaving them instead as rownames of the expression
  matrix.  It longer creates a targets file since the sample names
  are already preserved as column names of the expression matrix.

- Update mammmary stem cell case study in User's Guide.  As well
  as reflecting changes to read.ilmn() and topTable(), this now
  demonstrates how to find signature genes for particular cell type.

 1 May 2013: limma 3.17.9

- Bug fix to ebayes(), which was not passing the 'robust' argument
  correctly on to squeezeVar().

- Update of mammary stem cell case study in User's Guide.

25 April 2013: limma 3.17.8

- Bug fix to fitFDistRobustly(), which affected the estimated scale
  when df2 is estimated to be Inf.

23 April 2013: limma 3.17.7

- Update Estrogen case study in User's Guide to reflect change in
  rownames of topTable output.

- Update Nigerian RNA-seq case study in User's Guide, adding new
  MA-plot.

- The legend argument to plotMA() can now take a character value
  giving the position to place the legend.  

22 April 2013: limma 3.17.6

- Further fixes to toptable(), topTableF() and topTreat() to
  implement the changes begun in 3.17.5.

- documentation about rownames and column names and the use of
  rownames(fit) and colnames(fit) added to lmFit.Rd.

20 April 2013: limma 3.17.5

- Reverting most of change to getEAWP() in version 3.17.3.  getEAWP()
  now simply preserves the rownames found in object, specifically
  those found in the expression matrix.  Null rownames are left null,
  unless the probe annotation data.frame has row.names, in which case
  these are used.

- toptable(), topTable() and topTreat() now preserve the rownames of
  the fit object, unless the fit object has duplicated names, in
  which case the rownames are copied to the ID column.  Empty
  rownames are replaced with 1:nrow(fit).

15 April 2013: limma 3.17.4

- toptable() and topTable() now preserve rownames of fit object in
  the rownames of the toptable.

15 April 2013: limma 3.17.3

- getEAWP() now forces the output exprs matrix to have unique row
  names.

- fitFDistRobustly() now uses a smoother for the smallest df.prior
  values.  This may result in smaller tail values than before when
  a group of input x values appear to be outliers but the largest
  value is not individually a stand-out value.

10 April 2013: limma 3.17.2

- improvements to help pages for data classes.

 7 April 2013: limma 3.17.1

- topTable() and treat() now give more informative error messages
  when the argument fit is not a valid MArrayLM object.

 4 April 2013: limma 3.17.0 (Bioconductor 2.13 Developmental Branch)
 4 April 2013: limma 3.16.0 (Bioconductor 2.12 Release Branch)

31 March 2013: limma 3.15.21
 
- minor change to fitFDistRobustly(), to ensure that df.prior for the
  largest statistic is not greater than the non-robust df.prior.

- edit acknowledgements in User's Guide.

30 March 2013: limma 3.15.20

- final edits to NEWS.Rd and other help pages before BioC 2.12 release.

29 March 2013: limma 3.15.19

- revise Nigerian RNA-seq case study in User's Guide.

- bug fix to lmscFit() when the residual df = 1.

- update NEWS.Rd for Bioc release 2.12.

- add Phipson (2013) reference to genas.Rd and predFCm.Rd.

- add Law (2013) reference to voom.Rd and vooma.Rd.

16 March 2013: limma 3.15.18

- normalizeWithinArrays() with method="robustspline" now longer
  requires the layout argument to be set.

16 March 2013: limma 3.15.17

- bug fix to vennDiagram(), which was not restoring the graphics
  par() settings correctly on exit.

16 March 2013: limma 3.15.16

- bug fix to read.maimages().  Previously was not setting default
  annotation columns for source="agilent.mean".

10 March 2013: limma 3.15.15

- new function voomaByGroup(), similar to vooma() but with separate
  mean-variance curves for different groups.

- vennDiagram() can now plot up to five sets (previously limited to
  three).

- mroast() now outputs number of genes in each set.

- new option method="mean" for propTrueNULL().

- bug fix for fitFDistRobustly with trend=FALSE and robust=TRUE.

4 Feb 2013: limma 3.15.14

- To make the interfaces more consistent, all functions that perform
  gene sets now use the argument 'index' to specify which genes 
  are included in the test set.  Previously this argument was called
  'iset' for roast() and romer() and 'indices' for camera().

- When sorting results, mroast() now tries to break ties more
  sensibly rather than keeping original order.

- section on time course experiments with many time points added to
  User's Guide.

24 Jan 2013: limma 3.15.13

- documentation added for fitGammaIntercept().

- bug fix to readTargets() to avoid warning message when
  targets$Label is used to set row names but targets$Label
  contains duplicated entries.

16 Jan 2013: limma 3.15.12

- bug fix to read.maimages(), which was not accepting
  source="agilent.mean".

8 Jan 2013: limma 3.15.11

- New function predFCm() to compute predictive (shrunk) log
  fold changes.

- updating help pages for genas().

8 Jan 2013: limma 3.15.10

- mroast() now an S3 generic function, with methods for EList and
  MAList objects.

- mroast() has a new argument 'weights' for observational weights,
  to bring it into line with roast().

4 Jan 2013: limma 3.15.9

- mroast() now produces a data.frame instead of a list of matrices.
  It also has a new argument 'sort' to indicate whether and how the
  output results should be sorted by p-value.

- roast.Rd now cross-links to the camera help page instead of to
  geneSetTest.

4 Jan 2013: limma 3.15.8

- camera() now produces a data.frame instead of a matrix, and with
  different columns than previously.  Instead of separate up and down
  p-value columns there is now a column indicating direction of
  change.  A new column gives the FDR adjusted p-value.

- camera() has a new argument 'sort' to indicate whether output
  results should be sorted by p-value.

4 Jan 2013: limma 3.15.7

- camera() is now an S3 generic function, with methods for EList and
  MAList objects.

- Order of arguments changed for camera().  First argument is now y.

4 Jan 2013: limma 3.15.6

- roast() is now an S3 generic function, with methods for EList and
  MAList objects.

- Order of arguments changed for roast() and mroast().  First
  argument is now y.

29 Nov 2012: limma 3.15.5

- New robust method for estimating the empirical Bayes prior, called
  by specifying robust=TRUE in the call to eBayes().  When this is
  TRUE the output df.prior is now a vector instead of a scalar.
  
- New function fitFDistRobustly() estimates the parameters of a
  scaled F-distribution robustly using Winsorized values.  Outlier
  observations receive smaller values for df.prior than non-outliers.
  This permits robust methods for squeezeVar(), ebayes() and eBayes(),
  all of which now have a new argument wins.tail.p to specify the
  tail proportions for Winsorizing.

- fitFDist() now permits infinite values for covariate.  It also
  gracefully handles cases where the covariate takes only a small
  number of distinct values.  Similarly for eBayes() and squeezeVar()
  that call fitFDist().  

- new function vooma() for computing precision weights based on a
  mean-variance trend.  This is similar to voom() but for microarray
  data instead of RNA-Seq.

- genas() now has the ability to automatically select which probes
  are used for the correlation analysis.  A new argument controls the
  method used for this selection.

- genas() now optionally draws a plot in which ellipses are used to
  represent the technical and biological components of correlation.

- new function fitGammaIntercept() for estimating the intercept of
  a gamma glm with an offset.  (No .Rd file at present.)

- new function zscoreHyper() for computing z-score equivalents of
  deviates from a hypergeometric distribution.

- The layout argument for normalizeRobustSpline() now defaults to a
  single print-tip group.

- Additional motivating comments added to normalizeRobustSpline.Rd.

13 Oct 2012: limma 3.15.4

- new function qqf() for qq-plots relative to an F-distribution.

- minor help page improvements for squeezeVar(), fitFDist() and
  trigammaInverse().

13 Oct 2012: limma 3.15.3

- Rewrite details section of read.maimages.Rd for extra clarity and
  to fix a typo concerning the meaning of source="agilent".

- Bug fix for contrasts.fit() when the covariance matrix of the 
  coefficients (cov.coefficients) is not found in the fitted model
  object.  This situation doesn't arise using any of the standard
  limma analysis pipelines.

 8 Oct 2012: limma 3.15.2

- Due to changes in R-devel, loessFit() no longer makes direct calls
  to foreign language code in the stats package, and instead calls R
  functions.  This makes loessFit() about 25-30% slower when weights
  are used.

 4 Oct 2012: limma 3.15.1

- fitFDist() now coerces degrees of freedom df1 below 1e-15 to zero.

 2 Oct 2012: limma 3.15.0 (Bioconductor 2.12 Developmental Branch)
 2 Oct 2012: limma 3.14.0 (Bioconductor 2.11 Release Branch)

 1 Oct 2012: limma 3.13.25

- Two bug fixes for roast() when there are observational weights.

27 Sep 2012: limma 3.13.24

- roast() now accepts observation level weights, through a new
  argument 'weights'.

27 Sep 2012: limma 3.13.23

- Update NEWS.Rd ready for Bioconductor 2.11 release.

26 Sep 2012: limma 3.13.22

- fitFDist() now permits missing values for x or zero values for df1
  with a non-null covariate.  This means that squeezeVar() and
  eBayes() now work with trends even when not all the data values
  are informative.

- Additions to test files to test the above changes, and to test
  eBayes() with trend=TRUE more generally.

25 Sep 2012: limma 3.13.21

- Minor edits to CITATION file and to User's Guide introduction.

9 Sep 2012: limma 3.13.20

- New argument 'file' for convest(), implementing edits contributed
  by Marcus Davy.  Arguments doplot and dereport renamed to 'plot'
  and 'report'.

6 Sep 2012: limma 3.13.19

- loessFit() calls to foreign language code in the stats package are
  restored.  Will be removed for R 2.16.X.

6 Sep 2012: limma 3.13.18

- loessFit() now applies minimum and maximum bounds to avoid zero or
  infinite weights.  Equal weights are now treated as NULL, even all
  zero weights, so that lowess is called instead of loess.

- plotMDS() now coerces labels to be character.

17 Aug 2012: limma 3.13.17

- limma license upgraded to GPL (>=2) instead of LGPL to match R itself.

- loessFit() no longer makes direct calls to foreign language
  code in the stats package.  Same values are returned as before,
  but now take 25-30% longer whenever weights are used.

31 July 2012: limma 3.13.16

- updating links to Apoa1, Weaver and Bob1 case study datasets in
  User's Guide.

30 July 2012: limma 3.13.15

- new function propTrueNull() for fast estimation of the proportion
  of true null hypotheses from a vector of p-values.

24 July 2012: limma 3.13.14

- plotMDS() now tries to make room on the plot for wider text labels.

22 July 2012: limma 3.13.13

- Update to User's Guide.  The chapter on experimental designs has
  been split into three on single-channel, common reference and
  two-color respectively.  The material on the fixed effect approach
  to technical replication has been deleted.

18 July 2012: limma 3.13.12

- new section on nested interactions for factorial designs in User's
  Guide.

18 July 2012: limma 3.13.11

- new section on multi-level designs in User's Guide.

16 July 2012: limma 3.13.10

- updated help page for geneSetTest().  In view of recent results
  from Wu and Smyth (NAR, 2012), the claim is no longer made
  that genes might be treated as independent when the experimental
  units are genetically identical mice.

8 July 2012: limma 3.13.9

- plotMDS() no longer gives an error when the requested number of top
  genes is greater than the total number of rows of data.

2 July 2012: limma 3.13.8

- fix to voom() so that it computes weights correctly even when the
  design matrix is not of full rank.

13 June 2012: limma 3.13.7

- new function zscore(). Includes old functions zscoreGamma()
  and zscoreT() as special cases.

10 June 2012: limma 3.13.6

- User's guide now has sections on reading single channel Agilent
  and Illumina data.

25 May 2012: limma 3.13.5

- camera() reference is published.

10 May 2012: limma 3.13.4

- bug fix for roast() when the fitted model has only one coefficient.

- minor code simplification in loessFit().

2 May 2012: limma 3.13.3

- help pages for camera() now cite published paper.

23 April 2012: limma 3.13.2

- any(duplicated()) replaced by anyDuplicated().

22 April 2012: limma 3.13.1

- code speed-up for alias2SymbolTable()

30 Mar 2012: limma 3.13.0 (Bioconductor 2.11 Developmental Branch)
30 Mar 2012: limma 3.12.0 (Bioconductor 2.10 Release Branch)

29 March 2012: limma 3.11.19

- typo fixed in topTable.Rd.

24 March 2012: limma 3.11.18

- new argument 'allow.neg.cor' for camera().

- camera() now recognizes array weights as special case of weights.

9 March 2012: limma 3.11.17

- 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".

4 March 2012: limma 3.11.16

- Agilent single-channel case study added to User's Guide.

26 Feb 2012: limma 3.11.15

- camera() now supports weights.

- The 'statistics' argument to camera() has been removed.  The
  default choice of moderated-t is now used always.

24 Feb 2012: limma 3.11.14

- camera() and mcamera() consolidated into one function.

- rankSumTestWithCorrelation() now ignores correlation setting
  when the first group contains only one observation.

- implicit documentation dependencies on the sma and marray
  packages removed.

11 Feb 2012: limma 3.11.13

- removeBatchEffect() now corrects for continuous covariates
  as well as qualitative factors.

- new functions camera() and mcamera() that perform competitive
  gene set tests while adjusting for inter-gene correlation.

- new function interGeneCorrelation() that estimates the average
  intergene correlation for a set of genes.

- columns in output from roast() have been re-ordered.

- arguments 'selected' and 'selected2' renamed to 'index'
  and 'index2' in functions barcodeplot(), geneSetTest()
  and wilcoxGST().

- default labels for barcodeplot() are now somewhat more
  explicit.

- getEAWP() now coerces the expression values to a matrix if not
  already.  This means that it do longer fails when given an
  EList object with component E a data.frame.

- rankSumTestwithCorrelation() renamed to rankSumTestWithCorrelation().

10 Feb 2012: limma 3.11.12

- RNA-Seq case study in the User's Guide updated to reflect
  changes to the tweeDEseqCountData package.

2 Feb 2012: limma 3.11.11

- default method for normalizeCyclicLoess() changed from "pairs"
  to "fast".
  
- rankSumTestwithCorrelation() now uses a more exact variance
  calculation.  Argument vif is removed.

23 Jan 2012: limma 3.11.10

- new function rankSumTestwithCorrelation, which 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.

22 Jan 2012: limma 3.11.9

- minor edit to topTable.Rd.

19 Jan 2012: limma 3.11.8

- 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.

11 Jan 2012: limma 3.11.7

- 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.

5 Jan 2012: limma 3.11.6

- new methods "fast" and "affy" for normalizeCyclicLoess().  New
  argument 'cyclic.method' for normalizeBetweenArrays() gives
  access to the different cyclic loess methods.

4 Jan 2012: limma 3.11.5

- improved documentation for object returned by mroast().

- mroast() now uses mid-p-values by default when adjusting for
  multiple testing.

1 Jan 2012: limma 3.11.4

- minor documentation correction for plotMA.Rd (default for cex
  is 0.3 rather than 0.2).

- minor edit to error message from neqc() when no control probe
  information can be found.

19 Dec 2011: limma 3.11.3

- neqc(), nec() and normexp.fit.control() now give user-friendly
  error messages when no negative control probes or no regular
  probes are found.

25 Nov 2011: limma 3.11.2

- voom() now works on ExpressionSet objects.

11 Nov 2011: limma 3.11.1

- User's Guide RNA-Seq case study updated to use tweeDEseqCountData
  package instead of RNAseqCountData.

1 Nov 2011: limma 3.11.0 (Bioconductor 2.10 Developmental Branch)
1 Nov 2011: limma 3.10.0 (Bioconductor 2.9 Release Branch)

14 Oct 2011: limma 3.9.22

- Nigerian RNA-Seq case study expanded to include gene set tests
  for chromosomes.

30 Sep 2011: limma 3.9.21

- Introduction to User's Guide now mentions RNA-Seq.

26 Sep 2011: limma 3.9.20

- voom() now gives special treatment to DGEList objects.

25 Sep 2011: limma 3.9.19

- RNA-Seq case study added to User's Guide.
- minor change to counts-per-million computation in voom().
- edits to voom.Rd.

21 Sep 2011: limma 3.9.18

- minor change to voom() code.  Will now tend to give zero counts
  lower weight than previously.

17 Sep 2011: limma 3.9.17

- new function voom(), to compute expression values and weights
  from RNA-Seq data suitable for limma linear modelling.
- getEAWP() now gets probe annotation from the expression rownames
  of an EList object, if no other probe annotation is available.

5 Sep 2011: limma 3.9.16

- topRomer() now ranks gene sets by secondary columns as well the
  primary criterion specified, to give a more meaningful ranking when
  the primary p-value is tied.

3 Sep 2011: limma 3.9.15

- change to p-value calculation in geneSetTest() when
  rank.only=FALSE.
- wilcoxGST() now accepts signed or unsigned test statistics.

18 Aug 2011: limma 3.9.14

- plotMA() now recognizes ElistRaw and EList objects appropriately.
- speed improvement for normalizeCyclicLoess when weights=NULL.

12 Aug 2011: limma 3.9.13

- default span for normalizeCyclicLoess increased from 0.4 to 0.7.

5 Aug 2011: limma 3.9.12

- 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.

4 July 2011: limma 3.9.11

- new argument trend.var for mroast(), with the same meaning as for
  roast().

4 July 2011: limma 3.9.10

- Weaver case study (Section 11.5) in User's Guide is updated and
  rewritten.

1 July 2011: limma 3.9.9

- new argument trend.var for roast().  roast() also now accepts
  a vector value for argument var.prior.

1 July 2011: limma 3.9.8

- new argument batch2 for removeBatchEffect().

25 June 2011: limma 3.9.7

- barcodeplot() and barcodeplot2() merged into one function.

24 June 2011: limma 3.9.6

- bug fixes for barcodeplot() and barcodeplot2().  They were not
  processing character values for arguments select and select2
  correctly.  Now fixed.

- Data classes ElistRaw and Elist now described in the quick start
  section of the User's Guide.  Other minor updates to User's Guide.

21 May 2011: limma 3.9.5

- 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.

20 May 2011: limma 3.9.4

- bug fix to avereps() for EList objects x when x$other is not empty.

19 May 2011: limma 3.9.3

- treat() now has an optional trend argument, same as eBayes().

6 May 2011: limma 3.9.2

- plotMDS() now invisibly returns the distance.matrix and the x and y
  plotting coordinates.
  
- plotMDS() now accepts xlab and ylab arguments.

15 April 2011: limma 3.9.1

- Updating package version numbers in introduction of User's Guide.

- test file output updated to R 2.13.0 (not user visible).

14 April 2011: limma 3.9.0 (Bioconductor 2.9 Developmental Branch)
14 April 2011: limma 3.8.0 (Bioconductor 2.8 Release Branch)

31 March 2011: limma 3.7.27

- nec.Rd and neqc.Rd combined into one file.

21 March 2011: limma 3.7.26

- change to symbols2indices() so that it returns indices of
  all occurrences of each symbol on the array, not just the
  first occurrence.  The argument names of symbols2indices()
  have been changed to be more easily understood.  A new
  argument remove.empty has been added to optionally remove
  gene sets of length zero.  Previously this was always done.

14 March 2011: limma 3.7.25

- minor bug fix to romer(). Change probably not user-visible.

24 February 2011: limma 3.7.24

- bug fix to squeezeVar(): the output var.posterior was too
  long when there was a non-null covariate and the prior
  variance was estimated to be infinite.  Now fixed.

17 February 2011: limma 3.7.23

- gene symbol annotation (using getSYMBOL) added to 
  the Estrogen case study in the User's Guide.

30 January 2011: limma 3.7.22

- topTable() and toptable() now optionally output confidence
  intervals for the log-fold-change.

28 January 2011: limma 3.7.21

- bug fix to plotMDS() when gene.selection="common".

26 January 2011: limma 3.7.20

- normalizeWithinArrays() no longer checks for printer
  layout information before doing "control" normalization.

24 January 2011: limma 3.7.19

- new function normalizeMedianValues().  This is now used by
  normalizeBetweenArrays() for method="scale" when the data
  object is a matrix or EListRaw object.

24 January 2011: limma 3.7.18

- new method "cyclicloess" for normalizeBetweenArrays().

12 January 2011: limma 3.7.17

- minor changes to Illumina case study in the user guide.

7 January 2011: limma 3.7.17

- minor documentation edits.

5 January 2011: limma 3.7.16

- read.columns() and read.ilmn() now allow column names with
  leading or trailing blanks, although leading or trailing
  white space will be trimmed.

17 December 2010: limma 3.7.14

- fix to gls.series() so that it works correctly even when there
  is only one column of microarray data.

1 December 2010: limma 3.7.13

- bug fixes to avereps.default and avearrays.default, which had
  been treating NA expression values as if zero.  Averages are
  now computed correctly over non-missing values.

30 November 2010: limma 3.7.12

- remove line from NAMESPACE requiring methods on loading.

27 November 2010: limma 3.7.11

- bug fix to mroast(), which had been assigning prior.df
  incorrectly for the second and subsequent gene sets.

3 November 2010: limma 3.7.10

- the total df used by ebayes to compute p-values (and therefore
  also by eBayes, topTable and so on) is now not allowed to be
  larger than the total residual df pooled over all probes.
  This limit will normally become active only when the prior df
  is estimated as Inf.  Previously the total df was also allowed
  to be Inf in this case, so that p-values were computed as if
  the t-statistics followed a standard normal distibution.  This
  change will not affect microarray analyses with thousands of
  genes, but can come into play with simulated data or with
  data sets with only a few genes or probes.  In these cases,
  the ebayes p-values now agree with those from a pooled analysis
  in which the genewise variances are assumed equal.

- df.total is now included as a component of the MArrayLM object
  output by ebayes() and eBayes().

- ebayes() and eBayes() now include an option to allow the prior
  variance to be intensity-dependent.  Associated with this is a
  new optional argument 'covariate' to functions fitFDist() and
  squeezeVar().

28 October 2010: limma 3.7.9

- update to installation instructions in User's Guide, no longer
  recommending dependencies=TRUE with biocLite.

27 October 2010: limma 3.7.8

- plotSA() now adds the prior variance estimated by eBayes()
  (if available) to the sigma vs A plot.

27 October 2010: limma 3.7.7

- neqc() function now supports normexp by control background
  correction using negative control values inferred from
  detection p-values.  This is mainly applicable to Illumina
  BeadChip.

- The default value of "other.columns" argument in read.ilmn()
  function is changed to "Detection". 

26 October 2010: limma 3.7.6

- .read.oneilmnfile() and read.ilmn() are now careful to return
  the genes annotation as a data.frame, not a character vector,
  even when it only has one column.

26 October 2010: limma 3.7.5

- rbind.EList and rbind.EListRaw now behave correctly when one
  or more of the matrix components are simply undimensioned
  vectors.

26 October 2010: limma 3.7.4

- bug fix to rbind.EListRaw and rbind.EList.  This bug also
  affected neqc() which calls rbind on EListRaw objects.

- updating Introduction to User's Guide to reflect limma's
  new capabilities for pre-processing data from single-channel
  and Illumina platforms.

25 October 2010: limma 3.7.3

- Shi et al (2010) reference now given for neqc function
  in User's Guide.

- use of sma package now commented out of code examples.

25 October 2010: limma 3.7.2

- minor updates to User's Guide.

21 October 2010: limma 3.7.1

- subsetting, cbind and rbind for EListRaw objects did not
  operate correctly on the Eb component of the objects.
  Now fixed.

18 October 2010: limma 3.7.0 (Bioconductor 2.8 Developmental Branch)
18 October 2010: limma 3.6.0 (Bioconductor 2.7 Release Branch)

24 September 2010: limma 3.5.21

- new function avearrays() to average over technical replicate
  arrays.

8 September 2010: limma 3.5.20

- new function normalizeVSN to apply vsn normalization
  to limma objects.  normalizeBetweenArrays() now longer
  supports method="vsn".

- avereps.MAList was not averaging the "other" data matrices
  correctly.  Now fixed.

- updates to the 04.Background help page, which gives an
  overview of background correction functions.

30 August 2010: limma 3.5.19

- The backgroundCorrect() code has been simplified and a
  new function backgroundCorrect.matrix() introduced for
  matrix arguments.  The argument 'method' now defaults to
  "auto" instead of NULL, although the effect is the same.
  None of the changes to backgroundCorrect() are user-
  visible, except that background intensities are now
  used correctly when the argument RG is an EListRaw object.

20 August 2010: limma 3.5.18

- neqc() now subtracts background intensities Rb if found
  in data object.

19 August 2010: limma 3.5.17

- read.maimages() now supports ImaGene Version 9.0.

19 August 2010: limma 3.5.16

- minor non-user-visible changes to decideTests() code.

- minor documentation update to plotMDS.Rd.

4 August 2010: limma 3.5.15

- Pomelo II reference added to User's Guide.

19 July 2010: limma 3.5.14

- minor documentation updates for roast() and romer().

15 July 2010: limma 3.5.13

- marray no longer a suggested package

- read.ilmn() now uses readGenericHeader() to skip over
  header information in BeadStudio files.

- read.ilmn() no longer issues warning if control probe
  files are not provided.

5 July 2010: limma 3.5.12

- citation details updated for the roast() function.

28 June 2010: limma 3.5.11

- bug fix to normexp.fit.control() when the argument 'x'
  is a matrix.

18 June 2010: limma 3.5.10

- minor documentation improvements for roast.Rd and
  geneSetTest.Rd.

3 June 2010: limma 3.5.9

- romer() now longer outputs p-values for the "either"
  alternative hypothesis.  P-values are output for "Up", "Down"
  or "Mixed".

- romer() and romer2() consolidated into one function romer(). There
  is now a new argument 'set.statistic' to choose the set summary
  statistic, and the old argument 'floor' is removed as no longer
  needed.

2 June 2010: limma 3.5.8

- more complete documentation for roast().

27 May 2010: limma 3.5.7

- new function topRomer() to summarize output from
  romer().

19 May 2010: limma 3.5.6

- code simplifications to mroast(). Not user-visible.

19 May 2010: limma 3.5.5

- new S4 class "Roast" for output from the function roast().

- bug fix to roast().  The the fix affects situations with
  set.statistic="msq" and gene weights of changing sign.

11 May 2010: limma 3.5.4

- new function mroast(), which organizes roast() tests
  for multiple gene sets.

- Cosmetic changes to row and column names in the output
  from roast().

7 May 2010: limma 3.5.3

- Add new argument 'set.statistic' for roast() to specify which gene
  set summary statistic should be used. The new default is "mean" and
  the original setting is now called "msq".

- the output from roast() no longer includes a column for the
  "either" alternative hypothesis.

7 May 2010: limma 3.5.2

- edits to romer.Rd, in particular a link to the curated
  database of gene sets.

- bug fix to estimation of proportion of active genes in roast()
  when there are gene weights.

23 April 2010: limma 3.5.1

- Update reference for propexpr().

23 April 2010: limma 3.5.0 (Bioconductor 2.7 Developmental Branch)
23 April 2010: limma 3.4.0 (Bioconductor 2.6 Release Branch)

22 April 2010: limma 3.3.22

- new function normalizeCyclicLoess().

19 April 2010: limma 3.3.21

- Change to robust method for normexp.fit.control().
  Robustness now uses the huber() function from the MASS
  package, and robustness is judged on the log-scale.

19 April 2010: limma 3.3.20

- bug fix to sigma calculation in normexp.fit.control().
- Add "quote" argument to read.ilmn().

16 April 2010: limma 3.3.19

- new argument robust for normexp.fit.control() and neqc().
  This gives the option of robust estimation of the background
  mean and standard deviation.
- Faster computation of background mean and standard deviation
  in normexp.fit.control().

9 April 2010: limma 3.3.18

- bug fix to the probe filtering in illumina case study in the 
  user guide. Also update the analysis results for this case study.

7 April 2010: limma 3.3.17

- read.maimages() now has a new argument green.only which
  replaces the older argument channels.  read.maimages()
  now outputs an EListRaw object whenever single channel
  data is read, and an RGList object when two color data
  is read.

2 April 2010: limma 3.3.16

- avedups() and avereps() now have methods for EList objects.

- The function makeContrasts() requires coefficient names
  (levels) to be syntactically valid variable names in R.
  The intercept column name "(Intercept)", which is often
  produced by the model.matrix() function, is now automatically
  converted.  A more detailed diagnostic message is also output
  in the case of non-valid names.

28 March 2010: limma 3.3.15

- speed improvement to avereps(), achieved by calling the base
  package's rowsum() function, following a suggestion of
  Michael Lawrence.

17 March 2010: limma 3.3.14

- bug fix: topTreat() now allows genelist to be a vector
  or a data.frame.  Previously failed when a vector was input.

16 March 2010: limma 3.3.13

- bug fix to p.value computation in treat(). This affects
  only p-values greater than 0.5.

12 March 2010: limma 3.3.12

- default value for offset in neqc() function reduced
  from 50 to 16.

- The raw data for the "IlluminaWG-6 Case Study: Mammary
  Progenitor Cell Populations" in the User's Guide is now
  available online, with URL given in User's Guide.

- output from vennDiagram() improved to draw complete 
  unbroken circles.

2 March 2010: limma 3.3.11

- bug fix: the output from treat() now includes a component
  df.prior.

10 February 2010: limma 3.3.10

- read.maimages() now provides the option of reading Agilent
  Feature Extraction data with using median foreground
  summaries.

3 February 2010: limma 3.3.9

- spelling error corrections to documentation files.

1 February 2010: limma 3.3.8

- minor documentation fix to alias2Symbol() example.

17 January 2010: limma 3.3.7

- sma package (which no longer exists) removed from
  normalizeBetweenArrays.Rd example.

13 January 2010: limma 3.3.6

- MArrayLM objects now re-calculate F-statistics if they
  are subsetted by columns.  This ensures that the F-statistics
  always match the contrast columns in the object.

21 Dec 2009: limma 3.3.5

- bug fix to row numbers from toptable() and topTable() when
  the arguments p or lfc are specified.

- documentation fixes for alias2SymbolTable()

- truth argument of auROC() can now be logical

15 Dec 2009: limma 3.3.4

- minor bug fix in treat() code.

11 Dec 2009: limma 3.3.3

- as.dataframe methods for MAList, EList and EListRaw objects.

6 Dec 2009: limma 3.3.2

- new argument gene.selection for plotMDS()

28 October 2009: limma 3.3.1

- bug fix to backgroundCorrect() so ensure that normexp.method
  is always correctly passed to normexp.fit.  Previously the
  normexp.method argument was being ignored, in favour of the
  default, when RG was an RGList object.

28 October 2009: limma 3.3.0 (Bioconductor 2.6 Developmental Branch)
28 October 2009: limma 3.2.0 (Bioconductor 2.5 Release Branch)

22 October 2009: limma 3.0.3

- Case study with Illumina BeadChip microarrays added to
  User's Guide.

22 October 2009: limma 3.0.2

- strsplit2() now uses ... to pass arguments to strsplit.

- minor updates to User's Guide.

- propexpr() now accepts EListRaw objects, or any other
  data object with an as.matrix method.

- read.ilmn() now accepts more variations in the name
  of the ProbeID column.

15 October 2009: limma 3.0.1

- documentation links to 00Index.html removed.

- minor corrections to help page for vennDiagram().

5 October 2009: limma 3.0.0

- New function genas() which tests for associations between
  contrasts in a linear model.

- New options and improved power for the romer() function.  Empirical
  Bayes shrinkage of the residuals is now used to improve statistical
  power.  There are also two new options for the set summary
  statistic.  The original mean50 statistic is now provided in a new
  function romer2().  The new romer() function now uses an ordinary
  mean set statistics by default, and a floor-mean set statistic as
  an option.  Both romer() and romer2() give better statistical power
  than than the previous version.  The new romer() is also
  computationally quicker.

- new functions read.ilmn() and read.ilmn.targets() for reading in
  Illumina Whole Genome Expression BeadChip data.

- new functions normexp.fit.control() and neqc() which perform
  normexp background correction using negative control information.
  This is especially useful for Illumina BeadChip data.  neqc()
  undertakes background correction and quantile normalization in
  one step for EListRaw data objects with negative control probes.

- new function propexpr() for estimating the proportion of
  expressed probes in a microarray, using negative control probe
  information.  Especially useful for Illumina BeadChip data.

- new function barcodeplot2() for displaying directional gene sets
  with up and down genes shown separately.

- removed sma from list of suggested packages

- update normalizeBetweenArrays help page for changes to vsnMatrix
  used in method="vsn" option.

- new function alias2SymbolTable() for converting a set of alias 
  names to a vector of official gene symbols of the same length.

- new function wilcoxGST() introduced as a synonym for
  geneSetTest() with ranks.only=TRUE.

- backgroundCorrect() and normalizeWithinArrays() now accept
  EListRaw objects.

- Oshlack et al (2007) reference on normalization of boutique
  arrays added to normalizeWithinArrays.Rd and to the
  User's Guide.

31 Aug 2009: limma 2.19.4

- bug fix to removeBatchEffect(), which gave incorrect
  results when design=NULL.

19 Aug 2009: limma 2.19.3

- speed improvements to avereps() (following suggestions
  from Axel Klenk)

15 June 2009: limma 2.19.2

- new function topTreat() for listing top results by treat().
- treat() now outputs thresholded t-statistics.
- reference added to intraspotCorrelation.Rd.
- romer() now outputs the number of genes in each gene set.
- arrayWeights() now displays convergence info when TRACE=TRUE
  for method="genebygene" (for every 1000th gene).

28 May 2009: limma 2.19.1

- Barnard (1963) reference added to roast.Rd.
- rewording of details in romer.Rd.
- two fixes to contrasts.fit() when there are non-estimable
  coefficients in the linear model.  The function previously
  gave a warning about coercing double to logical, which no
  longer appears.  The function also failed in this situation
  when the contrast was a single vector instead of a matrix.
- convergence criterion for arrayWeightsSimple() is now more
  lenient for large data sets.  About 5 decimal place accuracy
  is still achieved.
- arrayWeightsSimple() now checks for failed convergence
  from floating point errors and returns a diagnostic message.
- getEAWP() and lmFit() now return Amean values for EList
  objects.
- calculation of rotation p-values in roast() and romer()
  changed to be (x+1)/(nrot+1) instead of x/nrot, where x is
  the number of random rotations giving a more extreme statistic
  than that observed.

21 April 2009: limma 2.19.0 (Bioconductor 2.5 Devel Branch)
21 April 2009: limma 2.18.0 (Bioconductor 2.4 Release Branch)

18 April 2009: limma 2.17.21

- basic (matrix-like) methods added for ElistRaw objects,
  including cbind, rbind, subsetting etc.

14 April 2009: limma 2.17.20

- bug fix to printHead() to handle object components which
  are neither atomic nor recursive.

13 April 2009: limma 2.17.19

- ebayes() now returns lods as a matrix.  This ensures that
  MArrayLM objects always be subsetted by column names, even
  when there is only one column.
- new argument channels for read.maimages(), which allows the
  function to read one-channel data.
- new class EListRaw for non-normalized one-channel data.
- printHead() now prints compactly for recursive lists of
  arbitrary depth.

03 April 2009: limma 2.17.18

- Bug fixes to the calculations of up, mixed and down p-values 
  in romer().

02 April 2009: limma 2.17.17

- Bug fixes to the calculations of p-values in romer()

30 March 2009: limma 2.17.16

- Bug fix to the calculations of either and down p-values in
  romer().
- Utility function .meanTop() removed and replaced with
  .meanHalf(), which gives means of top and bottom halves of a
  vector.

27 March 2009: limma 2.17.15

- further work on plotMDS() to make arguments and help
  page clearer.

27 March 2009: limma 2.17.14

- New function romer() for rotation gene set enrichment analysis.
  This can be viewed as a version of GSEA for linear models.
- New function symbols2indices() which matches a list of
  gene sets as symbols against of vector of gene symbols.

23 March 2009: limma 2.17.13

- New class EList for one-channel microarray data.
- New function plotMDS(), which makes a multidimensional
  scaling plot, using a particular distance measure.

20 March 2009: limma 2.17.12

- Bug fix to rowname assignment for MAList and RGList objects
  containing matrices in 'other' component
- lmFit() warning message on NA coefficients is now more
  refined.  It now appears only when the coef vector is
  partially NA for some probes.
- Fix to gls.series() so that it does not fail when the
  weight matrix contains NA values.

20 March 2009: limma 2.17.11

- biocViews entry of Statistics changed to Bioinformatics

5 February 2009: limma 2.17.10

- update to backgroundCorrect help page to reflect published
  papers.
- update to treat help page to reflect published paper.
- lmFit now looks for a design matrix in an MAList data object,
  if one exists.

19 Jan 2009: limma 2.17.9

- fix to a toptable() bug, which caused t-statistics to be out of
  order when p<1 or lfc>0.
- color of the trend line drawn by plotSA() changed to red.

15 Jan 2009: limma 2.17.8

- C code dynamic library is not unloaded when package
  is unloaded.  (Not user visible.)
- Some additions to alias2Symbol help page.

15 Jan 2009: limma 2.17.7

- new argument expand.symbols for alias2Symbol().  This can
  be used to prevent aliases from being expanded if they are
  already official symbols.

14 Jan 2009: limma 2.17.6

- new function plotSA(), which produces a "sigma vs A" plot for
  a fitted microarray linear model.

13 Jan 2009: limma 2.17.5

- paragraph added to details section of roast() help file
  to explain simulation method used to estimate p-values.

4 Jan 2009: limma 2.17.4

- C code dynamic library is loaded when package is loaded
  rather than when it is attached, to enable other packages
  to import limma.  (Not user visible.)
- minor edits to geneSetTest and roast help files.

10 Nov 2008: limma 2.17.3

- fix to a toptable() bug which caused an error when user
  selected p<1 and lfc>0

23 October 2008: limma 2.17.2

- minor improvements to the help page for topTable and topTableF.
- bug fixes to the way that topTable() and topTableF() handle
  sort="none".

22 October 2008: limma 2.17.1

- minor updates to User's Guide to refer to R 2.8.0

22 October 2008: limma 2.17.0 (Bioconductor 2.4 Developmental Branch)
22 October 2008: limma 2.16.0 (Bioconductor 2.3 Release Branch)

21 October 2008: limma 2.15.18

- refinements to barcodeplot() to make the graphic a bit prettier.

20 October 2008: limma 2.15.17

- new function barcodeplot(), which gives a graphical
  representation of geneSetTest() using ranks.

15 October 2008: limma 2.15.16

- getLayout() with guessdups=TRUE can now handle values
  for ndups greater than 2.
- new function getDupSpacing() which determines duplicate
  spacing from a vector of gene IDs.
- getSpacing() now recognizes a new value "subarrays" which
  means that all the probes on an array are repeated in two
  or more subarrays.
- bug fix to removeBatchEffect(), which previously returned
  an error.

9 October 2008: limma 2.15.15

- the criterion for the "Active" column output by roast()
  is changed to be more discriminating.
- new method "mallowscp" for selectModel().

1 October 2008: limma 2.15.14

- minor improvements to several help files
- correction to the "bic" method of selectModel().

28 Sept 2008: limma 2.15.13

- more efficient memory management in normexp.c (not user-visible)
- argument bg removed from internal functions .normexp.m2loglik,
  .normexp.gm2loglik and .normexp.hm2loglik (not user-visible)

25 Sept 2008: limma 2.15.12

- substantial tidying up of normexp.fit() code, although very little
  of this will be visible to users.  The old pure-R normexp.fit() is
  removed and replaced by the function previously called
  normexp.fit.C().  The old method "neldermead" is now replaced by
  "saddle".  The old methods "bfgs", "nlminb" and "nlminblog" now
  replaced by "mle".
- all user-visible functions previously called by normexp.fit()
  are now removed including: dnormexp(), dnormexp.saddle(),
  normexp.m2loglik() and normexp.m2loglik.saddle().  There are
  now just 4 utility functions, none of which are exported from the
  limma NAMESPACE, namely .normexp.m2loglik, .normexp.gm2loglik,
  .normexp.hm2loglik and .bg.parameters.rma75.
- More comments added to C code supporting normexp.fit().  The
  source code file is renamed from find_saddle_theta2.c to
  normexp.c.
- backgroundCorrect() has a new argument normexp.method to
  specify the parametrization estimation method when for normexp
  background correction.  The options are "mle", "saddle",
  "rma" and "rma75".
- in read.maimages(), support added for ArrayVision data files
  with 'Artifact-removed' (ARM) density values.
- new function selectModel() which implements Akaike Information
  Criterion (AIC) or Bayesian Information Criterion model (BIC)
  selection between alternative linear models.
- new function alias2Symbol() to convert gene aliases to
  official symbols.  Uses the data packages org.Hs.eg.db etc.
- new arguments sort.by and p.value for topTableF().  This makes
  it more consistent with topTable().
- topTableF() now allows the input argument number to be larger
  than the number of rows of the fitted model object.  In this
  case the requested number is set to the number of available
  rows.
- non user-visible improvements to toptable() code.

21 August 2008: limma 2.15.11

- new option "none" for the sort argument of topTable().
- new function roast() which does rotation gene set testing for
  linear models.
- new function treat() which computes empirical Bayes moderated-t
  p-values relative to a minimum required fold change threshold.
- new function removeBatchEffects() which removes batch effects
  from microarray data.
- tableF() now gives a friendlier error message when the fitted
  model object doesn't contain F-statistics.

11 July 2008: limma 2.15.10

- Better treatment of array weights in linear modelling.
  lm.series() and gls.series() now treat array weights as a
  special case, when there are no missing values in the expression
  data and now probe-specific weights.  This means that the array
  weights are now incorporated into fit$cov.coefficients, meaning
  that contrasts.fit() will correctly take array weights into
  account when computing the contrast standard errors, which it
  did not do previously.  It also means that lmFit() is much faster
  when array weighting is used.
- Speed improvement to gls.series() when there are no missing
  values and no probe-specific weights.

16 June 2008: limma 2.15.9

- new capabilities and arguments for write.fit().  The argument
  method allows p-values to be adjusted globally instead of
  separately, and the argument F.adjust allows the F-statistic
  P-values to be adjusted.

11 June 2008: limma 2.15.8

- further bug fixes to getEAWP() when object is of PLMset class:
  weights and Amean components were not being set.

4 June 2008: limma 2.15.7

- new S3 generic function avereps() for averaging over irregularly
  spaced replicate spots.  A method is defined for MAList objects
  and a default method intended for matrices.

1 June 2008: limma 2.15.6

- gls.series() now preserves rownames (probe IDs) of the expression
  object.  This affects lmFit() when ndups>1 or block is non NULL.
  This makes gls.series() consistent with other fitting functions
  lm.series() and mrlm().

22 May 2008: limma 2.15.5

- fix bug introduced to plotMA() in version 2.13.6: plotMA()
  ignored array argument when object was of class RGList.
  Correct function now restored.

20 May 2008: limma 2.15.4

- Cleaning up of source code in find_saddle_theta2.c and
  corresponding calls in background-normexp-mle.R.  No user
  visible changes.  The C code now passes R CMD check without
  warnings, and superfluous utility functions are removed from
  background-normexp-mle.R

12 May 2008: limma 2.15.3

- The optimisation step of normexp.fit is now done in C, making
  a new function normexp.fit.C, speeding up the computation several
  fold.  normexp.fit.C() has two new methods available "nlminb"
  and "nlminblog" which compute maximum likelihood estimates.
  backgroundCorrect(method="normexp") now calls normexp.fit.C()
  with method="saddle".

8 May 2008: limma 2.15.2

- the following obsolete functions (deprecated Dec 2006 in favour
  of read.maimages) are now removed: m.spot, a.spot, read.matrix,
  read.series, rg.series.spot, rg.genepix, rg.quantarray, rg.spot

8 May 2008: limma 2.15.1

- fix bug introduced to plotMA() in version 2.13.6: plotMA()
  was not working for MArrayLM objects.  Function now restored.
- getEAWP() now gets probe names correctly from the rownames of
  exprs when object is of PLMset class.
- edits to read.columns help page to explain that some arguments
  cannot be passed to read.table through ... because they are
  already used by read.columns.

30 April 2008: limma 2.15.0 (Bioconductor 2.3 Branch)
25 April 2008: limma 2.13.10

- getEAWP() now gets probe names correctly from the rownames of 
  object when object is a matrix.

24 April 2008: limma 2.13.9

- normalizeBetweenArrays(method="vsn") now gives an error
  if object is an MAList.
- normalizeBetweenArrays(method="vsn") now uses vsnMatrix()
  when the data object is a matrix.

16 April 2008: limma 2.13.8

- bug fix to normalizeBetweenArrays(method="vsn").  When the
  function was updated on 14 December 2007 to use vsnMatrix,
  it had not been noticed that vsnMatrix returns log2 results
  whereas the older vsn function returned loge results.  The
  results returned by normalizeBetweenArrays(method="vsn") are
  again now log2, similar to before 14 December 2007.
- method option "neldermean" for normexp.fit() corrected
  to "neldermead"
- deprecated function splitName() removed
- the help page for backgroundCorrect edited for improved
  readability

26 March 2008: limma 2.13.7

- the function rlm.series(), deprecated in 2004, is now removed
- add comments in the geneSetTest help file to warn that the
  test assumes genewise independence. 

8 March 2008: limma 2.13.6

- Streamlining of plotMA() code.  plotMA() should now work correctly
  for any object class that can be coerced to a matrix, for example
  LumiBatch objects.
- lmFit() now warns if coefficients become inestimable due to
  missing values.
- Bug fix when matrix data object passed to lmFit() containing
  missing values.  The check for log-intensities vs log-ratios
  introduced 27 Oct 2007 did not remove missing values and
  hence produced an error.
- New function getEAWP() introduced to unify the treatment of
  different classes of microarray data objects as input to linear
  model functions such as lmFit(), arrayWeights() and
  printtipWeights().
- Class exprSet2 removed.

27 February 2008: limma 2.13.5

- All usage of Biobase's exprSet class removed or replaced with
  ExpressionSet.
- Fortran call in .vsimpleLoess() function updated.

13 February 2008: limma 2.13.4

- all uses of I() in data.frame() arguments removed and replaced
  with stringsAsFactors=FALSE.  This ensures that the appropriate
  columns in data.frames will have class "character" instead of
  "AsIs".
- arrayWeights() now gives nice error message if the number of
  arrays is too few to give statistically useful results.

2 January 2008: limma 2.13.3

- Section on Mutiple Testing Across Contrasts added to the 
  User's Guide.
- The bibTeX entry returned by citation("limma") now uses
  @incollection style instead of @inbook, thanks to Joern Toedling.

14 December 2007: limma 2.13.2

- update normalizeBetweenArrays(method="vsn") to reflect
  changes in the vsn package version 3.4.1.
- additions to the help file for MArrayLM-class objects

27 October 2007: limma 2.13.1

- lmFit() now tries to guess whether a data matrix contains log-ratios
  or log-intensities.
  When the input data object is a matrix, it is not possible to know
  for certain whether the data are log-ratios or log-intensities, and
  so lmFit() did not set the component Amean in the MArrayLM output
  object.  lmFit() now sets Amean if the input data values are all
  positive, because the data are almost certainly log-ratios in that
  case.

8 October 2007:

Bioconductor Developmental Version 2.2: limma 2.13.0
Bioconductor Release 2.1: limma 2.12.0

25 Sep 2007: limma 2.11.14

- plot character and size can now be passed to volcanoplot()
  as arguments
- add backgroundCorrect(method="normexp") to automatic test
  suite (not user visible)

19 Sep 2007: limma 2.11.13

- bug fix for as.matrix.vsn.  This allows vsn objects from vsn2() to
  be used directly in lmFit.

8 Sep 2007: limma 2.11.12

- edits to loessfit.Rd to better acknowledge lowess and loess authors.

31 Aug 2007: limma 2.11.11

- correction to loessFit() because lowess() function now in stats
  instead of base.
- other documentation fixes to pass package check in R 2.6.0
- Ritchie et al (2007) reference added to User's Guide and to the
  backgroundCorrect and normexp help pages.

17 Aug 2007: limma 2.11.10

- topTable() and toptable() have new arguments p.value and lfc, allowing
  users to cut the gene list on adjusted p.value and fold change, rather
  than just taking a set number of genes as before.

22 July 2007: limma 2.11.9

- improvements to the numeric computations of dnormexp.saddle(), which
  is used by backgroundCorrect(method="normexp")
- new function normexp.m2loglik.saddle(), which is the same as
  normexp.m2loglik() but using the saddle-point approximation.
- normexp.fit() has a new argument 'methods'
- default for n.pts in normexp.fit() changed to NULL, meaning use all
  the points.  The rule used to choose the quantiles if n.pts is
  improved to give more nearly unbiased parameter estimators.

9 July 2007: limma 2.11.8

- contrasts.fit() now warns if row names of contrast matrix don't
  match column names of contrasts.
- plotMA3by2 has a new argument 'device' to specify the graphic format.

24 June 2007: limma 2.11.7

- decideTests(method="hierarchical") now passes the adjust.method down
  to the second (t-test) level of testing.  Previously the second level
  testing was always "holm".  The spelling is also corrected from
  "heirarchical" to "hierarchical".

8 June 2007: limma 2.11.6

- new argument n.pts for normexp.fit.  n.pts=2^10 becomes the default
  for method="normexp" in backgroundCorrect().  This decreases
  computation time and introduces some robustness.
- backgroundCorrect() now accepts a matrix argument.

30 May 2007: limma 2.10.5 and 2.11.5

- as.matrix method for vsn objects added.

18 May 2007: limma 2.10.4 and 2.11.4

- as.matrix methods for ExpressionSet and LumiBatch added to the
  limma NAMESPACE.

17 May 2007: limma 2.10.3 and 2.11.3

- added as.matrix method for LumiBatch class
- corrected as.matrix method for ExpressionSet class to allow that
  the assayData slot may be a list instead of an environment.

16 May 2007: limma 2.11.2

- fixed some non-matching braces '}' in .Rd files. (Not user-visible.)

1 May 2007: limma 2.11.1

- Bug fix to read.columns() to stop spurious warning message
  when text.to.search has length greater than one.

26 April 2007:

Bioconductor Developmental Version 2.1: limma 2.11.0
Bioconductor Release 2.0: limma 2.10.0

24 Apr 2007: limma 2.9.19

- Minor documentation bug fix: 'F.stat' to 'F' in MArrayLM.Rd

18 Apr 2007: limma 2.9.18

- User's Guide case studies updated for current version of limma.
  A couple of changes to Weaver case study: multiple testing method
  is now "global" instead of "nestedF", and heat diagram is removed. 

4 Apr 2007: limma 2.9.17

- bug fix to read.maimages() for source="arrayvision". Now reads
  arrayvision files again for the first time since version 2.3.1.

27 Mar 2007: limma 2.9.16

- new tests for topTable() added to limma-Tests.R
- bug fix to topTable(). sort="M" and resort.by="M" needed to be
  updated to sort="logFC" and resort.by="logFC". Also sort="AveExpr"
  and resort.by="AveExpr" are now allowed.

26 Mar 2007: limma 2.9.15

- bug fix to read.columns, to read SPOT files with a leading column
  of row numbers. Was failing because the number of headers was
  less than the number of columns.

10 Mar 2007: limma 2.9.14

- lmFit() was giving error with marrayNorm object, because of
  incorrect setting of Amean. Fixed.

24 Feb 2007: limma 2.9.13

- write.fit() was using write ambiguous column names for the coef,
  t-statistic and p-value when the MArrayLM object had only one
  column and these components were matrices with one named column.
  Now fixed.
- default changed in write.fit() to digits=3.

22 Feb 2007: limma 2.9.12

- lm.series() gls.series() were returning errors when the design
  matrix was not of full rank and the columns were names.  Bug fixed.

17 Feb 2007: limma 2.9.11

- changes in 2.9.10 broke read.maimages() for Agilent and generic
  source files.  Bug fixed.

12 Feb 2007: limma 2.9.10

- functions getColClasses() and namesInFun() removed and replacad
  with the new function read.columns().  read.columns() is a more
  generally useful function which is similar to read.delim() but
  reads specified columns only.
- Argument \dots added to all as.matrix methods for compatibility
  with R 2.5.0.

2 Feb 2007: limma 2.9.9

- normalizeRobustSpline() now works with only one print-tip group
- new function mergeScansRG()

5 Jan 2007: limma 2.9.8

- User's Guide sections on spot quality weights and quality assessment
  expanded.
- unnecessary backlashs removed from gsub() calls in protectMetachar()
- normalizeForPrintorder(plot=TRUE) now produces no output to agree with
  the documentation.

1 Jan 2007: limma 2.9.7

- old functions designed to read image data files into data.frames
  are now deprecated. This affects functions: read.matrix, rg.series.spot,
  read.series, m.spot, a.spot, rg.spot, rg.quantarray, rg.genepix.
- wtVariables() renamed to namesInFun()
- new argument other.columns for read.imagene()

19 Dec 2006: limma 2.9.6

- new function as.matrix.ExpressionSet
- section on array quality weights added to User's Guide

17 Nov 2006: limma 2.9.5

- correction of several minor typos.

5 November 2006: limma 2.9.4

- function .onAttach() replaces the old .First.lib()

27 October 2006: limma 2.9.3

- Changes to column headings from topTable: M is now logFC,
  A is now AveExpr
- lmFit() now supports ExpressionSet objects
- volcanoplot() now allows NULL value for 'names' argument
- new function strsplit2() replaces splitName().
- splitName() deprecated.

16 October 2006: limma 2.9.2

- NAMESPACE introduced to package. Funtion matvec() and vecmat() renamed
  to .matvec and .vecmat and are not exported. All objects with names
  not starting with "." are exported.

 4 October 2006: limma 2.9.1
 4 October 2006: limma 2.8.1

- read.maimages() with source="quantarray" now sets annotation columns.
- bug fix to read.maimages() with source="quantarray". Searching for
  "Begin Data" in 2nd and following files read too few lines.
- fix to unprotected "%" character in decideTests.Rd.

 4 October 2006: limma 2.9.0 (Bioconductor Developmental version)
 4 October 2006: limma 2.8.0 (Bioconductor Release 1.9)

21 September 2006: limma 2.7.17

- new arguments for vennDiagram() to allow colors and printing of
  multiple tests of counts on the same diagram.
- warning about lmscFit being "experimental" removed from lmscFit.Rd

14 September 2006: limma 2.7.16

- improvements to lm.series, gls.series and rlm.series to better preserve
  column names.
- topTable() with coef=NULL now ranks genes by F-statistic for all the
  contrasts.

11 September 2006: limma 2.7.15

- topTable() now accepts vector argument coef.  If length(coef)>1,
  topTableF() is called to produce a ranking by F-statistic.
- new arguments col and lwd for plotlines()

2 September 2006: limma 2.7.14

- normalizeWithinArrays() now uses asMatrixWeights() to process weights
  arguments.  This allows to the weights to be a vector of probe weights,
  or a vector of array weights, or a matrix of spot weights.
- weights argument of modifyWeights() now has a default value

2 September 2006: limma 2.7.13

- new argument lfc for decideTests() to require a minimum fold-change

30 August 2006: limma 2.7.12

- subsetting for MArrayLM revised so that contrast matrix is subsetted
  rather than design matrix.
- revision to writefit.Rd to clarify that p-value adjustment is by
  columns
- bug fix to plotlines()

30 August 2006: limma 2.7.11

- new argument ... added to write.fit()
- new function exprs.MA() to extract log-expression matrix from MAList
- array2channel() previously deprecated now removed
- new function plotlines()

27 August 2006: limma 2.7.10

- new argument 'coefficients' for contrasts.fit(). This provides a
  simple way to specify the contrast matrix when the contrasts are just
  a subset of the original coefficients.
- new function topTableF() to rank genes on the basis of F-statistics
- normalizeWithinArrays() was incorrect with method="composite"
  and weights=NULL, now fixed.
- makeContrasts() now gives informative error message if
  parameter names are not syntactically valid.
- edit eBayes.Rd to make meaning of F-statistic clearer

6 August 2006: limma 2.7.9

- new argument 'contrasts' for makeContrasts() which will accept a
  character vector of contrasts.
- the matrix produced by makeContrasts() now has named dimensions.

3 August 2006: limma 2.7.8

- CARMAweb reference added to User's Guide
- In read.maimages(), flush=TRUE added to all instances of read.table().
  This makes read.maimages() tolerant of spurious columns added to the
  end of data lines.

30 July 2006: limma 2.7.7

- wtflags() has new argument cutoff.  Argument w renamed to weight.
- new section Fitted Model Objects in User's Guide
- table of image analysis programs added to Section 4.4 of User's Guide
- read.imagene() now uses mean background instead of median if the auto
  segmentation method has been set.

27 July 2006: limma 2.7.6

- readImaGeneHeader() updated to allow for extraneous trailing white space
  in the lines of the data files.
- In geneSetTest() values "two.sided", "less" or "greater" are now
  permitted as synonyms for "either", "down" or "up".
- geneSetTest() now longer issues warning with type="t" and
  all positive values for statistic.
- new function as.matrix.PLMset. This allows lmFit() to work correctly on PLMset objects.
- Bob case study updated in Limma User's Guide.

22 June 2006: limma 2.7.5

- bug fix to read.maimages: remove mention of readBlueFuseHeader(),
  which is no longer a function.
- editing of RGList.Rd and MAList.Rd to improve clarity
- improvement to normalizeQuantiles() to reduce memory requirements

1 June 2006: limma 2.7.4

- decideTests() now preserves probe row names
- as.data.frame.MArrayLM now has ... argument conditionally in
  R 2.4.0 higher to fit in with change in R base.

29 May 2006: limma 2.7.3

- minor bug fix to kooperberg()
- fix to read.maimages(). Using readGenericHeader() to get column
  names was not working when sep or quote were different from
  defaults.  Now gone back to using scan() to read column names.
- new function plotFG() for foreground-background plots.

5 May 2006: limma 2.6.2 and 2.7.2

- fix to plotMA3by2() which was not passing on the setting of
  the zero.weights arguments to plotMA().

3 May 2006: limma 2.6.1 and 2.7.1

- bug fix to read.imagene(), which was trying to read too many
  data rows when there were multiple ImaGene fields.
  read.imagene() now attempts to sent printer layout for
  ImaGene files created using GAL layout files.

27 April 2006: limma 2.7.0 Bioconductor developmental version
27 April 2006: limma 2.6.0 Bioconductor release 1.8

20 April 2006: limma 2.4.15

- correction in User's Guide: definition of interaction in
  Weaver case study was incorrect.

13 April 2006: limma 2.4.14

- improved topTable.Rd to better explain differences between
  toptable() and topTable().
- read.maimages() was setting RG$ngrid.c incorrectly when source
  ="genepix" and the meta-grid layout could not be determined.
  Now fixed.

7 April 2006: limma 2.4.13

- changes to the argument list and defaults for geneSetTest()
  to make it more intuitive.
- in fitFDist(), the bounding of standard deviations away from
  zero now uses a smaller bound.
- new generic function avedups(), with methods for default
  and MAList object.
- read.maimages() now uses readGenericHeader() to get skip and
  column names for generic source files.
- readGenericHeader() now uses protectMetachar() so that special
  characters can be used in column headings.

5 April 2006: limma 2.4.12

- Non-user-visible change to the way that dimnames<-.RGList and
  dimnames<-.MAList are assigned, so as to pass RCMD check in R2.3.
- new function plotFB()
- read.maimages() no longer tries to guess ndups for GenePix data
  (was found to be unreliable for small boutique arrays).

10 March 2006: limma 2.4.11

- read.maimages() now reads BlueFuse v3.2 image analysis output files
  correctly. The old function readBlueFuseHeader() is removed and
  replaced by readGenericHeader().

3 March 2006: limma 2.4.10

- limma now passes R CMD check in R 2.3.0dev
- usage of La.chol() in replaced by chol() in lm.R
- bug fix to topTable: separate raw and adjusted p-values (introduced 2.4.8)
  was failing when some p-values were missing.
- bug fix: in read.maimages(source="imagene") was confusing
  a data.frame of file names with a targets file
- editing and expansion of normalizeWithinArrays.Rd
- support for ScanArray Express added to read.maimages()

22 January 2006: limma 2.4.9

- New example using the sma mouse.data for arrayWeights()
- All the linear model functions now use asMatrixWeights(), so that
  they will accept vectors of probe or array weights in place of the
  full matrix of weights.
- new function asMatrixWeights() which will convert vectors of probe
  weights or array weights to a full matrix of weights.
- new argument 'maxratio' for arrayWeightsSimple().  This causes the
  iteration to stop when the ratio of largest to smallest weights
  becomes large.  The default tol also changed for arrayWeightsSimple().

20 January 2006: limma 2.4.8

- Use of parent=NULL in new.env() removed from makeContrasts(), because
  this use is deprecated in R 2.3.0.
- topTable now includes separate columns for raw and adjusted p-values
- when an MArrayLM object is subsetted, the targets frame no longer
  subsets and the design matrix subsets only on columns. Previously
  the design matrix was incorrectly using j to subset rows.
- bug fix to as.data.frame.MArrayLM when row subset is of length 1

3 January 2006: limma 2.4.7

- wtVariables() didn't work correctly when the variable names
  contained meta characters, now fixed.

2 January 2006: limma 2.4.5

- All functions normexp.*() now use simpler arguments:
  'x' instead of 'foreground' and 'background' and
  a vector argument 'par' instead of arguments for each parameter.
- normexp.fit() now uses a saddlepoint approximation to the normexp
  density and reverts to the Nelder-Mead optimisation method.
  This gives gives numerically reliable computations.
- new functions dnormexp() and dnormexp.saddle()
- arrayWeights() now returns a vector instead of a matrix
- bug fixes to arrayWeights(), now faster and returns more
  accurate weights
- new function arrayWeightsSimple()
- subsetting of RGList, MAList and MArrayLM objects by rownames
  now works correctly even if not all components have rownames
- S3 methods for dimnames<- now defined for RGList and MAList objects
- readTargets() now checks that Labels are unique before making row.names
- files argument of read.maimages() can now be a data.frame, assumed
  to be the targets frame.

29 November 2005: limma 2.4.4

- bug fix for decideTests() which still didn't work with
  adjust.method="BH"
- new S3 methods fitted() and residuals() for class MArrayLM

22 November 2005: limma 2.4.3

- bug fix: read.maimages(source="genepix.*") was failing when there
  was only one block of spots
- section on Paired Samples added to User's Guide

15 November 2005: limma 2.4.2

- note about bg.correct.rma added to normexpfit.Rd
- Swirl and ApoAi case studies in User's Guide updated for limma 2.4.1

14 November 2005: limma 2.4.1

- examples for lmFit expanded and those for lm.series, gls.series
  and mrlm removed
- instraspotCorrelation() output all.correlations renamed to
  atanh.correlations
- duplicateCorrelation() now returns atanh-correlations, output
  components renamed to atanh.correlations
- read.maimages(source="genepix") now uses X position column to 
  determine printer layout information

11 November 2005: limma 2.4.0

- fitFDist() now treats very small and zero variances in a unified
  way.  The change will change slightly the hyperparameter estimates
  and significance results produced eBayes().
- new option "rma" for method argument of backgroundCorrect()
- minor edits to User's Guide
- read.maimages() now uses check.names=FALSE to preserve annotation
  column names as input

9 November 2005: limma 2.3.7

- bug fix to ensure that makeContrasts() works correctly when level
  names happen to be the same as local variable names
- edited help files for lm.series, gls.series and mrlm to make clarify
  that they are utility functions called by lmFit
- edited lmFit.Rd to make clearer the role of correlation argument
- correlation argument in lmFit() now has no default value
- vennDiagram example now uses decideTests() instead of classifyTestsF()

6 November 2005: limma 2.3.6

- MAList subsetting now supports 'other' component
- cbind and rbind now support 'other' component in RGList and MAList objects
- limma now formally depends on R >= 2.2.0 (because of allowEscapes in read.table)
- editing of help files to clarify difference between decideTests() and classifyTests
- decideTests() failed with method="nestedF",adjust.method="BH", now fixed
- decideTests() now supports adjust.method="BY"

31 October 2005: limma 2.3.5

- kooperberg() now gives informative error message if input not
  RGList.

27 October 2005: limma 2.3.4

- bug fix to merge.RGList and merge.MAList. These used to break there
  were any components to the data objects other than intensity matrices.

25 October 2005: limma 2.3.3

- read.maimages(souce="genepix.custom",verbose=TRUE) outputs background
  correction method again.
- calls to statmod:randomizedBlockFit changed to statmod:mixedModel2Fit
- deprecated function dupcor.series() removed

19 October 2005: limma 2.3.2

- normalizeMedianDeviations and normalizeMedians replaced by
  normalizeMedianAbsValues. New function resistant to floating underflow.
- default method for normalizeBetweenArrays changed to "Aquantile"

15 October 2005: limma 2.3.1

- read.maimages() now uses the colClasses argument to read.table, resulting
  in a several-fold speed improvement.  Changes courtesy of Marcus Davy.
- new path argument and slightly changed output names for plotMA3by2,
  to bring into line with imageplot3by2 changes
- fix to normexp.m2loglik to prevent infinite likelihoods
- fix to normexp.fit to prevent non-positive alpha
- kooperberg_old() deleted

11 October 2005: limma 2.3.0 Bioconductor developmental version
11 October 2005: limma 2.2.0 Bioconductor release 1.7

- kooperberg() now accepts an RGList object instead of requiring each gpr
  file to be read into a separate data.frame.  The old function is renamed
  to kooperberg_old()

6 October: limma 2.0.12

- formatting changes to User's Guide.  Guide converted to LaTeX report style.

2 October: limma 2.0.11

- update citation, installation and help sections of User's Guide

30 September: limma 2.0.10

- "fdr" changed to "BH" throughout as p.adjust() method
- default for topTable adjust.method changed to "BH"
- point size 20 and new path argument added to imageplot3by2
- fix errors in technical replication section of User's Guide
- normalizeWithinArrays now checks whether M or A are vectors

29 September: limma 2.0.9

- biocViews added to DESCRIPTION
- fix to normexp.signal to allow NAs in signal

18 September: limma 2.0.8

- readImaGeneHeader entirely re-written: now supports
  ImaGene 6.0 and multiple sub-array fields
- fixed documentation bug in normalizeWithinArrays.Rd:
  RG.MA produces unlogged intensities
- Koorperberg ref added to User's Guide
- methods package added to Depends field of DESCRIPTION file
- note added to dupcor.Rd about minimum number of arrays needed for
  duplicateCorrelation() to return statistically useful results.

26 August: limma 2.0.7

- new option source="genepix.custom" for read.maimages()
- new method "control" for normalizeWithinArrays()

23 August 2005: limma 2.0.6

- arrayWeights() was returning an error for PLMset objects, now works
  correctly on the chip level coefficients
- eBayes now returns F.p.value component as vector rather than matrix
- changes to write.fit to make it tolerant of not finding expected
  components such as Amean in fit object
- bug fix to as.data.frame.MArrayLM when the fit contains only one contrast
  and there are matrices stored as vectors
- several updates to Weaver case study in User's Guide:
     new url to download data,
     wt.fun error fixed,
     and work-around for R 2.1 bug which affects readSpotTypes()
- new sections on getting help and on citation in User's Guide

8 August 2005: limma 2.0.5

- Dentritic cell direct comparison example in User's Guide now uses modelMatrix()
- arrayWeights() now includes full "reml" option
- modelMatrix() was not giving helpful error message if 'targets' was missing
- normalizeWithinArrays(method="printtiploess") now gives informative
  error if layout is incompatible with data dimension

26 July 2005: limma 2.0.4

- the general form for 'columns' in read.maimages() introduced in limma 2.0.3
  caused an error with agilent input.  Now fixed.
- added Duffinck et al 2005 reference to User's Guide
- new option souce="genepix.median" for read.maimages()
- default value for source argument of read.maimages() is now NULL

18 July 2005: limma 2.0.3

- documentation on components Amean, F.stat and F.p.value added to MArrayLM.Rd
- columns argument of read.maimages() now can be arbitrary, provided the two foreground channels are included. Inclusion of background columns is now optional.
- support for BlueFuse files added to read.maimages()
- new function readBlueFuseHeader()
- re-wording revision of CITATION entry, now points to http://bioinf.wehi.edu.au
- normalizeWithinArrays(method="median") now uses a weighted median where appropriate
- new function weighted.median()
- bug fix to RGList subsetting: targets component was subsetted incorrectly with j but missing i
- small fix to readGPRHeader.Rd

20 June 2005: limma 2.0.2

- last mentions of designMatrix and classifyTests removed from help docs

20 June 2005: limma 2.0.1

- work around in eBayes() for pf(q,df1,df2=Inf) bug in R 2.1.0
- all mentions of rlm.series in help changed to mrlm
- New introductory chapters 04.Background and 08.Tests for the online
  help system.  Cleaning up of chapter system.
- Extensive clean-up of background correction functions based on the
  normexp distribution.  fit.normexp0 and m2loglik.normexp removed.
  Functions now called normexp.fit, normexp.m2loglik, normexp.grad
  and normexp.signal.
- deprecated functions designMatrix() and classifyTests() removed
- makeContrasts() now accepts expression- or character-valued variable arguments
- Weng et al (2004) and Uppalapati et al (2005) references added to User's Guide

2 June 2005: limma 2.0.0

- fix background correction bug in plotDensities(), Rb was subtracted twice
- changelog.txt used to refer to the Bionconductor NEWS log for
  changes prior to Dec 2003.  Since the NEWS file is no longer on the
  Bioconductor site, the early information has now been incorporated
  into this file.
- better starting value estimation for fit.normexp()
- convest() now checks that input p-values are between 0 and 1.

21 May 2005: limma 1.10.0

Same as limma 1.9.6. Version number bumped for Bioconductor devel repository.

5 May 2005: limma 1.9.6

- updates to arrayWeights() to better handle NAs, no change to API

2 May 2005: limma 1.9.5

- fix to regular expression in readGAL(), because R 2.1.0 follows stricter reg expression syntax
- update reference in User's Guide (within-array paper published 1 May 2005)

26 April 2005: limma 1.9.4

- further fix to bibtex references in User's Guide
- fix to [.MArrayLM when components are vectors rather than matrices
- added reference to lmscfit.Rd
- added comments about 'correlation' to lmfit.Rd

25 April 2005: limma 1.9.3

- updates to references in User's Guide
- syntax fix to TestResults.Rd
- change to wording of error message with decideTests(method="nestedF") and NA p-values

23 April 2005: limma 1.9.2

- edits to topTable.Rd and decideTests.Rd
- gls.series() now returns error when ndups>2 and block is non-NULL

14 April 2005: limma 1.9.1

- In read.maimages() and readImaGeneHeader: argument allowEscapes=FALSE
  added to use of scan() to prevent new "feature" in R 2.1.0
- new method as.data.frame.MArrayLM

6 April 2005: limma 1.9.0

- bug fix to getLayout2() when GAL-file has no header

6 April 2005: limma 1.8.23

- readImaGeneHeader now allows for headers up to 100 lines (previously 60)
- comments in Between Arrays Normalization of usersguide.pdf about non-negative background correction
- some additions to venn.Rd, say explicitly now that Venn diagrams for no more than three contrasts
- corrections to code in Time Course Experiments section of User's Guide
- duplicateCorrelation() now traps error condition when all non-missing observations for a gene belong to same block
- topTable() default column name for gene names is now 'ProbeID'
- lmFit() captures rownames if object is matrix
- update to topTable.Rd on adjusted p-values

24 Feb 2005: limma 1.8.22

- note added to dupcor.Rd that the function may issue some warnings
- section added to User's Guide on "software packages using limma"
- corrected text version component of CITATION

8 Feb 2005: limma 1.8.21

- new version of arrayWeights() by Matt Ritchie, old version renamed to arrayWeightsQuick()
- modifications to m2loglik.normexp function and derivatives, grloglik() removed

2 Feb 2005: limma 1.8.20

- Note on possibility of adjusted p-values all equal to one added to topTable.Rd
- bug fix in normalizeRobustSpline when Sigma0==0, i.e., when method reduces to global spline
- CITATION updated to Bioconductor book chapter

1 Feb 2005: limma 1.8.19

- New BFGS version of fit.normexp by Jeremy Silver introduced,
  old Nelder-Mead version renamed to fit.normexp0.  Several new utilities
  functions compute the likelihood and gradient for the BFGS version.
- signal.normexp() more resistant to floating overflow/underflow
- decideTests() now allows for NA p-values for method="separate" or "global" (was giving wrong answers)
- summary.TestResults now allowed for NA p-values
- User's Guide starts to use bibtex, not fully converted yet
- new sections "Time Course Experiments" and "Separate Channel Analyses" in user's guide
- 'columns' argument no longer overwrites 'source' argument of read.maimages()
- readTargets() now looks for columns "Label" or "FileName" to make row.names if row.names arg is NULL
- removeExt() now coerces argument to character

13 Jan 2005: limma 1.8.18

- Bug fixes to lmFit with NoWts and df.residual equal to 0 or 1
- new section "Several Groups" in user's guide

10 Jan 2005: limma 1.8.17

- uniquegenelist() now preserves data.frame or matrix class. This fixes a bug when fitting a model to an exprSet object with duplicate probes.

9 Jan 2004: limma 1.8.16

- bug fix for lmFit() when no weights or NAs (NoWts) but non-estimable coefficients

8 Jan 2004: limma 1.8.15

- lm.series() and lmFit() now treat linear model with no weights or NAs (NoWts) as a special case, with great increase in speed for typical Affymetrix analysis
- lmFit() better recognises when an marrayNorm object has a non-empty list of gene names
- new User's Guide section of Adjusting for Multiple Testing

16 Dec 2004: limma 1.8.14

- fix !is.infinite bug in starting values for fit.normexp()
- tests for version of R removed from trigamma.inverse() and .vsimpleLoess()

9 Dec 2004: limma 1.8.13

- log and unlog arguments removed from MA.RG() and RG.MA().  RGLists are now always assumed to contain unlogged intensities.
- changes to plotDensities() to accommodate above
- bug fix to normalizeBetweenArrays with method="Gquantile" or "Rquantile".  Now changes only the A-values.

2 Dec 2004: limma 1.8.12

- fix to last section of User's Guide: quantile normalization code example was garbled
- bug fix in plotDensities(): object=MAList and log.transform=TRUE should give log not log-log scale

1 Dec 2004: limma 1.8.11

- log.transform=TRUE now the default for plotDensities(), corresponding changes to help doc
- new argument unlog for RG.MA()

23 Nov 2004: limma 1.8.10

- bug fix for summary.TestResults to remove reference to 'results'
- fit.normexp() now catches and reports optimization errors
- decideTests() now runs eBayes() if MArrayLM object found not to contain t-statistics

4 Nov 2004: limma 1.8.9

- new argument '...' for readTargets()
- intraspotCorrelation() now uses try() to tolerate some fit errors from remlscore()
- decideTests.Rd now longer says 'object' arg can be a matrix
- convest() now plots pi0 in title of plot for doplot=TRUE
- bug fix: changeLog() was always displaying 20 lines, also assumed "/" separator

29 Oct 2004: limma 1.8.8

- bug fix: lmFit() should call mrlm() not rlm.series()

29 Oct 2004: limma 1.8.7

- limma now officially requires R 2.0 (because of lazyloading)
- new function convest()
- new function arrayWeights()
- as.matrix() methods for all data classes

27 Oct 2004: limma 1.8.6

- new function volcanoplot()
- further editing of all sections of the User's Guide, especially the Weaver case study and the section on between-array normalization
- limmaUsersGuide() now outputs file format rather than URL format, i.e., no file:/// prefix
- slicker summary.TestResults

23 Oct 2004: limma 1.8.5

- limma.Rtex no longer refers to openVignette(), because this won't find the User's Guide
- html version of User's Guide removed
- limmaguideURL() replaced with limmaUsersGuide()
- aaa.R containing 'library("methods")' removed

22 Oct 2004: limma 1.8.4

- lm.series now preserves rownames in M (when ndups=1)
- updates to geneSetTest.Rd: (i) warning re use with F-like statistics, (ii) better example

20 Oct 2004: limma 1.8.3

- fix bug (introduced 1.7.8 or later) for read.maimages() with Agilent data
- further development of "Special Designs" section of User's Guide

14 Oct 2004: limma 1.8.2

- New section on "Special Designs" for User's Guide
- heatDiagram() now chooses col range more carefully so that red is associated only with positive fold changes and green with negative
- new argument 'mar' for heatDiagram()

10 October 2004: limma 1.8.1

- new argument other.columns for read.maimages()
- [.RGList and MA.RG() now accommodate an 'other' component
- many edits to text of User's Guide
- usersguide.pdf updated from usersguide.tex
- usersguide.html converted to usersguide.tex

8 October 2004: limma 1.8.0

- install.R file removed, replaced with LazyLoad: yes in DESCRIPTION
- MA.RG() and normalizeWithinArrays() now accept arguments 'bc.method' and 'offset'

4 October 2004: limma 1.7.9

- bug fix for lmFit() for PLMset object

25 September 2004: limma 1.7.8

- read.maimages() now tries to set $printer layout with Agilent data
- citation entry for limma
- contrasts.fit() now stops with error message if attempt to take contrast of non-estimable parameter
- further bug fix to contrasts.fit() when there are non-estimable coefficients
- new function changeLog()
- limmaguideURL() now uses system.file()
- heatDiagram() now separates primary up and down genes with white space

18 September 2004: limma 1.7.7

- new section on Installation for User's Guide
- bug fix to kooperberg() when background is zero
- new function geneSetTest()
- help doc for imageplot updated
- imageplot() now traps infinite z values and issues an informative error
- update to swirl example in User's Guide (warnings on p-values)
- update to ApoAI example in User's Guide (comments on scale normalization, more recent version of data object)

6 September 2004: limma 1.7.6

- bug fixes to decideTests() for method="heirarchical" and method="nestedF"

2 September 2004: limma 1.7.5

This version was the first posted to CRAN as well as to Bioconductor

- Now passes R CMD check under R 2.0
- example into User's Guide of wt.fun arg of read.maimages() using multiple columns
- rlm.series() deprecated in favor of mrlm()
- new function decideTests() for global multiple testing across probes and contrasts
- anova.MAList checks if design matrix has more than one column
- new function nonEstimable()
- lmFit() now reports non-estimable coefficients
- bug fix to contrasts.fit() when there are non-estimable coefficients

20 July 2004: limma 1.7.4

- normalizeWithinArrays(method="composite") now allows for NAs
- added fill=TRUE to read.table() in readTargets()
- fix bug causing dim on RGList, MAList and MArrayLM to return NULL when just one column
- write.fit() now works on MArrayLM objects when eBayes has not been used

3 July 2004: limma 1.7.3

- plotMA() now does single-channel MA-plots and accepts exprSet and matrix objects
- imageplot legend now rounds numbers to 1 decimal place
- GenePix Allocation List to GenePix Array List throughout

2 July 2004: limma 1.7.2

- in Windows, loading limma twice no longer creates extra "Vignettes" menus
- bug fixes to read.imagene() to account for changes to readImaGeneHeader() on 8 June

28 June 2004: limma 1.7.1

- cex=16,pch=0.2 now default in plotMA()

- calls in normalizeRobustSpline() to rlm() now explicitly set prior weights

28 June 2004: limma 1.7.0

- All the linear modelling functions now pass the covariance matrix
  Of the estimated coefficients.	This improves support for models
  with covariance structures: random effects models for technical
  replicates, mixed models for log-intensity analysis of two color
  data, duplicate spots etc.  Lots of updates to help files.  pdf of
  User's Guide updated.  Reading of GPR headers now supported.

- pdf version of User's Guide updated

- estrogen case study re-done for User's Guide

- many .Rd files revised

- instances of missing() changed to is.null() is modelMatrix()

- lm.series(), rlm.series(), gls.series() and lmscFit() now save cov matrix of coefficients

- contrasts.fit() and classifyTestF() now use cov matrix of coefficients in data object

- changed many external links in .Rd files to reflect movement of functions from base to stats and graphics in R 1.9.0

- readGPRHeader() no longer assumes any known fields

- lmFit() now accepts PLMset objects

- changelog.txt moved to /inst/doc

21 June 2004: limma 1.6.14

- eBayes() checks design for full rank before computing F-statistic
- Fix link to convert:coerce in array2channel.Rd
- plotMA() now accepts MarrayLM objects
- new background correction method "normexp" and associated functions
- summary methods for RGList, MAList and MArrayLM

14 June 2004: limma 1.6.13

- changelog.txt (this file) included in /archive
- new function imageplot3by2() to write plots to files
- imageplot() now shows z-range legend
- new argument 'offset' for backgroundCorrect()

8 June 2004: limma 1.6.12

- updates to read.maimages() to handle new format SMD files
- periods removed from names of output from readImaGeneHeader()
- read.maimages() now calls readGPRHeader() to get skip records for each gpr file
- readGPRHeaders() renamed to readGPRHeader()
- readImageneHeaders() renamed to readImaGeneHeader()
- new function protectMetachar()
- new function trimWhiteSpace()
- update to kooperberg() help page example
- kooperberg() now returns RGList
- new function getLayout2() which reads GAL file headers
- fill=TRUE added to read.table() calls in read.maimages()
- "Quick Start" section in User's Guide now uses readTargets()
- new function readSMDHeader()
- new function tZscore(), updates to zscore help page
- bug fix for vennCounts() when no sig results for one or more contrasts
- eBayes() now returns F-statistics and corresponding p-values

29 May 2004: limma 1.6.11

- expanded function descriptions in 7.Diagnostics.Rd
- fix Satterthwaite spelling errors
- new function plotMA3by2()
- plotMA() no longer plots points with zero weight by default

25 May 2004: limma 1.6.10

- example and help page updates for lmscFit() and intraspotCorrelation()
- bug fix to array2channel() when Cy3/Cy5 are the only columns

24 May 2004: limma 1.6.9

- further comments on "vsn" normalization in the help entry for normalizeBetweenArrays()

22 May 2004: limma 1.6.8

- update contrasts.fit help page to cover general design matrices, lmFit()
- new argument 'design' for contrasts.fit

21 May 2004: limma 1.6.7

- update User's Guide to refer to marray package
- fix numerical bug in contrasts.fit for non-orthog design matrix

14 May 2004: limma 1.6.6

- new argument 'grep' for array2channel()
- Estrogen case study redone for user's guide.
- Made pdf of User's Guide.

14 May 2004: limma 1.6.5

- smooothVar() renamed to squeezeVar()
- array2channel() behaves nicely for zero-size data.frames
- dim() correctly returns c(0,0) for zero-size RGList, MAList, MArrayLM objects
- optional arguments in normalizeBetweenArrays() changed to ...
- default for 'ties' in normalizeQuantiles() changed to TRUE

10 May 2004: limma 1.6.4

- method="vsn" added to normalizeBetweenArrays()

7 May 2004: limma 1.6.3

- merge method for MAList objects
- functions FStat, dupcor.series, classifyTests now use match.call() and eval()
- clean up help entry for auROC()
- fix documentation bug for topTable(adjust=NULL)

19 April 2004: limma 1.6.2

- new documentation entry on single channel analysis
- new function intraspotCorrelation()
- lmsc.series() renamed to lmscFit(), now produces an MArrayLM object

7 April 2004: limma 1.6.1

- fix to printHead to treat factors as as vectors
- new argument cex for vennDiagram

6 April 2004: limma 1.6.0

- additional argument block to duplicateCorrelation, gls.series and lmFit to treat technical replicates as randomized blocks
- new methods Rquantile, Gquantile, Tquantile for normalizeBetweenArrays
- lmFit now extracts probe IDs from exprSet object
- Ecoli-lrp case study added to User's Guide

29 March 2004: limma 1.5.9

- backgroundCorrect(,method="edwards") now handles NAs
- bug fixes to backgroundCorrect(,method="edwards")
- classifyTests() renamed to classifyTestsF()
- classifyTestsP() now extracts degrees of freedom from object
- read.maimages no longer disallows source= and columns= together

20 March 2004: limma 1.5.8

- internal links added to contents section of User's Guide
- changed calling sequence in duplicateCorrelation() to randomizedBlockFit, limma now depends on package statmod >= 1.0.6
- two changes to plotPrintTipLoess() to avoid warning messages
- bug fix to duplicateCorrelation() to avoid test on rho[i] when NA

15 March 2004: limma 1.5.7

- fixes to write.fit() to accomodate TestResults class
- Sweave-style vignette added, as well as User's Guide
- new function array2channel() to targets files from by-array to by-channel representation
- removed warning about Cy3, Cy5 columns from readTargets()
- more general use of 'ref' in modelMatrix(), doesn't have to occur on every array
- target names are sorted in modelMatrix()
- designMatrix() renamed to modelMatrix(), designMatrix deprecated
- new function lmsc.series() for single-channel linear models

12 March 2004: limma 1.5.6

- tetragamma() changed to psigamma(x,deriv=2) with R version check

9 March 2004: limma 1.5.5

- bug fix to normalizeRobustSpline() to prevent error when spline basis becomes singular
- La.eigen() to eigen() in is.fullrank()
- case study Estrogen added to User's Guide

8 Mar 2004: limma 1.5.4

Now passes R CMD check in R 1.9.0dev.
- new argument 'mar' for vennDiagram(), reduces white-space for venn Diagrams
- new argument 'annotation' for read.maimages()
- fix bug in gls.series to ensure that spacing and weights arguments are passed to duplicateCorrelation()
- check for R version when setting package argument for .C and .Fortran calls

4 Mar 2004: limma 1.5.3

- new function smoothVar()
- fix 'ProbUID' typo for source="agilent"

26 Feb 2004: limma 1.5.2

- source="agilent" added to read.maimages
- bug fixed in heatdiagram() and heatDiagram() which caused over-printing when using par(mfrow)
- vennCounts() now uses table() for major computation and is therefore much faster
- new function FStat()
- S3 class "classification" replaced by S4 class "TestResults", including 'show' and 'summary' methods
- classifyTests(), classifyTestsT() and classifyTestsP() now produce "TestResults" objects

21 Feb 2004: limma 1.5.1

- removed package argument from calls to .C and .Fortran loess hooks in modreg package.  Edited package dependencies in DESCRIPTION file.  These two changes allow the code to pass R cmd check in both R 1.8.1 and R 1.9.0 (dev) and allows the development and release versions of limma to be consolidated.

30 Dec 2003: limma 1.5.0 (Bioconductor devel version only)

- bug fix for designMatrix() (was giving wrong matrix when common reference was Cy5
  for first array)
- bug fix to printorder() with spacing="topbottom" (was returning vectors of wrong
  length)
- new function modifyWeights()
- designMatrix() now uses zapsmall() to eliminate small non-zero entries
- readGAL() now sorts GAL files into standard order if they are not already
- read.maimages() function now sets the genelist directly from the gpr files, so
  readGAL() will usually no longer be required
- new function auROC() to compute exact area under ROC

18 Feb 2004: limma 1.3.18

- fix bug in duplicateCorrelation() which was not finding the M matrix when object was not an MArrayLM

17 Feb 2004: limma 1.3.17

- new argument 'resort.by' for toptable() and topTable()

16 Feb 2004: limma 1.3.16

- changes to loessFit() to avoid errors with small numbers of observations
- argument 'path' added to readSpotTypes() and readTargets()
- check in duplicateCorrelation() for correlation less than -1
- more expository comments added to 2.Classes.Rd

8 Feb 2004: limma 1.3.15

- duplicateCorrelation now uses randomizedBlockFit from the statmod package instead of gls from the nlme package.  This results in a several-fold increase in speed for duplicateCorrelation and dupcor.series.
- dupcor.series now deprecated
- getLayout() now has option to guess spacing between duplicate spots
- new function blockDiag() to form block diagonal matrices
- fix bug in imageplot() which caused overprinting of plots when using par(mfrow)

23 Jan 2004: limma 1.3.14

- new function poolVar to Welch-style pooling of sample variances with unequal variances
- new functions usersguideURL() and .First.lib() to implement limma entry in Windows drop-down Vignettes menu

18 Jan 2004: limma 1.3.13

- bug fix for write.fit() (was failing when adjust p-values with multiple contrasts)
- Updates to references - linear modelling paper now accepted for publication

30 Dec 2003: limma 1.3.12

- bug fix for designMatrix() (was giving wrong matrix when common reference was Cy5 for first array)

29 Dec 2003: limma 1.3.11

- bug fix to printorder() with spacing="topbottom" (was returning vectors of wrong length)
- new function modifyWeights()
- designMatrix() now uses zapsmall() to eliminate small non-zero entries

26 Dec 2003: limma 1.3.10

- readGAL() now sorts GAL files into standard order if they are not
  already
- read.maimages() function now sets the genelist directly from the gpr
  files, so readGAL() will usually no longer be required
- new function auROC() to compute exact area under ROC

20 Dec 2003: limma 1.3.9

- new function getSpacing()
- upgrades to printorder() to accommodate spacing by rows or topbottom
- corrections and updates to try to pass R CMD check in R1090dev, but
  cannot get around that package nlme seems to be broken.

13 Dec 2003: limma 1.3.8

- bug fix to backGroundCorrect(method="edwards")
- bug fix to plotPrintTipLoess()
- refinements to estimation of var.prior in ebayes and related functions
- coerce (setAs) method for RGList to exprSet2

7 Dec 2003: limma 1.3.7

rbind method for MAList objects

6 Dec 2003: limma 1.3.6

- fix to readSpotTypes() to read column names as.is
- new ... argument for readSpotTypes()
- rbind method for RGList objects
- bug fix for designMatrix()

1 Dec 2003: limma 1.3.5

- designMatrix() now has new arguments and now handles direct designs
- new function write.fit() for outputing results of linear model fit

18 Nov 2003: limma 1.3.4

- fix bug with exprSet object in lmFit()

15 Nov 2003: limma 1.3.3

- new function write.fit

11 Nov 2003: limma 1.3.2

- substantial upgrade to functions which identify and track control
  spots from the gene list including readTargets(), readSpotTypes(),
  controlStatus() and plotMA()
- Routine edits to User's Guide

Nov 05 2003: limma 1.3.1

- Bug fix for as.MAList
- Slightly changed comments in install.R and aaa.R

7 October 2003: limma 1.2.8

- new function readGPRHeaders()
- getImageneHeaders() renamed to readImageneHeaders

2 October 2003: limma 1.2.7

- read.imagene now allows for changes of header info between arrays
- bug fix in "minimum" method for backgroundCorrect() 

1 October 2003: limma 1.2.6

- new method "edwards" for backgroundCorrect()
- added html index of vignettes for R 1.8.0
- update to manual

27 Sep 2003: limma 1.2.5

- changes to read.maimages for ArrayVision data
- bug fix for wtIgnore.Filter with GenePix data
- new argument 'ties' for normalizeBetweenArrays. GKS

20 Sep 2003: limma 1.2.4

- ensure that limma passes rcmd check for R 1.8.0
- fix bug in toptable which affected the displayed A-values
- new option 'none' for method argument of backgroundCorrect()
- new argument 'mar' for imageplot()

15 Sep 2003: limma 1.2.0

- fix bug in quantarray read
- classifyTests now returns F-statistic

9 September 2003: limma 1.1.18

- new function plotDensities
- new section in User's Guide on single channel normalization, both by Natalie Thorne

6 September 2003: limma 1.1.17

- new backgroundCorrect options "half", "minimum" and "movingmin"

4 September 2003: limma 1.1.16

- new argument 'include' in vennCounts and vennDiagram
- Support for correlated design matrices added to contrasts.fit()

3 September 2003: limma 1.1.15

- new class exprSet2
- new function topTable
- New argument 'bin' in loessFit
- Fine tuning of interpolation settings used by loessFit.
  Corresponding changes to documentation

2 September 2003: limma 1.1.14

- read.maimages now supports SMD data files

29 August 2003: limma 1.1.13

- reorganization of heatdiagram and classifyTests functions

28 August 2003: limma 1.1.12

- add ArrayVision support to read.maimages
- Many other small changes including a backgroundCorrect method to
  ensure positive intensities
- Expansion of sections on reading data in User's Guide.

15 Aug 2003: limma 1.1.11

- added functionality to read Imagene data to read.maimages

4 August 2003: limma 1.1.9

- bug fix to loessFit
- Gradually introducing object orientated versions eBayes of ebayes,
  topTable of toptable, heatDiagram of heatdiagram

5 July 2003: limma 1.1.7

- support for much extra structure in RGList and MAList objects
- representation of MArrayLM class reverts to list
- support for marrayNorm and exprSet objects by lmFit
- new function makeContrasts to construct contrast matrices
- new function duplicateCorrelation
- classifyTests now supports MArrayLM objects
- new function classifyTests43 for simple t-stat thresholding
- new functions vennCounts and vennDiagram for Venn diagram plots
- update of LinearModels documentation to reflect changes

29 June 2003: limma 1.1.5

- subsetting methods for RGList and MAList objects
- Bug fix for cbind method for RGLists

28 June 2003: limma 1.1.4.

- New function designMatrix to construct design matrices for
  microarray experiments with common references
- cbind methods for MAList and RGList objects
- New function loessFit giving substantial speed improvements for
  loess normalization

23 June 2003: limma 1.1.3

- extra arguments added to kooperberg function
- Internal kooperberg functions now hidden from user
- New affy example added to User's Guide.

June 19, 2003: limma 1.1.2

- bug fixes to classifyTests
- normalizeForPrintorder (no longer generic) and plotPrintorder
- ClassifyTests now accepts design and contrast matrices

June 15, 2003: limma 1.1.1

- new functions for Kooperberg Bayesian background correction
- modreg now required for R earlier than 1.7.0
- normalizeWithinArrays no longer generic to simplify documentation
- Documentation for normalizeBetweenArrays also consolidated
- New virtual class LargeDataObject and associated show method

June 12, 2003: limma 1.1.0.

- New function lmFit()
- classifyTests fixed

June 11, 2003: limma 1.0.9

- first version of MArrayLM class
- Start on bug fix to classifyTests

May 23, 2003: limma 1.0.8

- corrected bug in read.maimages for quantarray data
- Added wtIgnore.Filter function for quantarray data

May 19 2003: limma 1.0.7

- printable pdf version of User's Guide
- use of chol pivot in classifyTests.vector
- couple of typos corrected

May 18 2003: limma 1.0.6

- minor cleaning up of documentation files and vignette ready for BioC release.

10 May, 2003: limma 1.0.5

- new function 'printorder',
- added sma to dependencies in DESCRIPTION
- updates and corrections to User's Guide

May 7 2003: limma 1.0.4

basically a file permission change.

May 4 2003: limma 1.0.3

New function printorder. Correct typo in DESCRIPTION.  Alias for merge
method to reflect dispatching on two arguments.

Apr 29 2003: limma 1.0.2

Fixed bug in ebayes when more than two coefficients (bug introduced on
Apr 25). Added new normalization method, robust splines. Changes to
plotPrintTipLoess. Several changes to .Rd files.

Apr 27 2003: limma 1.0.1

Several new help topics and consolidation of a couple of old ones.
Correction of a couple of small code bugs concerning creation of
classed objects by MA.RG and backgroundCorrect.  Other minor changes
to help topics entries.

Apr 26 2003: limma 1.0

Apr 25 2003: limma 0.9.7

The smawehi package was renamed to limma, with the title "Linear Models
for Microarray Data" and became part of the Bioconductor project.

Apr 7, 2003

MA plots added for both two-color and single channel data.

11 November 2002: smawehi 0.1

smawehi package made publicly available for the first time, through
the repository http://bioinf.wehi.edu.au/smawehi, for the One Day
Course "Statistics for Microarray Data Analysis" at the Australian
Genstat Conference, Perth, Australia, 2 December 2002.  This package
was intended to be used in conjunction with sma from UC Berkeley.

PRE-HISTORY

The limma package was originally called the smawehi package, which was
made public for the first time as SMAWEHI Version 0.1 for the One Day
Course "Statistics for Microarray Data Analysis" at the Australian
Genstat Conference, Perth, Australia, 2 December 2002.  Presenters
were Terry Speed, Gordon Smyth and Natalie Thorne.  The package was
served from an R repository at http://bioinf.wehi.edu.au.  With
version 0.9.7 the package was renamed to 'limma' and became part of
the Bioconductor project at http://www.bioconductor.org.
