1 #ifndef _DataModeler_h_
2 #define _DataModeler_h_
3 /* DataModeler.h
4  *
5  * Copyright (C) 2014-2021 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 /*
22  djmw 20140217
23 */
24 
25 #include "Collection.h"
26 #include "Covariance.h"
27 #include "Pitch.h"
28 #include "OptimalCeilingTier.h"
29 #include "Sound_to_Formant.h"
30 #include "Table.h"
31 
32 #include "DataModeler_enums.h"
33 
34 #include "DataModeler_def.h"
35 
getAutoNaturalNumbersWithinRange(integer * from,integer * to,integer maximum,conststring32 text)36 static inline void getAutoNaturalNumbersWithinRange (integer *from, integer *to, integer maximum, conststring32 text) {
37 	if (*from <= 0)
38 		*from = 1;
39 	if (*to == 0)
40 		*to = maximum;
41 	if (*to < *from) {
42 		*from = 1;
43 		*to = maximum;
44 	}
45 	if (*to > maximum)
46 		*to = maximum;
47 	Melder_require (*from <= maximum,
48 		U"The start index of the ", text, U" range should not be larger than ", maximum, U".");
49 }
50 
getAutoNaturalNumberWithinRange(integer * number,integer maximum)51 static inline void getAutoNaturalNumberWithinRange (integer *number, integer maximum) {
52 	if (*number == 0 || *number > maximum)
53 		*number = maximum;
54 	if (*number < 0)
55 		*number = 1;
56 }
57 
58 void DataModeler_init (DataModeler me, double xmin, double xmax, integer numberOfDataPoints, integer numberOfParameters, kDataModelerFunction type);
59 
60 autoDataModeler DataModeler_create (double xmin, double xmax, integer numberOfDataPoints, integer numberOfParameters, kDataModelerFunction type);
61 autoDataModeler DataModeler_createFromDataModeler (DataModeler thee, integer numberOfParameters, kDataModelerFunction type);
62 autoDataModeler DataModeler_createSimple (double xmin, double xmax, integer numberOfDataPoints,
63 	constVECVU const& parameterValues, double gaussianNoiseStd, kDataModelerFunction type);
64 
65 void DataModeler_setBasisFunctions (DataModeler me, kDataModelerFunction type);
66 
67 integer DataModeler_drawingSpecifiers_x (DataModeler me, double *xmin, double *xmax, integer *ixmin, integer *ixmax);
68 
69 void DataModeler_drawBasisFunction_inside (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax,
70 	integer iterm, bool scale, integer numberOfPoints);
71 
72 void DataModeler_drawModel (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax, integer numberOfPoints, bool garnish);
73 void DataModeler_drawModel_inside (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax, integer numberOfPoints);
74 
75 void DataModeler_draw_inside (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax, bool estimated, integer numberOfParameters, bool errorbars, bool connectPoints, double barWidth_mm, bool drawDots);
76 
77 void DataModeler_speckle_inside (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax, bool estimated, integer numberOfParameters, bool errorbars, double barWidth_mm);
78 
79 void DataModeler_speckle (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax,
80 	bool estimated, integer numberOfParameters, bool errorbars, double barWidth_mm, bool garnish);
81 
82 void DataModeler_drawTrack (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax,
83 	bool estimated, integer numberOfParameters, bool garnish);
84 
85 void DataModeler_drawTrack_inside (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax,
86 	bool estimated, integer numberOfParameters);
87 
88 void DataModeler_drawOutliersMarked_inside (DataModeler me, Graphics g, double xmin, double xmax, double ymin, double ymax,
89 	double numberOfSigmas, conststring32 mark, double marksFontSize);
90 
91 void DataModeler_normalProbabilityPlot (DataModeler me, Graphics g, integer numberOfQuantiles, double numberOfSigmas, double labelSize, conststring32 label, bool garnish);
92 /* Get the y-value of the fitted function at x */
93 
94 void DataModeler_setTolerance (DataModeler me, double tolerance);
95 
96 void DataModeler_fit (DataModeler me);
97 
98 // sigmaY used in fit or not.
99 void DataModeler_setDataWeighing (DataModeler me, kDataModelerWeights weighData);
100 
101 integer DataModeler_getNumberOfFixedParameters (DataModeler me);
102 integer DataModeler_getNumberOfFreeParameters (DataModeler me);
103 
104 void DataModeler_setParameterValue (DataModeler me, integer index, double value, kDataModelerParameterStatus status);
105 
106 void DataModeler_setParameterValueFixed (DataModeler me, integer index, double value);
107 
108 void DataModeler_setParametersFree (DataModeler me, integer fromIndex, integer toIndex);
109 
110 double DataModeler_getParameterValue (DataModeler me, integer index);
111 autoVEC DataModeler_listParameterValues (DataModeler me);
112 
113 kDataModelerParameterStatus DataModeler_getParameterStatus (DataModeler me, integer index);
114 
115 double DataModeler_getParameterStandardDeviation (DataModeler me, integer index);
116 
117 double DataModeler_getVarianceOfParameters (DataModeler me, integer fromIndex, integer toIndex, integer *numberOfFreeParameters);
118 
119 void DataModeler_setParameterValuesToZero (DataModeler me, double numberOfSigmas);
120 
121 double DataModeler_getDataStandardDeviation (DataModeler me);
122 
123 void DataModeler_getExtremaY (DataModeler me, double *ymin, double *ymax);
124 
125 double DataModeler_getModelValueAtX (DataModeler me, double x);
126 
127 double DataModeler_getModelValueAtIndex (DataModeler me, integer index);
128 
129 double DataModeler_getWeightedMean (DataModeler me);
130 
131 integer DataModeler_getNumberOfInvalidDataPoints (DataModeler me);
132 integer DataModeler_getNumberOfValidDataPoints (DataModeler me);
133 
134 double DataModeler_getDataPointXValue (DataModeler me, integer index);
135 double DataModeler_getDataPointYValue (DataModeler me, integer index);
136 
137 void DataModeler_setDataPointXValue (DataModeler me, integer index, double value);
138 void DataModeler_setDataPointYValue (DataModeler me, integer index, double value);
139 void DataModeler_setDataPointValues (DataModeler me, integer index, double xvalue, double yvalue);
140 
141 kDataModelerData DataModeler_getDataPointStatus (DataModeler me, integer index);
142 
143 void DataModeler_setDataPointStatus (DataModeler me, integer index, kDataModelerData status);
144 void DataModeler_setDataPointValueAndStatus (DataModeler me, integer index, double value, kDataModelerData dataStatus);
145 
146 void DataModeler_setDataPointYSigma (DataModeler me, integer index, double sigma);
147 
148 double DataModeler_getDataPointYSigma (DataModeler me, integer index);
149 
150 autoVEC DataModeler_getDataPointsWeights (DataModeler me, kDataModelerWeights weighData);
151 /*
152 	Interpret the values in sigmaY as 1 / sigmay or 1 / sqrt (sigmaY) or y/sigmaY.
153 	If equal weighing than get sigma from the residual sum of squares between model and data.
154 */
155 
156 double DataModeler_getResidualSumOfSquares (DataModeler me, integer *numberOfDataPoints);
157 
158 autoVEC DataModeler_getZScores (DataModeler me);
159 
160 autoVEC DataModeler_getChisqScoresFromZScores (DataModeler me, constVEC zscores, bool substituteAverage);
161 
162 double DataModeler_getDegreesOfFreedom (DataModeler me);
163 
164 double DataModeler_getChiSquaredQ (DataModeler me, double *out_probability, double *out_ndf);
165 
166 double DataModeler_getCoefficientOfDetermination (DataModeler me, double *ssreg, double *sstot);
167 
168 void DataModeler_reportChiSquared (DataModeler me);
169 
170 autoCovariance DataModeler_to_Covariance_parameters (DataModeler me);
171 
172 autoTable DataModeler_to_Table_zscores (DataModeler me);
173 
174 autoDataModeler Table_to_DataModeler (Table me, double xmin, double xmax, integer xcolumn, integer ycolumn, integer scolumn, integer numberOfParameters, kDataModelerFunction type);
175 
176 #endif /* _DataModeler_h_ */
177