use anofox_regression::solvers::{FittedRegressor, QuantileRegressor, Regressor};
use faer::{Col, Mat};
fn main() {
println!("=== Quantile Regression ===\n");
let n = 80;
let x = Mat::from_fn(n, 1, |i, _| i as f64 * 0.1);
let noise_pattern = [
0.4, -0.3, 0.8, -0.7, 0.2, -0.1, 0.5, -0.4, 0.3, -0.2, 0.6, -0.5, 0.1, -0.3, 0.4, -0.6,
];
let y = Col::from_fn(n, |i| {
let xi = i as f64 * 0.1;
let spread = 0.3 + 0.5 * xi; 1.0 + 2.0 * xi + noise_pattern[i % noise_pattern.len()] * spread
});
for &tau in &[0.1_f64, 0.5, 0.9] {
let fitted = QuantileRegressor::builder()
.tau(tau)
.with_intercept(true)
.max_iterations(200)
.tolerance(1e-8)
.build()
.fit(&x, &y)
.expect("Quantile fit failed");
let r = fitted.result();
println!(
"τ = {:.1}: intercept = {:.4}, slope = {:.4}, pseudo-R² = {:.4}",
tau,
r.intercept.unwrap(),
r.coefficients[0],
fitted.pseudo_r_squared()
);
}
println!("\nSpread between τ=0.9 and τ=0.1 slopes reflects increasing variance with x.");
}