pub struct StlConfig {
pub period: usize,
pub n_iter: usize,
pub trend_window: Option<usize>,
pub seasonal_window: Option<usize>,
pub low_pass_window: Option<usize>,
pub outer_iter: usize,
}Expand description
Configuration for the STL decomposer.
Fields§
§period: usizeSeasonal period (e.g., 24 for hourly data with daily seasonality).
n_iter: usizeNumber of outer-loop iterations (default: 2).
trend_window: Option<usize>Trend smoother window length — must be odd, ≥ 3.
Default: period + 1 (rounded up to next odd).
seasonal_window: Option<usize>Seasonal subseries smoother window length, in cycles — must be
odd, ≥ 7. Default: 7, as in Cleveland et al. (1990), R’s stl and
statsmodels’ STL.
low_pass_window: Option<usize>Low-pass smoother window length — must be odd, ≥ 3.
Default: the smallest odd integer ≥ period.
outer_iter: usizeNumber of outer iterations, which is what makes the fit robust to
outliers. 0 (the default) is the plain inner loop.
Each outer pass reweights every point by Cleveland’s bisquare of its residual against six times the median absolute residual, so a point far from the fit stops pulling on the next one. In a metrics database the case for it is ordinary rather than exotic: a restart, a scrape that timed out and was backfilled as a spike, a sensor returning its error sentinel. Without it one such point is spread across the whole seasonal component by the cycle-subseries smoother — it lands in the same season of every cycle.
Cleveland et al. (1990) §4.3 suggests 5–10 when robustness is wanted
and 0 when it is not; statsmodels’ STL(robust=True) uses 15 with an
early exit, which is the same bargain. Default 0, so the cost is paid
only where it is asked for.
Implementations§
Source§impl StlConfig
impl StlConfig
Sourcepub fn new(period: usize) -> Self
pub fn new(period: usize) -> Self
Creates a new STL configuration with the given seasonal period.
Sourcepub fn with_iterations(self, n: usize) -> Self
pub fn with_iterations(self, n: usize) -> Self
Sets the number of STL iterations.
Sourcepub fn with_trend_window(self, w: usize) -> Self
pub fn with_trend_window(self, w: usize) -> Self
Sets the trend smoother window length.
Sourcepub fn with_seasonal_window(self, w: usize) -> Self
pub fn with_seasonal_window(self, w: usize) -> Self
Sets the seasonal subseries smoother window length, in cycles.
Sourcepub fn with_low_pass_window(self, w: usize) -> Self
pub fn with_low_pass_window(self, w: usize) -> Self
Sets the low-pass smoother window length.
Sourcepub fn robust(self) -> Self
pub fn robust(self) -> Self
Makes the fit robust to outliers, with Cleveland’s suggested ten outer iterations.
Sourcepub fn with_outer_iterations(self, n: usize) -> Self
pub fn with_outer_iterations(self, n: usize) -> Self
Sets the number of outer (robustness) iterations explicitly.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for StlConfig
impl RefUnwindSafe for StlConfig
impl Send for StlConfig
impl Sync for StlConfig
impl Unpin for StlConfig
impl UnsafeUnpin for StlConfig
impl UnwindSafe for StlConfig
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more