[FieldTrip] Beamforming: Scalp vs. Source mismatch

Pomper, Ulrich Ulrich.Pomper at charite.de
Fri Sep 6 16:42:00 CEST 2013

Dear fieldtrip community,
In my data I found a disconcerting mismatch between EEG scalp topographies and corresponding beamforming solutions, both on the subject and group average level. 
I understand that there might not be a perfect match between source and scalp, but I would expect at least a little resemblance. 

As an example, the link below features topos and source plots from an event-related beta-band decrease after a short tactile stimulation to the left index finger. 
Further below you can find the code I used for the beamforming. (Note that the topos were created from the ft_freqanalysis command within the beamforming script, so baseline and poststimulus data are exactly the same for both source and scalp-level data).

Eight out of 13 subjects show practically no match between source and scalp. On the group average level, the source solution shows a left-anterior decrease which seems not present in the scalp data. Also, the right heispheric decrease at the scalp shifts from central to more posterior sites, which doesn't fit with it beeing of somatosensory origin anymore. 

I’d appreciate any comments on my data, as well as suggestions on how to proceed  to get a more trustworthy source solution to my beta-band decrease.

Exemplary plots: https://www.dropbox.com/s/git4w8u3a901l3w/source_vs_scalp.pdf

% Beamforming code %

foi = 20;
tapsmofreq = 5;
toi_pre = [-.4 -.2];
toi_post = [.15 .35];
lambda = '5%';
        %% cut data and append for common filters
        cfg = [];
        cfg.toilim = toi_pre;
        dataPre = ft_redefinetrial(cfg, data);
        cfg.toilim = toi_post;
        dataPost = ft_redefinetrial(cfg, data);
        dataAll = ft_appenddata([], dataPre, dataPost);
        %% Calculate common CSD
        cfg = [];
        cfg.method    = 'mtmfft'; 
        cfg.output    = 'powandcsd';
        cfg.tapsmofrq = tapsmofreq;
        cfg.foilim    = [foi foi];
        freqAll = ft_freqanalysis(cfg, dataAll);
        %% Calculate CSD for seperate conditions
        cfg = [];
        cfg.method    = 'mtmfft';
        cfg.output    = 'powandcsd';
        cfg.tapsmofrq = tapsmofreq;
        cfg.foilim    = [foi foi];
        freqPre = ft_freqanalysis(cfg, dataPre);
        cfg = [];
        cfg.method    = 'mtmfft';
        cfg.output    = 'powandcsd';
        cfg.tapsmofrq = tapsmofreq;
        cfg.foilim    = [foi foi];
        freqPost = ft_freqanalysis(cfg, dataPost);
        %% Source Analysis
        cfg              = [];
        cfg.method       = 'dics';
        cfg.frequency    = foi;
        cfg.grid         = lf_126;
        cfg.vol          = vol;
        cfg.dics.projectnoise = 'no';
        cfg.dics.lambda       = lambda; 
        cfg.dics.keepfilter   = 'yes';
        cfg.dics.realfilter   = 'yes';
        sourceAll = ft_sourceanalysis(cfg, freqAll);
        %% apply common filter to seperate conditions
        cfg.grid.filter = sourceAll.avg.filter;
        sourcePre  = ft_sourceanalysis(cfg, freqPre);
        sourcePost = ft_sourceanalysis(cfg, freqPost);
        %% Relchange from baseline
        sourceDiff = sourcePost;
        sourceDiff.avg.pow = (sourcePost.avg.pow - sourcePre.avg.pow) ./ sourcePre.avg.pow;

More information about the fieldtrip mailing list