From c004bd8334cbac89bc244f2c4b2d661d37f38d4e Mon Sep 17 00:00:00 2001 From: Palash Tyagi <23239946+Magnus167@users.noreply.github.com> Date: Sat, 26 Jul 2025 23:05:41 +0100 Subject: [PATCH] Add inferential statistics examples --- examples/inferential_stats.rs | 66 +++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 examples/inferential_stats.rs diff --git a/examples/inferential_stats.rs b/examples/inferential_stats.rs new file mode 100644 index 0000000..ac6b9b8 --- /dev/null +++ b/examples/inferential_stats.rs @@ -0,0 +1,66 @@ +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); + } +}