Skip to main content

Hurst exponent estimation using Whittle's method

Project description

Python 3x pypi

Overview

This module implements Whittle's likelihood estimation method for determining the Hurst exponent of a time series. The method fits the theoretical spectral density to the periodogram computed from the time series realization. This implementation includes spectral density approximations for fractional Gaussian noise (increments of fractional Brownian motion) and ARFIMA processes.

The Hurst exponent ($H$) controls the roughness, self-similarity, and long-range dependence of fBm paths:

  • $H\in(0,0.5):~$ anti-persistent (mean-reverting) behavior.
  • $H\in(0.5,1):~$ persistent behavior.
  • $H=0.5:~ \mathrm{fBm}(H)$ is the Brownian motion.
  • $H\rightarrow 0:~ \mathrm{fBm}(H)\rightarrow$ White noise.
  • $H\rightarrow 1:~ \mathrm{fBm}(H)\rightarrow$ Linear trend.

Features

  • Spectral density options:
    • fGn
    • arfima
    • fGn_paxson
    • fGn_truncation
    • fGn_taylor
  • A flexible interface that supports custom spectral density callback functions.
  • Good performance both in terms of speed and accuracy.
  • Included generators for fBm and ARFIMA.

Installation

pip install whittlehurst

Usage

fBm and fGn

import numpy as np
from whittlehurst import whittle, fbm

# Original Hurst value to test with
H=0.42

# Generate an fBm realization
fBm_seq = fbm(H=H, n=10000)

# Calculate the increments (the estimator works with the fGn spectrum)
fGn_seq = np.diff(fBm_seq)

# Estimate the Hurst exponent
H_est = whittle(fGn_seq)

print(f"Original H: {H:0.04f}, estimated H: {H_est:0.04f}")

ARFIMA

import numpy as np
from whittlehurst import whittle, arfima

# Original Hurst value to test with
H=0.42

# Generate a realization of an ARFIMA(0, H - 0.5, 0) process.
arfima_seq = arfima(H=H, n=10000)

# No need to take the increments here
# Estimate the "Hurst exponent" using the ARFIMA spectrum
H_est = whittle(arfima_seq, spectrum="arfima")

print(f"Original H: {H:0.04f}, estimated H: {H_est:0.04f}")

Performance

Compared to other methods

Our Whittle-based estimator offers a compelling alternative to traditional approaches for estimating the Hurst exponent. In particular, we compare it with:

  • R/S Method: Implemented in the hurst package, this method has been widely used for estimating $H$.

  • Higuchi's Method: Available through the antropy package, it performs quite well especially for smaller $H$ values, but its performance drops when $H\rightarrow 1$.

  • Variogram: Our variogram implementation of order $p = 1$ (madogram) accessible as from whittlehurst import variogram.

RMSE by Sequence Length

Inference times represent the computation time per input sequence, and were calculated as: $t = w\cdot T/k$, where $k=100000$ is the number of sequences, $w=42$ is the number of workers (processing threads), and $T$ is the total elapsed time. Single-thread performance is likely superior, the results are mainly comparative.

Compute Time

The following results were calculated on $100000$ fBm realizations of length $n=1600$.

Local RMSE at n=1600

Scatter Plot

fGn spectral density approximations

The fGn spectral density calculations recommended by Shi et al. are accessible within our package:

  • fGn: The default recommended spectral model. It relies on the gamma function and the Hurwitz zeta function $\zeta(s,q)=\sum_{j=0}^{\infty}(j+q)^{-s}$ from scipy. Terms independent from $H$ or $\lambda$ are omitted, as they are not required for minimizing the Whittle objective. With $s=2H+1$:

    $g(\lambda,H) = \Gamma(s) \sin(\pi H) (1-\cos(\lambda))(2\pi)^{-s}\left[ \zeta\left(s, 1-\frac{\lambda}{2\pi}\right) + \zeta\left(s, \frac{\lambda}{2\pi}\right) \right].$

  • fGn_Paxson: Uses Paxson's approximation with a configurable parameter K=50.

  • fGn_truncation: Approximates the infinite series by a configurable truncation K=200.

  • fGn_Taylor: Uses a Taylor series expansion to approximate the spectral density at near-zero frequency.

RMSE by Sequence Length

Compute Time

The following results were calculated on $100000$ fBm realizations of length $n=1600$.

Local RMSE at n=1600

Scatter Plot

TDML for fGn

The Time-Domain Maximum Likelihood (TDML) method estimates $H$ from fGn observations by fitting the likelihood function directly in the time domain. TDML performs a similar root finding as Whittle's method, but Whittle operates in the frequency domain. Despite significant optimizations (including a monotonic transformation of the likelihood and efficient implementation via the Durbin-Levinson recursion) TDML remains much slower than Whittle. TDML offers marginally improved accuracy, especially at the edges of the Hurst parameter range.

Usage:

import numpy as np
from whittlehurst import tdml, fbm

# Original Hurst value to test with
H=0.42

# Generate an fBm realization
fBm_seq = fbm(H=H, n=10000)

# Calculate the increments
fGn_seq = np.diff(fBm_seq)

# Estimate the Hurst exponent
H_est = tdml(fGn_seq)

print(f"Original H: {H:0.04f}, estimated H: {H_est:0.04f}")

Compute Time

Local RMSE at n=1600

The following result was calculated on fBm realizations of length $n=6400$.

Local RMSE at n=1600

ARFIMA

For the $\text{ARFIMA}(0, H - 0.5, 0)$ process, the spectral density calculation is simpler. With terms independent from $H$ or $\lambda$ omitted, we use:

$g(\lambda,H) = (2\cdot\sin(\lambda/2))^{1 - 2H}$

ARFIMA Local RMSE

References

License

This project is licensed under the MIT License (c) 2025 Bálint Csanády, aielte-research. See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whittlehurst-1.0.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

whittlehurst-1.0-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file whittlehurst-1.0.tar.gz.

File metadata

  • Download URL: whittlehurst-1.0.tar.gz
  • Upload date:
  • Size: 13.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for whittlehurst-1.0.tar.gz
Algorithm Hash digest
SHA256 f42765cf9cdb1c87353e0f42408beb1c08cf4f7fab75b505295ec8511b6b3ee6
MD5 c6a7c736c071113f6125d87cb67136ec
BLAKE2b-256 1c09d9217c5dc0297efb63d7fab4a1f4b563905017696e1d93b5beca97f34046

See more details on using hashes here.

File details

Details for the file whittlehurst-1.0-py3-none-any.whl.

File metadata

  • Download URL: whittlehurst-1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for whittlehurst-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dac20209e1a567895821c7a46e35b818ef9ffcc9d0b8da577ca2d888a0c95975
MD5 cb507aebc0dc856aa0379f68bf637b84
BLAKE2b-256 8576739efb8beb0a080eda63808bbcb3671f59fe6043889a8673645945738e8a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page