#linear-regression #numeric-traits #stdlib #two-dimensional #regressions

linreg

Calculates linear regresssions of two-dimensional data. Does not use stdlib, only depends on numeric traits.

4 releases

0.2.0 Dec 8, 2019
0.1.3 Jun 9, 2018
0.1.2 Jun 9, 2018
0.1.1 Jun 9, 2018

#1428 in Rust patterns

Download history 5258/week @ 2025-10-18 4265/week @ 2025-10-25 5608/week @ 2025-11-01 4764/week @ 2025-11-08 4132/week @ 2025-11-15 5616/week @ 2025-11-22 6582/week @ 2025-11-29 4867/week @ 2025-12-06 5674/week @ 2025-12-13 3032/week @ 2025-12-20 2100/week @ 2025-12-27 5034/week @ 2026-01-03 7102/week @ 2026-01-10 3842/week @ 2026-01-17 4836/week @ 2026-01-24 5100/week @ 2026-01-31

21,799 downloads per month
Used in 23 crates (13 directly)

MIT license

13KB
209 lines

linreg-rs

linreg is a small crate that calculates linear regressions. It works without stdlib or memory allocation and has few dependencies. Example:

let xs: Vec<f64> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
let ys: Vec<f64> = vec![2.0, 4.0, 5.0, 4.0, 5.0];

assert_eq!(Some((0.6, 2.2)), linear_regression(&xs, &ys));

It supports tuples, separate vectors for x and y values and template floating point types.


lib.rs:

Linear regression

linreg calculates linear regressions for two dimensional measurements, also known as simple linear regression.

Base for all calculations of linear regression is the simple model found in https://en.wikipedia.org/wiki/Ordinary_least_squares#Simple_linear_regression_model.

Example use

   use linreg::{linear_regression, linear_regression_of};

   // Example 1: x and y values stored in two different vectors
   let xs: Vec<f64> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
   let ys: Vec<f64> = vec![2.0, 4.0, 5.0, 4.0, 5.0];

   assert_eq!(Ok((0.6, 2.2)), linear_regression(&xs, &ys));


   // Example 2: x and y values stored as tuples
   let tuples: Vec<(f32, f32)> = vec![(1.0, 2.0),
                                      (2.0, 4.0),
                                      (3.0, 5.0),
                                      (4.0, 4.0),
                                      (5.0, 5.0)];

   assert_eq!(Ok((0.6, 2.2)), linear_regression_of(&tuples));


   // Example 3: directly operating on integer (converted to float as required)
   let xs: Vec<u8> = vec![1, 2, 3, 4, 5];
   let ys: Vec<u8> = vec![2, 4, 5, 4, 5];

   assert_eq!(Ok((0.6, 2.2)), linear_regression(&xs, &ys));

Dependencies

~2MB
~42K SLoC