wolffd@0: function [sTstats,csThist] = som_stats_table(csS,histlabel) wolffd@0: wolffd@0: %SOM_STATS_TABLE Statistics table. wolffd@0: % wolffd@0: % [sTstats,csThist] = som_stats_table(csS) wolffd@0: % wolffd@0: % sTstats = som_stats_table(csS); wolffd@0: % som_table_print(sTstats); wolffd@0: % wolffd@0: % Input and output arguments ([]'s are optional): wolffd@0: % csS (cell array) of statistics structs wolffd@0: % (struct) a statistics struct wolffd@0: % wolffd@0: % sTstats (struct) a table struct with basic descriptive wolffd@0: % statistics for each variable wolffd@0: % csThist (cell array) of table structs, with histograms for wolffd@0: % each variable wolffd@0: % wolffd@0: % See also SOM_STATS, SOM_STATS_PLOT, SOM_TABLE_PRINT, SOM_STATS_REPORT. wolffd@0: wolffd@0: % Contributed to SOM Toolbox 2.0, December 31st, 2001 by Juha Vesanto wolffd@0: % Copyright (c) by Juha Vesanto wolffd@0: % http://www.cis.hut.fi/projects/somtoolbox/ wolffd@0: wolffd@0: % Version 2.0beta juuso 311201 wolffd@0: wolffd@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wolffd@0: %% arguments wolffd@0: wolffd@0: if isstruct(csS), csS = {csS}; end wolffd@0: dim = length(csS); wolffd@0: wolffd@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 wolffd@0: %% action wolffd@0: wolffd@0: sTable = struct('colfmt','','headers',[],'values',[],'span',[]); wolffd@0: wolffd@0: % summary table of all variables wolffd@0: sT = sTable; wolffd@0: sT.headers = {'name','min','mean','max','std','missing'}; wolffd@0: if ~isnan(csS{1}.nunique), sT.headers{end+1} = 'unique'; end wolffd@0: %if length(col_values), sT.headers = [sT.headers, col_headers]; end wolffd@0: sT.values = cell(dim,length(sT.headers)); wolffd@0: sT.span = ones([size(sT.values) 2]); wolffd@0: wolffd@0: %if length(col_values), sT.values(:,end-size(col_values,2)+1:end) = col_values; end wolffd@0: %if length(col_spans), sT.span(:,end-size(col_spans,2)+1:end,:) = col_spans; end wolffd@0: wolffd@0: for i=1:dim, wolffd@0: sT.values{i,1} = csS{i}.name; wolffd@0: v = [csS{i}.min,csS{i}.mean,csS{i}.max,csS{i}.std]; wolffd@0: v = som_denormalize(v,csS{i}.normalization); wolffd@0: vstr = numtostring(v,6); wolffd@0: sT.values(i,2:5) = vstr'; wolffd@0: sT.values{i,6} = c_and_p_str(csS{i}.ntotal-csS{i}.nvalid,csS{i}.ntotal); wolffd@0: if ~isnan(csS{1}.nunique), wolffd@0: sT.values{i,7} = c_and_p_str(csS{i}.nunique,csS{i}.nvalid); wolffd@0: end wolffd@0: end wolffd@0: sTstats = sT; wolffd@0: wolffd@0: % histograms wolffd@0: csThist = cell(dim,1); wolffd@0: for i=1:dim, wolffd@0: sH = csS{i}.hist; wolffd@0: nvalid = csS{i}.nvalid; wolffd@0: nbins = length(sH.bins); wolffd@0: sT = sTable; wolffd@0: sT.headers = {[csS{i}.name ' values'],'frequency #','frequency %'}; wolffd@0: sT.values = cell(nbins,length(sT.headers)); wolffd@0: sT.span = ones(nbins,length(sT.headers),2); wolffd@0: for j=1:nbins, wolffd@0: if length(sH.bins) < csS{i}.nunique, sT.values{j,1} = sH.binlabels2{j}; wolffd@0: else sT.values{j,1} = sH.binlabels{j}; end wolffd@0: sT.values{j,2} = sprintf('%d',round(sH.counts(j))); wolffd@0: sT.values{j,3} = p_str(sH.counts(j)/nvalid); wolffd@0: end wolffd@0: csThist{i} = sT; wolffd@0: end wolffd@0: wolffd@0: return; wolffd@0: wolffd@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 wolffd@0: %% subfunctions wolffd@0: wolffd@0: function vstr = numtostring(v,d) wolffd@0: wolffd@0: tp = (size(v,2)>1); wolffd@0: if tp, v = v'; end wolffd@0: nearzero = (abs(v)/(max(v)-min(v)) < 10.^-d); wolffd@0: i1 = find(v > 0 & nearzero); wolffd@0: i2 = find(v < 0 & nearzero); wolffd@0: vstr = strrep(cellstr(num2str(v,d)),' ',''); wolffd@0: vstr(i1) = {'0.0'}; wolffd@0: vstr(i2) = {'-0.0'}; wolffd@0: if tp, vstr = vstr'; end wolffd@0: return; wolffd@0: wolffd@0: function str = c_and_p_str(n,m) wolffd@0: % return a string of form # (%), e.g. '23 (12%)' wolffd@0: if n==m, p = '100'; wolffd@0: elseif n==0, p = '0'; wolffd@0: else p = sprintf('%.2g',100*n/m); wolffd@0: end wolffd@0: str = sprintf('%d (%s%%)',round(n),p); wolffd@0: return; wolffd@0: wolffd@0: function str = p_str(p) wolffd@0: % return a string of form %, e.g. '12%' wolffd@0: if round(p*100)>100, p = sprintf('%3g',100*p); wolffd@0: elseif p==1, p = '100'; wolffd@0: elseif abs(p)