Print

Print


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
>
>