Non-negative matrix factorization

Hi,

I am using the principal component analysis function implemented in Igor -- it works well but I end up with negative contributions which I want to avoid.

Is there a function in Igor to do non-negative matrix factorization? That would work well with the data I have.

I typically work with 2D waves, with each column being a dataset (pair distribution function data).

Cheers,

Antonin

Hello Antonin,

Please provide a bit more information, even an experiment containing typical data may be helpful.  You can also email this directly to support@wavemetrics.com.

Otherwise, please define what you mean by "negative contributions".  The PCA uses MatrixSVD.  The diagonal of the singular value decomposition should be real and non-negative.

A.G. 

 

In reply to by Igor

Hi,

Say you have a series of X-ray diffraction patterns where y values (intensity) cannot be negative. If you run PCA on the series (say 100 diffraction patterns recorded over time), the resulting contributions can show negative values. My understanding of NNMF is that you are essentially forcing these contributions to be only positive, which makes more sense considering that diffraction patterns are not negative. 

I should state that my understanding of the math behind PCA and NMF is very limited :)

Antonin

Hello Antonin,

I understand that in some applications you know that the data are all non-negative.  The PCA uses SVD which results in non-negative eigenvalues and orthogonal eigenvectors.  If you now insist that each eigenvector contains only non-negative components you will quickly run into trouble as you can see by requiring that the dot product of any two eigenvectors is zero.

Without spending more time to look into this, my hunch is that you might be able to use an ICA-type approach to obtain a non-negative decomposition but I don't see that resulting from straight SVD.

A.G.