https://github.com/bigdelys/pre_ICA_cleaning
Raw File
Tip revision: 7dcb056c36d2c6d0881f5fa6163dd4d5a066d854 authored by Nima Bigdely-Shamlo on 01 August 2017, 19:48:08 UTC
after LARg pipeline
Tip revision: 7dcb056
getMIR.m
function [mir,v] = getMIR(W,data)
% function [mir,v] = getMIR(W,data)
%
% Get mutual information reduction caused by W on data. 
%
% Inputs:
%           W       Unmixing matrix atrix (n by n)
%           data    data matrix (n by N)
%
% Outputs:
%           mir     mutual information removed by W from data
%           v       Variance of MIR stimate
%           

[n,N] = size(data);


[hx,vx] = getent4(data);

y = W*data;

[hy,vy] = getent4(y);

%mir = log(abs(det(W))) + hxs - hys;
mir = sum(log(abs(eig(W)))) + sum(hx) - sum(hy);
v = (sum(vx)+sum(vy))/N;


function [Hu,v] = getent4(u,nbins)
% function [Hu,deltau] = getent2(u,nbins)
%
% Calculate nx1 marginal entropies of components of u.
%
% Inputs:
%           u       Matrix (n by N) of nu time series.
%           nbins   Number of bins to use in computing pdfs. Default is
%                   min(100,sqrt(N)).
%
% Outputs:
%           Hu      Vector n by 1 differential entropies of rows of u.
%           v       Variance of entropy estimates in Hu
%           
[nu,Nu] = size(u);
if nargin < 2 || isempty(nbins)
    nbins = round(3*log2(1+Nu/10));
end

Hu = zeros(nu,1);
deltau = zeros(nu,1);
for i = 1:nu
    umax = max(u(i,:));
    umin = min(u(i,:));
    deltau(i) = (umax-umin)/nbins;
    u(i,:) = 1 + round((nbins - 1) * (u(i,:) - umin) / (umax - umin));

    pmfr = diff([0 find(diff(sort(u(i,:)))) Nu])/Nu;
    Hu(i) = -sum(pmfr.*log(pmfr));
    v(i) = sum(pmfr.*(log(pmfr).^2)) - Hu(i)^2;
    Hu(i) = Hu(i) + (nbins-1)/(2*Nu) + log(deltau(i));
end
back to top