Re: [R] Looking for R-code for non-negative matrix factorization in the presence of Gaussian or Poisson noise

From: Thomas Lumley <>
Date: Mon, 11 Jun 2007 06:06:32 -0700 (PDT)

On Mon, 11 Jun 2007, wrote:

> Hi all,
> Has any of you implemented code for non-negative matrix factorization to
> solve
> Y=T P' +E; dim(Y)=n,p ; dim(T)=n,nc; dim (P)=(p,nc); dim(E)=n,p
> where T and P must be non-negative and E either Gaussian or Poisson noise.
> I'm looking for two variants:
> 1. Easy (I think), T is known (that is we just want to solve the general
> inverse problem)

This is non-negative least squares, a quadratic programming problem, for which there is code (at least if n and nc are not too big)

> 2. Harder (?), T is unknown (under some restrictions) [as an
> intermediate, we may want to fix nc]

Even with fixed nc this is Distinctly Non-trivial. It often isn't identifiable, for a start.

I've encountered this problem in air pollution source apportionment, where people use an algorithm due to Paatero (1999) JCGS 8:854-8, which is a conjugate gradient algorithm that handles the constraints by creative abuse of preconditioning. The algorithm seems fairly well-behaved, although the statistical properties of the estimates are not well-understood [at least, I don't understand them, and I have simulations that appear to contradict the views of people who claim to understand them].

The difficulty probably depends on the size of the problem -- the air pollution problems have n~1000, p~20, nc~7, or larger.

         -thomas mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Mon 11 Jun 2007 - 13:14:23 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 11 Jun 2007 - 13:31:49 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.