Code Monkey home page Code Monkey logo

fbm's Introduction

fbm

travis codecov pypi pyversions

  • Exact methods for simulating fractional Brownian motion (fBm) or fractional Gaussian noise (fGn) in python.
  • Approximate simulation of multifractional Brownian motion (mBm) or multifractional Gaussian noise (mGn).

Installation

The fbm package is available on PyPI and can be installed via pip:

pip install fbm

fractional Brownian motion

Fractional Brownian motion can be generated via either Hosking's method, the Cholesky method, or the Davies-Harte method. All three methods are theoretically exact in generating a discretely sampled fBm/fGn.

Usage:

from fbm import FBM


f = FBM(n=1024, hurst=0.75, length=1, method='daviesharte')
# or
f = FBM(1024, 0.75)

# Generate a fBm realization
fbm_sample = f.fbm()

# Generate a fGn realization
fgn_sample = f.fgn()

# Get the times associated with the fBm
t_values = f.times()

where n is the number of equispaced increments desired for a fBm with Hurst parameter hurst on the interval [0, length]. Method can be either 'hosking', 'cholesky', or 'daviesharte'. The fbm() method returns a length n+1 array of discrete values for the fBm (includes 0). The fgn() method returns a length n array of fBm increments, or fGn. The times() method returns a length n+1 array of times corresponding to the fBm realizations.

The n and hurst parameters are required. The length parameter defaults to 1 and method defaults to 'daviesharte'.

For simulating multiple realizations use the FBM class provided as above. Some intermediate values are cached for repeated simulation.

For one-off samples of fBm or fGn there are separate functions available:

from fbm import fbm, fgn, times


# Generate a fBm realization
fbm_sample = fbm(n=1024, hurst=0.75, length=1, method='daviesharte')

# Generate a fGn realization
fgn_sample = fgn(n=1024, hurst=0.75, length=1, method='daviesharte')

# Get the times associated with the fBm
t_values = times(n=1024, length=1)

For fastest performance use the Davies and Harte method. Note that the Davies and Harte method can fail if the Hurst parameter hurst is close to 1 and there are a small amount of increments n. If this occurs, a warning is printed to the console and it will fallback to using Hosking's method to generate the realization. See page 412 of the following paper for a more detailed explanation:

  • Wood, Andrew TA, and Grace Chan. "Simulation of stationary Gaussian processes in [0, 1] d." Journal of computational and graphical statistics 3, no. 4 (1994): 409-432.

Hosking's method:

  • Hosking, Jonathan RM. "Modeling persistence in hydrological time series using fractional differencing." Water resources research 20, no. 12 (1984): 1898-1908.

Cholesky method:

  • Asmussen, Søren. Stochastic simulation with a view towards stochastic processes. University of Aarhus. Centre for Mathematical Physics and Stochastics (MaPhySto)[MPS], 1998.

Davies Harte method:

  • Davies, Robert B., and D. S. Harte. "Tests for Hurst effect." Biometrika 74, no. 1 (1987): 95-101.

multifractional Brownian motion

This package supports approximate generation of multifractional Brownian motion. The current method uses the Riemann–Liouville fractional integral representation of mBm.

Usage:

import math
from fbm import MBM


# Example Hurst function with respect to time.
def h(t):
    return 0.25 * math.sin(20*t) + 0.5

m = MBM(n=1024, hurst=h, length=1, method='riemannliouville')
# or
m = MBM(1024, h)

# Generate a mBm realization
mbm_sample = m.mbm()

# Generate a mGn realization
mgn_sample = m.mgn()

# Get the times associated with the mBm
t_values = m.times()

The hurst argument here should be a callable that accepts one argument and returns a float in (0, 1).

For one-off samples of mBm or mGn there are separate functions available:

from fbm import mbm, mgn, times


# Define a hurst function
def h(t):
    return 0.75 - 0.5 * t

# Generate a mbm realization
mbm_sample = mbm(n=1024, hurst=h, length=1, method='riemannliouville')

# Generate a fGn realization
mgn_sample = mgn(n=1024, hurst=h, length=1, method='riemannliouville')

# Get the times associated with the mBm
t_values = times(n=1024, length=1)

Riemann-Liouville representation method:

Approximate method originally proposed for fBm in

  • Rambaldi, Sandro, and Ombretta Pinazza. "An accurate fractional Brownian motion generator." Physica A: Statistical Mechanics and its Applications 208, no. 1 (1994): 21-30.

Adapted to approximate mBm in

  • Muniandy, S. V., and S. C. Lim. "Modeling of locally self-similar processes using multifractional Brownian motion of Riemann-Liouville type." Physical Review E 63, no. 4 (2001): 046104.

fbm's People

Contributors

crflynn avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.