Print

Print


HI SPMers,

We are doing a PPI analysis with a Faces task that has a block design with alternating blocks of shapes (control) and a faces expression type (either angry, fearful, surprise, or neutral).  We are running the analysis with the SPM PPI tool through matlab with my scripts in a cluster environment so we can batch subjects, so instead of just using the GUI we are using the following line:

PPI = spm_peb_ppi(SPM,'ppi','VOI.mat',[SUB_MATRIX_SUB],'SUB_OUTPUT_SUB.mat',1);

- The output (PPI) is the variable that holds the resulting matrix with the PPI.ppi, PPI.P, and PPI.Y values that we will use as regressors in single subject analysis.

- "SPM" is simply the SPM.mat after we have loaded it

-"ppi" specifies the type of interaction

So, for example, a subject that had the following design:

"VOI.mat" was also generated on the cluster with scripts, but the equivalent would be clicking the eigenvariate button in the Results GUI and selecting a functionally and anatomically defined mask to extract the values from for the single subject. (It is defined by the group BOLD map for the faces task the same group of subjects that we are doing the PPI analysis with, limited to either the right or left amygdala (Pickatlas))

SUB_OUTPUT_SUB.mat is obviously a dummy variable that gets filled with the name of the output .mat, and most importantly:

[SUB_MATRIX_SUB] Here is where I need help!!  This is the design matrix that is supposed to be a structural array of condition numbers, runs, and weights. So if we have a subject with the following design:

[Shapes] [Fear] [Shapes] [Anger] [Shapes] [Surprise] [Shapes] [Neutral] [Shapes]

if we want to look at Fear > Shapes, we would use the following matrix:

[1,1,-1; 2,1,1]

Meaning that the first block, shapes, gets a weight of -1, and the second block, Fear, get's a weight of 1.  When we run this for just over a hundred subjects and look at the group maps, they look good!  However, when we get to the contrast "Faces > Shapes" - we are running into trouble.

My first inclination was to do the following for "Faces > Shapes"

[1,1,-1;2,1,.25;3,1,.25;4,1,.25;5,1,.25]
It made sense to me that the two should sum to zero, so I gave each affect specific block a weight of .25, and shapes a weight of -1.  However, when we looked at the PPI.P variable for this design, one of our collaborators pointed out that the mean was -0.3473 instead of zero, and this was incorrect.  We then decided on the following matrix:
[1,1,-1;5,1,1;4,1,1;3,1,1;2,1,1]
giving each shapes block a weight of 1, and faces a weight of -1.  This fixed the issue with the PPI.P mean - it was essentially zero.  However, then when we looked at the group map for Negative PPI, the entire thing was lit up like a Christmas tree, and the amygdala was (to stay with this analogy) on fire.  You can see what the negative PPI group map looked like here: 

http://www.vsoch.com/LONG/Pictures/Analysis/Negative_PPI.JPG
That doesn't really make sense!  If anyone is curious about how we set up each indivual analysis using the PPI, here are the important snippets from the script:
...
% Here are the regression outliers
matlabbatch{1}.spm.stats.fmri_design.sess.regress(1).name = 'PPI';
matlabbatch{1}.spm.stats.fmri_design.sess.regress(1).val = PPI.ppi;
matlabbatch{1}.spm.stats.fmri_design.sess.regress(2).name = 'Conditions';
matlabbatch{1}.spm.stats.fmri_design.sess.regress(2).val = PPI.P;
matlabbatch{1}.spm.stats.fmri_design.sess.regress(3).name = 'Seed Activity';
matlabbatch{1}.spm.stats.fmri_design.sess.regress(3).val = PPI.Y;
....
% Here we set up the contrasts
matlabbatch{4}.spm.stats.con.consess{1}.tcon.name = 'Positive PPI';
matlabbatch{4}.spm.stats.con.consess{1}.tcon.convec = 1;
matlabbatch{4}.spm.stats.con.consess{1}.tcon.sessrep = 'none';
matlabbatch{4}.spm.stats.con.consess{2}.tcon.name = 'Negative PPI';
matlabbatch{4}.spm.stats.con.consess{2}.tcon.convec = -1;
matlabbatch{4}.spm.stats.con.consess{2}.tcon.sessrep = 'none';
matlabbatch{4}.spm.stats.con.consess{3}.tcon.name = 'Positive functional connectivity';
matlabbatch{4}.spm.stats.con.consess{3}.tcon.convec = [0 0 1];
matlabbatch{4}.spm.stats.con.consess{3}.tcon.sessrep = 'none';
matlabbatch{4}.spm.stats.con.consess{4}.tcon.name = 'Negative functional connectivity';
matlabbatch{4}.spm.stats.con.consess{4}.tcon.convec = [0 0 -1];
matlabbatch{4}.spm.stats.con.consess{4}.tcon.sessrep = 'none';
matlabbatch{4}.spm.stats.con.delete = 0;
...
I was then looking at the images in SPM, and I noticed that the values were 4-5 times larger in the Faces > Shapes failed run compared to the Fear > Shapes run (and the Positive PPI looked way too robust), so I was thinking that the problem was perhaps the fact that we were comparing smaller affect blocks with a larger shape span - shapes is 5/9 of the task while each of the affect blocks is just 1/9.  So I thought that each affect block should be weighted to reflect the percentage of the task that it takes up, based on the followikng rationale:
Shapes weight:  "-1 (weight) *5/9 (percent of task) = 5/9

Faces block weight: 4 blocks * (1/9) (percent of task / block) * X (weight) needs to equal 5/9  

So if I could get the faces block weights to sum to 5/4, that would technically work:

"(5/4)(4/9) + -1(5/9) = 0

so I tried it with each faces block with a weight of .3125, and that did appear to fix the crazy looking negative PPI image, but I think this is... very wrong :P  I haven' looked at the SPM PPI tool script in detail, but I would guess that it automatically takes into account the size of the various conditions as a percentage of the total task.  We are sort of stuck at the moment, so I wanted to take initiative and reach out to the SPM community looking for help!  The information that we need is the following:

1) Correct matrix to use for PPI analysis with just one affect (Fear > Shapes, for example)

2) Correct matrix to use for PPI analysis with four blocks of faces (Faces > Shapes)

Huge thanks in advance!
All the best,
Vanessa