Group statistics, source level
Here we analyze beamforming results for 25 subjects. Power was computed for each virtual sensor for the M170 window pow=mean(timecourse.*timecourse); the data was then interpolated over the template MRI.
Contents
- Load data and display raw data
- Neural Activity Index (NAI), compute subordinate to dominant ratio
- t-test for selected voxels
- cluster based permutation statistics
- Plot the significant clusters
- ROI mask
- Plot t distribution + Atlas
- Change the cluster alpha
- Plot methods: ortho (transparancy added)
- Plot methods: surface
- Plot method: slice
- AFNI clustering and simulation
Load data and display raw data
the files to be loaded are output of ft_sourcegrandaverage, after masking voxels outside the brain.
cd amb load domMskdp load subMskdp load ~/ft_BIU/matlab/LCMV/sMRI subMskdp.anatomy=sMRI.anatomy; cfg = []; cfg.funparameter = 'avg.pow'; cfg.method='ortho'; figure ft_sourceplot(cfg,subMskdp)
the input is volume data with dimensions [91 109 91] not downsampling anatomy not downsampling avg.pow the call to "ft_volumedownsample" took 0 seconds and an estimated 0 MB no masking parameter voxel 312540, indices [46 56 32], location [0.0 -16.0 -10.0] mm, value 0.054797 scaling anatomy scaling anatomy scaling anatomy nas = undefined lpa = undefined rpa = undefined the call to "ft_sourceplot" took 0 seconds and an estimated 0 MB ans = funparameter: 'avg.pow' method: 'ortho' trackconfig: 'off' checkconfig: 'loose' checksize: 100000 showcallinfo: 'yes' maskparameter: {} downsample: 1 title: '' atlas: [] marker: [] markersize: 5 markercolor: [1 1 1] anaparameter: 'anatomy' funcolormap: [64x3 double] funcolorlim: 'zeromax' opacitymap: [1x64 double] opacitylim: 'auto' roi: [] location: 'auto' locationcoordinates: 'head' crosshair: 'yes' colorbar: 'yes' axis: 'on' interactive: 'no' queryrange: 3 coordsys: [] units: [] nslices: 20 slicedim: 3 slicerange: 'auto' surfdownsample: 1 surffile: 'single_subj_T1.mat' surfinflated: [] sphereradius: [] projvec: 1 projweight: 1 projcomb: 'mean' projthresh: [] distmat: [] camlight: 'yes' renderer: 'opengl' callinfo: [1x1 struct] version: [1x1 struct] previous: [1x1 struct]
Neural Activity Index (NAI), compute subordinate to dominant ratio
sub_dom=subMskdp; sub_dom.avg.nai=(subMskdp.avg.pow-domMskdp.avg.pow)./domMskdp.avg.pow; cfg.funparameter = 'avg.nai'; %cfg.interactive = 'yes'; cfg.location=[55 -15 10] cfg.funcolorlim=[0 4]; ft_sourceplot(cfg,sub_dom)
cfg = funparameter: 'avg.nai' method: 'ortho' location: [55 -15 10] the input is volume data with dimensions [91 109 91] not downsampling anatomy not downsampling avg.nai the call to "ft_volumedownsample" took 0 seconds and an estimated 0 MB no masking parameter voxel 411794, indices [19 57 42], location [54.0 -14.0 10.0] mm, value 0.660093 scaling anatomy scaling anatomy scaling anatomy nas = undefined lpa = undefined rpa = undefined the call to "ft_sourceplot" took 0 seconds and an estimated 0 MB ans = funparameter: 'avg.nai' method: 'ortho' location: [55 -15 10] funcolorlim: [0 4] trackconfig: 'off' checkconfig: 'loose' checksize: 100000 showcallinfo: 'yes' maskparameter: {} downsample: 1 title: '' atlas: [] marker: [] markersize: 5 markercolor: [1 1 1] anaparameter: 'anatomy' funcolormap: [64x3 double] opacitymap: [1x64 double] opacitylim: 'auto' roi: [] locationcoordinates: 'head' crosshair: 'yes' colorbar: 'yes' axis: 'on' interactive: 'no' queryrange: 3 coordsys: [] units: [] nslices: 20 slicedim: 3 slicerange: 'auto' surfdownsample: 1 surffile: 'single_subj_T1.mat' surfinflated: [] sphereradius: [] projvec: 1 projweight: 1 projcomb: 'mean' projthresh: [] distmat: [] camlight: 'yes' renderer: 'opengl' callinfo: [1x1 struct] version: [1x1 struct] previous: [1x1 struct]
t-test for selected voxels
voxind=312631; %center of head for subji=1:25 sub(subji,1)=subMskdp.trial(1,subji).pow(voxind,1); dom(subji,1)=domMskdp.trial(1,subji).pow(voxind,1); end [h,p]=ttest(sub,dom) voxind=361828; %right temporal for subji=1:25 sub(subji,1)=subMskdp.trial(1,subji).pow(voxind,1); dom(subji,1)=domMskdp.trial(1,subji).pow(voxind,1); end [h,p]=ttest(sub,dom)
h = 0 p = 0.2486 h = 1 p = 0.0114
cluster based permutation statistics
cfg=[]; cfg.dim = subMskdp.dim; cfg.method = 'montecarlo'; cfg.statistic = 'depsamplesT'; cfg.parameter = 'pow'; cfg.correctm = 'cluster'; % 'no', 'max', 'cluster', 'bonferoni', 'holms', 'fdr' cfg.numrandomization = 500; cfg.alpha = 0.05 cfg.clusteralpha= 0.05; cfg.tail = 0; cfg.design(1,:) = [1:25 1:25]; cfg.design(2,:) = [ones(1,25) ones(1,25)*2]; cfg.uvar = 1; % row of design matrix that contains unit variable (in this case: subjects) cfg.ivar = 2; % row of design matrix that contains independent variable (the conditions) stat = ft_sourcestatistics(cfg,subMskdp,domMskdp); save Cl05_M170masked_S_Dstat stat
cfg = dim: [91 109 91] method: 'montecarlo' statistic: 'depsamplesT' parameter: 'pow' correctm: 'cluster' numrandomization: 500 alpha: 0.0500 only selecting voxels inside the brain for statistics (28.0%) using "statistics_montecarlo" for the statistical testing Warning: doing a two-sided test without correcting p-values or alpha-level, p-values and alpha-level will reflect one-sided tests per tail using "statfun_depsamplesT" for the single-sample statistics constructing randomized design total number of measurements = 50 total number of variables = 2 number of independent variables = 1 number of unit variables = 1 number of within-cell variables = 0 number of control variables = 0 using a permutation resampling approach repeated measurement in variable 1 over 25 levels number of repeated measurements in each level is 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 computing a parametric threshold for clustering computing statistic estimated time per randomization is 0 seconds computing statistic 1 from 500 computing statistic 2 from 500 . . . computing statistic 498 from 500 computing statistic 499 from 500 computing statistic 500 from 500 found 4 positive clusters in observed data found 0 negative clusters in observed data computing clusters in randomization computing clusters in randomization 1 from 500 computing clusters in randomization 2 from 500 . . . computing clusters in randomization 497 from 500 computing clusters in randomization 498 from 500 computing clusters in randomization 499 from 500 computing clusters in randomization 500 from 500 using a cluster-based method for multiple comparison correction the returned probabilities and the thresholded mask are corrected for multiple comparisons the call to "ft_sourcestatistics" took 110 seconds and an estimated 1 MB
Plot the significant clusters
probplot=stat; probplot.prob1=1-probplot.prob; lowlim=0.95; probplot.mask=(probplot.prob1>=lowlim); probplot.anatomy=sMRI.anatomy; cfg = []; cfg.funcolorlim = [lowlim 1]; cfg.interactive = 'yes'; cfg.funparameter = 'prob1'; cfg.maskparameter= 'mask'; cfg.method='ortho'; cfg.inputcoord='mni'; cfg.atlas='~/ft_BIU/matlab/files/aal_MNI_V4.nii'; cfg.coordsys='mni'; cfg.roi='Frontal_Sup_L' cfg.location=[-20 -44 40];% wer= -50 -45 10 , broca= -50 25 0, fussiform = -42 -58 -11(cohen et al 2000), change x to positive for RH. %cfg.crosshair='no'; figure; ft_sourceplot(cfg,probplot);
cfg = funcolorlim: [0.9500 1] interactive: 'yes' funparameter: 'prob1' maskparameter: 'mask' method: 'ortho' inputcoord: 'mni' atlas: '~/ft_BIU/matlab/files/aal_MNI_V4.nii' coordsys: 'mni' roi: 'Frontal_Sup_L' the input is volume data with dimensions [91 109 91] not downsampling anatomy not downsampling mask not downsampling prob1 the call to "ft_volumedownsample" took 0 seconds and an estimated 0 MB reading aal_MNI_V4 atlas coordinates and labels Rescaling NIFTI: slope = 1, intercept = 0 the call to "ft_prepare_atlas" took 0 seconds and an estimated 0 MB Warning: The field cfg.box is forbidden, it will be removed from your configuration Rescaling NIFTI: slope = 1, intercept = 0 the call to "ft_prepare_atlas" took 0 seconds and an estimated 0 MB found 1 matching anatomical labels constructing mask for Frontal_Sup_L 3599 voxels in mask, which is 0.399 % of total volume the call to "ft_volumelookup" took 0 seconds and an estimated 0 MB click with mouse button to reposition the cursor press n/l/r on keyboard to record a fiducial position press q on keyboard to quit interactive mode voxel 559251, indices [56 42 57], mni coordinates [-20.0 -44.0 40.0] mm, value 0.000000 aal_MNI_V4 labels: not found scaling anatomy scaling anatomy scaling anatomy nas = undefined lpa = undefined rpa = undefined click with mouse button to reposition the cursor press n/l/r on keyboard to record a fiducial position press q on keyboard to quit interactive mode voxel 563164, indices [56 85 57], mni coordinates [-20.0 42.0 40.0] mm, value 0.986028 aal_MNI_V4 labels: Frontal_Sup_L scaling anatomy scaling anatomy scaling anatomy the call to "ft_sourceplot" took 215 seconds and an estimated 0 MB
ROI mask
cfg.roi='Frontal_Sup_L' cfg.location=[-20 -44 40];% wer= -50 -45 10 , broca= -50 25 0, fussiform = -42 -58 -11(cohen et al 2000), change x to positive for RH. %cfg.crosshair='no'; figure; ft_sourceplot(cfg,probplot);
cfg = funcolorlim: [0.9500 1] interactive: 'yes' funparameter: 'prob1' maskparameter: 'mask' method: 'ortho' inputcoord: 'mni' atlas: '~/ft_BIU/matlab/files/aal_MNI_V4.nii' coordsys: 'mni' roi: 'Frontal_Sup_L' location: [-20 -44 40] the input is volume data with dimensions [91 109 91] not downsampling anatomy not downsampling mask not downsampling prob1 the call to "ft_volumedownsample" took 0 seconds and an estimated 0 MB reading aal_MNI_V4 atlas coordinates and labels Rescaling NIFTI: slope = 1, intercept = 0 the call to "ft_prepare_atlas" took 0 seconds and an estimated 0 MB Warning: The field cfg.box is forbidden, it will be removed from your configuration Rescaling NIFTI: slope = 1, intercept = 0 the call to "ft_prepare_atlas" took 0 seconds and an estimated 0 MB found 1 matching anatomical labels constructing mask for Frontal_Sup_L 3599 voxels in mask, which is 0.399 % of total volume the call to "ft_volumelookup" took 0 seconds and an estimated 0 MB click with mouse button to reposition the cursor press n/l/r on keyboard to record a fiducial position press q on keyboard to quit interactive mode voxel 559251, indices [56 42 57], mni coordinates [-20.0 -44.0 40.0] mm, value 0.000000 aal_MNI_V4 labels: not found scaling anatomy scaling anatomy scaling anatomy nas = undefined lpa = undefined rpa = undefined click with mouse button to reposition the cursor press n/l/r on keyboard to record a fiducial position press q on keyboard to quit interactive mode voxel 563255, indices [56 86 57], mni coordinates [-20.0 44.0 40.0] mm, value 0.986028 aal_MNI_V4 labels: Frontal_Sup_L scaling anatomy scaling anatomy scaling anatomy the call to "ft_sourceplot" took 12 seconds and an estimated 0 MB
Plot t distribution + Atlas
%cfg.parameter = 'stat'; statplot=stat; statplot.anatomy=sMRI.anatomy; cfg=[]; cfg=rmfield(cfg1,'funcolorlim'); cfg.funcolorlim = [-3.5 3.5]; cfg.funparameter = 'stat'; cfg.method='ortho'; cfg.inputcoord='mni'; cfg.atlas='aal_MNI_V4.img'; figure ft_sourceplot(cfg2,statplot)
Error using ==> rmfield at 40 A field named 'funcolorlim' doesn't exist. Error in ==> course12 at 96 cfg=rmfield(cfg1,'funcolorlim');
Change the cluster alpha
I arranged the stats and plots in a function. what we did so far is similar to this: [cfg1,probplot,cfg2,statplot]=ambMonteClust12('Cl05_M170masked_S_D','subMskdp','domMskdp',0.95,0.05); Now we change cluster criterion for 0.05 to 0.01.
[cfg1,probplot,cfg2,statplot]=ambMonteClust12('Cl01_M170masked_S_D','subMskdp','domMskdp',0.95,0.01);
Plot methods: ortho (transparancy added)
ambPlotStat12('Cl01_M170masked_S_D',[0.95 0.98],'ortho',60);
Plot methods: surface
ambPlotStat12('Cl01_M170masked_S_D',[0.95 0.98],'surface');
Plot methods: slice
ambPlotStat12('Cl01_M170masked_S_D',[0.95 0.98],'slice');
AFNI clustering and simulation
cd ../alpha !~/abin/afni &