use greeners_ols::ols::OLS;
use ndarray::{Array1, Array2, Axis};
use std::error::Error;
use std::fs::File;
fn main() -> Result<(), Box<dyn Error>> {
let file = File::open("dataset.csv").expect("File dataset.csv not found in root folder.");
let mut rdr = csv::ReaderBuilder::new()
.has_headers(true)
.from_reader(file);
let mut y_vec: Vec<f64> = Vec::new();
let mut x_flat_vec: Vec<f64> = Vec::new();
let mut n_rows = 0;
for result in rdr.records() {
let record = result?;
let income: f64 = record[0].parse()?; let education: f64 = record[1].parse()?; let age: f64 = record[2].parse()?; let experience: f64 = record[3].parse()?;
y_vec.push(income);
x_flat_vec.push(education);
x_flat_vec.push(age);
x_flat_vec.push(experience);
n_rows += 1;
}
let n_cols_x = 3;
let y = Array1::from(y_vec);
let x_raw = Array2::from_shape_vec((n_rows, n_cols_x), x_flat_vec)?;
let ones = Array2::ones((n_rows, 1));
let x_with_intercept = ndarray::concatenate(Axis(1), &[ones.view(), x_raw.view()])?;
use greeners_core::types::CovarianceType;
println!("Running OLS with White's Robust Errors (HC1)...");
let result = OLS::fit(&y, &x_with_intercept, CovarianceType::HC1)?;
println!("{}", result);
Ok(())
}