Add more statistical routines and examples

This commit is contained in:
Palash Tyagi 2025-08-04 00:02:17 +01:00
parent ecd06eb352
commit 1a9f397702

View File

@ -1,30 +1,54 @@
# Compute Features # Compute Features
The `compute` module provides statistical routines like descriptive The `compute` module hosts numerical routines for exploratory data analysis.
statistics and correlation measures. It covers descriptive statistics, correlations, probability distributions and
some basic inferential tests.
## Basic Statistics ## Basic Statistics
```rust ```rust
# extern crate rustframe; # extern crate rustframe;
use rustframe::compute::stats::{mean, stddev}; use rustframe::compute::stats::{mean, mean_vertical, stddev, median};
use rustframe::matrix::Matrix; use rustframe::matrix::Matrix;
let m = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2); let m = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2);
let mean_val = mean(&m); assert_eq!(mean(&m), 2.5);
let std_val = stddev(&m); assert_eq!(stddev(&m), 1.118033988749895);
assert_eq!(median(&m), 2.5);
// column averages returned as 1 x n matrix
let col_means = mean_vertical(&m);
assert_eq!(col_means.data(), &[1.5, 3.5]);
``` ```
## Correlation ## Correlation
Correlation functions help measure linear relationships between datasets.
```rust ```rust
# extern crate rustframe; # extern crate rustframe;
use rustframe::compute::stats::pearson; use rustframe::compute::stats::{pearson, covariance};
use rustframe::matrix::Matrix; use rustframe::matrix::Matrix;
let x = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2); let x = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0], 2, 2);
let y = Matrix::from_vec(vec![2.0, 4.0, 6.0, 8.0], 2, 2); let y = Matrix::from_vec(vec![2.0, 4.0, 6.0, 8.0], 2, 2);
let corr = pearson(&x, &y); let corr = pearson(&x, &y);
let cov = covariance(&x, &y);
assert!((corr - 1.0).abs() < 1e-8);
assert!((cov - 2.5).abs() < 1e-8);
```
## Distributions
Probability distribution helpers are available for common PDFs and CDFs.
```rust
# extern crate rustframe;
use rustframe::compute::stats::distributions::normal_pdf;
use rustframe::matrix::Matrix;
let x = Matrix::from_vec(vec![0.0, 1.0], 1, 2);
let pdf = normal_pdf(x, 0.0, 1.0);
assert_eq!(pdf.data().len(), 2);
``` ```
With the basics covered, explore predictive models in the With the basics covered, explore predictive models in the