gsl_vector *cooks_distance(apop_model *in){ apop_data *c = apop_data_copy(in->data); apop_ols->prep(in->data, in); ols_data = in->data; predicted = project(in->data, in); p_dot_mse = c->matrix->size2 * sum_squared_diff(in->data->vector, predicted); return jack_iteration(c->matrix, cook_math); }
static double cook_math(apop_data *reduced){ apop_model *r = apop_estimate(reduced, apop_ols); apop_data * new_predicted = project(ols_data, r); double out = sum_squared_diff(new_predicted->vector, predicted)/p_dot_mse; apop_data_free(new_predicted); apop_model_free(r); return out; }
static gsl_vector *cooks_distance(apop_model *in){ apop_data *c = apop_data_copy(in->data); apop_ols->prep(in->data, in); ols_data = in->data; apop_data * t = project(in->data, in); predicted = t->vector; p_dot_mse = c->matrix->size2 * sum_squared_diff(in->data->vector, t->vector); gsl_vector* out = jack_iteration(c->matrix, cook_math); apop_data_free(t); return out; }
double cook_math(apop_data *reduced){ apop_model *r = apop_estimate(reduced, apop_ols); double out = sum_squared_diff(project(ols_data, r), predicted)/p_dot_mse; apop_model_free(r); return out; }