12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- function [F] = spm_vb_regionF (Y,xY,SPM)
- % Get log model evidence over a region of data for a GLM
- % FORMAT [F] = spm_vb_regionF (Y,xY,SPM)
- %
- % Y Matrix of fMRI data (eg. from spm_summarise.m)
- % xY Coordinates etc from region (eg. from spm_voi.m)
- % SPM SPM data structure (this must be loaded in from an
- % SPM.mat file). If this field is not specified this function
- % will prompt you for the name of an SPM.mat file
- %
- % F Log model evidence (single number for whole region)
- %
- % Importantly, the design matrix is normalised so that when you compare
- % models their regressors will be identically scaled.
- %
- % Valid model comparisons also require that the DCT basis set used in high
- % pass filtering, as specified in SPM.xX.K.X0, is the same for all models
- % that are to be compared.
- %
- % W. Penny, G. Flandin, and N. Trujillo-Barreto. (2007). Bayesian Model
- % Comparison of Spatially Regularised General Linear Models. Human
- % Brain Mapping, 28(4):275-293.
- %__________________________________________________________________________
- % Copyright (C) 2005-2014 Wellcome Trust Centre for Neuroimaging
- % Will Penny
- % $Id: spm_vb_regionF.m 6079 2014-06-30 18:25:37Z spm $
- try
- SPM;
- catch
- [Pf, sts] = spm_select(1,'^SPM\.mat$','Select SPM.mat');
- if ~sts, return; end
- swd = spm_file(Pf,'fpath');
- load(fullfile(swd,'SPM.mat'))
- end
- s=length(SPM.Sess);
- if s>1
- disp('spm_vb_regionF: only works for single session data');
- return
- end
- % Normalise design matrices to have columns of unit
- % variance - except for last
- X=SPM.xX.X;
- X=norm_design(X);
-
- % Make residual forming matrix (to later remove drifts)
- X0=SPM.xX.K.X0;
- N=size(X0,1);
- iX0=pinv(X0);
- R=eye(N)-X0*iX0;
- % Remove drifts
- Y=R*Y;
- % Normalise Y to unit dev
- sigma=std(Y);
- N=size(Y,1);
- Y=Y./(ones(N,1)*sigma);
- xyz = xY.XYZmm;
- N = size(xyz,2);
- xyz = SPM.xVol.M\[xyz;ones(1,size(xyz,2))];
- xyz = xyz(1:3,:);
- vxyz = spm_vb_neighbors(xyz',1);
- priors.W='Voxel - Shrinkage';
- priors.A='Voxel - Shrinkage';
- block=spm_vb_init_volume(X,1);
- block=spm_vb_set_priors(block,priors,vxyz);
- block.maxits = 64;
- block.update_alpha = 1;
- block.update_w = 1;
- block.update_lambda = 1;
- block.update_F = 1;
- block=spm_vb_glmar(Y,block);
- F=block.F;
- function [Xout] = norm_design (Xin)
- % Normalise design matrix to have unit variance columns
- % FORMAT [Xout] = norm_design (Xin)
- X=Xin(:,1:end-1);
- s=std(X,[],1);
- iS=diag(1./s);
- Xout=[X*iS,Xin(:,end)];
|