Source code for tscfat.Analysis.fluctuation_intensity

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Oct  8 13:02:27 2020

@author: arsii

Calculate a fluctuation intensity F for given timeseries. F is sensitive to 
amplitude and frequency changes in time signal. For the reference:
Schiepek, Günter, and Guido Strunk. "The identification of critical 
fluctuations and phase transitions in short term and coarse-grained time 
series—a method for the real-time monitoring of human change processes." 
Biological cybernetics 102.3 (2010): 197-207.  

"""

import numpy as np

[docs]def fluctuation_intensity(y,scale,window): """ Calculate fluctuation intensity for the given time series. Parameters ---------- y : numpy array A Time series scale : int Flutuation scale: abs(max value - min value) window : int A window for calculation Returns ------- F : float Calculated fluctuation intensity. """ assert isinstance(y,np.ndarray), "Given time series is not a numpy array." assert isinstance(scale, int), "Given scale is not an integer." assert isinstance(window, int), "Given window length is not an integer." assert scale > 0, "Given scale is negative." assert (0 < window <= len(y)), "Improper window length." # scale s = scale # max fluctuations m = window - 1 y = np.diff(y) y = np.append(y,0) #print(y) # intialize variables l = 1 diff = 0 diff_arr= [] for i in range(window-1): #print("i: ",i) if np.sign(y[i]) == np.sign(y[i+1]): # continues growing / decreasing #print("continue") # add difference and length diff += y[i] l += 1 else: # change of sign #print("stop") # add difference and append value diff += y[i] diff_arr.append(abs(diff/l)) # reset variables diff = 0 l = 1 # Calculate fluctuation intensity F = sum(diff_arr) / (s*m) return F