Mercurial > hg > camir-aes2014
diff toolboxes/MIRtoolbox1.3.2/somtoolbox/som_stats_report.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_report.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,113 @@ +function som_stats_report(csS,fname,fmt,texonly) + +% SOM_STATS_REPORT Make report of the statistics. +% +% som_stats_report(csS, fname, fmt, [standalone]) +% +% som_stats_report(csS, 'data_stats', 'ps') +% +% Input and output arguments ([]'s are optional): +% csS (cell array) of statistics structs +% (struct) a statistics struct +% fname (string) output file name (without extension) +% (cellstr) {direc, fname} +% fmt (string) report format: 'ps', 'pdf', 'html' or 'txt' +% [texonly] (any) for 'ps' and 'pdf' formats: if 4th argument +% is given, only the tex file is written +% (w/o document start/end), and it is not compiled +% +% See also SOM_STATS, SOM_STATS_PLOT, SOM_STATS_TABLE, SOM_TABLE_PRINT, REP_UTILS. + +% 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 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% input arguments + +if isstruct(csS), csS = {csS}; end +dim = length(csS); +if iscell(fname), direc = fname{1}; fname = fname{2}; else direc = '.'; end +if nargin<4, texonly = 0; else texonly = 1; end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% action + +% additional analysis +continuity = zeros(dim,1); +for i=1:dim, continuity(i) = csS{i}.nunique / csS{i}.nvalid; end + +entropy_rel = zeros(dim,1); +for i=1:dim, + c = csS{i}.hist.counts; + if length(c) < 2 | all(c==0), entropy(i) = 0; + else + maxent = log(length(c)); + c = c(c>0)/sum(c); + entropy_rel(i) = -sum(c.*log(c)) / maxent; + end +end + +% meta-statistics +values = {'Number of variables',dim; ... + 'Number of samples',csS{1}.ntotal; ... + 'Valid values',c_and_p_str(count_total(csS,'nvalid'),dim*csS{1}.ntotal); ... + 'Mean(#unique / #valid)',mean(continuity); ... + 'Mean relative entropy',mean(entropy_rel)}; + %'Dataset name',sD.name; 'Report generated',datestr(now); +sTdset = som_table_struct(values); + +% statistics tables +[sTstats,csThist] = som_stats_table(csS); +sTstats = som_table_modify(sTstats,'addcol',entropy_rel,{'entropy'}); + +% write report +if isempty(fname), fid = 1; +else + switch fmt, + case {'ps','pdf'}, ending = '.tex'; + case 'html', ending = '.html'; + case 'txt', ending = '.txt'; + end + fid = fopen([direc '/' fname ending],'w'); +end +if ~texonly, rep_utils('header',fmt,fid); end + +rep_utils({'inserttable',sTdset,1,0},fmt,fid); +rep_utils({'insertbreak'},fmt,fid); +rep_utils({'inserttable',sTstats,1,0},fmt,fid); +rep_utils({'insertbreak'},fmt,fid); +som_stats_plot(csS,'stats'); +rep_utils({'printfigure',[direc '/histograms']},fmt); +rep_utils({'insertfigure','histograms'},fmt,fid); +for i=1:dim, + rep_utils({'insertbreak'},fmt,fid); + rep_utils({'inserttable',csThist{i},1,0},fmt,fid); +end + +if ~texonly, rep_utils('footer',fmt,fid); end +if fid~=1, fclose(fid); end + +if ~texonly & any(strcmp(fmt,{'ps','pdf'})), rep_utils('compile',fmt); end +return; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% subfunctions + +function a = count_total(csS,field) + % count total of the field values + a = 0; for i=1:length(csS), a = a + getfield(csS{i},field); 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; + +