[Master Index] [Index for Toolbox]

# aic_mdl

## (Toolbox/aic_mdl.m in BrainStorm 2.0 (Alpha))

### Function Synopsis

    [dim, aic, mdl] = aic_mdl(s,n);

### Help Text

    AIC_MDL - Calculate Information Theoretic Criteria for data dimensionality
     function [dim, aic, mdl] = aic_mdl(s,n);
     Let s be the ordered eigenvalues of the data correlation matrix, calculated from
      n samples of data.
     E.G.: F  is 151 x 375, then s = svd(F).^2; n = 375;
     Alternatively, call as [dim, aic, mdl] = aic_mdl(F);
      where F is the spatio-temporal data matrix.
     Returns the subspace dimension, calculated by two different methods,
      one based on Akaike (AIC), the other by Schwartz and Rissanen (MDL).
     dim is 1 x 2, with the subspace dimension as found by each method
     aic and mdl are the calculated metrics

     See IEEE ASSP 1985, Wax and Kailath.

### Cross-Reference Information

This function is called by

    parametric_estimation              C:\BrainStorm_2001\Toolbox\parametric_estimation.m

### Listing of function C:\BrainStorm_2001\Toolbox\aic_mdl.m

    function [dim, aic, mdl] = aic_mdl(s,n);
    %AIC_MDL - Calculate Information Theoretic Criteria for data dimensionality
    % function [dim, aic, mdl] = aic_mdl(s,n);
    % Let s be the ordered eigenvalues of the data correlation matrix, calculated from
    %  n samples of data.
    % E.G.: F  is 151 x 375, then s = svd(F).^2; n = 375;
    % Alternatively, call as [dim, aic, mdl] = aic_mdl(F);
    %  where F is the spatio-temporal data matrix.
    % Returns the subspace dimension, calculated by two different methods,
    %  one based on Akaike (AIC), the other by Schwartz and Rissanen (MDL).
    % dim is 1 x 2, with the subspace dimension as found by each method
    % aic and mdl are the calculated metrics
    %
    % See IEEE ASSP 1985, Wax and Kailath.

    %<autobegin> ---------------------- 14-Jun-2004 17:09:45 -----------------------
    % --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
    %
    % CATEGORY: Utility - Numeric
    %
    % At Check-in: $Author: Mosher $  $Revision: 9 $  $Date: 6/14/04 3:37p $
    %
    % This software is part of BrainStorm Toolbox Version 2.0 (Alpha) 14-Jun-2004
    %
    % Principal Investigators and Developers:
    % ** Richard M. Leahy, PhD, Signal & Image Processing Institute,
    %    University of Southern California, Los Angeles, CA
    % ** John C. Mosher, PhD, Biophysics Group,
    %    Los Alamos National Laboratory, Los Alamos, NM
    % ** Sylvain Baillet, PhD, Cognitive Neuroscience & Brain Imaging Laboratory,
    %    CNRS, Hopital de la Salpetriere, Paris, France
    %
    % See BrainStorm website at http://neuroimage.usc.edu for further information.
    %
    % Copyright (c) 2004 BrainStorm by the University of Southern California
    % This software distributed  under the terms of the GNU General Public License
    % as published by the Free Software Foundation. Further details on the GPL
    % license can be found at http://www.gnu.org/copyleft/gpl.html .
    %
    % FOR RESEARCH PURPOSES ONLY. THE SOFTWARE IS PROVIDED "AS IS," AND THE
    % UNIVERSITY OF SOUTHERN CALIFORNIA AND ITS COLLABORATORS DO NOT MAKE ANY
    % WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
    % MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, NOR DO THEY ASSUME ANY
    % LIABILITY OR RESPONSIBILITY FOR THE USE OF THIS SOFTWARE.
    %<autoend> ------------------------ 14-Jun-2004 17:09:45 -----------------------

    % History -----------------------------
    % JCM 06-Nov-2003 creation
    % -------------------------------------

    if nargin == 1,
       [ignore,n] = size(s);
       s = svd(s).^2;
    end

    s = s/s(1); % scale to unity max for numeric handling

    % test case from Wax and Kailath 1985 paper
    if 0
       s = [21.2359, 2.1717, 1.4279, 1.0979, 1.0544, 0.9432, 0.7324]';
       n = 100;
    end

    if 0,
    trim = min(find(s < .001)); % eigen values too small for practicality
    if ~isempty(trim),
       s = s(1:trim);
       disp(sprintf('Trimmed to %.0f singular values',length(s)));
    end
    end

    p = length(s);
    aic = zeros(p,1);
    mdl = zeros(p,1);

    for k = 0:(p-1),

       pmk = p - k;

       num = prod(s((k+1):end).^(1/pmk));
       den = sum(s((k+1):end))/pmk;

       fac = (pmk*n)*log((num/den));

       aic(k+1) = -2*fac + 2*k*(2*p - k);

       mdl(k+1) = -fac + k*(2*p - k)*log(n)/2;

    end

    [ignore,dim] = min([aic mdl]);

    dim = dim -1; % dimension of retained subspace

    if 0 % debug plotting
       figure(1)
       subplot(121)
       plot([aic mdl])
       legend('aic','mdl')
       subplot(122)
       semilogy(s,'*')
    end

Produced by color_mat2html, a customized BrainStorm 2.0 (Alpha) version of mat2html on Tue Oct 12 12:05:14 2004
Cross-Directory links are: ON