use super::{lm_heteroskedasticity_test, non_intercept_columns};
use crate::OlsFit;
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct BreuschPagan {
pub statistic: f64,
pub df: usize,
pub p_value: f64,
}
pub fn breusch_pagan(fit: &OlsFit) -> BreuschPagan {
let n = fit.n_observations();
let cols = non_intercept_columns(fit);
let x = fit.design_matrix();
let regressors: Vec<Vec<f64>> = cols.iter().map(|&j| x.column(j).to_vec()).collect();
let resid_sq: Vec<f64> = fit.residuals().iter().map(|e| e * e).collect();
let (statistic, df, p_value) = lm_heteroskedasticity_test(n, ®ressors, &resid_sq);
BreuschPagan {
statistic,
df,
p_value,
}
}