SEFA, SAKETINI, and NSEFALoc
From NUTMEGwiki
Contents |
Overview
SAKETINI and NSEFALoc are probabilistic methods for source localization, which also aim to remove sources of interference for improved source estimation. Both use a method called SEFA (Stimulus Evoked Factor Analysis) as a precursor to separating interference from true source activity.
Advantages: Find more sources and better source time-course than beamforming. Disadvantages: Longer computation time, and only for evoked/averaged activity (currently).
These methods are available in the GUI Beamformer activations within Nutmeg. Similar to the Eigenspace beamformer (currently the 'Default Beamformer'), a number must be entered indicating the estimated number of true sources. It's okay to specify a number slightly higher than the true number, as hyperparameters in the model help to zero-out unnecessary components.
Note: For SEFA, SAKETINI, NSEFALoc, you need a prestim period in your data, labeled with time points -Xms to 0ms. It doesn't have to be data that actually was recorded just prior to 0ms, but it does need to be a chunk of data where no other sources of interest are presumed to be going on.
SEFA
Since SEFA is a precursor to the localization methods, both in theoretical concept and in actual data processing, we'll briefly go over it first. To remind you, shown below first is a shot of the Beamformer Tool GUI which pops up once you hit 'compute activations' on the main Nutmeg Gui. First specifiy a time window for the active period (in this example, the whole post-stim window was used). Then specify any filtering..first we show results with no filters. For that data, the eigenvalues of the data are plotted in the main right window. This will give an indication of how many sources before plateauing down to noise.
Then, in the upper right box labelled 'View single eigenprojection', type in each number of each eigenvector you want to see. Then in a subplot within the main right plot, the time course of eigenvectors will be displayed. The eigenvalue in the main plot gives you the relative contribution to the power in the data, whereas the subplot of eigenvector tells you if the peaks correspond to expected ones or noise, like an eyeblink or drift, etc.
Above is with no filtering, see how one of the components seems to capture the low frequency drift. Below is with 1Hz high pass filter on, notice how the 3 eigenvectors all seem to now capture real activity rather than drifts.
Another way to decompose the data is using SEFA. SEFA is sorta like PCA/SVD, but the components are not forced to be orthogonal and sensor noise is taken into account, separate from inteference (defined as sources of noise in space, affecting multiple sensors to a varying degree). You can view the results of SEFA in this GUI before proceeding with any of the source localization methods.
In the box labelled 'View SEFA' on the right, enter in 2 numbers: one corresponding to the number of expected sources, and the next corresponding to number of interferences. Play around with the number of sources to see if including an additional one seems to capture any new activity. The number of interference sources is more rough, and typically should equal one-tenth - to - one-third the number of sensors.
After you type in those number, then hit tab. SEFA will run on the data, and two subplots will be displayed in the right main plot. The right subplot is displaying the source time series in source space (similar to the eigenvectors displayed above from PCA). The left subplot shows the denoised sensor data. In other words, this is the projection of the source components to the sensors, with all the sensor noise and interference removed. Notice how the prestim period is much lower in amplitude since SEFA works by presuming that anything in the prestim is just noise and/or interference. Note: SEFA will crash if you don't have any prestim period in your data.
Into the math a bit, the model for SEFA is:
- y = Ax + Bu + v
where
y = data x = time course of sources of interest u = time course of interferece sources v = sensor noise A = source mixing matrix (not lead field) B = interference mixing matrix (also not lead field, and should be separate from A)
First you learn B and the noise variance from prestim data only. Then hold those fixed, and learn the source activity. You haven't localized it yet, you've just separated it from the interference.
Source localization intro: general to all methods
Once you've determined how many sources make sense to specify based on SEFA, then enter that number into the 'Eigenvalues for Signal space' box. Then pull on the drop-down menu that currently says 'Default Beamformer' and select your method of choice.
Also available is a qsub option. Tick the box the box in the GUI and away you go!
Well, sorry it's not quite that simple. qsub is a shell command for distributing jobs across many processors. If you're lucky enough to have A) a computing cluster B) a compiler for matlab code C) patience to do a little work in advance to get loads of time-savings in the long run, then qsub is a great option for you. See end of this wiki for more details on the qsub option.
Both SAKETINI and NSEFALoc output two types of maps: 1) source activity map and 2) likelihood map. The source activity map is the time course at each voxel and for multiple orientation components (depending on the input lead field). The likelihood map is a single number at each voxel, computed from the model likelihood, maximized with the solved-for parameters at the final iteration step.
SAKETINI: Source Activity using Knowledge of Event Timing for Independence from Noise and Interference
Into the math a bit, the model for SAKETINI is similar to SEFA, but with a lead field term: y= Fs + Ax + Bu + v; where y = data s = time course of source at one voxel that F is pointing to x = time course of sources at other voxels (non-localized) u = time course of interferece sources v = sensor noise A = source mixing matrix (not lead field) B = interference mixing matrix (also not lead field, and should be separate from A) F = forward lead field for a single voxel at a time
NSEFALoc: Neurodynamic SEFA Localization
Champagne
- Available now for 2-component lead field. Recommended to use 8mm voxels rather than 5mm.
- For example, 18500 voxels takes several days to compute, but 2500 voxels takes 20seconds to compute.
- Note, as of 29 June, 2009 it's included in Nutmeg but is not fully integrated to the GUI yet. Please be patient for a few more weeks.
qsub option
qsub for SAKETINI and NSEFALoc takes advantage of the fact that the source estimate is computed for each voxel one at a time, independent of what gets computed at other voxels. So if you have a 20-node cluster, you can send 5% of your voxels to one computer, and so on, saving yourself 20x the amount of time, and the code will know how to put all the voxels together into one map at the end.

