You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

#### 147 lines 5.7 KiB Matlab Raw Permalink Blame History

 ```function [mutM,cummutM,minmuttauV] = MutualInformationHisPro(xV,tauV,bV,flag) ``` ```% [mutM,cummutM,minmuttauV] = MutualInformationHisPro(xV,tauV,bV,flag) ``` ```% MUTUALINFORMATIONHISPRO computes the mutual information on the time ``` ```% series 'xV' for given delays in 'tauV'. The estimation of mutual ``` ```% information is based on 'b' partitions of equal probability at each dimension. ``` ```% A number of different 'b' can be given in the input vector 'bV'. ``` ```% According to a given flag, it can also compute the cumulative mutual ``` ```% information for each given lag, as well as the time of the first minimum ``` ```% of the mutual information. ``` ```% INPUT ``` ```% - xV : a vector for the time series ``` ```% - tauV : a vector of the delays to be evaluated for ``` ```% - bV : a vector of the number of partitions of the histogram-based ``` ```% estimate. ``` ```% - flag : if 0-> compute only mutual information, ``` ```% : if 1-> compute the mutual information, the first minimum of ``` ```% mutual information and the cumulative mutual information. ``` ```% if 2-> compute (also) the cumulative mutual information ``` ```% if 3-> compute (also) the first minimum of mutual information ``` ```% OUTPUT ``` ```% - mutM : the vector of the mutual information values s for the given ``` ```% delays. ``` ```% - cummutM : the vector of the cumulative mutual information values for ``` ```% the given delays ``` ```% - minmuttauV : the time of the first minimum of the mutual information. ``` ```%======================================================================== ``` ```% , v 1.0 2010/02/11 22:09:14 Kugiumtzis & Tsimpiris ``` ```% This is part of the MATS-Toolkit http://eeganalysis.web.auth.gr/ ``` ``` ``` ```%======================================================================== ``` ```% Copyright (C) 2010 by Dimitris Kugiumtzis and Alkiviadis Tsimpiris ``` ```% ``` ``` ``` ```%======================================================================== ``` ```% Version: 1.0 ``` ``` ``` ```% LICENSE: ``` ```% This program is free software; you can redistribute it and/or modify ``` ```% it under the terms of the GNU General Public License as published by ``` ```% the Free Software Foundation; either version 3 of the License, or ``` ```% any later version. ``` ```% ``` ```% This program is distributed in the hope that it will be useful, ``` ```% but WITHOUT ANY WARRANTY; without even the implied warranty of ``` ```% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ``` ```% GNU General Public License for more details. ``` ```% ``` ```% You should have received a copy of the GNU General Public License ``` ```% along with this program. If not, see http://www.gnu.org/licenses/>. ``` ``` ``` ```%========================================================================= ``` ```% Reference : D. Kugiumtzis and A. Tsimpiris, "Measures of Analysis of Time Series (MATS): ``` ```% A Matlab Toolkit for Computation of Multiple Measures on Time Series Data Bases", ``` ```% Journal of Statistical Software, in press, 2010 ``` ``` ``` ```% Link : http://eeganalysis.web.auth.gr/ ``` ```%========================================================================= ``` ```nsam = 1; ``` ```n = length(xV); ``` ```if nargin==3 ``` ``` flag = 1; ``` ```elseif nargin==2 ``` ``` flag = 1; ``` ``` bV = round(sqrt(n/5)); ``` ```end ``` ```if isempty(bV) ``` ``` bV = round(sqrt(n/5)); ``` ```end ``` ```bV(bV==0)=round(sqrt(n/5)); ``` ```tauV = sort(tauV); ``` ```ntau = length(tauV); ``` ```taumax = tauV(end); ``` ```nb = length(bV); ``` ```[oxV,ixV]=sort(xV); ``` ```[tmpV,ioxV]=sort(ixV); ``` ```switch flag ``` ``` case 0 ``` ``` % Compute only the mutual information for the given lags ``` ``` mutM = NaN*ones(ntau,nb); ``` ``` for ib=1:nb ``` ``` b = bV(ib); ``` ``` if n<2*b ``` ``` break; ``` ``` end ``` ``` mutM(:,ib)=mutinfHisPro(xV,tauV,b,ioxV,ixV); ``` ``` end % for ib ``` ``` cummutM=[]; ``` ``` minmuttauV=[]; ``` ``` case 1 ``` ``` % Compute the mutual information for all lags up to the ``` ``` % largest given lag, then compute the lag of the first minimum of ``` ``` % mutual information and the cumulative mutual information for the ``` ``` % given lags. ``` ``` mutM = NaN*ones(ntau,nb); ``` ``` cummutM = NaN*ones(ntau,nb); ``` ``` minmuttauV = NaN*ones(nb,1); ``` ``` miM = NaN*ones(taumax+1,nb); ``` ``` for ib=1:nb ``` ``` b = bV(ib); ``` ``` if n<2*b ``` ``` break; ``` ``` end ``` ``` miM(:,ib)=mutinfHisPro(xV,[0:taumax]',b,ioxV,ixV); ``` ``` mutM(:,ib) = miM(tauV+1,ib); ``` ``` minmuttauV(ib) = findminMutInf(miM(:,ib),nsam); ``` ``` % Compute the cumulative mutual information for the given delays ``` ``` for i=1:ntau ``` ``` cummutM(i,ib) = sum(miM(1:tauV(i)+1,ib)); ``` ``` end ``` ``` end % for ib ``` ``` case 2 ``` ``` % Compute the mutual information for all lags up to the largest ``` ``` % given lag and then sum up to get the cumulative mutual information ``` ``` % for the given lags. ``` ``` cummutM = NaN*ones(ntau,nb); ``` ``` miM = NaN*ones(taumax+1,nb); ``` ``` for ib=1:nb ``` ``` b = bV(ib); ``` ``` if n<2*b ``` ``` break; ``` ``` end ``` ``` miM(:,ib)=mutinfHisPro(xV,[0:taumax]',b,ioxV,ixV); ``` ``` % Compute the cumulative mutual information for the given delays ``` ``` for i=1:ntau ``` ``` cummutM(i,ib) = sum(miM(1:tauV(i)+1,ib)); ``` ``` end ``` ``` end % for ib ``` ``` mutM = []; ``` ``` minmuttauV=[]; ``` ``` case 3 ``` ``` % Compute the mutual information for all lags up to the largest ``` ``` % given lag and then compute the lag of the first minimum of the ``` ``` % mutual information. ``` ``` minmuttauV = NaN*ones(nb,1); ``` ``` miM = NaN*ones(taumax+1,nb); ``` ``` for ib=1:nb ``` ``` b = bV(ib); ``` ``` if n<2*b ``` ``` break; ``` ``` end ``` ``` miM(:,ib)=mutinfHisPro(xV,[0:taumax]',b,ioxV,ixV); ``` ``` minmuttauV(ib) = findminMutInf(miM(:,ib),nsam); ``` ``` end % for ib ``` ``` mutM = []; ``` ``` cummutM=[]; ``` ```end ```