mirror of
https://github.com/Magnus167/rustframe.git
synced 2025-08-20 05:40:01 +00:00
67 lines
2.0 KiB
Rust
67 lines
2.0 KiB
Rust
use rustframe::compute::stats::{anova, chi2_test, t_test};
|
|
use rustframe::matrix::Matrix;
|
|
|
|
/// Demonstrates simple inferential statistics tests.
|
|
fn main() {
|
|
t_test_demo();
|
|
println!("\n-----\n");
|
|
chi2_demo();
|
|
println!("\n-----\n");
|
|
anova_demo();
|
|
}
|
|
|
|
fn t_test_demo() {
|
|
println!("Two-sample t-test\n-----------------");
|
|
let a = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0], 1, 5);
|
|
let b = Matrix::from_vec(vec![6.0, 7.0, 8.0, 9.0, 10.0], 1, 5);
|
|
let (t, p) = t_test(&a, &b);
|
|
println!("t statistic: {:.2}, p-value: {:.4}", t, p);
|
|
}
|
|
|
|
fn chi2_demo() {
|
|
println!("Chi-square test\n---------------");
|
|
let observed = Matrix::from_vec(vec![12.0, 5.0, 8.0, 10.0], 2, 2);
|
|
let (chi2, p) = chi2_test(&observed);
|
|
println!("chi^2: {:.2}, p-value: {:.4}", chi2, p);
|
|
}
|
|
|
|
fn anova_demo() {
|
|
println!("One-way ANOVA\n-------------");
|
|
let g1 = Matrix::from_vec(vec![1.0, 2.0, 3.0], 1, 3);
|
|
let g2 = Matrix::from_vec(vec![2.0, 3.0, 4.0], 1, 3);
|
|
let g3 = Matrix::from_vec(vec![3.0, 4.0, 5.0], 1, 3);
|
|
let (f, p) = anova(vec![&g1, &g2, &g3]);
|
|
println!("F statistic: {:.2}, p-value: {:.4}", f, p);
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_t_test_demo() {
|
|
let a = Matrix::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0], 1, 5);
|
|
let b = Matrix::from_vec(vec![6.0, 7.0, 8.0, 9.0, 10.0], 1, 5);
|
|
let (t, _p) = t_test(&a, &b);
|
|
assert!((t + 5.0).abs() < 1e-5);
|
|
}
|
|
|
|
#[test]
|
|
fn test_chi2_demo() {
|
|
let observed = Matrix::from_vec(vec![12.0, 5.0, 8.0, 10.0], 2, 2);
|
|
let (chi2, p) = chi2_test(&observed);
|
|
assert!(chi2 > 0.0);
|
|
assert!(p > 0.0 && p < 1.0);
|
|
}
|
|
|
|
#[test]
|
|
fn test_anova_demo() {
|
|
let g1 = Matrix::from_vec(vec![1.0, 2.0, 3.0], 1, 3);
|
|
let g2 = Matrix::from_vec(vec![2.0, 3.0, 4.0], 1, 3);
|
|
let g3 = Matrix::from_vec(vec![3.0, 4.0, 5.0], 1, 3);
|
|
let (f, p) = anova(vec![&g1, &g2, &g3]);
|
|
assert!(f > 0.0);
|
|
assert!(p > 0.0 && p < 1.0);
|
|
}
|
|
}
|