Dear Darren, thanks four your answer. I also think that both solutions you suggested are viable. However, upon having a more detailed look at both spm_regions and spm_peb_ppi, I stumbled upon two other questions that I would like to cross-check with you. The first is whether spm_peb_ppi should _always_ remove the null space, and the second suggests another way of doing so. If I understand the code of spm_peb_ppi correctly, then the function is reading the VOI*.mat file that has been created by spm_regions and, crucially, assigns the data vector Y to xY.u (line 198). xY.u on the other hand is identical to the extracted time series created by spm_regions (which is also called Y to add some more confusion). The null space X0 is removed from this data vector which was the topic of my previous posting (line 204). Now, spm_regions also offers the possibility to remove the null space of an F-constrast (line 193) %-subtract Y0 = XO*beta, Y = Yc + Y0 + e %--------------------------------------------------------------- y = y - spm_FcUtil('Y0',SPM.xCon(xY.Ic),SPM.xX.xKXs,beta); Later, the first eigenvariate is extracted (via svd) from this vector y, which -- after some further transformation -- is returned as xY.u or Y. Here comes my question: If I already adjusted for some F-contrast (e.g. effects of interest) when I extracted the first eigenvariate, is it still appropriate to remove the null space X0 in spm_peb_ppi again? And if yes, maybe the abovementioned X0 removal of spm_regions (which uses the pseudoinverse of X, [see spm_FcUtil and spm_sp]) would get around the problem of zero columns X0, for which the inverse is not defined. Thanks (as always) for your insights. Jan On 2005-06-17 (Fri) at 12:22:27 -0500, Darren Gitelman <[log in to unmask]> wrote: > 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 > ------------------------------------------------------------------------- > > > -- 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 -------------------------------------------------------------------------