pub fn fit_normal(data: &[f64]) -> Option<FitResult>Expand description
Fits a Normal distribution N(μ, σ²) via MLE.
§Estimators
- μ̂ = x̄ (sample mean)
- σ̂ = √((1/n) Σ(xᵢ - x̄)²) (biased MLE, not sample std dev)
§Returns
None if fewer than 2 data points, non-finite values, or zero variance.
§Examples
use u_analytics::distribution::fit_normal;
let data = [2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0];
let fit = fit_normal(&data).unwrap();
assert_eq!(fit.distribution, "Normal");
assert!((fit.parameters[0].1 - 5.0).abs() < 1e-10); // μ̂ = 5.0
assert!(fit.parameters[1].1 > 0.0); // σ̂ > 0