1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
// // A rust binding for the GSL library by Guillaume Gomez (guillaume1.gomez@gmail.com) // /*! Linear Regression The functions described in this section can be used to perform least-squares fits to a straight line model, Y(c,x) = c_0 + c_1 x. !*/ use enums; /// This function computes the best-fit linear regression coefficients (c0,c1) of the model Y = c_0 + c_1 X for the dataset (x, y), two vectors of length n with strides xstride and ystride. /// The errors on y are assumed unknown so the variance-covariance matrix for the parameters (c0, c1) is estimated from the scatter of the points around the best-fit line and returned via the parameters (cov00, cov01, cov11). /// The sum of squares of the residuals from the best-fit line is returned in sumsq. Note: the correlation coefficient of the data can be computed using gsl_stats_correlation (see [`Correlation`](http://www.gnu.org/software/gsl/manual/html_node/Correlation.html#Correlation)), it does not depend on the fit. pub fn linear(x: &[f64], xstride: usize, y: &[f64], ystride: usize, n: usize, c0: &mut f64, c1: &mut f64, cov00: &mut f64, cov01: &mut f64, cov11: &mut f64, sumsq: f64) -> enums::Value { unsafe { ::ffi::gsl_fit_linear(x.as_ptr(), xstride, y.as_ptr(), ystride, n, c0, c1, cov00, cov01, cov11, sumsq) } } /// This function computes the best-fit linear regression coefficients (c0,c1) of the model Y = c_0 + c_1 X for the weighted dataset (x, y), two vectors of length n with strides xstride and ystride. /// The vector w, of length n and stride wstride, specifies the weight of each datapoint. /// The weight is the reciprocal of the variance for each datapoint in y. /// /// The covariance matrix for the parameters (c0, c1) is computed using the weights and returned via the parameters (cov00, cov01, cov11). /// The weighted sum of squares of the residuals from the best-fit line, \chi^2, is returned in chisq. pub fn wlinear(x: &[f64], xstride: usize, w: &[f64], wstride: usize, y: &[f64], ystride: usize, n: usize, c0: &mut f64, c1: &mut f64, cov00: &mut f64, cov01: &mut f64, cov11: &mut f64, chisq: &mut f64) -> enums::Value { unsafe { ::ffi::gsl_fit_wlinear(x.as_ptr(), xstride, w.as_ptr(), wstride, y.as_ptr(), ystride, n, c0, c1, cov00, cov01, cov11, chisq) } } /// This function uses the best-fit linear regression coefficients c0, c1 and their covariance cov00, cov01, cov11 to compute the fitted function y and its standard deviation y_err for the model Y = c_0 + c_1 X at the point x. pub fn linear_est(x: f64, c0: f64, c1: f64, cov00: f64, cov01: f64, cov11: f64, y: &mut f64, y_err: &mut f64) -> enums::Value { unsafe { ::ffi::gsl_fit_linear_est(x, c0, c1, cov00, cov01, cov11, y, y_err) } } /// This function computes the best-fit linear regression coefficient c1 of the model Y = c_1 X for the datasets (x, y), two vectors of length n with strides xstride and ystride. /// The errors on y are assumed unknown so the variance of the parameter c1 is estimated from the scatter of the points around the best-fit line and returned via the parameter cov11. /// The sum of squares of the residuals from the best-fit line is returned in sumsq. pub fn mul(x: &[f64], xstride: usize, y: &[f64], ystride: usize, n: usize, c1: &mut f64, cov11: &mut f64, sumsq: &mut f64) -> enums::Value { unsafe { ::ffi::gsl_fit_mul(x.as_ptr(), xstride, y.as_ptr(), ystride, n, c1, cov11, sumsq) } } /// This function computes the best-fit linear regression coefficient c1 of the model Y = c_1 X for the weighted datasets (x, y), two vectors of length n with strides xstride and ystride. /// The vector w, of length n and stride wstride, specifies the weight of each datapoint. /// The weight is the reciprocal of the variance for each datapoint in y. /// /// The variance of the parameter c1 is computed using the weights and returned via the parameter cov11. /// The weighted sum of squares of the residuals from the best-fit line, \chi^2, is returned in chisq. pub fn wmul(x: &[f64], xstride: usize, w: &[f64], wstride: usize, y: &[f64], ystride: usize, n: usize, c1: &mut f64, cov11: &mut f64, sumsq: &mut f64) -> enums::Value { unsafe { ::ffi::gsl_fit_wmul(x.as_ptr(), xstride, w.as_ptr(), wstride, y.as_ptr(), ystride, n, c1, cov11, sumsq) } } /// This function uses the best-fit linear regression coefficient c1 and its covariance cov11 to compute the fitted function y and its standard deviation y_err for the model Y = c_1 X at the point x. pub fn mul_est(x: f64, c1: f64, cov11: f64, y: &mut f64, y_err: &mut f64) -> enums::Value { unsafe { ::ffi::gsl_fit_mul_est(x, c1, cov11, y, y_err) } }