wolffd@0: function sig = som_drsignif(sigmea,Cm) wolffd@0: wolffd@0: % SOM_DRSIGNIF Significance measure from confusion matrix between two clusters and a rule. wolffd@0: % wolffd@0: % sig = som_drsignif(sigmea,Cm) wolffd@0: % wolffd@0: % sigmea (string) significance measure: 'accuracy', wolffd@0: % 'mutuconf' (default), or 'accuracyI'. wolffd@0: % (See definitions below). wolffd@0: % Cn Vectorized confusion matrix, or a matrix of such vectors. wolffd@0: % (vector) [a, c, b, d] (see below) wolffd@0: % (matrix) [[a1,c1,b1,d1], ..., [an,cn,bn,dn]] wolffd@0: % wolffd@0: % sig (vector) length=n, significance values wolffd@0: % wolffd@0: % The confusion matrix Cm below between group (G) and contrast group (not G) wolffd@0: % and rule (true - false) is used to determine the significance values: wolffd@0: % wolffd@0: % G not G wolffd@0: % --------------- accuracy = (a+d) / (a+b+c+d) wolffd@0: % true | a | b | wolffd@0: % |-------------- mutuconf = a*a / ((a+b)(a+c)) wolffd@0: % false | c | d | wolffd@0: % --------------- accuracyI = a / (a+b+c) wolffd@0: % wolffd@0: % See also SOM_DREVAL, SOM_DRMAKE. wolffd@0: wolffd@0: % Contributed to SOM Toolbox 2.0, March 4th, 2002 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 040302 wolffd@0: wolffd@0: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wolffd@0: %% input arguments wolffd@0: wolffd@0: true_x = Cm(:,1); % x = in group wolffd@0: false_x = Cm(:,2); % false = rule is false wolffd@0: true_y = Cm(:,3); % true = rule is true wolffd@0: false_y = Cm(:,4); % y = not in group wolffd@0: wolffd@0: true_items = true_x + true_y; wolffd@0: x_items = true_x + false_x; wolffd@0: all_items = true_x + false_x + true_y + false_y; wolffd@0: true_or_x = x_items + true_items - true_x; wolffd@0: wolffd@0: switch sigmea, wolffd@0: case 'mutuconf', wolffd@0: % mutual confidence, or relevance (as defined in WSOM2001 paper) wolffd@0: sig = zeros(size(true_x)); wolffd@0: i = find(true_items>0 & x_items>0); wolffd@0: sig(i) = (true_x(i).^2) ./ (true_items(i).*x_items(i)); wolffd@0: case 'accuracy', wolffd@0: % accuracy wolffd@0: sig = (true_x + false_y) ./ all_items; wolffd@0: case 'accuracyI', wolffd@0: % accuracy such that false_y is left out of consideration wolffd@0: sig = true_x./true_or_x; wolffd@0: otherwise, wolffd@0: error(['Unrecognized significance measures: ' sigmea]); wolffd@0: end wolffd@0: wolffd@0: return;