123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- function [block] = spm_vb_beta(Y,block)
- % Variational Bayes for GLM-AR modelling in a block - Update beta
- % FORMAT [block] = spm_vb_beta(Y,block)
- %
- % Y [T x N] time series
- % block data structure (see spm_vb_glmar)
- %__________________________________________________________________________
- % Copyright (C) 2005-2014 Wellcome Trust Centre for Neuroimaging
- % Will Penny and Nelson Trujillo-Barreto
- % $Id: spm_vb_beta.m 6079 2014-06-30 18:25:37Z spm $
- if block.verbose
- disp('Updating beta');
- end
- N = block.N;
- p = block.p;
-
- % Convert from V_n to V_p
- for n=1:N
- for j=1:p
- a_cov_p(n,j) = block.a_cov{n}(j,j);
- end
- end
-
- switch block.priors.A
- case 'Discrete'
- for j=1:p
- for s=1:block.priors.S
- sj = (block.priors.voxel(s).i-1)*p+j;
- H = sum((block.a_mean(sj)-block.as(j,s)).^2+a_cov_p(block.priors.voxel(s).i,j));
- block.b_beta(j,s) = 1/(H/2+1./block.b_beta_prior(j,s));
- block.mean_beta(j,s) = block.c_beta(j,s)*block.b_beta(j,s);
- end
- end
- otherwise
- for j=1:p
- subblock_p = j:p:N*p;
- H = sum(spdiags(block.Da,0).*a_cov_p(:,j)) + block.a_mean(subblock_p)'*block.Da*block.a_mean(subblock_p);
- % Equation 16 in paper VB4
- block.b_beta(j) = 1./(H./2 + 1./block.b_beta_prior(j));
- block.mean_beta(j) = block.c_beta(j)*block.b_beta(j);
- end
- end
|