Differences between revisions 1 and 17 (spanning 16 versions)
Revision 1 as of 2007-08-16 16:14:59
Size: 7002
Editor: icebox
Comment:
Revision 17 as of 2009-05-18 13:45:09
Size: 5716
Editor: crash
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
[wiki:Self:FsTutorial top] | [wiki:Self:FsTutorial/FslFeatFreeSurfer previous]
== Overlaying FSL Feat statistical maps and Higher-Level Analysis ==
[[FsTutorial|top]] | [[FsTutorial/FslFeatFreeSurfer|previous]]
Line 4: Line 3:
 *To follow this exercise exactly be sure you've downloaded the [wiki:Self:FsTutorial/Data tutorial data set] before you begin. If you choose not to download the data set you can follow these instructions on your own data, but you will have to substitute your own specific paths and subject names. Type the following prior to beginning the exercises:
----
{{{
tcsh
setenv SUBJECTS_DIR $FREESURFER_HOME/subjects/buckner_data/tutorial_subjs
cd $SUBJECTS_DIR/fbert-feat
ln -s $FREESURFER_HOME/subjects/fsaverage
ln -s $FREESURFER_HOME/subjects/bert
}}}
----
The subjects 'fsaverage' and 'bert' may already exist in the subjects directory, so ignore any warnings that might be issued that say 'File exists'.
Line 6: Line 15:
In this exercise, the data set of subject '''bert''' is used for demonstration. To begin the exercises, first enter the following directory, and then set the current directory to be the default subjects directory using this command: === 1.0 Resampling COPEs to common surface ===
=== 1.1 Individual Runs for a Subject ===

In order to perform surface-based group analysis, you need to have all
the copes sampled into a common space. This is done with mris_preproc:
----
Line 8: Line 22:
cd $FREESURFER_HOME/subjects/buckner_data/tutorial_subjs
setenv SUBJECTS_DIR ${PWD}
mris_preproc --target fsaverage --hemi lh --fwhm 5 \
  --out xrun/lh.cope1.mgh \
  --iv fbert1.feat/stats/cope1.nii.gz \
  fbert1.feat/reg/freesurfer/anat2exf.register.dat \
  --iv fbert2.feat/stats/cope1.nii.gz \
  fbert2.feat/reg/freesurfer/anat2exf.register.dat
Line 11: Line 29:
----
In this case, the common space is the left hemisphere of
fsaverage. Surface-based smoothing of 5mm FWHM is used. The output
lh.cope1.mgh looks like a volume because it is in mgh format, but
it is really a surface stored in a volume format (note it's dimensions
are 1974 x 1 x 83 = 163842 = number of vertices in fsaverage's
surface). It has 2 frames, one for each run.
Line 12: Line 37:
=== 1.0 Overlaying the statistical map onto the bert's orig volume === Note that each volume (cope1.nii.gz) is accompanied by a registration
matrix (anat2exf.register.dat). The above example extracts data from
each run of the same subject. If you have multiple subjects, you can
specify the gfeat/cope1/stats/cope1.nii.gz paired with the
anat2std.register.dat matrix.
Line 14: Line 43:
Use the following command to display the zmap (zstat1.nii.gz) from the first run overlaid onto the bert's orig volume. It will display the automatic segmentation, and will also set the threshold at z = 2.3: You can also extract the cope variances (varcopes) in the same way:
----
Line 16: Line 46:
 tkmedit bert orig.mgz lh.white -aux brain.mgz \
   -overlay ./fbert1.feat/stats/zstat1.nii.gz \
   -overlay-reg ./fbert1.feat/reg/freesurfer/anat2exf.register.dat \
   -segmentation aparc+aseg.mgz -fthresh 2.3 -fmax 4.3
}}}

You should see the image below:[[BR]]
attachment:tkm-zstat1-cor-128.th23.small.jpg[[BR]]
When you click or mouse over a voxel, the cortical or subcortical structure that that voxel belongs to will be displayed in the control panel. You can view any of the volumes in the stats dir in this way as well as the clustered maps in the feat directory.

=== 2.0 View statistical maps on bert's surface ===
To view any of the statistical maps on bert's surface, close the tkmedit GUI (or open a new terminal window) and run:
{{{
tksurfer bert lh inflated \
  -overlay ./fbert1.feat/stats/zstat1.nii.gz \
  -overlay-reg ./fbert1.feat/reg/freesurfer/anat2exf.register.dat \
  -fthresh 2.3 -fmid 3.3 -fslope 1 -annot aparc.annot
}}}

