52 if (independent.size()==0)
return false;
53 if (independent[0].size()!=dependent.size())
return false;
54 int number_of_data_points = dependent.size();
55 int number_of_variables = independent.size();
58 gsl_vector *
y, *w, *c;
62 if (number_of_variables==1)
65 SSE = pow(CVector(dependent).stdev(),2)*(dependent.size()-1);
67 SSE = pow(CVector(dependent).Log().stdev(),2)*(dependent.size()-1);
71 X = gsl_matrix_alloc (number_of_data_points, number_of_variables);
72 y = gsl_vector_alloc (number_of_data_points);
73 w = gsl_vector_alloc (number_of_data_points);
75 c = gsl_vector_alloc (number_of_variables);
76 cov = gsl_matrix_alloc (number_of_variables, number_of_variables);
78 for (
int i = 0; i < number_of_data_points; i++)
80 gsl_matrix_set (X, i, 0, 1.0);
81 for (
int j=0; j<number_of_variables; j++)
85 gsl_matrix_set (X, i, j+1, independent[j][i]);
87 gsl_matrix_set (X, i, j+1,
log(independent[j][i]));
89 else if (j>eliminated_var)
91 gsl_matrix_set (X, i, j, independent[j][i]);
93 gsl_matrix_set (X, i, j,
log(independent[j][i]));
96 gsl_vector_set (
y, i, dependent[i]);
98 gsl_vector_set (
y, i,
log(dependent[i]));
99 gsl_vector_set (w, i, 1.0);
104 gsl_multifit_linear_workspace * work
105 = gsl_multifit_linear_alloc (number_of_data_points, number_of_variables);
106 gsl_multifit_wlinear (X, w,
y, c, cov,&SSE, work);
107 gsl_multifit_linear_free (work);
116 if (independent.size()==0)
return false;
117 if (independent[0].size()!=dependent.size())
return false;
119 int number_of_data_points = dependent.size();
120 int number_of_variables = independent.size();
123 gsl_vector *
y, *w, *c;
125 X = gsl_matrix_alloc (number_of_data_points, number_of_variables+1);
126 y = gsl_vector_alloc (number_of_data_points);
127 w = gsl_vector_alloc (number_of_data_points);
129 c = gsl_vector_alloc (number_of_variables+1);
130 cov = gsl_matrix_alloc (number_of_variables+1, number_of_variables+1);
133 for (
int i = 0; i < number_of_data_points; i++)
136 gsl_matrix_set (X, i, 0, 1.0);
137 vector<double> independent_column;
138 for (
int j=0; j<number_of_variables; j++)
141 gsl_matrix_set (X, i, j+1, independent[j][i]);
143 gsl_matrix_set (X, i, j+1,
log(independent[j][i]));
148 gsl_vector_set (
y, i, dependent[i]);
150 gsl_vector_set (
y, i,
log(dependent[i]));
151 gsl_vector_set (w, i, 1.0);
155 gsl_multifit_linear_workspace * work
156 = gsl_multifit_linear_alloc (number_of_data_points, number_of_variables+1);
157 gsl_multifit_wlinear (X, w,
y, c, cov,&
chisq, work);
158 gsl_multifit_linear_free (work);
163 for (
int i=0; i<number_of_variables+1; i++)
169 for (
int i=0; i<number_of_variables+1; i++)
170 for (
int j=0; j<number_of_variables+1; j++)
173 double var_y = gsl_stats_tss(
y->data,
y->stride,
y->size);
176 R2_adj = 1-(
chisq/(number_of_data_points-(number_of_variables+1))/(var_y/(number_of_data_points-1)));
179 for (
unsigned int i=0; i<number_of_variables; i++)
182 double F = (SSE_reduced -
chisq)/
chisq*(number_of_data_points-number_of_variables-1);
183 p_value.push_back(gsl_cdf_fdist_Q (F, number_of_variables, number_of_data_points-(number_of_variables)));
188 qDebug()<<
chisq<<
","<<SSE_reduced<<
","<<F<<
","<<
p_value[i];
196 gsl_matrix_free (cov);
205 out[
"form"]=
"Linear";
209 QJsonArray json_dependent_data;
213 out[
"Dependent Data"] = json_dependent_data;
216 QJsonArray json_independent_data;
219 QJsonArray json_independent_data_item;
223 json_independent_data.append(json_independent_data_item);
226 out[
"Independent Data"] = json_independent_data;
238 out[
"Chisq"] =
chisq;
240 out[
"R2_adjusted"]=
R2_adj;
251 if (jsonobject[
"form"]==
"Power")
257 for(QString key: jsonobject.keys() ) {
258 if (key.contains(
"Coefficient for"))
263 if (key.contains(
"P-value for"))
265 p_value.push_back(jsonobject[key].toDouble());
267 if (key.contains(
"Effective for"))
274 QJsonArray json_dependent_data = jsonobject[
"Dependent Data"].toArray();
275 for (
unsigned int i = 0; i < json_dependent_data.size(); i++)
280 QJsonArray json_independent_data = jsonobject[
"Independent Data"].toArray();
281 for (
unsigned int i = 0; i < json_independent_data.size(); i++)
283 vector<double> independent_data_item;
284 QJsonArray json_independent_data_item = json_independent_data[i].toArray();
285 for (
unsigned int j = 0; j < json_independent_data_item.size(); j++)
287 independent_data_item.push_back(json_independent_data_item[j].toDouble());
292 R2 = jsonobject[
"R2"].toDouble();
293 R2_adj = jsonobject[
"R2_adjusted"].toDouble();
294 chisq = jsonobject[
"Chisq"].toDouble();