annotate toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats_table.m @ 0:cc4b1211e677 tip

initial commit to HG from Changeset: 646 (e263d8a21543) added further path and more save "camirversion.m"
author Daniel Wolff
date Fri, 19 Aug 2016 13:07:06 +0200
parents
children
rev   line source
Daniel@0 1 function [sTstats,csThist] = som_stats_table(csS,histlabel)
Daniel@0 2
Daniel@0 3 %SOM_STATS_TABLE Statistics table.
Daniel@0 4 %
Daniel@0 5 % [sTstats,csThist] = som_stats_table(csS)
Daniel@0 6 %
Daniel@0 7 % sTstats = som_stats_table(csS);
Daniel@0 8 % som_table_print(sTstats);
Daniel@0 9 %
Daniel@0 10 % Input and output arguments ([]'s are optional):
Daniel@0 11 % csS (cell array) of statistics structs
Daniel@0 12 % (struct) a statistics struct
Daniel@0 13 %
Daniel@0 14 % sTstats (struct) a table struct with basic descriptive
Daniel@0 15 % statistics for each variable
Daniel@0 16 % csThist (cell array) of table structs, with histograms for
Daniel@0 17 % each variable
Daniel@0 18 %
Daniel@0 19 % See also SOM_STATS, SOM_STATS_PLOT, SOM_TABLE_PRINT, SOM_STATS_REPORT.
Daniel@0 20
Daniel@0 21 % Contributed to SOM Toolbox 2.0, December 31st, 2001 by Juha Vesanto
Daniel@0 22 % Copyright (c) by Juha Vesanto
Daniel@0 23 % http://www.cis.hut.fi/projects/somtoolbox/
Daniel@0 24
Daniel@0 25 % Version 2.0beta juuso 311201
Daniel@0 26
Daniel@0 27 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Daniel@0 28 %% arguments
Daniel@0 29
Daniel@0 30 if isstruct(csS), csS = {csS}; end
Daniel@0 31 dim = length(csS);
Daniel@0 32
Daniel@0 33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
Daniel@0 34 %% action
Daniel@0 35
Daniel@0 36 sTable = struct('colfmt','','headers',[],'values',[],'span',[]);
Daniel@0 37
Daniel@0 38 % summary table of all variables
Daniel@0 39 sT = sTable;
Daniel@0 40 sT.headers = {'name','min','mean','max','std','missing'};
Daniel@0 41 if ~isnan(csS{1}.nunique), sT.headers{end+1} = 'unique'; end
Daniel@0 42 %if length(col_values), sT.headers = [sT.headers, col_headers]; end
Daniel@0 43 sT.values = cell(dim,length(sT.headers));
Daniel@0 44 sT.span = ones([size(sT.values) 2]);
Daniel@0 45
Daniel@0 46 %if length(col_values), sT.values(:,end-size(col_values,2)+1:end) = col_values; end
Daniel@0 47 %if length(col_spans), sT.span(:,end-size(col_spans,2)+1:end,:) = col_spans; end
Daniel@0 48
Daniel@0 49 for i=1:dim,
Daniel@0 50 sT.values{i,1} = csS{i}.name;
Daniel@0 51 v = [csS{i}.min,csS{i}.mean,csS{i}.max,csS{i}.std];
Daniel@0 52 v = som_denormalize(v,csS{i}.normalization);
Daniel@0 53 vstr = numtostring(v,6);
Daniel@0 54 sT.values(i,2:5) = vstr';
Daniel@0 55 sT.values{i,6} = c_and_p_str(csS{i}.ntotal-csS{i}.nvalid,csS{i}.ntotal);
Daniel@0 56 if ~isnan(csS{1}.nunique),
Daniel@0 57 sT.values{i,7} = c_and_p_str(csS{i}.nunique,csS{i}.nvalid);
Daniel@0 58 end
Daniel@0 59 end
Daniel@0 60 sTstats = sT;
Daniel@0 61
Daniel@0 62 % histograms
Daniel@0 63 csThist = cell(dim,1);
Daniel@0 64 for i=1:dim,
Daniel@0 65 sH = csS{i}.hist;
Daniel@0 66 nvalid = csS{i}.nvalid;
Daniel@0 67 nbins = length(sH.bins);
Daniel@0 68 sT = sTable;
Daniel@0 69 sT.headers = {[csS{i}.name ' values'],'frequency #','frequency %'};
Daniel@0 70 sT.values = cell(nbins,length(sT.headers));
Daniel@0 71 sT.span = ones(nbins,length(sT.headers),2);
Daniel@0 72 for j=1:nbins,
Daniel@0 73 if length(sH.bins) < csS{i}.nunique, sT.values{j,1} = sH.binlabels2{j};
Daniel@0 74 else sT.values{j,1} = sH.binlabels{j}; end
Daniel@0 75 sT.values{j,2} = sprintf('%d',round(sH.counts(j)));
Daniel@0 76 sT.values{j,3} = p_str(sH.counts(j)/nvalid);
Daniel@0 77 end
Daniel@0 78 csThist{i} = sT;
Daniel@0 79 end
Daniel@0 80
Daniel@0 81 return;
Daniel@0 82
Daniel@0 83 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
Daniel@0 84 %% subfunctions
Daniel@0 85
Daniel@0 86 function vstr = numtostring(v,d)
Daniel@0 87
Daniel@0 88 tp = (size(v,2)>1);
Daniel@0 89 if tp, v = v'; end
Daniel@0 90 nearzero = (abs(v)/(max(v)-min(v)) < 10.^-d);
Daniel@0 91 i1 = find(v > 0 & nearzero);
Daniel@0 92 i2 = find(v < 0 & nearzero);
Daniel@0 93 vstr = strrep(cellstr(num2str(v,d)),' ','');
Daniel@0 94 vstr(i1) = {'0.0'};
Daniel@0 95 vstr(i2) = {'-0.0'};
Daniel@0 96 if tp, vstr = vstr'; end
Daniel@0 97 return;
Daniel@0 98
Daniel@0 99 function str = c_and_p_str(n,m)
Daniel@0 100 % return a string of form # (%), e.g. '23 (12%)'
Daniel@0 101 if n==m, p = '100';
Daniel@0 102 elseif n==0, p = '0';
Daniel@0 103 else p = sprintf('%.2g',100*n/m);
Daniel@0 104 end
Daniel@0 105 str = sprintf('%d (%s%%)',round(n),p);
Daniel@0 106 return;
Daniel@0 107
Daniel@0 108 function str = p_str(p)
Daniel@0 109 % return a string of form %, e.g. '12%'
Daniel@0 110 if round(p*100)>100, p = sprintf('%3g',100*p);
Daniel@0 111 elseif p==1, p = '100';
Daniel@0 112 elseif abs(p)<eps, p = '0';
Daniel@0 113 else p = sprintf('%.2g',100*p);
Daniel@0 114 end
Daniel@0 115 str = sprintf('%s%%',p);
Daniel@0 116 return;