1 #ifndef _Confusion_h_ 2 #define _Confusion_h_ 3 /* Confusion.h 4 * 5 * Copyright (C) 1993-2019 David Weenink 6 * 7 * This code is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or (at 10 * your option) any later version. 11 * 12 * This code is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this work. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #include "TableOfReal.h" 22 #include "Categories.h" 23 #include "Graphics.h" 24 #include "Matrix.h" 25 26 Thing_define (Confusion, TableOfReal) { 27 void v_info () 28 override; 29 }; 30 31 /* 32 A Confusion matrix has both row and column labels. Row labels represent the stimulus names, 33 column labels represent the responses. 34 */ 35 36 autoConfusion Confusion_create (integer numberOfStimuli, integer numberOfResponses); 37 38 autoConfusion Confusion_createSimple (conststring32 labels); 39 40 autoConfusion Confusion_createFromStringses (Strings stimulusLabels, Strings responseLabels); 41 42 autoConfusion Categories_to_Confusion (Categories me, Categories thee); 43 44 void Confusion_increase (Confusion me, conststring32 stimulus, conststring32 response); 45 /* Increase the confusion count by one: data ['stim'] ['resp'] += 1; */ 46 47 double Confusion_getValue (Confusion me, conststring32 stimulus, conststring32 response); 48 /* data ['stim'] ['resp'] ; */ 49 50 void Confusion_getEntropies (Confusion me, double *out_h, double *out_hx, double *out_hy, 51 double *out_hygx, double *out_hxgy, double *out_uygx, double *out_uxgy, double *out_uxy); 52 /* x is column variable, y is row variable 53 *out_h entropy of whole table; 54 *out_hx entropy of x variable 55 *out_hy entropy of y variable 56 *out_hygx entropy of y given x 57 *out_hxgy entropy of x given y 58 *out_uygx dependency of y on x 59 *out_uxgy dependency of x on y 60 *out_uxy symmetrical dependency 61 */ 62 63 void Confusion_getFractionCorrect (Confusion me, double *out_fraction, integer *out_numberOfCorrect); 64 65 void Confusion_Matrix_draw (Confusion me, Matrix thee, Graphics g, integer index, double lowerPercentage, double xmin, double xmax, double ymin, double ymax, bool garnish); 66 /* 1. Draw my rowLabels centered at ( matrix->z [i] [1], matrix -> z [i] [2]). 67 2. Draw arrows and circles according to: 68 for (i=1; i <= my numberOfRows; i++) 69 { 70 if (index != 0 && index != i) continue; 71 draw circle at i of width: my z [i] [i] / rowSum; 72 for (j=1; j <= my numberOfColumns; j++) 73 { 74 if (i != j && 100*my data [i] [j] / rowSum > lowerPercentage) 75 draw arrow from i to j of width: my data [i] [j] / rowSum; 76 } 77 } 78 */ 79 80 autoMatrix Confusion_difference (Confusion me, Confusion thee); 81 /* return matrix with the difference between the two confusion matrices */ 82 83 integer Confusion_getNumberOfEntries (Confusion me); 84 85 autoConfusion Confusion_groupStimuli (Confusion me, conststring32 labels, conststring32 newLabel, integer newpos); 86 87 autoConfusion Confusion_groupResponses (Confusion me, conststring32 labels, conststring32 newLabel, integer newpos); 88 89 autoConfusion Confusion_group (Confusion me, conststring32 labels, conststring32 newLabel, integer newpos); 90 91 autoConfusion Confusion_condense (Confusion me, conststring32 search, conststring32 replace, integer maximumNumberOfReplaces, bool use_regexp); 92 /* 93 Group row and column labels according to search and replace. 94 */ 95 96 autoConfusion TableOfReal_to_Confusion (TableOfReal me); 97 98 autoTableOfReal Confusion_to_TableOfReal_marginals (Confusion me); 99 /* 100 Create a table with one extra row and one extra column with marginals, 101 i.e., column and row sums. 102 */ 103 104 void Confusion_drawAsNumbers (Confusion me, Graphics g, bool marginals, int iformat, int precision); 105 /* option marginals draw one extra row and column with marginal sums. */ 106 107 #endif /* _Confusion_h_ */ 108