Hi Martin: Some answers: the threshold is specified at the contrast definition stage. The default is 1 conditional SD of the prior covariance, though you can choose other thresholds. I still don't understand why you are having trouble before and after estimation in specifying contrasts, or why the images should still be black. I will email you my updated files dealing with Bayes off list to let you check if they work. If so I can then update the list. Darren > -----Original Message----- > From: SPM (Statistical Parametric Mapping) > [mailto:[log in to unmask]] On Behalf Of Martin Kronbichler > Sent: Wednesday, February 07, 2007 3:47 AM > To: [log in to unmask] > Subject: Re: [SPM] spm5 bayesian problems > > I have playing around with my data set a little more, > interestingly the error (detailed below) does occur when is > specifiy the contrast after the bayesian estimation but not > when i specify the contrast before estimation (i.e. when the > contrast is calculated during the estimation > stage) altough i understand that the general recommendation > for bayesian fmri-analysis is to specify contrasts before > estimating the model i'm still puzzled that calculating > contrasts after estimation can lead to such odd and invalid > results? Is this a bug or are such errors expected when one > calculates the contrast after the bayesian estimation (my > problem is that i'm not always sure which contrasts i want to > test and it the bayesian single-subject estimation takes > quite some time). > Another question: since i do not seem to be able to specify > an effect size threshold for contrast which are calculated > during the estimation stage, how is the effect size cut-off > determind for such contrast > > greetings, > > martin > > > On Wed, 31 Jan 2007 13:48:44 +0000, Martin Kronbichler > <[log in to unmask]> wrote: > > >Hi Darren, > > > >no the PPMs (all brain voxels) are still black whatever > value i choose > >for the effectsize threshold and/or the posterior proability. > > > >On Wed, 31 Jan 2007 07:33:50 -0600, d gitelman <d- > >[log in to unmask]> wrote: > > > >>Dear Martin > >> > >>This is just a warning, not an error. Do the maps look correct now- > >>i.e., not totally black and the thresholds appear reasonable. If so > >>then it's fine. > >> > >>darren > >> > >>> -----Original Message----- > >>> From: Martin Kronbichler [mailto:[log in to unmask]] > >>> Sent: Wednesday, January 31, 2007 4:18 AM > >>> To: Darren G > >>> Cc: Martin Kronbichler > >>> Subject: Re: spm5 bayesian problems > >>> > >>> Dear Darren, > >>> > >>> thanks for your fast response. However, the fix didn't > work for me. > >>> I tried to reestimate the design with you updated > spm_spm_Bayes as > >>> well as manually replacing "tmp = tmp + NaN*(~tmp); " with > >>> "tmp(~tmp) = NaN;" in both lines in my local > spm_spm_Bayes. In both > >>> cases i get the same error when i test a specific contrast > >>> (3 conditions -1 0.5 0.5), however when i use a different > contrast > >>> (e.g., condition 1 vs. implicit baseline: 1 0 0) i don't get the > >>> error mesage and the results look reasonable. > >>> It seems as if the error occurs whenever i try to contrast any of > >>> the modelled conditions against one of the other modelled > >>> conditions, but not when i estimate the design, > Strangely, the same > >>> design gives reasonable results in an other patients dataset and > >>> normally first-level bayesian analysis works extremly well for my > >>> data-sets. You can see the error returnded when i use > dbstop below, > >>> to my limited understanding the error starts in spm_Ncdf (the cum > >>> normal distribution..). I might add that i use (still) > MATLAB R13). > >>> Maybe you have any ideas left what's going wrong? > >>> > >>> > >>> Greetings, > >>> > >>> Martin > >>> > >>> > >>> > >>> In /opt/spm5/spm_Ncdf.m at line 80 > >>> In /opt/spm5/spm_contrasts.m at line 214 > >>> In /opt/spm5/spm_getSPM.m at line 474 > >>> In /opt/spm5/spm_results_ui.m at line 264 > >>> In /opt/spm5/spm_input.m at line 1121 > >>> In /opt/spm5/spm_getSPM.m at line 376 > >>> In /opt/spm5/spm_results_ui.m at line 264 > >>> > >>> Warning in ==> /opt/spm5/spm_Ncdf.m > >>> On line 80 ==> warning('Returning NaN for out of > >>> range arguments'), end > >>> > >>> > >>> On Tue, 30 Jan 2007 10:03:24 -0600, d gitelman > >>> <[log in to unmask]> > >>> wrote: > >>> > >>> > Dear Martin > >>> > > >>> >Greetings. The problem is in spm_spm_Bayes.m when one uses > >>> Matlab R14 > >>> >or greater. If you go to approx lines 294 and 301 this code : > >>> > tmp = tmp + NaN*(~tmp); > >>> > > >>> >produces the NaN's. > >>> >I have updated this in the FIL version of the file and > hopefully it > >>> >will make its way to wider distribution at a future update > >>> (or it may > >>> >have already). > >>> > > >>> >In any case replace the above with this line in both places. > >>> > > >>> > tmp(~tmp) = NaN; > >>> > > >>> >You will have to re-estimate the dataset, but then all > >>> should be fine. > >>> > > >>> >Attached is also an updated version of spm_spm_Bayes.m > >>> > > >>> >Regards, > >>> >Darren > >>> > > >>> >> -----Original Message----- > >>> >> From: SPM (Statistical Parametric Mapping) > >>> >> [mailto:[log in to unmask]] On Behalf Of Martin Kronbichler > >>> >> Sent: Tuesday, January 30, 2007 4:12 AM > >>> >> To: [log in to unmask] > >>> >> Subject: [SPM] spm5 bayesian problems > >>> >> > >>> >> Dear SPM Experts, > >>> >> > >>> >> i have recently started to use variational bayesian > first level > >>> >> analyses for analysing presurgical language and motor > experiments > >>> >> because i had the feeling that the posterior probalities > >>> are easier > >>> >> to communicate and easier to understand (especially > when making > >>> >> inferences on how likely increased activatity for speech > >>> or motor is > >>> >> in regions near to the lesions). > >>> >> Generally, the bayesian analyses worked extremly well. > >>> >> However i have stumpled across a strange result i do not > >>> understand > >>> >> when analysing a block-design language experiment > >>> >> (2 blockedc onditions: simple tones vs. auditory words > >>> presented in 2 > >>> >> sessions). Whatever effect size threshold (even completerly > >>> >> unrealistic values like > 1000) or posterior probality i > >>> choose the > >>> >> PPM shows the whole brains as exhibiting posterior prob. > >>> of 1 (i.e. > >>> >> the whole brain is "activated"). SPM5 displays the following > >>> >> error message when is estimate the contrasts: > >>> >> > >>> >> spm{P} image 1 : > ...computing > >>> >> Warning: Returning NaN for out of range arguments > >>> >> > In /opt/spm5/spm_Ncdf.m at line 80 > >>> >> In /opt/spm5/spm_contrasts.m at line 214 > >>> >> In /opt/spm5/spm_getSPM.m at line 474 > >>> >> In /opt/spm5/spm_results_ui.m at line 264 > >>> >> ...written spmP_0001.img > >>> >> SPM computation : > >>> >> ...initialising > >>> >> SPM computation : > >>> >> ...done > >>> >> SPM computation : > >>> >> ...done > >>> >> > >>> >> I have tried to remove and add motion parameters, analyse only > >>> >> one session, use different basis functions etc... but whatever > >>> i do the > >>> >> problem persits. > >>> >> Inspection of the files generated by SPM5 shows that > the beta and > >>> >> SDbeta images look reasonable. The spmP and con_SD > images however > >>> >> contain only NaNs.. > >>> >> I might add that a conventional analysis results in > stastically > >>> >> highly signficant voxels... > >>> >> Anybody has any idea what is causing this problem? > >>> >> > >>> >> Greetings from Salzburg, > >>> >> > >>> >> Martin > >>> >> > >>> >> > >>> >> Martin Kronbichler, M.Sc. > >>> >> --------------------------------------------- > >>> >> Department of Psychology > >>> >> > >>> >> > >>> >> Center for Neurocognitive Research University of Salzburg > >>> >> > >>> >> Hellbrunnerstr.34, A 5020 Salzburg, Austria > >>> >> e-mail:[log in to unmask] > >>> >> Tel.:+43/(0)/662/8044-5162 > >>> >> > >>> >> Fax:+43/(0)/662/8044-5126 > >>> >> > >>> >> --------------------------------------------- > >>> >> Department of Neurology > >>> >> Center for Neurocognitive Research Christian-Doppler Clinic, > >>> >> Paracelsus Private Medical University Ignaz > Harrerstr.79, A 5020 > >>> >> Salzburg, Austria e-mail:[log in to unmask] > >>> >> Tel.:+43/(0)/662/4483-3966 > >>> >> --------------------------------------------- > >>> >> > >>> > > >>> >function [SPM] = spm_spm_Bayes(SPM) % Conditional parameter > >>> >estimation of a General Linear Model > >>> % FORMAT > >>> >[SPM] = spm_spm_Bayes(SPM) > >>> >%____________________________________________________________ > >>> __________ > >>> >_ > >>> >% > >>> >% For single subject fMRI analysis this function switches to % > >>> >using voxel-wise GLM-AR models that are spatially regularised % > >>> using the VB > >>> >framework. This is implemented using spm_spm_vb.m. > >>> >% One need not have previously analysed the data using > >>> classical estimation. > >>> >% For more on this option please see the help in that file. > >>> >% Otherwise, read on. > >>> >% > >>> >% spm_spm_Bayes returns to voxels identified by spm_spm (ML > >>> parameter % > >>> >estimation) to get conditional parameter estimates and > ReML hyper- > >>> >% parameter estimates. These estimates use prior covariances, > >>> on the % > >>> >parameters, from emprical Bayes. These PEB prior variances > >>> come from % > >>> >the hierarchical model that obtains by considering voxels as > >>> providing > >>> >% a second level. Put simply, the variance in parameters, > >>> over voxels, > >>> >% is used as a prior variance from the point of view of any > >>> one voxel. > >>> >% The error covariance hyperparameters are re-estimated in > >>> the light of > >>> >% these priors. The approach adopted is essentially a fully > >>> Bayesian % > >>> >analysis at each voxel, using emprical Bayesian prior variance % > >>> >estimators over voxels. > >>> >% > >>> >% Each separable partition (i.e. session) is assigned its own % > >>> >hyperparameter but within session covariance components > are lumped > >>> >% together, using their relative expectations over voxels. > >>> This makes % > >>> >things much more computationally efficient and avoids > inefficient % > >>> >voxel-specific multiple hyperparameter estimates. > >>> >% > >>> >% spm_spm_Bayes adds the following fields to SPM: > >>> >% > >>> >% ---------------- > >>> >% > >>> >% > >>> >% SPM.PPM.l = session-specific hyperparameter means > >>> >% SPM.PPM.Cb = empirical prior parameter covariances > >>> >% SPM.PPM.C = conditional covariances of parameters > >>> >% SPM.PPM.dC{i} = dC/dl; > >>> >% SPM.PPM.ddC{i} = ddC/dldl > >>> >% > >>> >% The derivatives are used to compute the conditional > variance of > >>> >various % contrasts in spm_getSPM, using a Taylor expansion > >>> about the > >>> >hyperparameter % means. > >>> >% > >>> >% > >>> >% ---------------- > >>> >% > >>> >% SPM.VCbeta - Handles of conditional > parameter estimates > >>> >% SPM.VHp - Handles of hyperparameter estimates > >>> >% > >>> >% ---------------- > >>> >% > >>> >% Cbeta_????.{img,hdr} - conditional > >>> parameter images > >>> >% These are 16-bit (float) images of the conditional > estimates. The > >>> >image % files are numbered according to the corresponding > >>> column of the > >>> >% design matrix. Voxels outside the analysis mask (mask.img) > >>> are given > >>> >% value NaN. > >>> >% > >>> >% ---------------- > >>> >% > >>> >% CHp_????.{img,hdr} - error covariance > >>> hyperparamter images > >>> >% This is a 32-bit (double) image of the ReML error variance > >>> estimate. > >>> >% for each separable partition (Session). Voxels outside > >>> the analysis > >>> >% mask are given value NaN. > >>> >% > >>> >%____________________________________________________________ > >>> __________ > >>> >_ % Copyright (C) 2005 Wellcome Department of Imaging > Neuroscience > >>> > > >>> >% Karl Friston > >>> >% $Id: spm_spm_Bayes.m 587 2006-08-07 04:38:22Z Darren $ > >>> > > >>> > > >>> >%-Say hello > >>> >%------------------------------------------------------------ > >>> ---------- > >>> >- Finter = spm('FigName','Stats: Bayesian estimation...'); > >>> > > >>> >%-Select SPM.mat & change directory > >>> >%------------------------------------------------------------ > >>> ---------- > >>> >- > >>> >if ~nargin > >>> > swd = spm_str_manip(spm_select(1,'^SPM\.mat$','Select > >>> SPM.mat'),'H'); > >>> > load(fullfile(swd,'SPM.mat')) > >>> > cd(swd) > >>> >end > >>> > > >>> >try > >>> > M = SPM.xVol.M; > >>> > DIM = SPM.xVol.DIM; > >>> > xdim = DIM(1); ydim = DIM(2); zdim = DIM(3); > >>> > XYZ = SPM.xVol.XYZ; > >>> >catch > >>> > helpdlg({ 'Please do a ML estimation first',... > >>> > 'This identifies the voxels to analyse'}); > >>> > spm('FigName','Stats: done',Finter); spm('Pointer','Arrow') > >>> > return > >>> >end > >>> > > >>> > > >>> >%============================================================ > >>> =========== > >>> >% - A N A L Y S I S P R E L I M I N A R I E S > >>> >%============================================================ > >>> ========== > >>> >= > >>> > > >>> >%-Initialise output images > >>> >%============================================================ > >>> =========== > >>> >fprintf('%-40s: %30s','Output images','...initialising') > >>> %-# > >>> > > >>> >%-Intialise oonditional estimate image files > >>> >%------------------------------------------------------------ > >>> ----------- > >>> >xX = SPM.xX; > >>> >[nScan nBeta] = size(xX.X); > >>> >Vbeta(1:nBeta) = deal(struct(... > >>> > 'fname', [],... > >>> > 'dim', DIM',... > >>> > 'dt', [spm_type('float32'), > >>> spm_platform('bigend')],... > >>> > 'mat', M,... > >>> > 'pinfo', [1 0 0]',... > >>> > 'descrip', '')); > >>> >for i = 1:nBeta > >>> > Vbeta(i).fname = sprintf('Cbeta_%04d.img',i); > >>> > Vbeta(i).descrip = sprintf('Cond. beta (%04d) - > >>> %s',i,xX.name{i}); > >>> > spm_unlink(Vbeta(i).fname) > >>> >end > >>> >Vbeta = spm_create_vol(Vbeta); > >>> > > >>> >%-Intialise ReML hyperparameter image files > >>> >%------------------------------------------------------------ > >>> ---------- > >>> >- > >>> >try > >>> > nHp = length(SPM.nscan); > >>> >catch > >>> > nHp = nScan; > >>> > SPM.nscan = nScan; > >>> >end > >>> > > >>> >VHp(1:nHp) = deal(struct(... > >>> > 'fname', [],... > >>> > 'dim', DIM',... > >>> > 'dt', [spm_type('float64'), > >>> spm_platform('bigend')],... > >>> > 'mat', M,... > >>> > 'pinfo', [1 0 0]',... > >>> > 'descrip', '')); > >>> >for i = 1:nHp > >>> > VHp(i).fname = sprintf('Hp_%04d.img',i); > >>> > VHp(i).descrip = sprintf('Hyperparameter (%04d)',i); > >>> > spm_unlink(VHp(i).fname) > >>> >end > >>> >VHp = spm_create_vol(VHp); > >>> > > >>> >fprintf('%s%30s\n',repmat(sprintf('\b'),1,30),'...initialised > >>') %-# > >>> > > >>> > > >>> >%============================================================ > >>> ========== > >>> >= % - E M P I R I C A L B A Y E S F O R P R I O R V A R > >>> I A N C E > >>> >%============================================================ > >>> =========== > >>> >fprintf('%s%30s\n',repmat(sprintf('\b'),1,30),'...estimating > >>> priors') %-# > >>> > > >>> >% get row u{i} and column v{i}/v0{i} indices for > separable designs > >>> >%------------------------------------------------------------ > >>> ---------- > >>> >s = nHp; > >>> >if isfield(SPM,'Sess') > >>> > for i = 1:s > >>> > u{i} = SPM.Sess(i).row; > >>> > v{i} = SPM.Sess(i).col; > >>> > v0{i} = xX.iB(i); > >>> > end > >>> >else > >>> > u{1} = [1:nScan]; > >>> > v{1} = [xX.iH xX.iC]; > >>> > v0{1} = [xX.iB xX.iG]; > >>> >end > >>> > > >>> >% cycle over separarable partitions > >>> >%------------------------------------------------------------ > >>> ---------- > >>> >- > >>> >for i = 1:s > >>> > > >>> > % Get design X and confounds X0 > >>> > %--------------------------------------------------------------- > >>> > fprintf('%-30s- %i\n',' ReML Session',i); > >>> > X = xX.X(u{i}, v{i}); > >>> > X0 = xX.X(u{i},v0{i}); > >>> > [m n] = size(X); > >>> > > >>> > % add confound in 'filter' > >>> > %--------------------------------------------------------------- > >>> > if isstruct(xX.K) > >>> > X0 = full([X0 xX.K(i).X0]); > >>> > end > >>> > > >>> > % orthogonalize X w.r.t. X0 > >>> > %--------------------------------------------------------------- > >>> > X = X - X0*(pinv(X0)*X); > >>> > > >>> > % covariance components induced by parameter variations {Q} > >>> > %--------------------------------------------------------------- > >>> > for j = 1:n > >>> > Q{j} = X*sparse(j,j,1,n,n)*X'; > >>> > end > >>> > > >>> > % covariance components induced by error non-sphericity {V} > >>> > %--------------------------------------------------------------- > >>> > Q{n + 1} = SPM.xVi.V(u{i},u{i}); > >>> > > >>> > % ReML covariance component estimation > >>> > %--------------------------------------------------------------- > >>> > [C h] = spm_reml(SPM.xVi.CY,X0,Q); > >>> > > >>> > % check for negative variance components > >>> > %--------------------------------------------------------------- > >>> > h = abs(h); > >>> > > >>> > % 2-level model for this partition using prior variances sP(i) > >>> > % treat confounds as fixed (i.e. infinite prior variance) > >>> > %--------------------------------------------------------------- > >>> > n0 = size(X0,2); > >>> > Cb = blkdiag(diag(h(1:n)),speye(n0,n0)*1e8); > >>> > P{1}.X = [X X0]; > >>> > P{1}.C = {SPM.xVi.V}; > >>> > P{2}.X = sparse(size(P{1}.X,2),1); > >>> > P{2}.C = Cb; > >>> > > >>> > sP(i).P = P; > >>> > sP(i).u = u{:}; > >>> > sP(i).v = [v{:} v0{:}]; > >>> >end > >>> > > >>> > > >>> >%============================================================ > >>> =========== > >>> >% - F I T M O D E L & W R I T E P A R A M E T E R > >>> I M A G E S > >>> >%============================================================ > >>> ========== > >>> >= > >>> > > >>> >%-Cycle to avoid memory problems (plane by plane) > >>> >%============================================================ > >>> ========== > >>> >= spm_progress_bar('Init',100,'Bayesian estimation',''); > >>> helpdlg('This > >>> >could take some time'); > >>> >spm('Pointer','Watch') > >>> > > >>> >%-maxMem is the maximum amount of data processed at a > time (bytes) > >>> >%------------------------------------------------------------ > >>> ---------- > >>> >- > >>> >global defaults > >>> >MAXMEM = defaults.stats.maxmem; > >>> >blksz = ceil(MAXMEM/8/nScan); > >>> >SHp = 0; % sum of hyperparameters > >>> >for z = 1:zdim > >>> > > >>> > % current plane-specific parameters > >>> > > >>> > %------------------------------------------------------------------- > >>> > U = find(XYZ(3,:) == z); > >>> > nbch = ceil(length(U)/blksz); > >>> > CrBl = zeros(nBeta,length(U)); %-conditional > >>> parameter estimates > >>> > CrHp = zeros(nHp, length(U)); %-ReML > >>> hyperparameter estimates > >>> > for bch = 1:nbch %-loop over bunches of > >>> lines (planks) > >>> > > >>> > %-construct list of voxels in this block > >>> > %--------------------------------------------------------------- > >>> > I = [1:blksz] + (bch - 1)*blksz; > >>> > I = I(I <= length(U)); > >>> > xyz = XYZ(:,U(I)); > >>> > nVox = size(xyz,2); > >>> > > >>> > %-Get response variable > >>> > %--------------------------------------------------------------- > >>> > Y = spm_get_data(SPM.xY.VY,xyz); > >>> > > >>> > %-Conditional estimates (per partition, per voxel) > >>> > %--------------------------------------------------------------- > >>> > beta = zeros(nBeta,nVox); > >>> > Hp = zeros(nHp, nVox); > >>> > for j = 1:s > >>> > P = sP(j).P; > >>> > u = sP(j).u; > >>> > v = sP(j).v; > >>> > for i = 1:nVox > >>> > [C P] = spm_PEB(Y(u,i),P); > >>> > beta(v,i) = C{2}.E(1:length(v)); > >>> > Hp(j,i) = C{1}.h; > >>> > end > >>> > end > >>> > > >>> > %-Save for current plane in memory as we go along > >>> > %--------------------------------------------------------------- > >>> > CrBl(:,I) = beta; > >>> > CrHp(:,I) = Hp; > >>> > SHp = SHp + sum(Hp,2); > >>> > > >>> > end % (bch) > >>> > > >>> > > >>> > %-write out plane data to image files > >>> > > >>> > > %================================================================= > >>> > == > >>> > > >>> > %-Write conditional beta images > >>> > > >>> > %------------------------------------------------------------------- > >>> > for i = 1:nBeta > >>> > tmp = sparse(XYZ(1,U),XYZ(2,U),CrBl(i,:),xdim,ydim); > >>> >% The following line (and the same code on line 306 > >>> below) results in > >>> >% images with all NaN's (in Matlab R14 or greater). > It has been > >>> >% commented out by DRG, and replaced by the line: > >>> tmp(~tmp) = NaN; > >>> >% tmp = tmp + NaN*(~tmp); > >>> > tmp(~tmp) = NaN; > >>> > Vbeta(i) = spm_write_plane(Vbeta(i),tmp,z); > >>> > end > >>> > > >>> > %-Write hyperparameter images > >>> > > >>> > %------------------------------------------------------------------- > >>> > for i = 1:nHp > >>> > tmp = sparse(XYZ(1,U),XYZ(2,U),CrHp(i,:),xdim,ydim); > >>> >% tmp = tmp + NaN*(~tmp); > >>> > tmp(~tmp) = NaN; > >>> > VHp(i) = spm_write_plane(VHp(i),tmp,z); > >>> > end > >>> > > >>> > > >>> > %-Report progress > >>> > > >>> > %------------------------------------------------------------------- > >>> > spm_progress_bar('Set',100*(z - 1)/zdim); > >>> > > >>> > > >>> >end % (for z = 1:zdim) > >>> >fprintf('\n') > >>> %-# > >>> >spm_progress_bar('Clear') > >>> > > >>> >%============================================================ > >>> =========== > >>> >% - P O S T E S T I M A T I O N > >>> >%============================================================ > >>> ========== > >>> >= > >>> > > >>> >% Taylor expansion for conditional covariance > >>> >%------------------------------------------------------------ > >>> ---------- > >>> >- > >>> >fprintf('%-40s: %30s\n','Non-sphericity','...REML > estimation') %-# > >>> > > >>> >% expansion point (mean hyperparameters) > >>> >%------------------------------------------------------------ > >>> ----------- > >>> >l = SHp/SPM.xVol.S; > >>> > > >>> >% change in conditional coavriance w.r.t. hyperparameters > >>> >%------------------------------------------------------------ > >>> ----------- > >>> >n = size(xX.X,2); > >>> >PPM.l = l; > >>> >for i = 1:s > >>> > PPM.dC{i} = sparse(n,n); > >>> > PPM.ddC{i} = sparse(n,n); > >>> >end > >>> >for i = 1:s > >>> > > >>> > P = sP(i).P; > >>> > u = sP(i).u; > >>> > v = sP(i).v; > >>> > > >>> > % derivatives of conditional covariance w.r.t. hyperparameters > >>> > %--------------------------------------------------------------- > >>> > if spm_matlab_version_chk('6.5.1') < 0 > >>> > % MATLAB 6.5.0 R13 has a bug in dealing with sparse > >>> matrices so > >>> revert to full matrices > >>> > fprintf('%-40s','MATLAB 6.5.0 R13: must use full > matrices - > >>> > this > >>> could cause memory problems...'); > >>> > d = full(P{1}.X'*inv(P{1}.C{1})*P{1}.X); > >>> > Cby = full(inv(d/l(i) + inv(P{2}.C))); > >>> > d = full(d*Cby); > >>> > dC = full(Cby*d/(l(i)^2)); > >>> > ddC = full(2*(dC/(l(i)^2) - Cby/(l(i)^3))*d); > >>> > else > >>> > % all other MATLAB versions: use sparse matrices > >>> > d = P{1}.X'*inv(P{1}.C{1})*P{1}.X; > >>> > Cby = inv(d/l(i) + inv(P{2}.C)); > >>> > d = d*Cby; > >>> > dC = Cby*d/(l(i)^2); > >>> > ddC = 2*(dC/(l(i)^2) - Cby/(l(i)^3))*d; > >>> > end > >>> > > >>> > % place in output structure > >>> > %--------------------------------------------------------------- > >>> > if spm_matlab_version_chk('6.5.1') < 0, > >>> > % MATLAB 6.5.0 R13: revert to full matrices > >>> > j = 1:length(v); > >>> > PPM.Cb(v,v) = full(P{2}.C(j,j)); > >>> > PPM.Cby(v,v) = full(Cby(j,j)); > >>> > PPM.dC{i}(v,v) = full(dC(j,j)); > >>> > PPM.ddC{i}(v,v) = full(ddC(j,j)); > >>> > else > >>> > % all other MATLAB versions: use sparse matrices > >>> > j = 1:length(v); > >>> > PPM.Cb(v,v) = P{2}.C(j,j); > >>> > PPM.Cby(v,v) = Cby(j,j); > >>> > PPM.dC{i}(v,v) = dC(j,j); > >>> > PPM.ddC{i}(v,v) = ddC(j,j); > >>> > end > >>> > > >>> >end > >>> > > >>> >%-Save remaining results files and analysis parameters > >>> >%============================================================ > >>> =========== > >>> >fprintf('%-40s: %30s','Saving results','...writing') > >>> %-# > >>> > > >>> >%-Save analysis parameters in SPM.mat file > >>> >%------------------------------------------------------------ > >>> ----------- > >>> >SPM.VCbeta = Vbeta; % Filenames - parameters > >>> >SPM.VHp = VHp; % Filenames - > hyperparameters > >>> >SPM.PPM = PPM; % PPM structure > >>> > > >>> >if spm_matlab_version_chk('7') >=0 > >>> > save('SPM', 'SPM', '-V6'); > >>> >else > >>> > save('SPM', 'SPM'); > >>> >end; > >>> > > >>> >fprintf('%s%30s\n',repmat(sprintf('\b'),1,30),'...done') > >>> %-# > >>> > > >>> > > >>> >%============================================================ > >>> ========== > >>> >= > >>> >%- E N D: Cleanup GUI > >>> >%============================================================ > >>> ========== > >>> >= > >>> >spm('FigName','Stats: done',Finter); spm('Pointer','Arrow') > >>> >fprintf('%-40s: %30s\n','Completed',spm('time')) > >>> %-# > >>> >fprintf('...use the results section for assessment\n\n') > >>> %-# > >>> > > >>> > >>> > >============================================================= > ========== > >= >