Print

Print


Dear Ulrich,

FT and SPM scalp topographies seem quite similar to me considering the
differences in plotting and interpolation. There might be some colour
scale difference as well. If you want to explore this further, you can
plot in FT exactly the same data that you export to images in SPM (or
if you do stats, plot the grand average difference).

Regarding the source level, unless it's planar gradient anterior scalp
pattern does not necessarily mean anterior source. But you can try
different source reconstruction methods to see if it makes a
difference. I would suggest trying EBB and IID options.

Best,

Vladimir

On Sun, Apr 1, 2018 at 11:32 AM, Pomper, Ulrich <[log in to unmask]> wrote:
> Dear Vladimir,
>
>
> Many thanks for your quick and very helpful reply!
>
> I get your points, and will incorporate them into my analyses.
>
>
> However, regardless of the validity of my statistical tests and results, I
> find it strange that (a) SPM gives me slightly different scalp topographies
> for the condition difference than Fieldtrip (top part of my figure), and (b)
> that the numerical difference between conditions in source space (middle
> part of my figure) does not show the strong right anterior activity present
> in both SPM and FT scalp maps.
>
>
> Maybe (a) is a consequence of slightly different time-frequency
> transformation methods, and (b) might improve with using EBB instead of MSP
> source localization?
>
>
> Do you or someone else have ideas regarding these inconsistencies?
>
>
> Best wishes,
>
> Ulrich
>
>
> ________________________________
> From: Vladimir Litvak <[log in to unmask]>
> Sent: 30 March 2018 22:38
> To: Pomper, Ulrich
> Cc: [log in to unmask]
> Subject: Re: [SPM] MEG sources not fitting scalp results
>
> Dear Ulrich,
>
> One thing I would say is that dividing by the baseline doesn't change
> the fact that your single condition images are non-negative so
> comparing them to zero is not a statistically meaningful thing to do.
> If you want to compare to a baseline you should do a paired t-test
> between baseline and activation images and I would make the windows
> for both the same length.
>
> Regarding the difference between conditions, there is no mathematical
> reason to expect that you will always get significant results at the
> source level if you get a significant difference at the sensor level
> and vice versa. The full brain correction at the source level is quite
> severe and only very strong effects would survive it. As discussed in
> this guidelines paper (https://www.ncbi.nlm.nih.gov/pubmed/23046981)
> it doesn't really make sense to do stats at the sensor and source
> level for the same effect. You should only test for your effect once
> and that test should be properly corrected for multiple comparisons
> etc. If you then want to say something about the sources you could
> show the uncorrected map and say that it's only thresholded for
> visualisation purposes since the statistical test has already been
> done at the sensor level.
>
> Finally for oscillatory activity beamforming approach might work
> better than MSP so perhaps you should try the EBB option.
>
> Best,
>
> Vladimir
>
> On Fri, Mar 30, 2018 at 6:03 PM, Pomper, Ulrich <[log in to unmask]> wrote:
>>
>> Dear all,
>>
>>
>> I am having some difficulties getting reasonable results for a MEG
>> time-frequency source localization. I’ve attached the respective results
>> in
>> a figure (apologies for the low resolution).
>>
>> The data are from 23 participants doing an auditory experiment.
>> Specifically, I’m showing two different conditions of 1 sec duration
>> during
>> which participants listened to sounds.
>>
>> I started out analysing the data in fieldtrip, and found significant
>> differences between the conditions in the alpha band, at a large
>> fronto-central cluster (top row of my figure).
>>
>> As a first interesting/ strange point, the scalp topography in SPM (top
>> row,
>> right of the FT topographies) is slightly different, although still
>> showing
>> the largest difference at anterior sites.
>>
>>
>>
>> In the middle row of the figure you can see the activity in source space
>> calculated in SPM, by calculating the relative change to baseline for both
>> conditions (activity/ baseline; left and middle plots) and the difference
>> between the two conditions (right plot). In the bottom part of the figure
>> are the source statistics. Left and middle plots show a one-sample ttest
>> of
>> baseline corrected data (activity divided by BL) against 0 for both
>> conditions. Right plot shows a paired ttest between baseline corrected
>> conditions.
>>
>>
>> The source activity/stats of the 2 conditions alone still line up with the
>> scalp data (maximum alpha at occipital regions), and are highly
>> significant.
>>
>> Importantly however, the statistical difference between the conditions
>> looks
>> rather different from what I found at the scalp. Further, unlike the scalp
>> statistics, the effects for the comparison between conditions at source
>> level are very small, not surviving any sort of correction (the data shown
>> are uncorrected).
>>
>> Below I give a short summary of the steps I took to arrive at these
>> results.
>>
>> I would very much appreciate it if anyone could give me a couple of
>> suggestions on why my source data dont fit my scalp results, and what I
>> could change or improve in my processing pipeline.
>>
>> (By the way, I have already tried to compare the conditions without
>> baseline
>> correction, as well as with subtracting and then dividing by the baseline.
>> Both give similar results to what is shown here)
>>
>>
>>
>> Many thanks!
>>
>> Ulrich
>>
>>
>>
>>
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>>
>>
>> -Data cleaning and preprocessing in SPM is identical to the way I did it
>> in
>> fieldtrip. SPM produces comparable scalp-level data.
>>
>>
>> -For the forward model I use a template, based on the SPM manual
>> suggestions
>> (template = 1; meshres = 2; forward.eeg = 'EEG BEM'; forward.meg = 'Single
>> Shell';)
>>
>>
>> -For the inversion I use a time-window from -1000 to 4500 ms, which
>> includes
>> all the auditory stimulation but excludes the response interval. I chose a
>> rather long baseline to be able to estimate the baseline alpha band
>> activity
>> well enough. [BTW I here only show data going up to 2500 ms, but inverting
>> up to 4500 ms is important as I have later intervals of interest as well
>> which I want to compare with earlier ones]
>>
>>
>> -Further, I restrict the inversion to the freq of interest (8-14 Hz), use
>> no
>> hanning taper, and invert both conditions at the same time.
>>
>>
>> -I then do a group inversion using the greedy search MSP.
>>
>>
>> -My parameters for the first level contrasts look as follows:
>>
>>  WOI = [-750 -250
>>
>>     1500 2500];
>>
>> matlabbatch{1}.spm.meeg.source.results.val = 1
>> matlabbatch{1}.spm.meeg.source.results.woi = WOI(win,:);
>> matlabbatch{1}.spm.meeg.source.results.foi = [8 14];
>> matlabbatch{1}.spm.meeg.source.results.ctype = 'induced';
>> matlabbatch{1}.spm.meeg.source.results.space = 1;
>> matlabbatch{1}.spm.meeg.source.results.format = 'image';
>>
>> matlabbatch{1}.spm.meeg.source.results.smoothing = 8;
>>
>>
>>
>>
>>
>> -Then, I calculate the relative change compared to baseline using the
>> expression
>>
>> '((i2)./i1)'
>>
>> with i1 being the baseline and i2 my window of interest.
>>
>>
>> Finally I either just plot the subject average of the resulting images
>> (middle line of figure), run a one-sample ttest for each condition (bottom
>> left and middle plot), or contrast my 2 conditions via a paired ttest
>> (bottom left).
>>
>>
>>
>> As the paired ttest gives the strange results, here are the parameters I
>> use
>> for it:
>>
>>
>>
>> matlabbatch{1}.spm.stats.factorial_design.des.pt.gmsca = 0;    % Itried
>> gms
>> on, but the results are quite similar
>>
>> matlabbatch{1}.spm.stats.factorial_design.des.pt.ancova = 0;
>>
>> matlabbatch{1}.spm.stats.factorial_design.cov = struct('c', {}, 'cname',
>> {},
>> 'iCFI', {}, 'iCC', {});
>>
>> matlabbatch{1}.spm.stats.factorial_design.multi_cov = struct('files', {},
>> 'iCFI', {}, 'iCC', {});
>>
>> matlabbatch{1}.spm.stats.factorial_design.masking.tm.tm_none = 1;
>>
>> matlabbatch{1}.spm.stats.factorial_design.masking.im = 1;
>>
>> matlabbatch{1}.spm.stats.factorial_design.masking.em = {''};
>>
>> matlabbatch{1}.spm.stats.factorial_design.globalc.g_omit = 1;
>>
>> matlabbatch{1}.spm.stats.factorial_design.globalm.gmsca.gmsca_no = 1;
>>
>> matlabbatch{1}.spm.stats.factorial_design.globalm.glonorm = 1;
>>
>>
>>
>> spm_jobman('run', matlabbatch);
>>
>>
>>
>>
>>
>>
>>
>> clear matlabbatch
>>
>> matlabbatch{1}.spm.stats.fmri_est.spmmat = {[path, '\SPM.mat']};
>>
>> matlabbatch{1}.spm.stats.fmri_est.write_residuals = 0;
>>
>> matlabbatch{1}.spm.stats.fmri_est.method.Classical = 1;
>>
>> spm_jobman('run', matlabbatch);
>>
>>
>>
>>
>>
>>
>>
>>    % Define contrasts
>>
>>
>>
>>                 clear matlabbatch
>>
>>                 spm_jobman('initcfg')
>>
>>                 matlabbatch{1}.spm.stats.con.spmmat(1) =  {[path,
>> '\SPM.mat']};
>>
>>                 matlabbatch{1}.spm.stats.con.consess{1}.tcon.name =
>> 'ttest1';
>>
>>                 matlabbatch{1}.spm.stats.con.consess{1}.tcon.weights = [1
>> -1];
>>
>>                 matlabbatch{1}.spm.stats.con.consess{1}.tcon.sessrep =
>> 'repl';
>>
>>                 matlabbatch{1}.spm.stats.con.consess{2}.tcon.name =
>> 'ttest2';
>>
>>                 matlabbatch{1}.spm.stats.con.consess{2}.tcon.weights = [-1
>> 1];
>>
>>                 matlabbatch{1}.spm.stats.con.consess{2}.tcon.sessrep =
>> 'repl';
>>
>>                 matlabbatch{1}.spm.stats.con.delete = 1;
>>
>>                 spm_jobman('run', matlabbatch);
>>
>>                 disp('Set contrasts ok')
>>
>>
>>
>>
>>
>>             % Display Results
>>
>>                spm('defaults', 'EEG');
>>
>>                 clear matlabbatch
>>
>>                 spm_jobman('initcfg')
>>
>>                 matlabbatch{1}.spm.stats.results.spmmat =  {[path,
>> '\SPM.mat']};
>>
>>                 matlabbatch{1}.spm.stats.results.conspec(1).titlestr =
>> 'ttest1';
>>
>>                 matlabbatch{1}.spm.stats.results.conspec(1).contrasts = 1;
>>
>>                 matlabbatch{1}.spm.stats.results.conspec(1).threshdesc =
>> 'none';
>>
>>                 matlabbatch{1}.spm.stats.results.conspec(1).thresh = 0.05;
>>
>>                 matlabbatch{1}.spm.stats.results.conspec(1).extent = 0;
>>
>>                 matlabbatch{1}.spm.stats.results.conspec(1).mask.none = 1;
>>
>>                 matlabbatch{1}.spm.stats.results.print = 'ps';
>>
>>                 matlabbatch{1}.spm.stats.results.write.none = 1;
>>
>>                 spm_jobman('run', matlabbatch);
>>
>>                 clear matlabbatch
>>
>>