Change the cortical parcellation to outline mode with View->LabelStyle->Outline. You should see the image below:[[BR]]
attachment:tks-zstat1-rh-lat.th23.small.jpg
[[BR]]
When you click or mouse over a vertex, the control panel will display the name of the cortical structure. You can view any of the volumes in the stats dir in this way as well as the clustered maps in the feat directory. You can also run the tkmedit and tksurfer commands above in separate shells and use the Save-Point/Goto-Point functionality to navigate through the volume and surface.

=== 3.0 Displaying Same-Subject, Cross-Run GFEAT Results ===

Typically, one collects more than one run/series of functtional data
for each subject. The individual runs are analyzed separately, then
combined in standard space with GFEAT using a fixed-effects
model. Since the data are no longer in the subject's native functional
space, a different registration matrix is needed to map the GFEAT
results to the individual. Each run of reg-feat2anat will create a
reg/freesurfer/anat2std.register.dat. Any one of these can be used to
map the GFEAT data to the subject's anatomy.

First, verify that the registration is good with:
{{{
tkregister2 --mov fbert.gfeat/mean_func.nii.gz --surf \
  --reg fbert1.feat/reg/freesurfer/anat2std.register.dat
}}}
mean_func.nii.gz is the mean of the example_func's in standard space.


Now show gfeat results on anatomical volume:
{{{
tkmedit bert orig.mgz -seg aparc+aseg.mgz \
  -ov fbert.gfeat/cope1.feat/stats/zstat1.nii.gz \
  -ovreg fbert1.feat/reg/freesurfer/anat2std.register.dat \
  -fthresh 2.3 -fmax 4.3
}}}
Here we've used the anat2std.register.dat from the first run.

Now show gfeat results on the surface:
{{{
tksurfer bert lh inflated -annot aparc.annot \
  -ov fbert.gfeat/cope1.feat/stats/zstat1.nii.gz \
  -ovreg fbert1.feat/reg/freesurfer/anat2std.register.dat \
  -fthresh 2.3 -fmid 3.3 -fslope 1
}}}

=== 3.0 Resampling COPEs to common surface and Higher-Level Analysis ===

When performing surface-based group analysis of functional data, the COPEs must be sampled to the common surface space (similar to how you must reslice the COPEs from the native functional space into standard space prior to group analysis). The surface sampling can be done in two ways.

First, you can use feat2surf as in:
{{{
feat2surf --feat fbert1.feat --cope-only
}}}
This will create fbert.feat/reg_surf-lh-fsaverage/stats for the left hemi (and another for the right). There will be cope1.nii.gz. This looks like a volume because it is in nifti format, but it is really a surface stored in a volume format (note it's dimensions are 1974 x 1 x 83 = 163842 = number of vertices in fsaverage's surface). You can then concatenate these files from different subjects to perform group analysis with FreeSurfer's mri_glmfit or FSL's randomise or flame.

