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