BinarizeMatrix: Difference between revisions

From CCN Wiki
Jump to navigation Jump to search
(Created page with "binarizeMatrix is a Matlab function that takes as an input one or more normalized time series matrices, '''''Z''''', and returns up to two transformations of these matrices, '...")
 
Line 3: Line 3:
== Function Source Code ==
== Function Source Code ==


function [BIN, SCALED]=binarizeMatrix(Z, thresh, clip)
function [BIN, SCALED]=binarizeMatrix(Z, thresh, clip)
%binarizeMatrix takes a normalized matrix, Z, and scales and binarizes its
%binarizeMatrix takes a normalized matrix, Z, and scales and binarizes its
%elements:  
%elements:  
%positive values are set to 1 and negative values ar set to 0. If thresh is
%positive values are set to 1 and negative values ar set to 0. If thresh is
%set to a nonzero value, elements with an absolute value less than thresh
%set to a nonzero value, elements with an absolute value less than thresh
%are set to NaN. If a clipping value, clip, is provided, elements with an
%are set to NaN. If a clipping value, clip, is provided, elements with an
%absolute value exceeding clip are first set to NaN before binarizing.
%absolute value exceeding clip are first set to NaN before binarizing.
if(~exist('thresh', 'var'))
if(~exist('thresh', 'var'))
     thresh=1;
     thresh=1;
end
end
if(~exist('clip', 'var'))
if(~exist('clip', 'var'))
     clip=inf;
     clip=inf;
end
end
if(thresh==0)
if(thresh==0)
     thresh=realmin; %workaround to allow a threshold of approx. zero
     thresh=realmin; %workaround to allow a threshold of approx. zero
end
end
if (~iscell(Z))
if (~iscell(Z))
     %Z is not a cell array, which is the easiest case
     %Z is not a cell array, which is the easiest case
     SCALED=scaleMatrix(Z,clip, thresh);
     SCALED=scaleMatrix(Z,clip, thresh);
     BIN=SCALED;
     BIN=SCALED;
     BIN(0<BIN & BIN<1)=nan;
     BIN(0<BIN & BIN<1)=nan;
else
else
     if(iscell(Z))
     if(iscell(Z))
         %M is a cell array, so we have to apply droprows and zscore to each
         %M is a cell array, so we have to apply droprows and zscore to each
Line 31: Line 31:
         BIN=cellfun(@(x) nanBin(x), SCALED, 'UniformOutput', false);
         BIN=cellfun(@(x) nanBin(x), SCALED, 'UniformOutput', false);
     end
     end
end
end
 
%%Nested utility function scale matrix
%%Nested utility function scale matrix
     function SM=scaleMatrix(M, clip, thresh)
     function SM=scaleMatrix(M, clip, thresh)
         M(abs(M)>clip)=nan; %remove items to be clipped
         M(abs(M)>clip)=nan; %remove items to be clipped
Line 50: Line 50:
          
          
     end
     end
%%Nested utility function sets all non 0-1 values to nan
%%Nested utility function sets all non 0-1 values to nan
     function BIN=nanBin(M)
     function BIN=nanBin(M)
         BIN=M;
         BIN=M;
         BIN(0<BIN & BIN<1)=nan;
         BIN(0<BIN & BIN<1)=nan;
     end
     end
end
end

Revision as of 10:56, 16 September 2016

binarizeMatrix is a Matlab function that takes as an input one or more normalized time series matrices, Z, and returns up to two transformations of these matrices, BIN and SCALED. A Z-score threshold, thresh is applied to the normalized values: For all values greater than +thresh are set to 1; all values less than -thresh are set to 0. For the SCALED transformation, the intermediate values are scaled so that the columnar mean of the values between 0 and 1 is 0.5. For the BIN transformation, all fractional values are set to NaN. Additionally, a clipping value, clip can be supplied: all values with an absolute value exceeding the clip value are set to NaN. If a threshold is not supplied, 0 is used by default (i.e., all positive values are set to 1, and negative values are set to 0). If a clipping value is not used, no outlier values are filtered.

Function Source Code

function [BIN, SCALED]=binarizeMatrix(Z, thresh, clip)
%binarizeMatrix takes a normalized matrix, Z, and scales and binarizes its
%elements: 
%positive values are set to 1 and negative values ar set to 0. If thresh is
%set to a nonzero value, elements with an absolute value less than thresh
%are set to NaN. If a clipping value, clip, is provided, elements with an
%absolute value exceeding clip are first set to NaN before binarizing.
if(~exist('thresh', 'var'))
   thresh=1;
end
if(~exist('clip', 'var'))
   clip=inf;
end
if(thresh==0)
   thresh=realmin; %workaround to allow a threshold of approx. zero
end
if (~iscell(Z))
   %Z is not a cell array, which is the easiest case
   SCALED=scaleMatrix(Z,clip, thresh);
   BIN=SCALED;
   BIN(0<BIN & BIN<1)=nan;
else
   if(iscell(Z))
       %M is a cell array, so we have to apply droprows and zscore to each
       %cell element
       SCALED=cellfun(@(x) scaleMatrix(x, clip, thresh), Z, 'UniformOutput', false);
       BIN=cellfun(@(x) nanBin(x), SCALED, 'UniformOutput', false);
   end
end

%%Nested utility function scale matrix
   function SM=scaleMatrix(M, clip, thresh)
       M(abs(M)>clip)=nan; %remove items to be clipped
       M=M/thresh;%scale in terms of thresholds
       M(M>1)=1;%anything above +threshold=1
       M(M<-1)=-1; %anything below -threshold=-1
       M=M+1;%shift values from range -1:1 to 0:2
       M=M/2;%now values range from 0:1
       %subtly shift values so that mean value for each column is ~0.5
       meansignal=nanmean(M);%what is the current mean of each column?
       %use log to determine exponent required to shift each mean to 0.5
       centerexp=repmat(power(log10(meansignal),-1).*log10(0.5),size(M,1),1);
       %raise each value to the required exponent. 0s and 1s will be
       %unaffected
       SM=round(10*M.^centerexp)/10;
       
   end
%%Nested utility function sets all non 0-1 values to nan
   function BIN=nanBin(M)
       BIN=M;
       BIN(0<BIN & BIN<1)=nan;
   end
end