我想确定时间序列是否是均值回复,但在计算赫斯特指数时遇到了一些问题。它应该打印0.5-ish,但是我得到了一个“nan”。我们将不胜感激
我收到以下错误/警告:
RuntimeWarning: divide by zero encountered in log
poly = polyfit(log(lags), log(tau), 1)
下面是我正在编写的代码
import statsmodels.tsa.stattools as ts
from datetime import datetime
from pandas_datareader import DataReader
security = DataReader("GOOG", "yahoo", datetime(2000,1,1), datetime(2013,1,1))
ts.adfuller(security['Adj Close'], 1)
from numpy import cumsum, log, polyfit, sqrt, std, subtract
from numpy.random import randn
def hurst(ts):
"""Returns the Hurst Exponent of the time series vector ts"""
lags = range(2, 100)
tau = [sqrt(std(subtract(ts[lag:], ts[:-lag]))) for lag in lags]
poly = polyfit(log(lags), log(tau), 1)
return poly[0]*2.0
gbm = log(cumsum(randn(100000))+1000)
mr = log(randn(100000)+1000)
tr = log(cumsum(randn(100000)+1)+1000)
print ("Hurst(GBM): %s" % hurst(gbm))
print ("Hurst(MR): %s" % hurst(mr))
print ("Hurst(TR): %s" % hurst(tr))
print ("Hurst(SECURITY): %s" % hurst(security['Adj Close']))
print ("Hurst(GBM): %s" % hurst(gbm))
print ("Hurst(MR): %s" % hurst(mr))
print ("Hurst(TR): %s" % hurst(tr))
print ("Hurst(SECURITY): %s" % hurst(security['Adj Close']))
Hurst(GBM): 0.5039604262314196
Hurst(MR): -2.3832407841923795e-05
Hurst(TR): 0.962521148986032
Hurst(SECURITY): nan
__main__:11: RuntimeWarning: divide by zero encountered in log
我在发送序列时遇到了与ts参数相同的问题。 您只需发送一个列表,而不是一个系列或:
NaN值也可能是一个问题,我会先检查dropna()是否可以,然后再查看_list()
根本原因是
Series[<slice>]
语法为每个片返回相应的索引,-
运算符处理每个索引相等(而不是实际位置)例如:
显然,这不是我们所期望的。看看为什么我们可以使用concat分别创建
s[2:], s[:-2]
的逐行数据帧给定此输入,hurst函数中的
tau =
方程的结果是(大部分)nan值的列表本机使用Series的解决方案是使用
Series.shift()
而不是数组切片:或者,将
Series.values
传递给原始函数,该函数传递numpy数组相关问题 更多 >
编程相关推荐