-
Notifications
You must be signed in to change notification settings - Fork 0
/
RAD.py
46 lines (35 loc) · 1.1 KB
/
RAD.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import numpy as np
def RAD(x, centre=False, tau=1):
"""
Harris, Gollo, & Fulcher's rescaled auto-density (RAD) noise-insensitive
metric for inferring the distance to criticality.
Parameters
----------
x: array
A time-series input vector
centre : boolean
Whether to centre the time series and take absolute values
tau: integer
The embedding and differencing delay in units of the timestep
Returns
-------
The RAD feature value.
"""
# ensure that x is in the form of a numpy array
x = np.array(x)
# if specified: centre the time series and take the absolute value
if centre:
x = x - np.median(x)
x = np.abs(x)
# Delay embed at interval tau
y = x[tau:]
x = x[:-tau]
# Median split
subMedians = x < np.median(x)
superMedianSD = np.std(x[~subMedians], ddof=1)
subMedianSD = np.std(x[subMedians], ddof=1)
# Properties of the auto-density
sigma_dx = np.std(y - x)
densityDifference = (1/superMedianSD) - (1/subMedianSD)
# return RAD
return sigma_dx * densityDifference