Estimators API
lrdbenchmark provides a comprehensive suite of 18 estimators for detecting and quantifying long-range dependence in time series data.
Base Estimator
- class lrdbenchmark.analysis.base_estimator.BaseEstimator(**kwargs: Any)[source]
Bases:
objectMinimal common interface for estimators.
Conventions - parameters: dict of user-specified configuration - results: dict of computed outputs. At minimum for H estimators:
‘hurst_parameter’: float
‘method’: str
Optional keys: ‘r_squared’, ‘confidence_interval’, ‘diagnostics’
- set_params(**kwargs: Any) BaseEstimator[source]
Temporal Estimators
Detrended Fluctuation Analysis (DFA)
- class lrdbenchmark.analysis.temporal.dfa_estimator.DFAEstimator(min_scale: int = 10, max_scale: int | None = None, num_scales: int = 10, order: int = 1, use_optimization: str = 'auto')[source]
Bases:
BaseEstimatorUnified DFA Estimator with modular backend support.
Input convention. Pass a stationary increment series (e.g. fractional Gaussian noise or first differences of fractional Brownian motion). For such processes the integrated profile scales as \(F(s) \sim s^{H}\) in the mid-scale range, and the
hurst_parameterfield is the slope of \(\log F(s)\) versus \(\log s\) (i.e. the DFA scaling exponent, identified with \(H\) for fGn-like inputs). Feeding fBm levels without differencing does not satisfy the same scaling law and can mislead the estimate.Backends: - ‘jax’: GPU/TPU accelerated (if available) - ‘numba’: CPU JIT compiled - ‘numpy’: Reference implementation
- __init__(min_scale: int = 10, max_scale: int | None = None, num_scales: int = 10, order: int = 1, use_optimization: str = 'auto')[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate Hurst parameter using DFA. Delegates calculation to the selected backend.
The returned
hurst_parameteris the log-log slope of the fluctuation function vs. scale; see the class docstring for the recommended input (increments / fGn vs. fBm levels).
- __init__(min_scale: int = 10, max_scale: int | None = None, num_scales: int = 10, order: int = 1, use_optimization: str = 'auto')[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate Hurst parameter using DFA. Delegates calculation to the selected backend.
The returned
hurst_parameteris the log-log slope of the fluctuation function vs. scale; see the class docstring for the recommended input (increments / fGn vs. fBm levels).
Detrended Moving Average (DMA)
- class lrdbenchmark.analysis.temporal.dma_estimator.DMAEstimator(min_scale: int | None = None, max_scale: int | None = None, num_scales: int | None = None, use_optimization: str = 'auto', *, min_window_size: int | None = None, max_window_size: int | None = None, num_windows: int | None = None, window_sizes: Sequence[int] | None = None, overlap: bool = True)[source]
Bases:
BaseEstimatorUnified DMA (Detrended Moving Average) Estimator for Long-Range Dependence Analysis.
DMA analyzes the root-mean-square fluctuation of detrended time series data using moving average detrending to estimate the Hurst parameter.
Features: - Automatic optimization framework selection (JAX, Numba, NumPy) - GPU acceleration with JAX when available - JIT compilation with Numba for CPU optimization - Graceful fallbacks when optimization frameworks fail
- Parameters:
min_scale (int, optional (default=10)) – Minimum scale for analysis
max_scale (int, optional (default=None)) – Maximum scale for analysis. If None, uses data length / 4
num_scales (int, optional (default=10)) – Number of scales to test
use_optimization (str, optional (default='auto')) – Optimization framework to use: ‘auto’, ‘jax’, ‘numba’, ‘numpy’
- __init__(min_scale: int | None = None, max_scale: int | None = None, num_scales: int | None = None, use_optimization: str = 'auto', *, min_window_size: int | None = None, max_window_size: int | None = None, num_windows: int | None = None, window_sizes: Sequence[int] | None = None, overlap: bool = True)[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate the Hurst parameter using DMA with automatic optimization.
- Parameters:
data (array-like) – Input time series data
- Returns:
Dictionary containing estimation results including: - hurst_parameter: Estimated Hurst parameter - r_squared: R-squared value of the fit - scales: Scales used in the analysis - fluctuation_values: Fluctuation values for each scale - log_scales: Log of scales - log_fluctuations: Log of fluctuation values
- Return type:
- __init__(min_scale: int | None = None, max_scale: int | None = None, num_scales: int | None = None, use_optimization: str = 'auto', *, min_window_size: int | None = None, max_window_size: int | None = None, num_windows: int | None = None, window_sizes: Sequence[int] | None = None, overlap: bool = True)[source]
- _select_optimization_framework(use_optimization: str) str[source]
Select the optimal optimization framework.
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate the Hurst parameter using DMA with automatic optimization.
- Parameters:
data (array-like) – Input time series data
- Returns:
Dictionary containing estimation results including: - hurst_parameter: Estimated Hurst parameter - r_squared: R-squared value of the fit - scales: Scales used in the analysis - fluctuation_values: Fluctuation values for each scale - log_scales: Log of scales - log_fluctuations: Log of fluctuation values
- Return type:
- _estimate_numba(data: ndarray) Dict[str, Any][source]
Numba-optimized implementation of DMA estimation.
- _estimate_jax(data: ndarray) Dict[str, Any][source]
JAX-optimized implementation of DMA estimation.
- _calculate_fluctuation_numpy(data: ndarray, scale: int, overlap: bool) float[source]
Calculate fluctuation value for a given scale using NumPy.
- get_optimization_info() Dict[str, Any][source]
Get information about available optimizations and current selection.
- _calculate_fluctuation(data: ndarray | list, window_size: int) float[source]
Backward-compatible helper for direct fluctuation calculation.
- static _should_suppress_fallback_warning(error: Exception) bool[source]
Return True when a fallback is expected and shouldn’t raise a warning.
Higuchi Method
- class lrdbenchmark.analysis.temporal.higuchi_estimator.HiguchiEstimator(min_k: int = 2, max_k: int | None = None, k_values: List[int] | None = None, use_optimization: str = 'auto')[source]
Bases:
BaseEstimatorEstimate fractal dimension and Hurst exponent using the Higuchi method.
- __init__(min_k: int = 2, max_k: int | None = None, k_values: List[int] | None = None, use_optimization: str = 'auto') None[source]
Generalised Hurst Exponent (GHE)
- class lrdbenchmark.analysis.temporal.ghe_estimator.GHEEstimator(**kwargs)[source]
Bases:
BaseEstimatorUnified GHE (Generalized Hurst Exponent) Estimator for Long-Range Dependence Analysis.
The GHE estimator analyzes the scaling properties of time series data by computing q-th order moments of increments and estimating the generalized Hurst exponent.
Features: - Automatic framework selection (JAX, Numba, NumPy) - Multiple q values for multifractal analysis - Robust error handling and fallback mechanisms - Comprehensive result reporting - Visualization capabilities
- Parameters:
q_values (array-like, optional) – Array of q values for multifractal analysis. Default: [1, 2, 3, 4, 5]
tau_min (int, optional) – Minimum time lag. Default: 2
tau_max (int, optional) – Maximum time lag. Default: min(N//4, 50) where N is data length
tau_step (int, optional) – Step size for time lags. Default: 1
use_jax (bool, optional) – Force JAX backend if available. Default: None (auto-select)
use_numba (bool, optional) – Force Numba backend if available. Default: None (auto-select)
- __init__(**kwargs)[source]
Initialize the GHE estimator.
- Parameters:
**kwargs (dict) – Estimator parameters
- estimate(data: ndarray) Dict[str, Any][source]
Estimate the generalized Hurst exponent using the GHE method.
- Parameters:
data (np.ndarray) – Time series data to analyze
- Returns:
Dictionary containing estimation results
- Return type:
Dict[str, Any]
- __init__(**kwargs)[source]
Initialize the GHE estimator.
- Parameters:
**kwargs (dict) – Estimator parameters
- _compute_qth_moments_numpy(data: ndarray, q_values: ndarray, tau_values: ndarray) ndarray[source]
Compute q-th order moments using NumPy.
- Parameters:
data (np.ndarray) – Time series data
q_values (np.ndarray) – Array of q values
tau_values (np.ndarray) – Array of time lags
- Returns:
Array of shape (len(q_values), len(tau_values)) containing q-th moments
- Return type:
np.ndarray
- _compute_qth_moments_numba(data: ndarray, q_values: ndarray, tau_values: ndarray) ndarray[source]
Compute q-th order moments using Numba.
- Parameters:
data (np.ndarray) – Time series data
q_values (np.ndarray) – Array of q values
tau_values (np.ndarray) – Array of time lags
- Returns:
Array of shape (len(q_values), len(tau_values)) containing q-th moments
- Return type:
np.ndarray
- _compute_qth_moments_jax(data: ndarray, q_values: ndarray, tau_values: ndarray) ndarray[source]
Compute q-th order moments using JAX.
- Parameters:
data (np.ndarray) – Time series data
q_values (np.ndarray) – Array of q values
tau_values (np.ndarray) – Array of time lags
- Returns:
Array of shape (len(q_values), len(tau_values)) containing q-th moments
- Return type:
np.ndarray
- _estimate_hurst_exponents(tau_values: ndarray, moments: ndarray, q_values: ndarray) Tuple[ndarray, ndarray, ndarray][source]
Estimate Hurst exponents from q-th moments.
- Parameters:
tau_values (np.ndarray) – Array of time lags
moments (np.ndarray) – Array of q-th moments
q_values (np.ndarray) – Array of q values
- Returns:
Hurst exponents, R-squared values, and standard errors
- Return type:
Tuple[np.ndarray, np.ndarray, np.ndarray]
- estimate(data: ndarray) Dict[str, Any][source]
Estimate the generalized Hurst exponent using the GHE method.
- Parameters:
data (np.ndarray) – Time series data to analyze
- Returns:
Dictionary containing estimation results
- Return type:
Dict[str, Any]
R/S Analysis
- class lrdbenchmark.analysis.temporal.rs_estimator.RSEstimator(min_block_size: int | None = None, max_block_size: int | None = None, num_blocks: int | None = None, use_optimization: str = 'auto', *, min_window_size: int | None = None, max_window_size: int | None = None, num_windows: int | None = None, window_sizes: Sequence[int] | None = None, overlap: bool = False)[source]
Bases:
BaseEstimatorUnified R/S (Rescaled Range) Estimator for Long-Range Dependence Analysis.
Backends: - ‘jax’: GPU/TPU accelerated (if available) - ‘numba’: CPU JIT compiled - ‘numpy’: Reference implementation
- __init__(min_block_size: int | None = None, max_block_size: int | None = None, num_blocks: int | None = None, use_optimization: str = 'auto', *, min_window_size: int | None = None, max_window_size: int | None = None, num_windows: int | None = None, window_sizes: Sequence[int] | None = None, overlap: bool = False) None[source]
- __init__(min_block_size: int | None = None, max_block_size: int | None = None, num_blocks: int | None = None, use_optimization: str = 'auto', *, min_window_size: int | None = None, max_window_size: int | None = None, num_windows: int | None = None, window_sizes: Sequence[int] | None = None, overlap: bool = False) None[source]
Spectral Estimators
Geweke-Porter-Hudak (GPH)
- class lrdbenchmark.analysis.spectral.gph_estimator.GPHEstimator(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.1, apply_bias_correction: bool = True, use_optimization: str = 'auto')[source]
Bases:
BaseEstimatorUnified Geweke-Porter-Hudak (GPH) Hurst parameter estimator.
This estimator uses log-periodogram regression with the regressor log(4*sin^2(ω/2)) to estimate the fractional differencing parameter d, then converts to Hurst parameter as H = d + 0.5.
Features: - Automatic optimization framework selection (JAX, Numba, NumPy) - GPU acceleration with JAX when available - JIT compilation with Numba for CPU optimization - Graceful fallbacks when optimization frameworks fail
- Parameters:
min_freq_ratio (float, optional (default=0.01)) – Minimum frequency ratio (relative to Nyquist) for fitting.
max_freq_ratio (float, optional (default=0.1)) – Maximum frequency ratio (relative to Nyquist) for fitting.
apply_bias_correction (bool, optional (default=True)) – Whether to apply bias correction for finite sample effects.
use_optimization (str, optional (default='auto')) – Optimization framework to use: ‘auto’, ‘jax’, ‘numba’, ‘numpy’
- __init__(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.1, apply_bias_correction: bool = True, use_optimization: str = 'auto')[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate Hurst parameter using GPH method with automatic optimization.
- Parameters:
data (array-like) – Time series data.
- Returns:
Dictionary containing estimation results including: - hurst_parameter: Estimated Hurst parameter - d_parameter: Estimated fractional differencing parameter - intercept: Intercept of the linear fit - r_squared: R-squared value of the fit - m: Number of frequency points used in fitting - log_regressor: Log regressor values - log_periodogram: Log periodogram values
- Return type:
- __init__(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.1, apply_bias_correction: bool = True, use_optimization: str = 'auto')[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate Hurst parameter using GPH method with automatic optimization.
- Parameters:
data (array-like) – Time series data.
- Returns:
Dictionary containing estimation results including: - hurst_parameter: Estimated Hurst parameter - d_parameter: Estimated fractional differencing parameter - intercept: Intercept of the linear fit - r_squared: R-squared value of the fit - m: Number of frequency points used in fitting - log_regressor: Log regressor values - log_periodogram: Log periodogram values
- Return type:
- _estimate_jax(data: ndarray) Dict[str, Any][source]
JAX-optimized implementation of GPH estimation.
- _estimate_numba(data: ndarray) Dict[str, Any][source]
Numba-optimized implementation of GPH estimation.
Periodogram
- class lrdbenchmark.analysis.spectral.periodogram_estimator.PeriodogramEstimator(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.1, use_welch: bool = True, window: str = 'hann', nperseg: int | None = None, use_multitaper: bool = False, n_tapers: int = 3, use_optimization: str = 'auto')[source]
Bases:
BaseEstimatorUnified Periodogram-based Hurst parameter estimator.
This estimator computes the power spectral density (PSD) of the time series and fits a power law to the low-frequency portion to estimate the Hurst parameter. The relationship is: PSD(f) ~ f^(-beta) where beta = 2H - 1.
Backends: - ‘jax’: GPU-accelerated FFT (Welch/Periodogram). - ‘numpy’: SciPy-based (Periodogram/Welch/Multitaper). - ‘numba’: Defaults to NumPy backend.
- __init__(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.1, use_welch: bool = True, window: str = 'hann', nperseg: int | None = None, use_multitaper: bool = False, n_tapers: int = 3, use_optimization: str = 'auto')[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate Hurst parameter using periodogram analysis.
- __init__(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.1, use_welch: bool = True, window: str = 'hann', nperseg: int | None = None, use_multitaper: bool = False, n_tapers: int = 3, use_optimization: str = 'auto')[source]
Whittle Estimator
- class lrdbenchmark.analysis.spectral.whittle_estimator.WhittleEstimator(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.5, use_optimization: str = 'auto', **kwargs)[source]
Bases:
BaseEstimatorWhittle estimator for Hurst parameter estimation.
Minimizes the Whittle likelihood function based on the fGn spectral density. Supports JAX acceleration for likelihood evaluation.
- __init__(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.5, use_optimization: str = 'auto', **kwargs)[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate Hurst parameter using Whittle method.
- __init__(min_freq_ratio: float = 0.01, max_freq_ratio: float = 0.5, use_optimization: str = 'auto', **kwargs)[source]
Wavelet Estimators
Continuous Wavelet Transform (CWT)
- class lrdbenchmark.analysis.wavelet.cwt_estimator.CWTEstimator(wavelet: str = 'morl', scales: ndarray | None = None, confidence: float = 0.95, use_optimization: str = 'auto', robust: bool = False, scale_range: Tuple[float, float] | None = None, trim_ends: int = 0)[source]
Bases:
BaseEstimatorUnified Continuous Wavelet Transform (CWT) Estimator for Long-Range Dependence Analysis.
This estimator uses continuous wavelet transforms to analyze the scaling behavior of time series data and estimate the Hurst parameter for fractional processes.
Features: - Automatic optimization framework selection (JAX, Numba, NumPy) - GPU acceleration with JAX when available - JIT compilation with Numba for CPU optimization - Graceful fallbacks when optimization frameworks fail
- Parameters:
wavelet (str, optional (default='cmor1.5-1.0')) – Wavelet type for continuous transform
scales (np.ndarray, optional (default=None)) – Array of scales for analysis. If None, uses automatic scale selection
confidence (float, optional (default=0.95)) – Confidence level for confidence intervals
use_optimization (str, optional (default='auto')) – Optimization framework to use: ‘auto’, ‘jax’, ‘numba’, ‘numpy’
- __init__(wavelet: str = 'morl', scales: ndarray | None = None, confidence: float = 0.95, use_optimization: str = 'auto', robust: bool = False, scale_range: Tuple[float, float] | None = None, trim_ends: int = 0)[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate the Hurst parameter using Continuous Wavelet Transform analysis with automatic optimization.
- Parameters:
data (array-like) – Input time series data
- Returns:
Dictionary containing estimation results including: - hurst_parameter: Estimated Hurst parameter - confidence_interval: Confidence interval for the estimate - r_squared: R-squared value of the fit - scales: Scales used in the analysis - wavelet_type: Wavelet type used - slope: Slope of the log-log regression - intercept: Intercept of the log-log regression - scale_powers: Power at each scale
- Return type:
- __init__(wavelet: str = 'morl', scales: ndarray | None = None, confidence: float = 0.95, use_optimization: str = 'auto', robust: bool = False, scale_range: Tuple[float, float] | None = None, trim_ends: int = 0)[source]
- _select_optimization_framework(use_optimization: str) str[source]
Select the optimal optimization framework.
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate the Hurst parameter using Continuous Wavelet Transform analysis with automatic optimization.
- Parameters:
data (array-like) – Input time series data
- Returns:
Dictionary containing estimation results including: - hurst_parameter: Estimated Hurst parameter - confidence_interval: Confidence interval for the estimate - r_squared: R-squared value of the fit - scales: Scales used in the analysis - wavelet_type: Wavelet type used - slope: Slope of the log-log regression - intercept: Intercept of the log-log regression - scale_powers: Power at each scale
- Return type:
- _estimate_numba(data: ndarray) Dict[str, Any][source]
Numba-optimized implementation of CWT estimation.
- _estimate_jax(data: ndarray) Dict[str, Any][source]
JAX-optimized implementation of Wavelet Log Variance estimation.
- _regression_statistics(x: ndarray, y: ndarray, weights: ndarray, slope: float, intercept: float, XtWX: ndarray) Tuple[float, float][source]
Compute weighted regression diagnostics for slope.
- _get_confidence_interval(estimated_hurst: float, slope_se: float, n_points: int) Tuple[float, float][source]
Calculate confidence interval for the Hurst parameter estimate.
- get_optimization_info() Dict[str, Any][source]
Get information about available optimizations and current selection.
Wavelet Variance
- class lrdbenchmark.analysis.wavelet.variance_estimator.WaveletVarianceEstimator(wavelet='db4', scales=None, confidence=0.95, use_optimization='auto', robust=False, j_min=2, j_max=None)[source]
Bases:
BaseEstimatorUnified Wavelet Variance Estimator. Identical logic to LogVarianceEstimator, kept for compatibility/completeness.
- __init__(wavelet='db4', scales=None, confidence=0.95, use_optimization='auto', robust=False, j_min=2, j_max=None)[source]
Wavelet Log-Variance
- class lrdbenchmark.analysis.wavelet.log_variance_estimator.WaveletLogVarianceEstimator(wavelet: str = 'db4', scales: List[int] | None = None, confidence: float = 0.95, use_optimization: str = 'auto', robust: bool = False, j_min: int = 2, j_max: int | None = None)[source]
Bases:
BaseEstimatorUnified Wavelet Log Variance Estimator.
Uses wavelet decomposition to estimate Hurst parameter via log-variance scaling. Supports JAX acceleration for DWT.
- __init__(wavelet: str = 'db4', scales: List[int] | None = None, confidence: float = 0.95, use_optimization: str = 'auto', robust: bool = False, j_min: int = 2, j_max: int | None = None)[source]
Wavelet Whittle
- class lrdbenchmark.analysis.wavelet.whittle_estimator.WaveletWhittleEstimator(wavelet: str = 'db4', scales: List[int] | None = None, confidence: float = 0.95, use_optimization: str = 'auto', bootstrap_samples: int = 64, bootstrap_block_size: int | None = None)[source]
Bases:
BaseEstimatorUnified Wavelet Whittle Estimator for Long-Range Dependence Analysis.
This estimator combines wavelet decomposition with Whittle likelihood estimation to provide robust estimation of the Hurst parameter for fractional processes.
Features: - Automatic optimization framework selection (JAX, Numba, NumPy) - GPU acceleration with JAX when available - JIT compilation with Numba for CPU optimization - Graceful fallbacks when optimization frameworks fail
- Parameters:
wavelet (str, optional (default='db4')) – Wavelet type to use for decomposition
scales (List[int], optional (default=None)) – List of scales for wavelet analysis. If None, uses automatic scale selection
confidence (float, optional (default=0.95)) – Confidence level for confidence intervals
use_optimization (str, optional (default='auto')) – Optimization framework to use: ‘auto’, ‘jax’, ‘numba’, ‘numpy’
- __init__(wavelet: str = 'db4', scales: List[int] | None = None, confidence: float = 0.95, use_optimization: str = 'auto', bootstrap_samples: int = 64, bootstrap_block_size: int | None = None)[source]
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate the Hurst parameter using wavelet Whittle analysis with automatic optimization.
- Parameters:
data (array-like) – Input time series data
- Returns:
Dictionary containing estimation results including: - hurst_parameter: Estimated Hurst parameter - confidence_interval: Confidence interval for the estimate - whittle_likelihood: Whittle likelihood value - scales: Scales used in the analysis - wavelet_type: Wavelet type used - optimization_success: Whether optimization succeeded
- Return type:
- __init__(wavelet: str = 'db4', scales: List[int] | None = None, confidence: float = 0.95, use_optimization: str = 'auto', bootstrap_samples: int = 64, bootstrap_block_size: int | None = None)[source]
- _select_optimization_framework(use_optimization: str) str[source]
Select the optimal optimization framework.
- estimate(data: ndarray | list) Dict[str, Any][source]
Estimate the Hurst parameter using wavelet Whittle analysis with automatic optimization.
- Parameters:
data (array-like) – Input time series data
- Returns:
Dictionary containing estimation results including: - hurst_parameter: Estimated Hurst parameter - confidence_interval: Confidence interval for the estimate - whittle_likelihood: Whittle likelihood value - scales: Scales used in the analysis - wavelet_type: Wavelet type used - optimization_success: Whether optimization succeeded
- Return type:
- _estimate_numpy(data: ndarray, compute_ci: bool = True) Dict[str, Any][source]
NumPy implementation of Wavelet Whittle estimation.
- _estimate_numba(data: ndarray) Dict[str, Any][source]
Numba-optimized implementation of Wavelet Whittle estimation.
- _bootstrap_confidence_interval(data: ndarray, point_estimate: float) Tuple[float, float][source]
Approximate confidence interval using circular block bootstrap.
- _circular_block_resample(data: ndarray, block_size: int) ndarray[source]
Generate circular block bootstrap resample.
- _estimate_jax(data: ndarray) Dict[str, Any][source]
JAX-optimized implementation of Wavelet Whittle estimation.
- _theoretical_spectrum_fgn(frequencies: ndarray, H: float, sigma: float = 1.0) ndarray[source]
Calculate theoretical spectrum for fractional Gaussian noise.
- _get_confidence_interval(estimated_hurst: float, whittle_likelihood: float, js: List[int]) Tuple[float, float][source]
Calculate confidence interval for the Hurst parameter estimate.
- get_optimization_info() Dict[str, Any][source]
Get information about available optimizations and current selection.
Multifractal Estimators
Multifractal Detrended Fluctuation Analysis (MFDFA)
- class lrdbenchmark.analysis.multifractal.mfdfa_estimator.MFDFAEstimator(q_orders: List[float] | ndarray | None = None, scales: List[int] | None = None, order: int = 1, use_optimization: str = 'auto', **kwargs)[source]
Bases:
BaseEstimatorMultifractal Detrended Fluctuation Analysis (MFDFA) Estimator.
Estimates the generalized Hurst exponent H(q) and the multifractal spectrum D(h). Supports JAX acceleration.
- __init__(q_orders: List[float] | ndarray | None = None, scales: List[int] | None = None, order: int = 1, use_optimization: str = 'auto', **kwargs)[source]
Multifractal Wavelet Leaders
- class lrdbenchmark.analysis.multifractal.wavelet_leaders_estimator.MultifractalWaveletLeadersEstimator(wavelet: str = 'db3', scales: List[int] | None = None, min_scale: int = 2, max_scale: int = 32, num_scales: int = 10, q_values: List[float] | None = None, use_optimization: str = 'numpy')[source]
Bases:
BaseEstimatorUnified Multifractal Wavelet Leaders Estimator.
- __init__(wavelet: str = 'db3', scales: List[int] | None = None, min_scale: int = 2, max_scale: int = 32, num_scales: int = 10, q_values: List[float] | None = None, use_optimization: str = 'numpy')[source]
Machine Learning Estimators
For detailed documentation of machine learning estimators, see Machine Learning Estimators.
The following ML estimators are available:
Random Forest: Ensemble tree-based estimation with feature importance
Support Vector Regression: SVM-based estimation with RBF kernel
Gradient Boosting: Boosted tree estimation with comprehensive feature engineering
See the dedicated Machine Learning Estimators page for complete API documentation, performance metrics, and usage examples.
Neural Network Estimators
For detailed documentation of neural network estimators, see Neural Network Factory API.
The following neural network architectures are available:
CNN: Convolutional Neural Networks for spatial pattern recognition
LSTM: Long Short-Term Memory networks for temporal sequences
GRU: Gated Recurrent Units for efficient temporal modeling
Transformer: Attention-based architectures for complex patterns
See the dedicated Neural Network Factory API page for complete API documentation, architecture details, and usage examples.
High Performance Estimators
Note
The unified estimators automatically select optimal computation frameworks (JAX, Numba, or NumPy)
based on data characteristics and hardware availability. For advanced users, the high-performance
modules in lrdbenchmark.analysis.high_performance.jax and lrdbenchmark.analysis.high_performance.numba
provide direct access to optimized implementations (e.g., DFAEstimatorJAX, DFAEstimatorNumba),
but the unified estimators are recommended for most use cases as they automatically select the best
framework based on data characteristics and hardware availability.
Backend Modules (Strategy Pattern)
The following backend modules provide modular implementations for each estimator family, enabling JAX GPU acceleration or Numba JIT compilation:
Temporal Backends
lrdbenchmark.analysis.temporal.dfa_backends: NumPy, JAX, Numba implementations for DFA.lrdbenchmark.analysis.temporal.rs_backends: NumPy, JAX, Numba implementations for R/S.
Spectral Backends
lrdbenchmark.analysis.spectral.spectral_backends: NumPy, JAX implementations for Periodogram, Welch, Whittle.
Wavelet Backends
lrdbenchmark.analysis.wavelet.wavelet_backends: NumPy, JAX implementations for DWT-based variance estimators.
Multifractal Backends
lrdbenchmark.analysis.multifractal.mfdfa_backends: NumPy, JAX implementations for MFDFA.lrdbenchmark.analysis.multifractal.wavelet_leaders_backends: NumPy, JAX implementations for Wavelet Leaders.
Usage Example (Backend Selection)
from lrdbenchmark import DFAEstimator
# Auto-select best backend (default)
estimator = DFAEstimator(use_optimization='auto')
# Force JAX for GPU acceleration
estimator_jax = DFAEstimator(use_optimization='jax')
# Force NumPy for maximum compatibility
estimator_numpy = DFAEstimator(use_optimization='numpy')
Usage Examples
Basic Estimator Usage
from lrdbenchmark import DFAEstimator
from lrdbenchmark import GPHEstimator
from lrdbenchmark import FBMModel
# Generate test data with known Hurst parameter
model = FBMModel(H=0.7, sigma=1.0)
data = model.generate(1000, seed=42)
print(f"Generated FBM data with true H = 0.7")
print(f"Data length: {len(data)}")
print(f"Data mean: {data.mean():.3f}, std: {data.std():.3f}")
# Use DFA estimator
dfa = DFAEstimator()
H_dfa = dfa.estimate(data)
print(f"DFA H estimate: {H_dfa:.3f}")
print(f"DFA error: {abs(H_dfa - 0.7):.3f}")
# Use GPH estimator
gph = GPHEstimator()
H_gph = gph.estimate(data)
print(f"GPH H estimate: {H_gph:.3f}")
print(f"GPH error: {abs(H_gph - 0.7):.3f}")
# Compare estimates
print(f"\nEstimate comparison:")
print(f"True H: 0.700")
print(f"DFA: {H_dfa:.3f} (error: {abs(H_dfa - 0.7):.3f})")
print(f"GPH: {H_gph:.3f} (error: {abs(H_gph - 0.7):.3f})")
Multiple Estimators Comparison
from lrdbenchmark import DFAEstimator
from lrdbenchmark import RSEstimator
from lrdbenchmark import GPHEstimator
from lrdbenchmark import WaveletVarianceEstimator
from lrdbenchmark import HiguchiEstimator
from lrdbenchmark import FBMModel, FGNModel
import pandas as pd
# Define estimators to test
estimators = {
'DFA': DFAEstimator(),
'R/S': RSEstimator(),
'GPH': GPHEstimator(),
'Wavelet Variance': WaveletVarianceEstimator(),
'Higuchi': HiguchiEstimator()
}
# Test on different data models
test_cases = {
'FBM (H=0.7)': FBMModel(H=0.7, sigma=1.0),
'FBM (H=0.3)': FBMModel(H=0.3, sigma=1.0),
'FGN (H=0.8)': FGNModel(H=0.8, sigma=1.0)
}
# Store results
all_results = []
for case_name, model in test_cases.items():
print(f"\n=== Testing {case_name} ===")
data = model.generate(1000, seed=42)
true_H = model.H
case_results = {'Case': case_name, 'True_H': true_H}
for name, estimator in estimators.items():
try:
H_est = estimator.estimate(data)
error = abs(H_est - true_H)
case_results[name] = H_est
case_results[f'{name}_error'] = error
print(f" {name}: H = {H_est:.3f} (error: {error:.3f})")
except Exception as e:
print(f" {name}: Error - {e}")
case_results[name] = None
case_results[f'{name}_error'] = None
all_results.append(case_results)
# Create summary DataFrame
df = pd.DataFrame(all_results)
print(f"\n=== SUMMARY ===")
print(df.round(3))
# Calculate average errors
error_columns = [col for col in df.columns if col.endswith('_error')]
avg_errors = df[error_columns].mean()
print(f"\n=== AVERAGE ERRORS ===")
for col in error_columns:
estimator = col.replace('_error', '')
print(f"{estimator}: {avg_errors[col]:.3f}")
Machine Learning Estimators
from lrdbenchmark import RandomForestEstimator
from lrdbenchmark import GradientBoostingEstimator
from lrdbenchmark import CNNEstimator
from lrdbenchmark import FBMModel, FGNModel, ARFIMAModel
import numpy as np
from sklearn.model_selection import train_test_split
# Generate comprehensive training dataset
print("Generating training dataset...")
training_data = []
training_labels = []
# Create diverse training data
H_values = np.linspace(0.3, 0.9, 15) # 15 different H values
models = {
'FBM': FBMModel,
'FGN': FGNModel,
'ARFIMA': lambda H: ARFIMAModel(d=H-0.5, p=1, q=1)
}
for H in H_values:
for model_name, model_class in models.items():
if model_name == 'ARFIMA':
model = model_class(H)
else:
model = model_class(H=H, sigma=1.0)
# Generate multiple realizations
for i in range(20):
data = model.generate(1000, seed=int(H*1000 + i))
training_data.append(data)
training_labels.append(H)
print(f"Generated {len(training_data)} training samples")
print(f"H range: {min(training_labels):.1f} to {max(training_labels):.1f}")
# Split into training and validation sets
X_train, X_val, y_train, y_val = train_test_split(
training_data, training_labels, test_size=0.2, random_state=42
)
# Train Random Forest estimator
print("\nTraining Random Forest estimator...")
rf_estimator = RandomForestEstimator(
n_estimators=100,
max_depth=10,
random_state=42
)
rf_estimator.fit(X_train, y_train)
# Train Gradient Boosting estimator
print("Training Gradient Boosting estimator...")
gb_estimator = GradientBoostingEstimator(
n_estimators=100,
learning_rate=0.1,
max_depth=5,
random_state=42
)
gb_estimator.fit(X_train, y_train)
# Evaluate on validation set
print("\n=== Validation Results ===")
rf_val_pred = rf_estimator.estimate(X_val)
gb_val_pred = gb_estimator.estimate(X_val)
rf_mae = np.mean(np.abs(np.array(rf_val_pred) - np.array(y_val)))
gb_mae = np.mean(np.abs(np.array(gb_val_pred) - np.array(y_val)))
print(f"Random Forest MAE: {rf_mae:.3f}")
print(f"Gradient Boosting MAE: {gb_mae:.3f}")
# Test on new data
print("\n=== Test on New Data ===")
test_cases = [
('FBM (H=0.6)', FBMModel(H=0.6, sigma=1.0)),
('FGN (H=0.4)', FGNModel(H=0.4, sigma=1.0)),
('ARFIMA (H=0.75)', ARFIMAModel(d=0.25, p=1, q=1))
]
for test_name, test_model in test_cases:
test_data = test_model.generate(1000, seed=999)
H_rf = rf_estimator.estimate([test_data])[0]
H_gb = gb_estimator.estimate([test_data])[0]
if 'H=' in test_name:
true_H = float(test_name.split('H=')[1].split(')')[0])
else:
true_H = 0.75 # For ARFIMA
print(f"{test_name}:")
print(f" True H: {true_H:.3f}")
print(f" RF estimate: {H_rf:.3f} (error: {abs(H_rf - true_H):.3f})")
print(f" GB estimate: {H_gb:.3f} (error: {abs(H_gb - true_H):.3f})")
High Performance Estimators
from lrdbenchmark import DFAEstimator, RSEstimator, FBMModel
import numpy as np
# Generate large dataset
model = FBMModel(H=0.7, sigma=1.0)
data = model.generate(10000, seed=42)
# Unified estimators automatically use optimal backend (JAX/Numba/NumPy)
dfa = DFAEstimator(use_optimization='auto') # Auto-selects best framework
result = dfa.estimate(data)
print(f"DFA H estimate: {result['hurst_parameter']:.3f}")
# R/S estimator with automatic optimization
rs = RSEstimator(use_optimization='auto')
result = rs.estimate(data)
print(f"R/S H estimate: {result['hurst_parameter']:.3f}")
Parameter Tuning
from lrdbenchmark import DFAEstimator
from lrdbenchmark import GPHEstimator
from lrdbenchmark import FBMModel
# Generate test data
model = FBMModel(H=0.7, sigma=1.0)
data = model.generate(1000, seed=42)
# DFA with custom parameters
dfa = DFAEstimator(
min_scale=4,
max_scale=100,
num_scales=20,
polynomial_order=2
)
H_dfa = dfa.estimate(data)
# GPH with custom parameters
gph = GPHEstimator(
num_frequencies=50,
min_frequency=0.01,
max_frequency=0.5
)
H_gph = gph.estimate(data)
print(f"DFA (custom): H = {H_dfa:.3f}")
print(f"GPH (custom): H = {H_gph:.3f}")
# Note: All estimators are documented above in their respective sections # No duplicate documentation needed
Error Handling
from lrdbenchmark import DFAEstimator
from lrdbenchmark import GPHEstimator
# Test with insufficient data
short_data = [1, 2, 3, 4, 5] # Too short for most estimators
dfa = DFAEstimator()
try:
H_dfa = dfa.estimate(short_data)
print(f"DFA H estimate: {H_dfa:.3f}")
except ValueError as e:
print(f"DFA error: {e}")
gph = GPHEstimator()
try:
H_gph = gph.estimate(short_data)
print(f"GPH H estimate: {H_gph:.3f}")
except ValueError as e:
print(f"GPH error: {e}")
Performance Comparison
import time
from lrdbenchmark import DFAEstimator, FBMModel
# Generate test data
model = FBMModel(H=0.7, sigma=1.0)
data = model.generate(5000, seed=42)
# DFA with automatic optimization (will use JAX/Numba if available)
dfa = DFAEstimator(use_optimization='auto')
start_time = time.time()
result = dfa.estimate(data)
dfa_time = time.time() - start_time
# DFA with explicit NumPy backend (no optimization)
dfa_numpy = DFAEstimator(use_optimization='numpy')
start_time = time.time()
result_numpy = dfa_numpy.estimate(data)
dfa_numpy_time = time.time() - start_time
print(f"Optimized DFA: H = {result['hurst_parameter']:.3f}, Time = {dfa_time:.4f}s")
print(f"NumPy DFA: H = {result_numpy['hurst_parameter']:.3f}, Time = {dfa_numpy_time:.4f}s")
if dfa_numpy_time > 0:
print(f"Speedup: {dfa_numpy_time/dfa_time:.2f}x")
Best Practices
Data Length: Use at least 1000 samples for reliable estimates
Parameter Selection: Choose appropriate scale ranges for your data
Multiple Estimators: Compare results from different estimator types
Error Handling: Always handle potential estimation errors
Performance: Use high-performance estimators for large datasets
Validation: Test on synthetic data with known Hurst parameters
Note
Different estimators may give slightly different results due to their underlying assumptions and methodologies. It’s recommended to use multiple estimators and compare their results.
Warning
Some estimators require specific data characteristics (e.g., stationarity for spectral methods). Always check the estimator documentation for requirements and limitations.