External Email - Use Caution
After spending additional time working through this, here are the current steps I’ve taken for running a mass-univariate LME longitudinal analysis on both hemispheres:
1).
mris_preproc --qdec-long long.qdec.table.dat --target fsaverage --hemi lh --meas thickness --out lh.thickness.mgh
mris_preproc --qdec-long long.qdec.table.dat --target fsaverage --hemi rh --meas thickness --out rh.thickness.mgh
2).
mri_surf2surf --hemi lh --s fsaverage --sval lh.thickness.mgh --tval lh.thickness_sm10.mgh --fwhm-trg 10 --cortex --noreshape
mri_surf2surf --hemi rh --s fsaverage --sval rh.thickness.mgh --tval rh.thickness_sm10.mgh --fwhm-trg 10 --cortex --noreshape
3).
[lh_Y, lh_mri] = fs_read_Y('lh.thickness_sm10.mgh’);
[rh_Y, rh_mri] = fs_read_Y(‘rh.thickness_sm10.mgh’);
4).
lhsphere = fs_read_surf(‘$FREESURFER_HOME/subjects/fsaverage/surf/lh.sphere');
lhcortex = fs_read_label('$FREESURFER_HOME/subjects/fsaverage/label/lh.cortex.label’);
rhsphere = fs_read_surf(‘$FREESURFER_HOME/subjects/fsaverage/surf/rh.sphere');
rhcortex = fs_read_label('$FREESURFER_HOME/subjects/fsaverage/label/rh.cortex.label’);
5). Truncated/sample design matrix, where I have 2 time points (baseline, follow-up), two groups (Control=0, Clinical=1), and no covariates of interest for now:
Intercept Time(months) Group Group*Time
1 0 1 0
1 5 1 5
1 0 0 0
1 4 0 0
Contrast for testing group x time interaction: CM.C = [0 0 0 1]
6). initial vertex-wise temporal covariance estimates computed
[lhTh0, lhRe] = lme_mass_fit_EMinit(X, [1 2], lh_Y, lh_ni, lhcortex, 3, 8);
[rhTh0, rhRe] = lme_mass_fit_EMinit(X, [1 2], rh_Y, rh_ni, rhcortex, 3, 8);
7). covariance estimates segmented into homogeneous regions
[lhRgs, lhRgMeans] = lme_mass_RgGrow(lhsphere, lhRe, lhTh0, lhcortex, 2, 95);
[rhRgs, rhRgMeans] = lme_mass_RgGrow(rhsphere, rhRe, rhTh0, rhcortex, 2, 95);
8). Model fit
lhstats = lme_mass_fit_Rgw(X, [1 2], lh_Y, lh_ni, lhTh0, lhRgs, lhsphere, [], 'euc’, 'exp’, 8, 10^-1);
rhstats = lme_mass_fit_Rgw(X, [1 2], rh_Y, rh_ni, rhTh0, rhRgs, rhsphere, [], 'euc’, 'exp’, 8, 10^-1);
9). Get significance maps
F_lhstats = lme_mass_F(lhstats, CM, 8);
fs_write_fstats(F_lhstats, lh_mri, ‘lh_sig.mgh’, 'sig’);
F_rhstats = lme_mass_F(rhstats, CM, 8);
fs_write_fstats(F_rhstats, rh_mri, ‘rh_sig.mgh’, 'sig’);
10). Multiple comparisons correction
lh_mri1 = lh_mri;
lh_mri1.volsz(4) = 1;
[lh_detvtx, lh_sided_pval, lh_pth] = lme_mass_FDR2(F_lhstats.pval ,F_lhstats.sgn, lhcortex, 0.05, 0);
fs_write_Y(lh_sided_pval, lh_mri1, ‘lh_spval.mgh');
rh_mri1 = rh_mri;
rh_mri1.volsz(4) = 1;
[rh_detvtx, rh_sided_pval, rh_pth] = lme_mass_FDR2(F_rhstats.pval ,F_rhstats.sgn, rhcortex, 0.05, 0);
fs_write_Y(rh_sided_pval, rh_mri1, 'rh_spval.mgh');
11). Compute single threshold for both hemispheres
P = [ F_lhstats.pval(lhcortex) F_rhstats.pval(rhcortex) ];
G = [ F_lhstats.sgn(lhcortex) F_rhstats.sgn(rhcortex) ];
[detvtx, sided_pval, pth] = lme_mass_FDR2(P, G, [], 0.05, 0);
pcor = -log10(pth)
My remaining questions are:
1). Assuming the above steps are correct (steps 3 and 5 in particular), I’m unsure how to apply the single computed threshold across both hemispheres (pcor) into my freeview and mri_surfcluster commands. Since pcor is the -log10 transformed value, does that mean it should be included as a threshold value for the *sig.mgh files?
2). If the pcor threshold is to be used with the *sig.mgh, how then do I correct for multiple comparisons. From the LME tutorial, it appears that this correction is done and applied to the *spval.mgh files.