6 releases (breaking)

0.6.0 Oct 11, 2023
0.5.0 Sep 29, 2022
0.4.0 Sep 27, 2022
0.3.0 Sep 25, 2022
0.1.0 Sep 25, 2022

#905 in Math

Download history 121/week @ 2025-07-16 105/week @ 2025-07-23 114/week @ 2025-07-30 44/week @ 2025-08-06 30/week @ 2025-08-13 105/week @ 2025-08-20 54/week @ 2025-08-27 72/week @ 2025-09-03 38/week @ 2025-09-10 113/week @ 2025-09-17 124/week @ 2025-09-24 88/week @ 2025-10-01 50/week @ 2025-10-08 22/week @ 2025-10-15 25/week @ 2025-10-22 20/week @ 2025-10-29

130 downloads per month
Used in 4 crates (2 directly)

Apache-2.0

54KB
865 lines

Unit root tests in Rust

Build

Description

Stationarity tests for time-series data in Rust.

At the moment: Dickey-Fuller test and Augmented Dickey-Fuller test with no constan no trend, constant or constant and trend.

License

This project is licensed under the terms of the Apache License 2.0.

Usage

Augmented Dickey-Fuller test:

use unit_root::prelude::distrib::{AlphaLevel,Regression};
use unit_root::prelude::nalgebra::DVector;
use unit_root::prelude::*;

fn main() {
    let y = DVector::from_row_slice(&[
        -0.89642362,
        0.3222552,
        -1.96581989,
        -1.10012936,
        -1.3682928,
        1.17239875,
        2.19561259,
        2.54295031,
        2.05530587,
        1.13212955,
        -0.42968979,
    ]);

    let lag = 2;
    
    // compute the test statistic
    let regression = Regression::Constant;
    let report = tools::adf_test(&y, lag, regression).unwrap();

    // critical values for the model with a constant but no trend:
    let critical_value: f32 = distrib::dickeyfuller::get_critical_value(
        regression,
        report.size,
        AlphaLevel::OnePercent,
    )
    .unwrap();
    assert_eq!(report.size, 8);

    // comparison
    let t_stat = report.test_statistic;
    println!("t-statistic: {}", t_stat);
    println!("critical value: {}", critical_value);
}

See examples for more.

Dependencies

~4MB
~84K SLoC