I understand (mostly) how independent component analysis (ICA) works on a set of signals from one population, but I am failing to make it work if my observations (X matrix) includes signals from two different populations (having different means) and I am wondering if it is an inherent limitation of ICA or if I can resolve this. My signals are different than the common type being analyzed in that my source vectors are very short (e.g. 3 values long), but I have many (e.g. 1000's) of observations. Specifically, I am measuring fluorescence in 3 colors where the broad fluorescence signals can "spillover" into other detectors. I have 3 detectors and using 3 different fluorophores on particles. One could think of this as a very poor resolution spectroscopy. Any fluorescent particle could have an arbitrary amount of any of the 3 different fluorophors. However, I have a mixed set of particles which tend to have quite distinct concentrations of fluorophores. For example, one set may generally have lots of fluorophore #1 and little fluorophore #2, while the other set has little of #1 and lots of #2.

Basically, I want to deconvolve the spillover effect to estimate the actual amount of each fluorophore on each particle, rather than having a fraction of signal from one fluorophore add to the signal of another. It seemed like this would be possible for ICA, but after some significant failures (the matrix transform seems to prioritize separating the populations rather than rotating to optimize signal independence), I am wondering if ICA isn't the right solution or if I need to pre-process my data in some other manner to address this.

Results of FastICA algorithm with 2 populations in 1 data set

The graphs show my synthetic data used to demonstrate the problem. Starting with "true" sources (panel A) consisting of a mixture of 2 populations, I created a "true" mixing (A) matrix and calculated the observation (X) matrix (panel B). FastICA estimates the S matrix (shown in panel C) and instead of finding my true sources, it seems to me that it rotates the data to minimize the covariance between the 2 populations.

Looking for any suggestions or insight.


Conceptually, for ICA to work, it requires N observations of the SAME phenomenon and it will attempt to decompose these signals (the mixtures) to < N components.

From your description each detector is counting a different energy particle. That is, the "Mixtures" are actually already three different signals. Consider the example where you use the recordings of 4 different microphones to try and distinguish between 2 different (mutually independent) sound sources. In this case each microphone is recording a (different) sum of BOTH sound sources. In your case, because of the phenomenon you are observing, each "microphone" (detector) is NOT recording a (different) sum of BOTH sources, but rather it records each source separately (most of the times).

As you describe, sometimes, the SAME event might be recorded by more than one detectors (spill-over). In this case, if you insist with ICA then it would attempt to decompose THAT sum.

Therefore, perhaps you should consider something simpler, like obtaining the cross correlation between the events recorded by each one of the three different detectors as an indicator of the amount of spill-over.

But in this case, instead of examining 1000 "triplets" of observations, you create three different time series. One time series per detector describing the events (in time) of each detector.

If your detectors and aparatus are fast enough, this signal will look like a series of exponentially decaying pulses. If not, your signal will look like a train of pulses convolved with the impulse response of the system (a smoothed version). In either case, if the same event has been detected by more than one detectors then the output of these detectors will simultaneously rise in level (and increase the cross - correlation or some other form of correlation metric). It will be easier to detect that rise in the first case (fast system).

Therefore, the problem now becomes one where you have to decide which detector to assign that event to for it to be counted correctly. There is a number of ways that you can do this (not using ICA) but you will have to know the spectral response of your detector (Pulse amplitude VS energy or Voltage output VS energy). You would then be able to create a weighted sum of the counted particles by looking up the "weight" for each pulse on your detector's response. Or you could apply a "window" to the pulses. That is, consider a sharp threshold around the peak response of the detector and only count events that generate such (usually high) pulses. Considering a short region around the peak performance of the detector will reject the (lower) pulses created by spill-over.

I hope this helps. I hope to have understood your configuration correctly.


It does sound like your "signals" are not the type suited for ICA. However, it seems you might benefit from clustering algorithms, especially if you know the distinct signal (energy level or wavelength) expected from each fluorophore type. You could create the ideal synthetic clusters and co-cluster the observational data with it. By varying the amount of clusters and other parameters, you should be able to pop out the spill over of each fluorophore into each other as additional clusters. Spectral or hierarchical clustering methods might be best for this (as opposed to k-means).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.