123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- function varargout = spm_dcm_ui(Action)
- % User interface for Dynamic Causal Modelling (DCM)
- % FORMAT spm_dcm_ui('specify')
- % FORMAT spm_dcm_ui('estimate')
- % FORMAT spm_dcm_ui('search')
- % FORMAT spm_dcm_ui('optimise')
- % FORMAT spm_dcm_ui('review')
- % FORMAT spm_dcm_ui('compare')
- % FORMAT spm_dcm_ui('average (BPA)')
- % FORMAT spm_dcm_ui('average (BMA)')
- %
- % * Specify a new model
- % * Estimate a specified model
- % * Review a previously estimated model
- % * Compare two or more estimated models
- % * Produce an aggregate model using Bayesian averaging
- %
- % DCM structure, as saved in DCM_???.mat:
- %
- % DCM.M - model specification structure (see spm_nlsi)
- % DCM.Y - output specification structure (see spm_nlsi)
- % DCM.U - input specification structure (see spm_nlsi)
- % DCM.Ep - posterior expectations (see spm_nlsi)
- % DCM.Cp - posterior covariances (see spm_nlsi)
- % DCM.a - intrinsic connection matrix
- % DCM.b - input-dependent connection matrix
- % DCM.c - input connection matrix
- % DCM.Pp - posterior probabilities
- % DCM.Vp - variance of parameter estimates
- % DCM.H1 - 1st order Volterra Kernels - hemodynamic
- % DCM.K1 - 1st order Volterra Kernels - neuronal
- % DCM.R - residuals
- % DCM.y - predicted responses
- % DCM.xY - original response variable structures
- % DCM.T - threshold for inference based on posterior p.d.f
- % DCM.v - Number of scans
- % DCM.n - Number of regions
- %
- %__________________________________________________________________________
- %
- % DCM is a causal modelling procedure for dynamical systems in which
- % causality is inherent in the differential equations that specify the
- % model. The basic idea is to treat the system of interest, in this case
- % the brain, as an input-state-output system. By perturbing the system
- % with known inputs, measured responses are used to estimate various
- % parameters that govern the evolution of brain states. Although there are
- % no restrictions on the parameterisation of the model, a bilinear
- % approximation affords a simple re-parameterisation in terms of effective
- % connectivity. This effective connectivity can be latent or intrinsic or,
- % through bilinear terms, model input-dependent changes in effective
- % connectivity. Parameter estimation proceeds using fairly standard
- % approaches to system identification that rest upon Bayesian inference.
- %
- % Dynamic causal modelling represents a fundamental departure from
- % conventional approaches to modelling effective connectivity in
- % neuroscience. The critical distinction between DCM and other approaches,
- % such as structural equation modelling or multivariate autoregressive
- % techniques is that the input is treated as known, as opposed to stochastic.
- % In this sense DCM is much closer to conventional analyses of neuroimaging
- % time series because the causal or explanatory variables enter as known
- % fixed quantities. The use of designed and known inputs in characterising
- % neuroimaging data with the general linear model or DCM is a more natural
- % way to analyse data from designed experiments. Given that the vast
- % majority of imaging neuroscience relies upon designed experiments we
- % consider DCM a potentially useful complement to existing techniques.
- %__________________________________________________________________________
- % Copyright (C) 2002-2012 Wellcome Trust Centre for Neuroimaging
- % Karl Friston
- % $Id: spm_dcm_ui.m 7481 2018-11-09 15:36:57Z peter $
- DCMversion = 'DCM12.5';
- if nargin == 1 && strcmpi(Action,'version')
- varargout = {DCMversion};
- return
- end
- % Get figure handles
- %--------------------------------------------------------------------------
- Finter = spm_figure('GetWin','Interactive');
- header = get(Finter,'Name');
- spm_clf(Finter);
- set(Finter,'Name',sprintf('Dynamic Causal Modelling (%s)',DCMversion));
- spm('Pointer','Arrow');
- % Temporary welcome message
- %--------------------------------------------------------------------------
- disp(['Please refer to this version as ' ...
- DCMversion ' in papers and publications.']);
- % Options, using pull-down menu
- %--------------------------------------------------------------------------
- if ~nargin
- str = 'Action: ';
- Actions = {'specify', ...
- 'estimate (time-series)', ...
- 'estimate (cross-spectra)', ...
- 'search', ...
- 'optimise', ...
- 'review', ...
- 'compare', ...
- 'average', ...
- 'quit'};
- selected = spm_input(str,1,'m',Actions);
- Action = Actions{selected};
- end
- switch lower(Action)
- %==========================================================================
- % Specify graph
- %==========================================================================
- case 'specify',
- spm('FnBanner','spm_dcm_specify');
-
- spm_dcm_specify;
-
-
- %==========================================================================
- % Estimate models - standard
- %==========================================================================
- case 'estimate (time-series)',
-
- %-estimate models
- %----------------------------------------------------------------------
- spm('FnBanner','spm_dcm_estimate');
- %-select DCM models
- %----------------------------------------------------------------------
- [P, sts] = spm_select([1 Inf],'^DCM.*\.mat$','select DCM_???.mat');
- if ~sts, return; else P = cellstr(P); end
- spm('Pointer','Watch');
- spm('FigName','Estimation in progress');
- %-loop over models
- %----------------------------------------------------------------------
- for i=1:numel(P)
- spm('SFnBanner',sprintf('spm_dcm_estimate: model %d',i));
- spm_dcm_estimate(P{i});
- end
-
- %==========================================================================
- % Estimate models - cross spectral density
- %==========================================================================
- case 'estimate (cross-spectra)',
-
- %-estimate models
- %----------------------------------------------------------------------
- spm('FnBanner','spm_dcm_fmri_csd');
- %-select DCM models
- %----------------------------------------------------------------------
- [P, sts] = spm_select([1 Inf],'^DCM.*\.mat$','select DCM_???.mat');
- if ~sts, return; else P = cellstr(P); end
- spm('Pointer','Watch');
- spm('FigName','Estimation in progress');
- %-loop over models
- %----------------------------------------------------------------------
- for i=1:numel(P)
- spm('SFnBanner',sprintf('spm_dcm_fmri_csd: model %d',i));
- spm_dcm_fmri_csd(P{i});
- end
- %==========================================================================
- % Esimate and search a model set
- %==========================================================================
- case 'search',
- spm('FnBanner','spm_dcm_search');
-
- spm_dcm_search;
-
- %==========================================================================
- % Post hoc model optimisation/selection
- %==========================================================================
- case 'optimise',
- spm('FnBanner','spm_dcm_post_hoc');
-
- spm_dcm_post_hoc;
-
- %==========================================================================
- % Review results
- %==========================================================================
- case 'review',
- spm('FnBanner','spm_dcm_review');
-
- spm_dcm_review;
-
-
- %==========================================================================
- % Compare different models
- %==========================================================================
- case 'compare',
-
- spm('FnBanner','spm_api_bmc');
-
- spm_jobman('Interactive','','spm.dcm.bms.inference');
- %==========================================================================
- % Average
- %==========================================================================
- case 'average',
-
- if spm_input('Average',1,'b',{'BPA','BMA'},[1 0])
-
- spm('FnBanner','spm_dcm_average');
- spm_dcm_average; % Average several models (Bayesian FFX)
-
- else
-
- spm('FnBanner','spm_dcm_bma_results');
- spm_dcm_bma_results; % Average model parameters from BMS (BMA)
-
- end
-
-
- %==========================================================================
- % Quit DCM GUI
- %==========================================================================
- case 'quit',
-
- %==========================================================================
- % Otherwise
- %==========================================================================
- otherwise
- error('Unknown action string.');
-
- end
- % Return to SPM
- %--------------------------------------------------------------------------
- spm_clf(Finter);
- spm('Pointer','Arrow');
- set(Finter,'Name',header);
- spm_input('Thank you',1,'d');
|