Dear Jim
I agree with your basic intuition that there should be a way to use
principal components analysis to discover how many independent
contrasts exist in a set of SPM contrast vectors.
The one point you left out is to include the actual waveforms of the
SPM regressors, since they are themselves often correlated.
Below is an example of the approach I would use, with contrast vector
definitions, the translation of those definitions into waveforms, and
the calculation of principal components.
Very Best!
Jim
con1 1 0 0 0 0 0 -1
con2 0 0 0 0 1 0 -1
con3 0 0 1 0 0 0 -1
con4 1 0 -1 0 0 0 0
load SPM;
c1 = SPM.xX.X(:,1) - SPM.xX.X(:,7);
c2 = SPM.xX.X(:,5) - SPM.xX.X(:,7);
c3 = SPM.xX.X(:,3) - SPM.xX.X(:,7);
c4 = SPM.xX.X(:,1) - SPM.xX.X(:,3);
matx(1,:) = c1';
matx(2,:) = c2';
matx(3,:) = c3';
matx(4,:) = c4';
[coeff,score,latent]=princomp(matx);
disp(latent/sum(latent));
SPM Statisticians,
Let's say I have an SPM model from which I calculate 14 contrasts. I
know that the contrasts are not all independent. Is it reasonable to
run principal components analysis on the 14 contrast vectors to
determine the number of independent contrasts? If so then I can use
that number to correct for multiple comparisons in the p value for
each contrast using bonferroni correction.
I realize this may be simplistic, but surely there IS a way to find
out how many independent contrasts are represented in my collection of
14? Has anyone seen a paper that uses this approach?
As a specific example, my fourteen contrasts are listed below, and
using the matlab princomp command I get 100% of the variance
represented by 7 latent variables, so I would use .05/7 for the p
value of each of the 14 contrasts.
Many Thanks!
Jim
matx(:,1) = [1 0 0 0 0 0 -1 0];
matx(:,2) = [0 0 0 0 1 0 -1 0];
matx(:,3) = [0 0 1 0 0 0 -1 0];
matx(:,4) = [1 0 -1 0 0 0 0 0];
matx(:,5) = [-1 0 1 0 0 0 0 0];
matx(:,6) = [1 0 0 0 -1 0 0 0];
matx(:,7) = [-1 0 0 0 1 0 0 0];
matx(:,8) = [0 0 1 0 -1 0 0 0];
matx(:,9) = [0 0 -1 0 1 0 0 0];
matx(:,10) = [0 -1 0 0 0 0 0 0];
matx(:,11) = [0 0 0 -1 0 0 0 0];
matx(:,12) = [0 0 0 0 0 -1 0 0];
matx(:,13) = [0 0 0 0 0 0 0 1];
matx(:,14) = [0 0 0 0 0 0 0 -1];
[coeff,score,latent]=princomp(matx);
disp(latent/sum(latent));
|