1. 程式人生 > >時間序列中Hurst指數的計算(python程式碼)

時間序列中Hurst指數的計算(python程式碼)

在做時間序列分析時,需要計算Hurst指數,由於Hurst指數計算比較複雜,剛開始懶得自己寫,就在github上進行搜尋,多是這個程式碼:

from numpy import std, subtract, polyfit, sqrt, log

def hurst(ts):
    """Returns the Hurst Exponent of the time series vector ts"""

    # create the range of lag values
    i = len(ts) // 2
    lags = range(2, i)
    # Calculate the array of the variances of the lagged differences
tau = [sqrt(std(subtract(ts[lag:], ts[:-lag]))) for lag in lags] # use a linear fit to estimate the Hurst Exponent poly = polyfit(log(lags), log(tau), 1) # Return the Hurst Exponent from the polyfit output return poly[0] * 2.0



用該程式碼進行測試時,發現結果跟預期差別較大,理論上為長期趨勢時,hurst指數應該接近1,但是對構造好的測試集進行測試時發現hurst指數居然接近與0.5比較多,因此根據查到的Hurst指數構建理論(理論參考為:

http://www.360doc.com/content/16/0409/15/20041187_549224354.shtml)自己手寫了一個Hurst指數計算程式碼:


理論部分如下:


這裡寫圖片描述


程式碼部分如下:

# coding: utf-8

from __future__ import division
from collections import Iterable

import numpy as np 
from pandas import Series

def calcHurst2(ts):

    if not isinstance(ts, Iterable):
        print
'error' return n_min, n_max = 2, len(ts)//3 RSlist = [] for cut in range(n_min, n_max): children = len(ts) // cut children_list = [ts[i*children:(i+1)*children] for i in range(cut)] L = [] for a_children in children_list: Ma = np.mean(a_children) Xta = Series(map(lambda x: x-Ma, a_children)).cumsum() Ra = max(Xta) - min(Xta) Sa = np.std(a_children) rs = Ra / Sa L.append(rs) RS = np.mean(L) RSlist.append(RS) return np.polyfit(np.log(range(2+len(RSlist),2,-1)), np.log(RSlist), 1)[0]

使用該程式碼對隨機數進行計算Hurst指數時,比較趨近與0.5,即符合隨機,而排序後的資料進行計算則接近於1,即為長期趨勢,不過由於並沒有對資料進行全分類,而是分類的最小集合為每個子集中有3個元素,因此理論上會出現大於1的現象,不過超出部分比較小,且出現機率並不是很大,因此可以視為1。

相關推薦

時間序列Hurst指數計算python程式碼

在做時間序列分析時,需要計算Hurst指數,由於Hurst指數計算比較複雜,剛開始懶得自己寫,就在github上進行搜尋,多是這個程式碼: from numpy import std, subtrac

劍指offer-陣列的逆序對計算python實現

劍指offer-陣列中的逆序對計算(牛客網題目,python實現) 問題描述 在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸

FPGA的小數計算定點小數 與 verilog/VHDL有符號數計算

這篇blog有兩個關鍵點,如題,一是關於FPGA或者說HDL是如何執行定點小數運算的;二是verilog和VHDL有符號數運算的解釋和對比。 1. 小數計算(定點小數) 1.1 用二進位制表示小數 由於FPGA中存在的都是二進位制數,所以首先明確一個知識點:如何用二進位制表示

【超解析度】超解析度的imresize函式python, Matlab

背景: 超解析度挑戰賽Super Resolution Challenges (e.g. NTIRE) 降取樣(downscaling)- bicubic interpolation- 是利用Matlab的imresize()函式實現的。 Track info: Track 1:

機器學習的優化演算法程式碼

摘要 > 優化演算法指通過改善訓練方式,來最小化(或最大化)損失函式E(x) 區域性最優問題 區域性最優與鞍點。在神經網路中,最小化非凸誤差函式的另一個關鍵挑戰是避免陷於多個其他區域性最小值中。實際上,問題並非源於區域性極小值,而是來自鞍點,即一個維度向上傾斜且

SVM的一些學習心得及案例Python程式碼實現

1、基本概念 向量的內積即一個向量在另一個向量上的投影乘上被投影向量的模,上圖不管是a投影在b上,還是b投影在a上,其結果是一樣的,原理參照 B站上 a∙b = (a1e1 + a2e2)∙(b1e1 + b2e2)            = a1b1e1e1 

ElasticSearch通過Scroll方式遍歷索引Python程式碼

當我們要查詢的資料量過大的時候,用es的from+size的方式會報錯,會提示你from+size不能大於10000那麼可以用es的scroll方式,實際是一種深度分頁機制直接上程式碼:#-*- cod

Python處理非平穩時間序列程式碼

原文地址:https://blog.csdn.net/tmb8z9vdm66wh68vx1/article/details/84207895 由於排版和圖片原因,請儘量轉制原文觀看,在此只是作為個人的一個記錄。 作者:AISHWARYA SINGH 翻譯:陳之炎 校對:丁楠雅 本

Python時間序列LSTM預測系列教程10-多步預測

#coding=utf-8 from pandas import read_csv f

python的一些坑待補充

use fault none bsp lis ble list one table 函數默認參數使用可變對象 def use_mutable_default_param(idx=0, ids=[]): ids.append(idx) print(i

求數組兩兩相加等於20的組合Python實現

def n+1 odi lse java程序員 urn nlogn end 數組 題目 求數組中兩兩相加等於20的組合。 例:給定一個數組[1, 7, 17, 2, 6, 3, 14],這個數組中滿足條件的有兩對:17+3=20, 6+14=20。 解析 分為兩個步驟:

LeetCode題目--字串的第一個唯一字元python實現

題目 給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。 案例: s = "leetcode" 返回 0. s = "loveleetcode", 返回 2. 注意事項:您可以假定該字串只包含小寫字母。   p

LeetCode題目-- 刪除連結串列的節點python實現

題目 請編寫一個函式,使其可以刪除某個連結串列中給定的(非末尾)節點,你將只被給定要求被刪除的節點。 現有一個連結串列 -- head = [4,5,1,9],它可以表示為: 4 -> 5 -> 1 -> 9 示例 1

如何在python實現整數的二進位制迴圈移位程式碼

【時間】2018.11.03 【題目】如何在python中實現整數的二進位制迴圈移位(附程式碼) 概述 在python中,可以通過<<以及>>運算子實現二進位制的左移位以及右移位,然而並沒有實現迴圈移位的運算子,暫時也找不到可以實現迴圈移位的函式,所以在本文中,主

python使用opencv將RGB影象轉換為HSV及YCrCb影象程式碼

【時間】2018.11.01 【題目】在python中使用opencv將RGB影象轉換為HSV及YCrCb影象(附程式碼) 目錄 概述 一、程式碼實現 二、執行結果 三、關於HSV及YCrCb的一點補充 3.1HSV顏色空間 3.2 YCRCBA顏色空間

SVR,時間序列分析的評價指標,python資料標準化

知識點 SVR 參考 支援向量機(SVM)是一種分類演算法,但是也可以做迴歸,根據輸入的資料不同可做不同的模型(若輸入標籤為連續值則做迴歸,若輸入標籤為分類值則用SVC做分類) 對於SVM演算法,我們首先匯入sklearn.svm中的

在影象貼上具有透明度的素材Python語言

     我先放程式碼和結果,再分析過程。 1.實現程式碼 # coding=utf-8 import numpy as np import cv2 as cv def paste_ROI_to_image(image, ROI, paste_area):    

二進位制1的個數python

原始碼 題目描述 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 # -*- coding:utf-8 -*- ''' 如果一個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1 後面的

7-11 社交網路圖結點的“重要性”計算 30 分Dijkstra演算法

題意:  思路:對每個輸入的點跑一遍dijkstra演算法,然後對這個點到所有點的距離求和按公式輸出就可以了。 (這次嘗試了用陣列模擬連結串列來做最短路問題,重新整理了自己對最短路的理解) 這裡構造連結串列的過程我的理解一直有誤差,第一行的式子中參與程式碼構建的