This tutorial steps you through the analysis of an fMRI data set with the FreeSurfer Functional Analysis Stream (FSFAST), from organizing the data to group analysis.
Tutorial Data Description
The data being analyzed is part of the fBIRN Phase I data set (www.nbirn.net).
- 5 subjects
- Each scanned twice
- Sensory-Motor Block Task; 15 sec OFF, 15 sec ON; 8 cycles
- 4 runs/visit
- TR = 3 sec, 85 time points/run (run length = 255 sec)
- 10 sites in full data set (tutorial data only from 1st visit at MGH site)
Getting and Organizing the Tutorial
The tutorial requires about 10G of space. There are two tar files:
- fsfast-tutorial.tar.gz - functional data
- fsfast-tutorial.subjects.tar.gz - freesurfer anatomical data
For the anatomical data, untar it with:
cd $SUBJECTS_DIR tar xvfz fsfast-tutorial.subjects.tar.gz
For the functional data,
cd /place/for/data tar xvfz fsfast-tutorial.tar.gz
This will create a directory called fsfast-tutorial. Create an environment variable for this directory:
cd fsfast-tutorial setenv FSFTUTDIR `pwd`
It will be assumed that you are in this directory (or subdirectory there of) throughout the tutorial. This directory will have five folders:
- fb1-raw - raw fMRI data
- fb1-raw-study - raw data organized as an FSFAST study but unanalyzed
- fb1-preproc-study - The same data preprocessed.
- fb1-analysis-study - The same data analyzed
subjects - FreeSurfer reconstruction of anatomical data (plus the fsaverage subject).
If you look in fb1-raw you will see 20 NIFTI data sets:
ls fb1-raw f.mgh-101.1-r003.nii f.mgh-103.1-r003.nii f.mgh-104.1-r003.nii f.mgh-105.1-r003.nii f.mgh-106.1-r003.nii f.mgh-101.1-r005.nii f.mgh-103.1-r005.nii f.mgh-104.1-r005.nii f.mgh-105.1-r005.nii f.mgh-106.1-r005.nii f.mgh-101.1-r007.nii f.mgh-103.1-r007.nii f.mgh-104.1-r007.nii f.mgh-105.1-r007.nii f.mgh-106.1-r007.nii f.mgh-101.1-r010.nii f.mgh-103.1-r010.nii f.mgh-104.1-r010.nii f.mgh-105.1-r010.nii f.mgh-106.1-r010.nii
These are the 20 fMRI runs mentioned above. In the name, f.mgh-10X.1-rYYY.nii, X indicates the subjects number (1, 3, 4, 5, 6), and YYY indicates the run number. The sensory-motor task happened to be runs 3, 5, 7, and 10.
Quick Visualization Tutorial (tkmedit/tksurfer)
The purpose of this tutorial is to familiarize you with how to use FreeSurfer volume viewer (tkmedit) and surface viewer (tksurfer) in the context of viewing functional data.You should already know how to use tkmedit and tksurfer otherwise. See the pages below for a more detailed handling of tkmedit and tksurfer.
[wiki:TkMeditGuide_2fTkMeditGeneralUsage_2fTkMeditInterface Interface] BR
[wiki:TkSurferGuide_2fTkSurferGeneralUsage_2fTkSurferInterface Interface] BR
Viewing a single functional overlay in the volume
cd into the study with already analyzed data:
Run tkmedit-sess (this is an FSFAST wrapper for tkmedit):
tkmedit-sess -s mgh-101.1 -a sm-gamma-fwhm5 -c odd-v-0 -aparc+aseg
Don't worry about what all the arguments mean, this part is only about visualization.This command will bring up two windows, one with a brain image the other a control panel.
The brain image is the FreeSurfer anatomical for this subject. The slightly pale colors on the anatomical indicate the FreeSurfer automatic segmentation. The bright red/yellow/blue are super-threshold voxels in the functional overlay. As you click on different points, you will see the "Functional value" field in the Tools window change as well as the "Sgmtn label".Note that areas that are not above threshold will still have non-zero functional values. The interpretation of the value depends on what is being viewed. This is a significance map, so the value is -log10(pvalue)*sign (ie, for a pvalue = .01, the functional value will be +2). The sign is a functional direction. The red/yellow are positive, and the blue are negative. As a functional value gets more positive, its color will change from red to yellow. As it gets more negative, it will change from blue to cyan.BR
Toggle the functional overlay on and off by hitting the button with the red/yellow blob in the Tools window (it's in the top row - if you mouse over it, you'll see a "Show Overlay" tooltip.)BR
Configure the functional overlay by clicking on "View..." in the Tools window, then "Configure->Functional Overlay...". You should see the following interface:
The thresholds are currently set at 2 (Min) and 4 (max). The Min threshold is the minimum absolute value needed for a voxel to show an overlay color. The maximum is the value beyond which the voxel will stop changing color. Try changing these values, then hit the Apply button to see their effect.BR
So, what's all that activation OUTSIDE of the brain. Can't have that! Try hitting View->Mask Functional Overlay to Aux button. There, now isn't that better? And why is it so blocky? There are big voxels in functional data, but if you'd like to pretend otherwise, try hitting the "Trilinear" button on the Configure Functional Overlay window.
Viewing multiple functional overlays and time courses in the volume
Run tkmedit-sess (this is an FSFAST wrapper for tkmedit):
tkmedit-sess -s mgh-101.1 -a sm-fir-fwhm5 -c odd-v-0 -aparc+aseg
This will bring up the two windows as you saw before (the brain image window will have a different overlay). It will also bring up a window called "Time Course". Click anywhere in the volume, and you will see a time course associated with that voxel similar to the one below.
The meaning of the time course depends upon the nature of the time course loaded. In this case it is the hemodynamic response to the task block averaged over all blocks over all runs (this is an "FIR" model). The horizontal axis is time (0 means the onset of the block). You can visualize the values of any multi-frame data set in this way (it does not have to be a "time" course).BR
Notice that there is not much activation in the functional overlay. This is good! You are looking at an overlay that corresponds 3 seconds prior to stimulus onset, so there should be no activation. To see the other time points, bring up the functional overlay configuration window (View->Configure->Functional Overlay). Notice that the "Time Point" field now has a range of 0-8 indicating the 9 time points in the Time Course window. If you hit the + button next to "Time Point" then hit Apply, you will see the overlay change. You will also see a vertical dashed line in the Time Course window. You are now looking the map associated with the time between 0 and 3 sec after stimulus onset. Keep hitting the +/Apply buttons to see different time points. You can hit the "|>" button to start a movie of the activation (then "" to stop it).
Viewing a single functional overlay on the surface
To view the same data on the surface run:
tksurfer-sess -s mgh-101.1 -a sm-gamma-fwhm5 -c odd-v-0 -hemi lh tksurfer-sess -s mgh-101.1 -a sm-gamma-fwhm5 -c odd-v-0 -hemi lh -aparc
Again you will see two windows, "Tksurfer Tools" and a surface image window like the one below. As with tkmedit, you can configure the overlay with View->Configure...->Overlay. The second command will load the surface parcellation which will hid the overlay. Change it to outline mode with: View->Label Style->Outline.
You can view the time course with:
tksurfer-sess -s mgh-101.1 -a sm-fir-fwhm5 -c odd-v-0 -hemi lh
Assembling the Data into the FSFAST Hierarchy
Before analyzing data in FSFAST, it needs to be in a "Hierarchy", ie, a certain directory structure and naming convention. By adhering to a hierarchy, you allow FSFAST to analyze large amounts of data automatically because it knows where to find the input and where to put the output. Each step in the analysis modifies the hierarchy in some way. All the data collected in one functional session (or visit) is placed under under folder (the "session directory"), and all the sessions are arranged under one folder (called the "Study Directory"). The full hierarchy is shown in the image below:
The red boxes indicate a directory with raw or preprocssed functional data. Eg, f.nii is a raw fMRI 4D file, and fmc.nii is motion corrected.
Creating a Hierarchy from the Tutorial Data
There are 5 subjects of data, each with four runs. We will create a an FSFAST session from one of the subjects. A properly create hierarchy can be found in $FSFTUTDIR/fb1-raw-study.
Create a Study Directory and cd into it:
cd $FSFTUTDIR mkdir -p my-study cd my-study
Create a session directory for the first subject:
mkdir -p mgh-101.1
Create a four run directories:
mkdir -p mgh-101.1/003 mkdir -p mgh-101.1/005 mkdir -p mgh-101.1/007 mkdir -p mgh-101.1/010
Copy the raw data:
cp ../fb1-raw/f.mgh-101.1-r003.nii mgh-101.1/003/f.nii cp ../fb1-raw/f.mgh-101.1-r005.nii mgh-101.1/005/f.nii cp ../fb1-raw/f.mgh-101.1-r007.nii mgh-101.1/007/f.nii cp ../fb1-raw/f.mgh-101.1-r010.nii mgh-101.1/010/f.nii
Note that they are all named "f.nii" but are distinguished by the directory they are in.
Link to FreeSurfer Anatomical Analysis
FSFAST makes extensive use of the FreeSurfer anatomical analysis. To link a subjects functional and structural data, create a "subjectname" file in the session directory. This file is literally called "subjectname" and its contents have the FreeSurfer subject name assigned during reconstruction and found in $SUBJECTS_DIR. These subjects have already been reconstructed; this subject's name is "fbph1-101". You can create this file with any text editor (emacs, vi, pico), or just:
echo fbph1-101 > mgh-101.1/subjectname
Create a Stimulus Schedule (Paradigm File)
A "paradigm" file is a record of which stimulus was presented when and for how long. Each paradigm file has four columns (extras are ignored). The columns are:
- 1. Stimulus onset time (sec)
- 2. Condition ID code (0, 1, 2, ...)
- 3. Stimulus Duration (sec)
- 4. Stimulus Weight (usually 1)
The Stimulus onset is with respect to the time of the first image. The Condition is a unique number that identifies the event or block type that the stimulus belongs to. They must be contiguous, and Condition 0 is reserved for the Null Event (usually Fixation). The weight can be used to model various effects of learning or adaptation (just set them to 1 for now).
For this exercise, you will create two paradigm files based on the fBIRN sensory-motor experiment. The timing for the experiment was described above. The task timing is shown graphically below.
Using a text editor (emacs, vi, pico, etc), create a paradigm file called "sensory-motor0.par".
The correct paradigm file is here SensMotPar (This example file has a 5th column with the condition name. This is ignored in the analysis).
To make things a little more interesting, we are going to create another paradigm file pretending that the odd and even blocks are different. Assign Odd blocks Condition 1 and Even blocks Condition 2.
Call this paradigm file "sensory-motor.par". The correct paradigm file is here SensMotOddEvenPar.
Now copy this file into each run directory:
cp sensory-motor.par mgh-101.1/003/sensory-motor.par cp sensory-motor.par mgh-101.1/005/sensory-motor.par cp sensory-motor.par mgh-101.1/007/sensory-motor.par cp sensory-motor.par mgh-101.1/010/sensory-motor.par
While each of these have the same contents, they can just as easily be different.
Create a Session ID File
You would normally do this for each of the subjects, but you've probably got the point by now. If you were to create a session for each, you would then have five sessions: mgh-101.1, mgh-103.1, mgh-104.1, mgh-105.1, mgh-106.1. To help keep track of your sessions, you can create a session ID file with your favorite text editor. his is just a simple file with a list of your session. The contents should look like (the order is unimportant):
mgh-101.1 mgh-103.1 mgh-104.1 mgh-105.1 mgh-106.1
This file can be passed to many of the FSFAST commands with the -sf argument. Individual sessions can be passed with -s, as you will see below.
Preprocessing of fMRI Data (preproc-sess)
What preprocessing stages do you want to run?
There are at least seven types of preprocessing that are run on fMRI data: 1. brain masking, 2. motion correction (MC), 3. slice-timing correction (STC), 4. B0 distortion correction, 5. spatial smoothing, 6. resampling to common space, and 7. intensity normalization. Not all packages run all of these seven, and they are not always run in the same order, and some stages are sometimes run as post-processing. In FSFAST, we can run 1. MC, 2. STC (optional), 3. smoothing, and 4. intensity normalization. We create a brain mask, but we do not mask the functional data.
For these exercises, cd into the fb1-raw-study directory:
Note that the fully preprocessed data can be found int fb1-preproc-raw.
To run MC and spatial smoothing by 5 mm FWHM along with brain mask creation on one session run:
preproc-sess -s mgh-101.1 -fwhm 5
Note that this has already been done with all subjects in the fb1-preproc-study directory. To preprocess all of the session, you would run "preproc-sess -sf sessid -fwhm 5". Also note that if preprocessing as already been performed on a session, it will automatically skip it and move on to the next (unless you add -force to the command-line).
Examine additions to FSFAST hierarchy
As mentioned above, each processing step adds something to the FSFAST hierarchy. To see what has been created, run:
ls mgh-101.1/bold/003 ls mgh-101.1/bold/masks
You will see f.nii (the raw data), fmc.nii (motion corrected), and fmcsm5.nii (motion corrected and smoothed). In addition you will see fmc.mcdat; this is a text file with the motion correction will parameters (translations and rotations) as created by AFNI. You will also see mcextreg.bhdr. This is a binary file with the orthogonalized motion correction parameters which can later be used as nuisance regressors when analyzing the data. These files will exist in each of the runs (ie, 005, 007, 010). You will see a brain.nii volume in the masks folder. This is a binary mask of the brain as found by FSL's BET program. The functional data themselves are not masked.BR
To view the translation components, run
plot-twf-sess -s mgh-101.1 -mc
This will bring up a plot with the translations for each of the runs.
In order to render the functional results on the anatomical background as well as to map the functional results into a common space for group analysis, it is necessary to register/align the functional volume with a structural volume. In FSFAST, we first register to the same-subject FreeSurfer anatomical with a 6 DOF registration. We then map the functional to Talairach/MNI305/fsaverage space by concatenating the within-subject function/structure registration with the Talairach registration (talairach.xfm) created when the subject was reconstructed. For mapping to surface-based space, we concatenate the within-subject function/structure registration with the surface-based registration. Since we are only dealing with the functional analysis here, we will just consider the within-subject function/structure registration.
For these series of exercises, cd into fb1-preproc-study:
View unregistered (tkregister-sess)
Run the following command to see how the functional and structural are aligned prior to performing any automatic registration.
tkregister-sess -s mgh-101.1 -regheader
You should see the anatomical image (left, below). The green line is the cortical surface for that subject. Hit the compare button to see the functional middle image. The cortical surface shows that the volumes are not in line.
attachment:tkregister-anat.gif attachment:tkregister-before.gif attachment:tkregister-after.gif
Run automatic registration (fslregister-sess)
fslregister-sess -s mgh-101.1
When this command is complete, you will see a register.dat file in mgh-101.1/bold. This is the only change. The functional data are not resampled!
Check automatic registration (tkregister-sess)
tkregister-sess -s mgh-101.1 -regheader
When you hit the Compare button, you should see the image on the right, above.
Check talairach registration
When performing a volume-based group analysis, it is important that the talairach transform be accurate (or as accurate as talairach can be). You should have done this during the FreeSurfer reconstruction for this subject. The command below is just a reminder of how to do it.
tkregister2 --s fbph1-101 --fstal --surf
The First-Level Analysis (FLA) consists of setting up models of the task-related and nuisance components, fitting the model, and making inferences. The FLA is done in two stages. In the first stage, the FLA is configured (with mkanalysis-sess). This is done ONCE regardless of how many data sets you have (you do not even need to have any data to run the configuration). In the second stage, you actually perform the analysis/inference with selxavg3-sess by passing it the configuration and the session that you want to analyze. selxavg3-sess customizes the analysis for that session based on what it finds in the hierarchy, builds the design matrix, and performs the analysis. Breaking the FLA up into these two stages assures that all sessions are analyzed in the same way.
In this exercise, we will configure two analyses, one assuming an HRF and the other using an FIR model, you will then launch the analysis and view the results. The fully analyzed data can be found in fb1-analysis-study. These exercises will be done in fb1-preproc-study:
Configure Analysis and Contrasts I: Gamma HRF Model
Configuring the FLA is performed with mkanalysis-sess. When you run:
You will see the following window:
You will use this window to specify the input of the analysis, the hemodynamic response model, contrasts, and nuisance regressors. The red fields are field that you must enter before you can save the analysis. There is a lot going on with this GUI, so we'll break it down. Note that many of the components have "tooltips" that will show when you pause the mouse pointer over them.
In the upper left corner is a panel called "FS-FAST Hierarchy". The "Func Stem" is the input to the analysis. You should specify the output from the preprocessing. For this exercise, we are going to use the motion corrected and 5mm smoothed data. This functional volume is called fmcsm5.nii in the hierarchy which makes its stem "fmcsm5" (ie, just strip off the nii). Enter "fmcsm5" into the field. When you hit return, it changes from red to white. Next, enter the TR (sec). For this experiment it was 3 sec. This will be checked against the TR found in the input nifti file. Leave INorm checked.
Turn your attention to the "Noise and Nuisance Variables" panel. Low frequency noise so prevalent in fMRI is compensated for in a combination of three ways. Drift components are modeled with polynomial regressors. The order can be adjusted, but leave it at 2 for now. The motion correction parameters can be used as regressors by checking the "MC Regressors" box (do so now). Finally, the remaining noise is modeled as time-invariant linear AR1 process when the "Temporal Whitening" box is checked (leave it so). There is one additionally way to compensate for noise through the use of a "Time Point Exclude File", but we will not consider that here.
You will specify the model of the task-related signal in the "Event Related/Block Design" panel (leave that box checked). Choose the number of conditions by clicking on the "NConditions" slider. This is the number of TASK conditions (do not include the Null/Fixation condition). In this example, we have two conditions (Odd and Even), so adjust this to 2. To the right of this is the "Paradigm File". Enter "sensory-motor.par". Note that the number of task conditions in the paradigm file must match that specified with "NConditions". Below, you will specify the Hemodynamic Response Model. There are three choices: Gamma, SPM HRF, and FIR. Choose Gamma for now. If you hit the "Plot" button it will show the Gamma and SPM HRF. As you change the Gamma parameters (Delay, Dispersion (Tau), and Exponent (Alpha)), the Gamma plot will change. Make sure that they are at Delay=2.25, Tau=1.25, and Alpha=2.
At this point, you have specified the model of the BOLD signal including HRF, nuisance, and noise. The GUI should look like the image below:
Now you are ready to specify contrasts. A contrast is an instantiation of a hypothesis and is represented by a contrast matrix (ie, a linear summation of the regression coefficients). Contrasts are managed through a separate GUI accessed through the "Contrast" list box. When you click on "Add Contrast", you will see the following screen:
There are several things going on here, but the most important is the list of conditions in the middle of the GUI (ie, "Condition 1", "Condition 2") will green, red, and black radio buttons. Green indicates an "active" condition; red means a "control" condition, and black means to ignore the condition in the contrast. Active conditions are given a weight of +1; controls are given -1; ignores get 0. The weight is given to the right of the buttons. All contrasts are implicitly computed against the Null or Fixation condition. If you want to test the null hypothesis that Condition 1 is no different than the Null condition, then you would make Condition 1 active and ignore the rest. To test the null hypothesis that Condition 1 is no different than Condition 2, then you would make Condition 1 active and Condition 2 control.
For this exercise, we are going to test four NULL hypotheses:
- Odd == Fixation (odd-v-0)
- Even == Fixation (even-v-0)
- Odd == Even (odd-v-even)
- Odd+Even == Fixation (odd-+even)
The last one tests whether the average of the responses to odd and even are different than fixation. Remember that, according to the Paradigm File, Condition 1 is Odd, and Condition 2 is Even. When "Add Contrast" is clicked, "Condition 1" will be active and Condition 2 will be ignored. This corresponds to our first contrast, so there is nothing we need to do except give the contrast a name. You should give your contrasts meaningful but terse names. Specify "odd-v-0" for this contrast. Hit the "Done/Save" button. You will now see "odd-v-0" appear in the Contrast list box in the mkanalyiss GUI.
Click on "Add Contrast" again to bring up the contrast GUI again. This time, click on the green button next to Condition 2 (see its weight change from 0 to 1). Then click on the black button next to Condition 1 (see weight change from 1 to 0). Change the name to "even-v-0", then click Done/Save. "even-v-0" will appear in the list box.
Click on "Add Contrast" again, and click the red button next to Condition 2 (see its weight change from 0 to -1). Change the name to "odd-v-even", then click Done/Save.
Click on "Add Contrast" one more time, and click the green button next to Condition 2 (see its weight change from 0 to +1). Change the name to "odd+even", then click Done/Save.
You can go back and view and/or edit an contrast by clicking on it in the list box.
The last thing you have to do is to give your analysis a name. Like the contrasts, it should be terse but descriptive (it cannot have any spaces or blanks). Specify "sm-gamma-fwhm5" (sm = sensory-motor, gamma = Gamma HRF, and fwhm5 for the input). The interface should now look like:
Hit the "Save" button, then "Quit".
After you hit Quit, control will be returned to the shell that you ran mkanalysis-sess from. If you type "ls", you will see a new folder called "sm-gamma-fwhm5". If you "ls sm-gamma-fwhm5", you will see analysis.info, analysis.cfg, odd-v-0.mat, even-v-0.mat, odd-v-even.mat, odd+even.mat. Your configuration is stored in these files. You can browse/edit your configuration by running:
mkanalysis-sess -gui -analysis sm-gamma-fwhm5
Configure Analysis and Contrasts II: FIR HRF Model
Now we are going to use a Finit Impulse Response (FIR) to model the hemodynamic response. The FIR does not make any assumptions about the shape of the HRF but is also less interpretable. Again, run
Set the Func Stem, TR, NConditions, and Paradigm File as above, but now click on the "FIR" checkbox. This will enable the "Total Time Window", "PreStim", and "TER" entry boxes. The Time Window is the window within which we will estimate the HRF. Given that the task is 15 sec long and the rest is 15 sec, let's choose 27 sec. The PreStim is the amount of time before stimulus onset to start estimating the HRF. A non-zero PreStim gives us an idea of what the baseline is at stimulus onset. Set it to 6.
Setup the same contrasts as you did above, then name the analysis "sm-fir-fwhm5", hit Save, then Quit.
Analyze First Level (selxavg3-sess)
You are now ready to analyze some data! Note that the fully analyzed data (along with correctly configured analyses) can be found in fb1-analysis-study. To analyze the data for session mgh-101.1 with the sm-gamma-fwhm5 analysis, run:
selxavg3-sess -s mgh-101.1 -analysis sm-gamma-fwhm5
Note that if you want to analyze all the sessions, you can run "selxavg3-sess -sf sessid -analysis sm-gamma-fwhm5", but this might take a while.
To analyze the data for session mgh-101.1 with the sm-fir-fwhm5 analysis, run:
selxavg3-sess -s mgh-101.1 -analysis sm-fir-fwhm5
Examine additions to the FSFAST hierarchy
ls mgh-101.1/bold ls mgh-101.1/bold/sm-gamma-fwhm5
The bold folder now has sm-gamma-fwhm5 (as well as the fir too). This folder has all of the results for this analysis, including:
- beta.nii - regression coefficients
- rvar.nii - residual error variance
- mask.nii - mask (copy of bold/masks/brain.nii)
- meanfunc.nii - mean functional image
- fsnr.nii - functional SNR map
- X.mat - design matrix (in matlab format)
- dof - text file with degrees of freedom
- fwhm.dat - text file with smoothness estimate (Full-Width/Half-Max)
- contrast folders: odd-v-0, even-v-0, odd+even, odd-v-even
Look in one of the contrasts:
- ces.nii - contrast effect size (contrast matrix * regression coef)
- cesvar.nii - variance of CES
- sig.nii - significance map (-log10(p))
Visualization of the first-level analysis will be done in the folder with the fully analyzed data set:
Volume-based visualization (tkmedit-sess)
View the result of the Gamma HRF analysis on the FreeSurfer anatomical volume for mgh-101.1 with:
tkmedit-sess -s mgh-101.1 -aparc+aseg -analysis sm-gamma-fwhm5 \ -c odd-v-0 -c even-v-0 -c odd+even -c odd-v-even
This will automatically load sig.nii. When you configure the functional overlay with View->Configure->Functional Overlay, you will see that there are 4 "Time Points". Each point is different contrast (ie, 0 is odd-v-0, 1 is even-v-0, etc). Scroll through each one.
View the result of the HRF HRF analysis for mgh-101.1 with:
tkmedit-sess -s mgh-101.1 -aparc+aseg -analysis sm-fir-fwhm5 -c odd-v-0
Here we view only one contrast at a time because each contrast has multiple time points for each point in the time window. Note that there is less activation than the Gamma HRF. When you click on a point, you will see the HRF for both Condition 1 (Odd) and Condition 2 (Even) blocks.
Finally, view the overlay maps from the Gamma with the HRF from the FIR:
tkmedit-sess -s mgh-101.1 -aparc+aseg -analysis sm-fir-fwhm5 \ -mapanalysis sm-gamma-fwhm5 -c odd-v-0 -c even-v-0 -c odd+even -c odd-v-even
When you configure the overlay, you will see that there are 4 "Time Points" -- these correspond to the 4 contrasts from the Gamma analysis.
Surface-based visualization (tksurfer-sess)
View the result of the Gamma HRF analysis on the FreeSurfer anatomical surface for mgh-101.1 with:
tksurfer-sess -hemi lh -aparc -s mgh-101.1 -analysis sm-gamma-fwhm5 \ -c odd-v-0 -c even-v-0 -c odd+even -c odd-v-even
Note that the command-line is nearly identical to that of tkmedit above. The difference is that the hemisphere is specified ("-hemi lh"), and "-aparc+aseg" is replaced with "-aparc" to load the surface-based segmentation.
Higher-Level (Group) Analysis
Higher-Level is where you make inferences about the population that your subjects are drawn from. It is a bit confusing at times because both use GLMs, so at both levels you are constructing design matrices, contrasts, etc. Traditionally, fMRI group analysis has been done in a standard volume space (ie, Talairach/MNI152/MNI305). With FreeSurfer, we also have the option to analyze group data in the surface space. Volume-based analyses are done in MNI305 space (which is the same as the fsaverage subject).
For the next exercises, we will work in the fb1-analysis-study directory
All the first level analyses have been done here. The group-level analyses have been done in the group-analysis-tut directory.
Assemble the Data (isxconcat-sess)
The first step in the group analysis is to "assemble" the data. This means creating a single 4D file with where the 4th "time" dimension is actual all the subjects concatenated together in a common space. There is a different command, depending upon whether the common space is volume- or surface-based.
To run the volume-based concatenation, run the command below. Note that the data from this command already exist in the group-analysis-tut directory.
isxconcat-sess -sf sessid -analysis sm-gamma-fwhm5 -c odd-v-0 -o group-analysis
This command will go through each session in the sessid file, find the odd-v-0 contrast in the sm-gamma-fwhm5 analysis, use the register.dat for that session to resample to MNI305/fsaverage space. These are all concatenated together and saved in group-analysis/sm-gamma-fwhm5/odd-v-0/tal.ces.nii file. You can run other contrasts by adding -c arguments. In addition to this output, several other files are created. To see them,
ls group-analysis-tut/sm-gamma-fwhm5 cat group-analysis-tut/sm-gamma-fwhm5/sessid cat group-analysis-tut/sm-gamma-fwhm5/ffxdof.dat
In the output directory, you will see a series of files that start with "tal". tal.meanfunc.nii is a stack where each "time point" is the mean functional image of each subject sampled in the MNI305 space. tal.masks.nii are the binary masks for all the subjects, and tal.fsnr.nii are the functional SNR maps from each subject. tal.mask.nii is a single binary mask made from the intersection of the individuals. ffxdof.dat is the fixed-effects DOF across all subjects. sessid.txt is the list of sessions, the corresponding freesurfer subject name, and the DOF contributed by each subject.
You will also see some files that being with "lh". These are the same thing in the surface-based space.
Now look in the directory for odd-v-0 the contrast
You will see tal.ces.nii. These are the contrast maps for eaah of the subjects, and tal.cesvar.nii are the variance of the contrast for each subject (ie, the square of the standard error). This variance is needed for fixed-effects and weighted random-effects analysis. You'll also see a bunch of directories with "osgm". Ignore those for a moment.
There are three important quality assurance steps that can be performed here. First, view the mean functionals to make sure that all are registered together properly. To do this run,
tkregister2 --s fsaverage --surf --regheader --check-reg \ --mov group-analysis-tut/sm-gamma-fwhm5/tal.meanfunc.nii \
The image window will show the MNI305 brain. Hit the "Compare" button to show the average functional of the first session. Click in the image window, then hit the 'a' key. Each time you hit the 'a' key, it will advance to the next subject.
The next QA step is to check the individual masks. This can be done with:
tkmedit fsaverage orig.mgz \ -overlay group-analysis-tut/sm-gamma-fwhm5/tal.masks.nii -fthresh 0.5
The threshold of 0.5 is appropriate because these masks are binary (ie 0-1). When you View->Configure->Functional Overlay, you will see that there are 5 "Time Points" (0-4) corresponding to the 5 subjects. Advance through each one to assure that the masks are in the proper place.
The final step is to look at the functional SNR maps with
tkmedit fsaverage orig.mgz \ -overlay group-analysis-tut/sm-gamma-fwhm5/tal.fsnr.nii \ -timecourse group-analysis-tut/sm-gamma-fwhm5/tal.fsnr.nii \ -fthresh 50 -fmax 250
Again, when you View->Configure->Functional Overlay, you will see that there are 5 "Time Points" (0-4) corresponding to the 5 subjects. Advance through each one to assure that the SNR maps are "consistent". When you click on a voxel, you will see the SNR for each subject plotted in the "Time Course" window. The actual value of the FSNR will vary depending upon how much smoothing you've done and the details of the acquisition. You are looking for outliers here.
Group GLM Analysis
When you perform a group analysis, you are looking for effects of the task across the population. In this example, we only going to test whether the mean effect of Odd vs Fixation (odd-v-0) is different than 0. This is known as a one-sample-group-mean (OSGM) and corresponds to a group design matrix that is simply a column of 1s. One can perform considerably more elaborate tests (eg, differences in groups). Now, cd to where the data are:
Random Effects (RFx, OLS)
Random effects is a test of whether the mean of the population that the subjects were drawn from is 0. It is done with mri_glmfit:
mri_glmfit --y tal.ces.nii --osgm --mask ../tal.mask.nii --glmdir tal.rfx.osgm --nii
tal.ces.nii are the inputs for this contrast for all subjects. --osgm tells it to create the simple OSGM design matrix and to create a group contrast to test the group mean against 0. The mask is used to exclude extra-brain voxels. The results will be stored in tal.rfx.osgm:
ls tal.rfx.osgm ls tal.rfx.osgm/osgm
You will see several files in the output. beta.nii is the map of regression coefficients. There is also an "osgm" folder with sig.nii. This is a map of the significances of the test. We will view it below.
Weighted Random Effects (WRFx, WLS)
In a real experiment, some subjects are noisier than others, and it is a good idea to take this into account since we have information about how noisy a subject is through the lower-level analysis. In weighted least squares (WLS), this is handled by weighting each subject by the inverse of their noise (ie, noisier subjects get lower weight). To do this with mri_glmfit, run:
mri_glmfit --y tal.ces.nii --osgm --glmdir tal.wrfx.osgm --nii --mask ../tal.mask.nii \ --wls tal.cesvar.nii
The command-line is almost the same as the RFx except that the first-level noise variances (tal.cesvar.nii) are passed with the --wls option. The results are saved in tal.wrfx.osgm and have the same naming convention as the RFx.
Fixed Effects (FFx)
A fixed effects analysis tests whether an effect exists within the given subject pool (as opposed to the population that the subjects were pulled from). It is like doing one big fist-level analysis. The big difference with RFx or WRFx is that the variance is computed from the lower level analysis variance. This is done in mri_glmfit with:
mri_glmfit --y tal.ces.nii --osgm --glmdir tal.ffx.osgm --nii --mask ../tal.mask.nii \ --yffxvar tal.cesvar.nii --ffxdofdat ../ffxdof.dat
Again, the command-line is similar to above, except that the lower level variances are passed with --yffxvar, and the total lower level DOFs are passed with --ffxdofdat.
Output and visualization
To visualize these three analyses, we will first concatenate them into one file to make it easier to view in tkmedit:
mri_concat tal.rfx.osgm/osgm/sig.nii \ tal.wrfx.osgm/osgm/sig.nii \ tal.ffx.osgm/osgm/sig.nii \ --o all.sig.nii) tkmedit fsaverage orig.mgz -aux brain.mgz -bc-main-fsavg \ -overlay all.sig.nii -fthresh 2 -fmax 4
Configure the overlay with View->Configure->Functional Overlay. Scroll through the "time" points to see the differences in the analyses.
Correction for Multiple Comparisons/Cluster Analysis
With so many voxels in fMRI maps, it is very likely that many voxels will appear to be active purely by random chance (ie, a false positive). The is known as the "Problem of Multiple Comparisons". One way around this is to do a cluster analysis in which active voxels are eliminated unless they appear in a cluster, the idea being that false positives will not appear next to each other. To do this in FSFAST, run the following command on the RFx analysis:
mri_volcluster --in tal.rfx.osgm/osgm/sig.nii --thmin 2 \ --fwhmdat tal.rfx.osgm/fwhm.dat --cwpvalthresh 0.1 \ --mask tal.rfx.osgm/mask.nii --fsaverage \ --sum tal.rfx.osgm/osgm/cluster.sum \ --cwsig tal.rfx.osgm/osgm/cwsig.cluster.nii \ --out tal.rfx.osgm/osgm/sig.cluster.nii \ --ocn tal.rfx.osgm/osgm/ocn.cluster.nii
In this command we use the significance map as input thresholded at 2, where 2 is -log10(p), so p < .01. The --fwhmdat option tells mri_volcluster to use the spatial smoothness estimate from GLM analysis (saved in tal.rfx.osgm/fwhm.dat). The "--cwpvalthresh 0.1" tells it to ignore clusters unless their p-value is less than 0.1 (you can threshold more stringently later on).
One of the outputs is a cluster table (cluster.sum). This is a text file with the list of clusters. View it with:
You can also see it here: FsFastTutorial/ClusterSummary. The table shows the size of each cluster in voxels and mm^3, the Talairach coordinate, the maximum significance in the cluster, and the clusterwise p-value (CWP). Some of them are 0, meaning that the p-value was so low that it could not be computed (remember, this is a good thing!).
The other outputs are volumes. cwsig.cluster.nii is a map of the clusters with the voxel value equal to the -log10(pvalue) of the cluster that the voxel is associated with. sig.cluster.nii is the original sig map with non-cluster voxels removed. ocn.cluster.nii is a map where the value at each voxel is replaced by the number of the cluster that the voxel is associated with. View the clusterwise significance:
tkmedit fsaverage orig.mgz -aux brain.mgz -bc-main-fsavg \ -overlay tal.rfx.osgm/osgm/cwsig.cluster.nii -fthresh 2 -fmax 4
Play with Your Data
In this section, you are encouraged to experiment with the data. These analyses have not already been pre-computed, but they should not take long to run.
Change the smoothing level
Use these series of commands to analyze the data smoothed by 10 mm FWHM. The preproc-sess command will create fmcsm10.nii. In mkanalysis-sess, use the -clone option to copy the parameters from an existing analysis, then just change the Func Stem to fmcsm10.
cd $FSFUTDIR/fb1-analysis-study preproc-sess -s mgh-101.1 -fwhm 10 mkanalysis-sess -gui -clone sm-gamma-fwhm5 -analysis sm-gamma-fwhm10 selxavg3-sess -s mgh-101.1 -a sm-gamma-fwhm10 tkmedit-sess -s mgh-101.1 -analysis sm-gamma-fwhm10 \ -c odd-v-0 -c even-v-0 -c odd+even -c odd-v-even -aparc+aseg
Change noise/nuisance model
Use these series of commands to analyze the data with little compensation for noise and nuisance variables. Change the analysis by turning off whitening, set the Polynomial Order to 0, and uncheck the MC Regressors.
cd $FSFUTDIR/fb1-analysis-study mkanalysis-sess -gui -clone sm-gamma-fwhm5 -analysis sm-gamma-fwhm5B selxavg3-sess -s mgh-101.1 -a sm-gamma-fwhm5B tkmedit-sess -s mgh-101.1 -analysis sm-gamma-fwhm5B \ -c odd-v-0 -c even-v-0 -c odd+even -c odd-v-even -aparc+aseg
FsFast Tutorial SlideShow
- ["/000 Frontmatter"]
- ["/300 Download data"]
- ["/400 Get familiar with sessions format"]
- ["/500 Make a directory for your study"]
- ["/600 Make paradigm files for your experiment"]
- ["/700 Motion correct the data"]
- ["/800 Normalize signal intensity"]
- ["/900 Set up session-level analysis"]
- ["/905 Average session-level data by condition"]
- ["/910 Define an omnibus contrast"]
- ["/920 Compute statistical maps of the omnibus contrast"]
- ["/930 Run functional and structural registration"]
- ["/940 Visualization"]