Skip to content
All library documents

Interpreting Negative Hurst Estimates from Lag Scaling

Article Quant Q&A · Author: Lori Li

Summary

The post investigates negative Hurst estimates obtained by fitting a slope to a log-log plot of lag against the square root of the standard deviation of differenced observations. The author reports a negative estimate when using a longer lag range on a series of 1,643 observations, and notes that the plotted relationship does not look linear. The question is whether the code or the choice of lag range explains the result.

The reply says that approximation effects can produce negative calculated values even though the exponent is expected to be bounded below by zero by design, and points to a Python package for Hurst estimation. The evidence here is limited: no detailed diagnosis of the estimator, lag selection, data properties, or code is provided. A poor linear fit across selected lags is a relevant warning that the estimated slope may not describe a stable scaling relationship. The short exchange therefore flags interpretation and implementation concerns, but does not establish a robust method or explain how to distinguish genuine behavior from estimation artifacts.

Key ideas

  • The example estimates the Hurst exponent by fitting a slope to a log-log lag relationship.
  • A negative fitted estimate is reported for a long lag range, where the plotted relationship is not linear.
  • The reply attributes negative values to approximation effects and describes zero as the lower design bound.
  • The exchange offers little diagnostic detail, so the estimator and lag choice remain unresolved.

Tags

Full text
# Negative Hurst exponent


# Negative Hurst exponent












I am trying to test Hurst exponent in different time lag range. However, i got negative values in some time lag range which is weird, because the Hurst exponent should have values within the range from 0 to 1.

This is the Python code to calculate the Hurst exponent:

```
*calculate Hurst*
lag1 = 2
lags = range(lag1, 20)

tau = [sqrt(std(subtract(ts[lag:], ts[:-lag]))) for lag in lags]

plot(log(lags), log(tau)); show()
m = polyfit(log(lags), log(tau), 1)

hurst = m[0]*2

print 'hurst = ',hurst
```

When `lags = range(200,300)`, the Hurst exponent is -0.035. My data length is 1643. The log-log plot looks like this, which is not linear:

Is there something wrong with the code or anyone know any good package to test hurst exponent in R or python?

## Answer by shiva (score 1)

https://quant.stackexchange.com/a/69753

Hurst exponent could be negative due to some data approximations. By design, it should stop at 0. In python, you coul look at `hurst` repository.

[Reference] https://towardsdatascience.com/introduction-to-the-hurst-exponent-with-code-in-python-4da0414ca52e

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.