IRootLab
An Open-Source MATLAB toolbox for vibrational biospectroscopy
calc_sens_spec.m
Go to the documentation of this file.
1 %>@ingroup maths
2 %>@file
3 %> @brief Calculates sensitivities and specificities for each class (row of cc)
4 %>
5 %>
6 %>@verbatim
7 %> sens(i) = cc(i, i)/sum(cc(i, :))
8 %> spec(i) = sum_{j, j ~= i} c(j, j) / sum_{j, j ~= i} sum(cc(j, :))
9 %>@endverbatim
10 %
11 %> @param cc confusion matrix either in HITS, not percentage
12 %> @param flag_mean if true, the average of all sensitivities and specificities will be returned (this is useful because the
13 %> cases when sensitivity or specificity is not defined (like rows or columns of cc containing all zeros)
14 %> are discounted
15 %> @return a no_classes X 2 matrix. First column are the sensitivities; second column are the specificities
16 function values = calc_sens_spec(cc, flag_mean)
17 
18 
19 if ~exist('flag_mean')
20  flag_mean = 0;
21 end;
22 
23 no_classes = size(cc, 2);
24 
25 values = zeros(no_classes, 2);
26 
27 tr = trace(cc);
28 no_obs = sum(cc(:));
29 
30 for i = 1:no_classes
31  hits_class = cc(i, i);
32  no_obs_class = sum(cc(i, :));
33  values(i, 1) = hits_class/no_obs_class;
34  values(i, 2) = (tr-hits_class)/(no_obs-no_obs_class);
35 end;
36 
37 
38 if flag_mean
39  values = values(:);
40  values(isnan(values)) = [];
41  values = mean(values(:));
42 end;
function calc_sens_spec(in cc, in flag_mean)