ROI Analysis Presentation


This post is a supplement to the ROI workshop at NYU. You can follow along with the lecture on YouTube here, and you can download the example dataset here.

Code Templates

The following code templates will be used for the workshop. You can change them to reflect the conditions and design of your own study. Also note that these code snippets can be rewritten to be used with loops.

  1. Creating an ROI: echo “42 -13 58” | 3dUndump -srad 5 -orient LPI -master subj001_stats.nii -prefix Right_M1.nii -xyz -
  2. Concatenating Contrast Maps: 3dTcat subj001_stats.nii'[3]' subj002_stats.nii'[3]', subj003_stats.nii'[3]' subj004_stats.nii'[3]' subj005_stats.nii'[3]' subj006_stats.nii'[3]' -prefix Left-Right_ContrastMaps.nii
  3. Extracting Data from an ROI: 3dROIstats -quiet -mask Right_M1.nii Left-Right_ContrastMaps.nii

Exercises for Unpacking Contrasts and Double Dissociations

  1. To unpack the contrast estimate of Left-Right button presses, we will need to extract the Left and Right contrast maps. These correspond to the volumes (or "sub-briks") 0 and 1 in each subject's dataset. In the 3dTcat code template above, replace the 3 with a 0 in order to concatenate the Left parameter estimates together, and change the output label after the -prefix option to reflect the new output dataset (e.g., Left.nii). Do the same procedure for the Right parameter estimates.
  2. Modify the 3dROIstats code template to extract the parameter estimates for Left and Right button presses from the Right_M1.nii mask.
  3. Create another ROI in the left motor cortex by flipping the sign of the X-coordinate in the 3dUndump code template (i.e., echo "-42 -13 58"). Change the prefix to Left_M1.nii. Then modify the 3dTcat and 3dROIstats code templates to extract Left and Right parameter estimates from the Left_M1 mask. Use your preferred statistical software package to test for significant differences between the parameters within each ROI, and test for an ROI x Condition interaction.

Additional Reading

Circular ROI Analysis: See the original Vul et al. 2009 paper, and the Kriegeskorte et al. 2009 paper.
Leave-One-Out-Cross-Validation (LOOCV): Esterman et al., 2010
How to use Neurosynth: See this webpage



ROI Analyses in FreeSurfer

Note: This is a short post jotting down my thoughts on FreeSurfer ROI analysis. This will be developed into a longer post later; however, this is a topic I've been looking into for some time, and I want to keep track of my sources. 

Regions of interest (ROIs) are groups of voxels that parameter estimates (or other data) are extracted from. With volumetric data, you specify the x-, y-, and z-coordinates of the origin for your ROI, and then build a sphere around it. (Spheres aren't the only method, but they are common.) You can do this with, for example: AFNI's 3dUndump; SPM's Marsbar toolbox; FSL's fslmaths.

I haven't been able to find out how to do a similar procedure with FreeSurfer. FS is 2D, so the ROI would probably be a circle instead of a sphere. Once your ROI is defined, then you could extract thickness, volume, and other measurements from the ROI.

See this post by Doug Greve about using a vertex as the base for an ROI:

Also keep this:


setenv SUBJECTS_DIR `pwd`

#Create 5mm sphere ROI with 3dUndump
3dUndump -srad 5 -prefix S2.nii -master MNI_caez*+tlrc.HEAD -orient LPI -xyz ROI_file.txt
#Convert to NIFTI
#3dAFNItoNIFTI S2+tlrc

#View in tkmedit
tkmedit -f MNI_caez_N27.nii -overlay S2.nii -fthresh 0.5

#Register anatomical template to fsaverage (FreeSurfer template)
fslregister --s fsaverage --mov MNI_caez_N27.nii --reg tmp.dat

#View ROI on fsaverage
tkmedit fsaverage T1.mgz -overlay S2.nii -overlay-reg tmp.dat -fthresh 0.5 -surface lh.white -aux-surface rh.white

#Map ROI to fsaverage surface
mri_vol2surf --mov S2.nii \
        --reg tmp.dat \
        --projdist-max 0 1 0.1 \
        --interp nearest \
        --hemi lh \
        --out lh.fsaverage.S2.mgh \

#Check how well the ROI maps onto the inflated surface
tksurfer fsaverage lh inflated -overlay lh.fsaverage.S2.mgh -fthresh 0.5

If you want to extract data from an ROI label, use the mri_segstats option. For example, let's say that I have all of my subjects stacked together in a single dataset using the mris_preproc option, and I have the right hemisphere volume maps in a single dataset. If my ROI is called ROI.mgh, I would use this command:

mri_segstats --i ../../rh.volume.StudyName.10.mgh --seg ROI.mgh --excludeid 0 --avgwf ROI_results.dat

Which would print the average volume over the ROI into the file ROI_results.dat.