A. Run Vertex Analysis

After running the individual segmentations, checking the output, and creating the files, we are ready to run the "Vertex Analysis." A model is created with a single command, but there are several options.

Creating The Vertex Data

This step creates a file with the size difference of each individual study shape relative to the mean shape. The size differences are calculated only on the surface of the shape, and consist of numbers that indicate the distance in voxels out (positive) or in (negative) from the mean.

There are different types of shape analysis (pure volume, shape only, account for head size), and there are 4 corresponding subfolders (NAtive, NativeScale, MNI, MNIScale; details below). Each of these subfolders contains text files, the first of which contains the vertex analysis command to be run from within a design subfolder - something like "first_utils --vertexAnalysis --usebvars ....."

For reasons that are not clear, this vertext analysis step requires the design files, so the design matrices etc. are copied as subfolders for each shape analysis type, and the vertex creation is performed within that design subfolder.

Details

first_utils --vertexAnalysis --usebvars -i concatenated_bvars -d design.mat -o output_basename [--useReconNative --useRigidAlign ] [--useReconMNI] [--usePCAfilter -n number_of_modes]

Based on earlier examples, this is one possible command line (assuming you are in the directory with the files):

[user@localhost temp]$ first_utils --vertexAnalysis --usebvars -i L_Hipp_all.bvars  -d des_2sample.mat -o L_Hipp_vertexMNI_2sample --useReconMNI  

The various options are specified in the User Guide under Vertex Analysis, Usage. It is important to come up with a naming convention for the output files. I suggest starting with the structure name, adding "_vertex" to indicate this file is the output of the vertex analysis, then add suffixes. Here is a convention:

  • "_vertexNative" ==>> "--useReconNative --useRigidAlign" (volume differences)
  • "_vertexNativeScale" ==>> "--useReconNative --useRigidAlign --useScale" (shape differences)
  • "_vertexMNI" ==>> "--useReconMNI --useRigidAlign" (volume differences accounting for head size)
  • "_vertexMNIScale" ==>> "--useReconMNI --useRigidAlign --useScale" (differences after accounting for head size/shape and structure size - hard to interpret but should have the lowest variability)

The output of this step is a 4D nifti file (*.nii.gz) with the name as indicated in the -o option, and a _mask file with a similar name. Additional files with the same name as the design matrix but with different extensions are also created: *.con for t-contrast, *.fts for f-contrast.

The 4D file contains values for each subject at the voxels on the boundary of the mean surface (defined by the mask file) as distance from the mean, in voxel units. (Note that the FSL person posted in 2013 that he may change the units to mm at some point.) Here is an example from the hippocampus, where the distance is positive (values can be negative as well).

Analysis options (from UserGuide)

The --useReconNative option carries out vertex analysis in native space, along with the --useRigidAlign option. The --useReconMNI option may also be used to carry out vertex analysis, it will do it in the MNI standard space instead, which normalises for brain size. It is difficult to say which will be more sensitive to changes in shape, and so it may be interesting to try both the --useReconNative and the --useReconMNI options. Also note that the --useScale option will not be used. Without the --useScale option, changes in both local shape and size can be found in shape analysis. This type of finding can be interpreted, for example, as local atrophy. With the--useScale option, overall changes in size are lost.

More notes from a practical:

 

  • To run vertex analysis, you will need the .bvars files output by FIRST and a design matrix. These contain all the information required by first_utils.
  • It sometimes may be desirable to reconstruct the surfaces in native space (i.e. without the affine normalization to MNI152 space). To do this, instead of --useReconMNI, use the --useReconNative and --useRigidAlign options.
  • When using the --useRigidAlign flag, first_utils will align each surface to the mean shape (from the model used by FIRST) with 6 degrees of freedom (translation and rotation). The transformation is calculated such that the sum-of-squared distances between the corresponding vertices is minimized. This command is needed when using --useReconNative, however, can be used with --useReconMNI to remove local rigid body differences.
  • The --useScale flag can be used in combination with --useRigidAlign to align the surfaces using 7 dof. --useScale will indicate to first_utils to remove global scaling.