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