inferust
Statistical modeling for Rust — a statsmodels-inspired library.
inferust fills the gap between Python's statsmodels / scipy.stats and the Rust ecosystem. It gives you regression summaries, hypothesis tests, descriptive stats, and correlation matrices with the same depth of output you'd expect from Python — p-values, confidence intervals, AIC/BIC, significance stars, and all.
Features
| Module | What you get | Python equivalent |
|---|---|---|
regression::Ols |
OLS with coefficients, std errors, t-stats, p-values, R², adj-R², F-stat, AIC, BIC | statsmodels.OLS().fit() |
hypothesis::ttest |
One-sample, two-sample Welch, paired t-tests with 95% CI | scipy.stats.ttest_* |
hypothesis::chisq |
Goodness-of-fit and independence (contingency table) | scipy.stats.chisquare, chi2_contingency |
hypothesis::anova |
One-way ANOVA table (SS, MS, F, p) | scipy.stats.f_oneway |
descriptive::Summary |
mean, std, variance, min/max, quartiles, skewness, excess kurtosis | pd.Series.describe() |
correlation |
Pearson, Spearman, full correlation matrix | df.corr() |
Installation
Add to your Cargo.toml:
[]
= "0.1"
Quick start
OLS Regression
use Ols;
let x = vec!;
let y = vec!;
let result = new
.with_feature_names
.fit
.unwrap;
result.print_summary;
Output:
═══════════════════════════════════════════════════════════════════
OLS Regression Results
═══════════════════════════════════════════════════════════════════
Dep. variable: y Observations : 4
R² : 0.998102 Adj. R² : 0.994305
F-statistic : 262.7732 F p-value : 0.039405
AIC : 14.7316 BIC : 12.0167
───────────────────────────────────────────────────────────────────
Variable Coef Std Err t P>|t|
───────────────────────────────────────────────────────────────────
const -5.654762 5.033740 -1.1234 0.460565
hours_studied 4.130952 0.177951 23.2141 0.027430 *
prior_gpa 8.166667 1.490421 5.4793 0.115581
───────────────────────────────────────────────────────────────────
Significance codes: *** p<0.001 ** p<0.01 * p<0.05 . p<0.1
═══════════════════════════════════════════════════════════════════
Hypothesis tests
use ;
// Paired t-test
let before = vec!;
let after = vec!;
paired.unwrap.print;
// Two-sample Welch t-test
two_sample.unwrap.print;
// One-way ANOVA
one_way.unwrap.print;
// Chi-squared goodness-of-fit
goodness_of_fit.unwrap.print;
// Chi-squared test of independence
independence.unwrap.print;
Descriptive statistics
use Summary;
let data = vec!;
new.unwrap.print;
// ─────────────────────────────
// n : 6
// mean : 6.400000
// std : 2.282176
// min : 3.600000
// 25% : 4.575000
// 50% : 6.150000
// 75% : 8.250000
// max : 9.300000
// skewness : -0.058732
// kurtosis : -1.504070
// ─────────────────────────────
Correlation
use correlation;
let r = pearson.unwrap;
let rs = spearman.unwrap;
let matrix = correlation_matrix.unwrap;
print_correlation_matrix;
OLS builder options
new // intercept on by default
.with_feature_names // label columns
.no_intercept // force through origin
.fit
.unwrap;
OlsResult also exposes .predict(&x) for out-of-sample predictions and all raw fields (coefficients, residuals, r_squared, p_values, etc.) for programmatic use.
Error handling
All fallible functions return inferust::Result<T> (an alias for Result<T, InferustError>):
use InferustError;
match result
Dependencies
| Crate | Purpose |
|---|---|
nalgebra |
Matrix operations for OLS normal equations — no LAPACK required |
statrs |
Student's t, F, and χ² distributions for p-values and confidence intervals |
thiserror |
Ergonomic error types |
Roadmap
- Logistic regression (GLM with logit link)
- Ridge / Lasso regularization
- Durbin-Watson and Breusch-Pagan diagnostic tests
- Tukey HSD post-hoc test (after ANOVA)
- Time-series: ARIMA / ACF / PACF
- Weighted OLS
Contributions welcome — open an issue or PR!
License
MIT — see LICENSE.