Dear Mike, Jan and SPM
I tried this out and you are clearly right. SPM (i.e., spm_regions)
includes the zero columns from non-modeled sessions in X0. I think this is
incorrect. The two ways I thought of to deal with this would be
1) use pinv instead of inv whenever something like this might come up
with the null space matrix. I don't know if it would work in all instances.
2) Another possibility would be to fix spm_regions. My suggestion is the
code below. However, it should be verified that doing this to X0 is legitimate.
I don't know which of the above is the "better" overall solution. The
actual answers differ very little from each other using the two methods.
The cumulative absolute difference in Yc (line 204 of spm_peb_ppi) using a
simulated design was around 4 x 10^-16. This is probably within rounding
error.
------------------------------------------------
This code will remove all zero columns from a matrix. It could be placed,
for example, as an internal function in spm_regions and then called after
line 206 as xY.X0 = removezerocols(xY.X0);
I couldn't think of a way to vectorize this, but since the find function is
speedy and the matrix is shrinking it shouldn't take much time to perform.
I tried it on a matrix of 1x10^6 rows and 8 columns (probably bigger than
any X0). The matrix had 3 all zero columns and the code only took 1.2
seconds. The time is similar if you had a 10,000 row x 100 column X0 with
50% zero columns. With a more usual size X0 the code takes 0.01 seconds.
%=================
function m = removezerocols(m)
% REMOVEZEROCOLS - removes columns of all zeros from a matrix.
%
for i = size(m,2):-1:1
if isempty(find(m(:,i)))
m(:,i) = [];
end
end
return
----Darren
At 06:57 AM 6/17/2005, Jan Gläscher wrote:
>Dear Darren and others,
>
>I came across a peculiarity in the combination of data extraction via
>the VOI button and subsequently setting up a PPI.
>
>Here the basic design specs:
>- single subject analysis with 3 sessions
>- extract data with VOI button for one session (e.g. 1st session) with
> adjustment for effects of interest (null space X0 comprises only the
> session constants)
>- PPI setup: (1) 'psychophysiological interaction'
> (2) include only one regressor (modelling a block of
> pain stimulation)
> (3) weight for this regressor:
> 1
>
>
>The warning mesage that I get when setting up the PPI is the following:
>
> >> Warning: Matrix is singular to working precision.
>(Type "warning off MATLAB:singularMatrix" to suppress this warning.)
> > In /apps/public/spm02/spm_peb_ppi.m at line 204
>
>
>Looking at line 204 in spm_peb_ppi.m,
>
>Yc = Y - X0*inv(X0'*X0)*X0'*Y;
>
>I realize that the warning can be traced to the null space X0, because
>the inverse of X0 is not defined. Consequently, PPI.Y is a vector of
>NaN's.
>
>X0 is created by spm_regions.m when I press the VOI-button and
>comprises in my situation the session-specific block partition of the
>design matrix (xX.iB) and high-pass filter (xX.K). Thus, in the
>3 session case the first part of X0 has three column, the first with
>1's and the second and third with 0's. Because these are perfectly
>collinear the inverse of X0'*X0 in line 204 is not defined.
>
>Here are my questions:
>(1) Am I doing something wrong when I adjust for the effects of
> interest when I extract the data with spm_regions?
>
>(2) Is this a problem at all for the PPI computations?
>
>(3) Conceptually speaking, shouldn't the null space X0 only comprise
> the "real" session constant (the column of 1's) and not the entire
> block partition of the design matrix (i.e., leave out the columns
> of 0's)? This would allieviate the problem with perfect
> collinearity of some of the columns in X0.
>
>Thank you for your comments in input.
>Jan
>
>--
>Jan Gläscher NeuroImage Nord
>+49-40-42803-7890 (office) Dept. of Systems Neuroscience, Bldg S10
>+49-40-42803-9955 (fax) University Medical Center Hamburg-Eppendorf
>[log in to unmask] Martinistr. 52
> 20246 Hamburg
> Germany
>http://www.uke.uni-hamburg.de/kliniken/neurologie/index_16969.php
>-------------------------------------------------------------------------
>GnuPG/PGP key id: FEC4B55C
>fingerprint: 5A36 1EF6 8472 117E 805A F240 3146 A410 FEC4 B55C
>-------------------------------------------------------------------------
>
-------------------------------------------------------------------------
Darren R. Gitelman, M.D.
Cognitive Neurology and Alzheimer¹s Disease Center
Northwestern Univ., 320 E. Superior St., Searle 11-470, Chicago, IL 60611
Voice: (312) 908-9023 Fax: (312) 908-8789
-------------------------------------------------------------------------
|