Tom,
 
This is very helpful, as usual.  Thanks for taking the time to respond so thoroughly.  Most appreciated!
 
One follow-up though.  What if the results were SnPM, for which error DF is not known because the analysis it based upon pseudo-t ?
 
Cheers,
Jeff


From: [log in to unmask] [mailto:[log in to unmask]] On Behalf Of Thomas Nichols
Sent: Monday, February 18, 2008 8:50 AM
To: [log in to unmask]
Cc: [log in to unmask]
Subject: Re: [SPM] Calculating adjusted threshold from extent and p-value data?

Jeff,

On Feb 11, 2008 5:08 PM, Jeff Browndyke <[log in to unmask]> wrote:
Is there a way to calculate an adjusted statistical threshold for an analysis outside of SPM given a stated p-value threshold (i.e., p < .01, uncorrected), extent threshold [k > 20 (40mm3)], and known voxel number for the analysis?

SPM uses the smoothness of the noise and the topology of the search region to determine corrected P-values.  Hence to duplicate the inferences outside of SPM you'd have to have the complete RESEL count vector available, as stored in SPM.xVol.R in SPM.mat

If approximate inference is sufficient, and you know at least the FHWM of the noise smoothness, the snippet below will give you some idea of the corrected P-value for a given FWHM, assuming a spherical search region of a given radius.  More accurate P-values will be had by reading the help on spm_resels and specifying a more accurate search region, and, most accurately, using the RESEL vector from SPM.xVol.R of the relevant SPM results.

-Tom

%%% See spm_resels for more
FWHM  = [5 5 5]; % *Voxel* FWHM smoothness
--- CHANGE FOR YOUR DATA!
L     = 25;      % Region size, voxels --- CHANGE FOR YOUR DATA!
SPACE = 'S';     % Type of region (here 'S'phere)


%%% See spm_P_RF for more
erdf    = 50;                     % Error DF  --- CHANGE FOR YOUR DATA!
STAT    = 'T';
df      = [1 erdf];
R       = spm_resels(FWHM,L,SPACE);
v2r     = 1/prod(FWHM);           % Voxels-to-resels conversion

  
% P-value for particular cluster size, cluster forming threshold
ualpha  = 0.01;                   % Uncorrected cluster-forming alpha
u       = spm_invNcdf(1-ualpha);  % Uncorrected cluster-forming threshold

k       = 20;                     % Clust size in voxels
--- CHANGE FOR YOUR DATA!

% Corrected P-value
P = spm_P_RF(1,k*v2r,u,df,STAT,R,1)



PS: For a cluster threshold result instead of P-value, see http://www.sph.umich.edu/~nichols/JohnsGems5.html#Gem6 ... though that script currently requires a completed SPM analysis.  A little hacking and that script could allow you to specify just FWHM as above.

____________________________________________
Thomas Nichols, PhD
Director, Modelling & Genetics
GlaxoSmithKline Clinical Imaging Centre

Senior Research Fellow
Oxford University FMRIB Centre