Non-negative matrix factorization
antonin.grenier
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.
August 9, 2019 at 11:50 am - Permalink
In reply to Hello Antonin, Please… 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
October 12, 2019 at 06:49 am - Permalink
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.
October 14, 2019 at 11:26 am - Permalink