Alternatively, when you have multiple runs/subjects, you can use mris_preproc, something like:
{{{
mris_preproc --target fsaverage --hemi lh --out xrun/lh.cope1.nii.gz \
  --iv fbert1.feat/stats/cope1.nii.gz fbert1.feat/reg/freesurfer/anat2exf.register.dat \
  --iv fbert2.feat/stats/cope1.nii.gz fbert2.feat/reg/freesurfer/anat2exf.register.dat
}}}
This will create the output directory (xrun) and lh.cope1.nii.gz, the copes from each run sampled onto the left hemi of the common surface.
In this case it will have only two frames for the two runs. This can then be used as input mri_glmfit, randomise, or flame. You can also
resample the variances of the copes with:
{{{
mris_preproc --target fsaverage --hemi lh --out xrun/lh.varcope1.nii.gz \
mris_preproc --target fsaverage --hemi lh --fwhm 5 \
  --out xrun/lh.varcope1.mgh \
Line 100: Line 51:
----
=== 1.2 Runs combined in a GFEAT within a Subject ===
Once the runs are combined in a GFEAT analysis, they are no longer in the native functional space but rather in the standard space. You can still
use the surface-based analysis as long as the subjects have not been combined together. To do this, you just need the appropriate registration
matrix that takes the data from standard space to the subject's anatomical. This is computed when you run reg-feat2anat. Each run will have this matrix,
but they should all be the same. Eg:
{{{
mris_preproc --target fsaverage --hemi lh --fwhm 5 \
  --out xsubject/lh.cope1.mgh \
  --iv fbert.gfeat/cope1.feat/stats/cope1.nii.gz fbert1.feat/reg/freesurfer/anat2std.register.dat \
  --iv fnick.gfeat/cope1.feat/stats/cope1.nii.gz fnick1.feat/reg/freesurfer/anat2std.register.dat \
  ...
}}}
The cope is specified from the gfeat, but the registration matrix is specified from the feat from the first run of each subject. The output can be used in the surface-based
group analysis below.
Line 101: Line 67:
The command below can be used to run a fixed-effects analysis across both runs. Normally, you would probably run a random effects or weight random effects analysis, but since
we only have two runs here, we'll use a fixed-effects. The dof=163 is the sum of the dofs from fbert?.feat/stats/dof. The model here is a simple one-sample group mean (OSGM) in which the desgin matrix is simply a column of 1s. For more elaborate designs, use an FSGD file instead of --osgm.
=== 2.0 Surface-based Group Analysis ===
Line 104: Line 69:
Once you have the copes in the common surface space, the (nearly) same
as you would with a thickness study. With a functional study, you also
have the flexibility to run fixed- and weighted random-effects
analysis.

The command below can be used to run a fixed-effects analysis across
both runs. Normally, you would probably run a random effects or weight
random effects analysis, but since we only have two runs here, we'll
use a fixed-effects. The dof=163 is the sum of the dofs from
fbert?.feat/stats/dof. The model here is a simple one-sample group
mean (OSGM) in which the design matrix is simply a column of 1s. For
more elaborate designs, use an FSGD file instead of --osgm.
----
Line 105: Line 83:
mri_glmfit --y xrun/lh.cope1.nii.gz --yffxvar xrun/lh.varcope1.nii.gz --ffxdof 163 \
           --osgm --glmdir xrun/lh.osgm.ffx --surf fsaverage lh --label lh.cortex.label
mri_glmfit --y xrun/lh.cope1.mgh --yffxvar xrun/lh.varcope1.mgh --ffxdof 163 \
           --osgm --glmdir xrun/lh.osgm.ffx --surf fsaverage lh \
           
--label $SUBJECTS_DIR/fsaverage/label/lh.cortex.label
Line 108: Line 87:
----
This will create a directory called xrun/lh.osgm.ffx:
{{{
ls xrun/lh.osgm.ffx
ar1.mgh -- spatial AR1 map
beta.mgh -- regression coefficients (same as PEs)
fwhm.dat -- estimate of spatial FWHM (not valid with 2 data points)
mask.mgh -- binary mask (if used)
mri_glmfit.log -- log file
osgm -- contrast directory
rstd.mgh -- residual standard deviation
rvar.mgh -- residual standard variance
Xg.dat -- design matrix (text)
X.mat -- design matrix (matlab)
}}}

The most important results are in the contrast directory:
{{{
ls xrun/lh.osgm.ffx/osgm
C.dat - contrast matrix
cnr.mgh - contrast-to-noise ratio
F.mgh - F ratio
gamma.mgh - contrast size (same as COPE)
maxvox.dat - info about the vertex with max F stat
sig.mgh - significance map (-log10(p))
}}}
Line 109: Line 115:
----
Line 110: Line 117:
tksurfer fsaverage lh inflated -overlay xrun/lh.osgm.ffx/osgm/sig.mgh \
 -fthresh 4 -fmid 5 -fslope 1 -annot aparc.annot
tksurfer fsaverage lh inflated  \
-overlay xrun/lh.osgm.ffx/osgm/sig.mgh \
  -fthresh 4 -fmid 5 -fslope 1 -annot aparc.annot
Line 113: Line 121:
There are several differences between this invokation of tksurfer and the one further above. ----

There are several differences between this invocation of tksurfer and
the one used during the individual analysis before:
Line 118: Line 129:
=== 3.0 Alternative method to resample COPEs to common surface ===
Line 119: Line 131:
This command will resample the copes to the common surface space, but
does not concatenate them together as mris_preproc does. Rather, it
stores the result in fbert1.feat/reg_surf-lh-fsaverage/stats for the
left (reg_surf-rh-fsaverage for right).
Line 120: Line 136:







{{{
feat2surf --feat fbert1.feat --cope-only
}}}

top | previous

Type the following prior to beginning the exercises:


tcsh
setenv SUBJECTS_DIR $FREESURFER_HOME/subjects/buckner_data/tutorial_subjs
cd $SUBJECTS_DIR/fbert-feat
ln -s $FREESURFER_HOME/subjects/fsaverage
ln -s $FREESURFER_HOME/subjects/bert


The subjects 'fsaverage' and 'bert' may already exist in the subjects directory, so ignore any warnings that might be issued that say 'File exists'.

1.0 Resampling COPEs to common surface

1.1 Individual Runs for a Subject

In order to perform surface-based group analysis, you need to have all the copes sampled into a common space. This is done with mris_preproc:


mris_preproc --target fsaverage --hemi lh --fwhm 5 \
  --out xrun/lh.cope1.mgh \
  --iv fbert1.feat/stats/cope1.nii.gz \
  fbert1.feat/reg/freesurfer/anat2exf.register.dat \
  --iv fbert2.feat/stats/cope1.nii.gz \
  fbert2.feat/reg/freesurfer/anat2exf.register.dat


In this case, the common space is the left hemisphere of fsaverage. Surface-based smoothing of 5mm FWHM is used. The output lh.cope1.mgh looks like a volume because it is in mgh format, but it is really a surface stored in a volume format (note it's dimensions are 1974 x 1 x 83 = 163842 = number of vertices in fsaverage's surface). It has 2 frames, one for each run.

Note that each volume (cope1.nii.gz) is accompanied by a registration matrix (anat2exf.register.dat). The above example extracts data from each run of the same subject. If you have multiple subjects, you can specify the gfeat/cope1/stats/cope1.nii.gz paired with the anat2std.register.dat matrix.

You can also extract the cope variances (varcopes) in the same way:


mris_preproc --target fsaverage --hemi lh --fwhm 5 \
  --out xrun/lh.varcope1.mgh \
  --iv fbert1.feat/stats/varcope1.nii.gz fbert1.feat/reg/freesurfer/anat2exf.register.dat \
  --iv fbert2.feat/stats/varcope1.nii.gz fbert2.feat/reg/freesurfer/anat2exf.register.dat


1.2 Runs combined in a GFEAT within a Subject

Once the runs are combined in a GFEAT analysis, they are no longer in the native functional space but rather in the standard space. You can still use the surface-based analysis as long as the subjects have not been combined together. To do this, you just need the appropriate registration matrix that takes the data from standard space to the subject's anatomical. This is computed when you run reg-feat2anat. Each run will have this matrix, but they should all be the same. Eg:

mris_preproc --target fsaverage --hemi lh --fwhm 5 \
  --out xsubject/lh.cope1.mgh \
  --iv fbert.gfeat/cope1.feat/stats/cope1.nii.gz fbert1.feat/reg/freesurfer/anat2std.register.dat \
  --iv fnick.gfeat/cope1.feat/stats/cope1.nii.gz fnick1.feat/reg/freesurfer/anat2std.register.dat \
  ...

The cope is specified from the gfeat, but the registration matrix is specified from the feat from the first run of each subject. The output can be used in the surface-based group analysis below.

2.0 Surface-based Group Analysis

Once you have the copes in the common surface space, the (nearly) same as you would with a thickness study. With a functional study, you also have the flexibility to run fixed- and weighted random-effects analysis.

The command below can be used to run a fixed-effects analysis across both runs. Normally, you would probably run a random effects or weight random effects analysis, but since we only have two runs here, we'll use a fixed-effects. The dof=163 is the sum of the dofs from fbert?.feat/stats/dof. The model here is a simple one-sample group mean (OSGM) in which the design matrix is simply a column of 1s. For more elaborate designs, use an FSGD file instead of --osgm.


mri_glmfit --y xrun/lh.cope1.mgh --yffxvar xrun/lh.varcope1.mgh --ffxdof 163 \
           --osgm --glmdir xrun/lh.osgm.ffx --surf fsaverage lh \
           --label $SUBJECTS_DIR/fsaverage/label/lh.cortex.label


This will create a directory called xrun/lh.osgm.ffx:

ls xrun/lh.osgm.ffx
ar1.mgh -- spatial AR1 map
beta.mgh -- regression coefficients (same as PEs)
fwhm.dat -- estimate of spatial FWHM (not valid with 2 data points)
mask.mgh -- binary mask (if used)
mri_glmfit.log -- log file
osgm -- contrast directory
rstd.mgh -- residual standard deviation
rvar.mgh -- residual standard variance
Xg.dat -- design matrix (text)
X.mat -- design matrix (matlab)

The most important results are in the contrast directory:

ls xrun/lh.osgm.ffx/osgm
C.dat - contrast matrix
cnr.mgh - contrast-to-noise ratio
F.mgh - F ratio
gamma.mgh - contrast size (same as COPE)
maxvox.dat - info about the vertex with max F stat
sig.mgh - significance map (-log10(p))

To view the higher-level results, run:


tksurfer fsaverage lh inflated  \
  -overlay xrun/lh.osgm.ffx/osgm/sig.mgh  \
  -fthresh 4 -fmid 5 -fslope 1 -annot aparc.annot


There are several differences between this invocation of tksurfer and the one used during the individual analysis before:

  • The subject is fsaverage, not bert
  • The input is a sig map, which is -log10(p)
  • The thresholds are significance thresholds, not z. So, 4 means p < .0001.

3.0 Alternative method to resample COPEs to common surface

This command will resample the copes to the common surface space, but does not concatenate them together as mris_preproc does. Rather, it stores the result in fbert1.feat/reg_surf-lh-fsaverage/stats for the left (reg_surf-rh-fsaverage for right).

feat2surf --feat fbert1.feat --cope-only

FsTutorial/FslGroupFeat (last edited 2016-09-23 10:26:15 by AllisonMoreau)