Hi Tom, Susie, everyone,
Thought I'd barge in here, Susie and I (Ged) have noticed that in
practice the SVC button is only available after a first run through
the results options, including specification of FWE/FDR/Unc and a
corresponding ("whole-brain") alpha. This whole-brain threshold does
seem to affect the subsequent search volume. What you suggest here:
> Try running the results multiple times with different
> uncorrected thresholds, each time clicking S.V.C.
> If you specify the same mask/VOI in the SVC, you'll
> see that the footer will show the same "Search vol"
is what Susie and I expected to be the case, but not what appears to
happen in practice. In Susie's first email, the difference in number
of voxels searched was (we think) due to the first statistical
thresholding at alpha = 0.99. So just to be completely clear about this:
> I can only assume that in the 2nd instance, ROI as
> explicit mask, you're including some voxels with
> values less than 0.99 (and hence 122673 > 121424).
This 0.99 is the alpha given in the fist (whole-brain) pass through
the results options (I think Susie chose uncorrected here). It is not
an absolute or relative threshold for the creation of the "analysis
mask" created during the estimation stage. I'm fairly sure that with
Susie's 2nd ROI-as-explicit analysis, no absolute or relative
threshold masking was used. I believe she also only used an explicit
GM mask in the 1st ("whole-brain") analysis too; but in any case,
additional threshold masking in the first analysis could not increase
the number of voxels considered. So again, our hypothesis is that
SPM's SVC considers only the subset of voxels which are in both the
chosen ROI and the set of voxels which survived the preliminary
whole-brain alpha.
> line 78 of spm_VOI, where you see that the original
> analysis mask is consulted to build the list of
> possible in-mask voxels).
Indeed, the following lines (in SPM2's spm_VOI)
76 % voxels in entire search volume {mm}
77 %----------------------------------------------------------------
78 XYZmm = SPM.xVol.M(1:3,:)*[SPM.xVol.XYZ; ones(1, SPM.xVol.S)];
suggest this. However, later on, this XYZmm variable is used for a set
of voxels denoted k, while another another set, j, is constructed via
the xSPM structure, which I believe is only created after the initial
"whole-brain" alpha threshold, and which only contains supra-threshold
voxels:
111 XYZ = D.mat \ [xSPM.XYZmm; ones(1, size(xSPM.XYZmm, 2))];
112 j = find(spm_sample_vol(D, XYZ(1,:), XYZ(2,:), XYZ(3,:),0) > 0);
113 XYZ = D.mat \ [ XYZmm; ones(1, size( XYZmm, 2))];
114 k = find(spm_sample_vol(D, XYZ(1,:), XYZ(2,:), XYZ(3,:),0) > 0);
Then in order to create the structures passed to spm_list for the
actual determination of the SVC p-values, k is used for the voxel-size
of the search space, and for the sorted p-values that go into the FDR
correction, but it is j -- the ROI-subset of voxels which survived the
first analysis, that is used with the statistic itself, in xSPM.Z:
118 xSPM.S = length(k);
119 xSPM.R = spm_resels(FWHM,D,SPACE);
120 xSPM.Z = xSPM.Z(j);
121 xSPM.XYZ = xSPM.XYZ(:,j);
122 xSPM.XYZmm = xSPM.XYZmm(:,j);
123 xSPM.Ps = xSPM.Ps(k);
Where again, this indicates that the new xSPM.Z (etc) is a subset of
the previous xSPM.Z, unless I'm missing something elsewhere.
If we assume for the moment that this interpretation is correct, and
that SVC looks only within the subset, then my sequence of questions
would be, firstly, whether this is deliberate/correct, secondly, if so
why, and then finally, if there is a good reason, does the practice of
choosing an alpha very near to one for the prelimary whole-brain
threshold (as I believe Susie's quick survey of SVC-users suggested
was quite common) violate that reason?
Incidentally, Matthew Brett has a program:
http://imaging.mrc-cbu.cam.ac.uk/imaging/VolCorr
which has the ability to output corrected t-thresholds for an SVC. If
these thresholds were then used with imcalc or similar on the original
spmT image, then the effect would obviously be to consider all voxels
within the SVC-ROI (against this SVC-t-threshold, but no other,
earlier, whole-brain t-threshold) as you, me, and Susie, all thought
would be what SPM did anyway. However, it appears that this would be
different to what SPM actually does, again, raising the question of
whether one is preferable to the other, for any reason.
Finally, a quick glance at SPM5 () suggests to me that the behaviour
is the same, and (apart from different line numbers) the code
fragments above are the same, or at least similar, and include the
important xSPM.Z = xSPM.Z(j); line. (My understanding is that this
xSPM comes from spm_getSPM, see e.g. lines 455-465 where the
"whole-brain" threshold is applied, and lines 507 and following, where
the structure is built, including this thresholding.)
Often when working on Saturday evenings though, I later find that I
was completely insane, so it's quite possible that much of the above
is non-sense. However, regardless of my (mis)interpretation of the
code, I do have confidence in Susie's description of the problem as it
appears in practice.
Thanks from me too, for your very helpful earlier reply (the
"knobliness" correction was particularly enlightening!), and thanks in
advance for any more time you (or anyone else) can spare to look into
this issue.
Ged.
|