8.3. How to get the degrees of freedom (DF) in an AFNI file?

There are at least four ways to find out the degrees of freedom (DF) for a specific statistical sub-brick:

  1. 3dinfo

  2. the AFNI GUI/viewer

  3. 3dAttribute

  4. p2dsetstat/dsetstat2p

The command line programs all apply equivalently to either volumetric or surface-format files. (Using the AFNI GUI just applies to the volumetric format.)

In the examples below, we use a volume called stats.FT+tlrc. This also happens to be the stats volume output by running the AFNI Bootcamp demo example of afni_proc.py in ~/AFNI_data6/FT_analysis/s05.ap.uber. Assume that sub-brick #0 is an F-statistic and sub-brick #8 is a t-statistic.

8.3.1. Using 3dinfo

The first method is to use 3dinfo, which outputs information about the entire dataset. This can be piped through less, to be able to scroll through it:

3dinfo -verb stats.FT+tlrc | less

On the screen you can find the header information about sub-brick #0 (the full F-statistic), just beneath the line starting Number of values stored at each pixel ...:

-- At sub-brick #0 'Full_Fstat' datum type is float:            0 to       977.037
   statcode = fift;  statpar = 2 412

The two numbers under statpar (=statistic parameters), 2 and 412, on the second line are the degrees of freedom for this F-statistic. (The statcode relates to internal code usage/labelling for identifying this type of statistic; see the help of cdf for a wee bit more description, if intrigued.)

Further down you should be able to locate the other t-statistic sub-brick (#8):

-- At sub-brick #8 'V-A_GLT#0_Tstat' datum type is float:     -11.3157 to       12.7985
   statcode = fitt;  statpar = 412

... and the DF count in this case is 412.

8.3.2. Using the AFNI GUI

Load the statistics volume stats.FT+tlrc as an overlay in the AFNI viewer (GUI).

Go through the following buttons:

  • Define Datamode (just above the Underlay and Overlay buttons)

  • Misc (in the bottom row of the new panel that opens)

  • OLay Info.

You should be able to find the same information in the new window as shown above with 3dinfo.

The same also works if you load the stats dset as an underlay, and then go to Define Datamode -> Misc -> Ulay Info.

8.3.3. Using 3dAttribute

For example, for the same sub-brick #0 above, run the following command:

3dAttribute BRICK_STATAUX stats.FT+tlrc"[0]"

... and you should get five numbers on the screen:

0 4 2 2 412

The last two are the DF for the F-statistic.

NB: For the sub-brick selection in the quoted squarebrackets, you can use the label associated with the subbrick, which in this case is “Full_Fstat”. So, the following would lead to the same output as above:

3dAttribute BRICK_STATAUX stats.FT+tlrc"[Full_Fstat]"

Doing the same for the t-statistic sub-brick (with either the number- or string-label for subbrick selection):

3dAttribute BRICK_STATAUX stats.FT+tlrc'[8]'

... you will see:

0 3 1 412

... and the last number is the DF count for the t-statistic.

8.3.4. Using p2dsetstat and dsetstat2p

There are some complementary convenience programs for converting p-values to statistics and vice versa, p2dsetstat and dsetstat2p. These can be helpful for either scripting or for seeing stats information (and they make use of the above functionality, under the hood).

Similar to the 3dAttribute example, one looks at information for a single subbrick. For example, querying information about subbrick #0 (or, again, one could use the string label, “Full_Fstat”):

p2dsetstat -inset stats.FT+tlrc'[0]' -pval 0.001 -1sided

... one obtains the output table:

++ Found input file : stats.FT+tlrc[0]
++ OK stat type     : fift
++ BRICK_STATAUX    : 0 4 2 2 412
++        params    : 2 412
++ Final stat val   : 6.3093

This might be more convenient than 3dAttribute for visualization, because the “params” line highlights the one or more DF parameters, rather than having to know a priori how many DFs to expect for a given stat. Or, at least, this could be used to verify the interpretation of the more opaque BRICK_STATAUX info. NB: For getting an appropriate statistic value, one has to use an appropriate sidedness of testing (e.g., -1sided for the F-stat here), but that does not affect the DF info.

Running the similar program for the t-stat in #8, one might use:

p2dsetstat -inset stats.FT+tlrc'[8]' -pval 0.001 -bisided

... obtaining:

++ Found input file : stats.FT+tlrc[8]
++ OK stat type     : fitt
++ BRICK_STATAUX    : 0 3 1 412
++        params    : 412
++ Final stat val   : 3.3143

Running the complementary program dsetstat2p will provide the same DF info in either case. For example, going back to the F-stat in #0 (and using the classy label for sub-brick selection):

dsetstat2p -inset stats.FT+tlrc'[Full_Fstat]' -statval 3 -1sided

... yields:

++ Found input file : stats.FT+tlrc[Full_Fstat]
++ OK stat type     : fift
++ BRICK_STATAUX    : 0 4 2 2 412
++        params    : 2 412
++ Final p-val      : .025437950000000

On a final note for these programs, if you are really just wanting either the stat or p-value output for scripting purposes, you can use the -quiet option, to just get that number and assign it to a variable. In tcsh syntax, this might look like:

set pval = `dsetstat2p -inset stats.FT+tlrc'[Full_Fstat]' -statval 3 -1sided -quiet`

... where subsequently using echo ${pval} to display the value yields: