⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spm_mar_prior.m.svn-base

📁 try the matlab scripts to do various computations
💻 SVN-BASE
字号:
function [prior] = spm_mar_prior (d,p,type)
% Specify ARD-type prior for Bayesian MAR model
% function [prior] = spm_mar_prior (d,p,type)
%
% d         Number of time series
% p         Order of MAR model
% type      'global', 'lag','interaction','lag-inter',
%           'silly','ran2','triu' (see code below)
%
% prior     data structure to be passed to spm_mar.m
%___________________________________________________________________________
% Copyright (C) 2007 Wellcome Department of Imaging Neuroscience

% Will Penny 
% $Id$

k=p*d*d;
switch type,
    case 'global',
        prior.type='global';
        prior.groups=1;
        prior.group(1).index=ones(k,1);
    case 'ran2',
        % Randomly group together weights into 2 groups
        k1=floor(k/2);
        prior.type='ran2';
        prior.groups=2;
        Ij=randperm(k);
        prior.group(1).index=zeros(k,1);
        prior.group(1).index(Ij(1:k1))=ones(1,k/2);
        prior.group(2).index=zeros(k,1);
        prior.group(2).index(Ij(k1+1:k))=ones(1,k/2);
    case 'silly',
        % Randomly group together 2 weights
        prior.type='silly';
        prior.groups=k/2;
        Ij=randperm(k);
        for j=1:k/2,
            prior.group(j).index=zeros(k,1);
            prior.group(j).index(Ij(j))=1;
            prior.group(j).index(Ij(j+k/2))=1;
        end
    case 'lag',
        % p groups; one for each lag
        prior.type='lag';
        prior.groups=p;
        for j=1:p,
            Iwj=zeros(p*d,d);
            start=(j-1)*d+1;
            stop=start+d-1;
            Iwj(start:stop,:)=ones(d,d);
            prior.group(j).index=Iwj(:);
        end
    case 'interaction',
        % (1) One group for within-series coefficients
        % (2) Another group for between-series coefficients
        prior.type='interaction';
        prior.groups=2;
        Iw=[];
        for i=1:p,
            Iw=[Iw;diag(ones(1,d))];
        end
        prior.group(1).index=Iw(:);
        prior.group(2).index=ones(k,1)-Iw(:);
    case 'triu',
        % (1) One group for upper-triangular coefficients
        %     - including diagonal
        % (2) Another group for lower
        prior.type='triu';
        prior.groups=2;
        Iw=[];
        for i=1:p,
            Iw=[Iw;triu(ones(d,d))];
        end
        prior.group(1).index=Iw(:);
        prior.group(2).index=ones(k,1)-Iw(:);
    case 'tril',
        % (1) One group for lower-triangular coefficients
        %     - including diagonal
        % (2) Another group for upper
        prior.type='tril';
        prior.groups=2;
        Iw=[];
        for i=1:p,
            Iw=[Iw;tril(ones(d,d))];
        end
        prior.group(1).index=Iw(:);
        prior.group(2).index=ones(k,1)-Iw(:);
    case 'lag-inter',
        % Lag-interaction prior
        % 2p groups.
        % At each lag have 
        % (a) a group for within series coeffs and 
        % (b) a group for interaction coeffs
        prior.type='lag-inter';
        prior.groups=2*p;
        % First p groups are the within terms
        % Next p groups are the interaction terms
        for j=1:p,
            Iwj_within=zeros(p*d,d);
            Iwj_inter=zeros(p*d,d);
            start=(j-1)*d+1;
            stop=start+d-1;
            Iwj_within(start:stop,:)=diag(ones(1,d));
            Iwj_inter(start:stop,:)=ones(d,d)-diag(ones(1,d));
            prior.group(j).index=Iwj_within(:);
            prior.group(j+p).index=Iwj_inter(:);
        end
        
    otherwise,
        disp('Unknown prior type in marprior');
        prior=[];
        return
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -