[BioC] Re: vsn error L-BFGS-B needs finite values of fn

Wolfgang Huber w.huber at dkfz-heidelberg.de
Tue May 18 16:22:09 CEST 2004


This is the reply to a question that Martin had sent to the bioconductor 
mailing list with CC to myself. Because of a large attachment (example 
data) however that message had not been distributed on the list. In the 
following, first the question, then my answer. - Wolfgang

Martin Kerick wrote:
> Dear Wolfgang,
> I have a question concerning your vsn package. I encounter the following
> error when applying vsn on one array:
> vsn: 27648 x 2 matrix (1 stratum). Please wait for 10 dots: Error: L-BFGS-B
> needs finite values of fn
> I have read the Bioconductor archives and found the following statements:
>>does your data matrix contain Inf (infinity) or an excessive number of 0s
> (e.g. through "flooring" the negative values?).
>>If there are infinities in the data, this will probably also lead to an
> infinite likelihood, which could explain your error message.
>>If there are other singularities (e.g. if a whole column of the data matrix
> has the same value), this may also lead to infinite values in the likelihood
> calculations.
> It seems to me, that none of the above applies to my data. I had some values
> occurring multiple (2-6) times in one column and corrected for that, but the
> error remained. Since I don't use any background correction I assume that
> negative or "floored" values are probably not the problem.
> I am using vsn 1.4.11 and arrayMagic 1.3.7 on R 1.9.0
> I attached the data file leading to the crash.
> Any help would be greatly appreciated,
> Kind regards,
> Martin

Hi Martin,

this is indeed one of the rare cases where the iterative algorithm in 
vsn does not converge with default start parameters. By specifying
different start parameters (see the code example below), it does 
converge, apparently to a reasonable result.

In your data, the F635 and F532 intensities from the two color channels 
are quite unbalanced (both w.r.t. background and slope) - my impression 
is that you would do much better if you used background subtraction (see 
code example). Also, in that case vsn does indeed work with default 

If you're worried about too much variability in the "background" 
intensities, some spatial smoothing might help.

Running vsn involves involves the maximization of a likelihood function 
that is not parabolic, but usually concave. In rare cases, the numerical 
optimizer runs into nirwana before finding the optimum. In these cases, 
choosing a different start value may help. In the case of the example 
data that you provided, one might argue that (without background 
subtraction) it also involves a quality problem.

Best regards

Wolfgang Huber
Division of Molecular Genome Analysis
German Cancer Research Center
Heidelberg, Germany
Phone: +49 6221 424709
Fax:   +49 6221 42524709
Http:  www.dkfz.de/abt0840/whuber

dat <- read.table("test1", header=TRUE, sep="\t")

maplot <- function(x, ...) {
   stopifnot(is.matrix(x), ncol(x)==2)
   plot(rowMeans(x), x[,2]-x[,1], pch=".", xlab="A", ylab="M", ...)
   abline(h=0, col="red")

y  <- as.matrix(dat[, c("F532", "F635")])

## Try this!
## y  <- as.matrix(dat[, c("F532", "F635")]-dat[, c("B532", "B635")])



pstart <- array(c(0, 0, 1, 1), dim=c(1,2,2))

## ny <- vsn(y) ## will produce an error
ny <- vsn(y, pstart=pstart)

cols <- c("red", "black")[1+preproc(description(ny))$vsnTrimSelection]
maplot(exprs(ny), col=cols)

More information about the Bioconductor mailing list