用R/S法计算的Hurst指数全部python代码,包括输入EXCEL一维数据的代码
时间: 2024-02-23 09:00:25 浏览: 193
以下是用R/S法计算Hurst指数的Python代码,包括读取Excel数据表的代码:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取Excel数据表
data = pd.read_excel('data.xlsx')
x = data['x'].values
def hurst(ts):
"""
计算Hurst指数
"""
lags = range(2, 100)
tau = [np.sqrt(np.std(np.subtract(ts[lag:], ts[:-lag]))) for lag in lags]
poly = np.polyfit(np.log(lags), np.log(tau), 1)
return poly[0]*2.0
def rs_analysis(data):
"""
R/S分析函数
"""
n = len(data)
# 计算均值
mean = np.mean(data)
# 计算离差序列
X = data - mean
# 计算累加序列
Y = np.cumsum(X)
# 计算极差序列
R = np.max(Y) - np.min(Y)
# 计算标准差
S = []
for i in range(1, n+1):
temp = np.sqrt(np.sum(np.square(X[:i]))/i)
S.append(temp)
# 计算R/S值
RS = R/S
return RS
# 计算R/S值
RS = rs_analysis(x)
# 绘制R/S图像
plt.plot(RS)
plt.title('R/S Analysis')
plt.xlabel('Time')
plt.ylabel('R/S')
plt.show()
# 计算Hurst指数
H = hurst(x)
print('Hurst指数为:{}'.format(H))
```
在这段代码中,首先使用`pandas`库中的`read_excel`函数读取Excel数据表,并将数据存储在`x`数组中。然后,定义了一个名为`hurst`的函数,用于计算Hurst指数。在`hurst`函数中,首先定义了一个名为`lags`的数组,其中包含从2到99的整数。然后,使用`numpy`库中的`subtract`函数计算时间序列`ts`的每个滞后时间点之间的差异,并使用`numpy`库中的`std`函数计算这些差异的标准差。接下来,将这些标准差存储在名为`tau`的数组中。最后,使用`numpy`库中的`polyfit`函数拟合一个直线,将时间序列的滞后时间作为自变量,将标准差的对数作为因变量,得到直线的斜率。最终,将斜率乘以2.0作为Hurst指数的估计值。
接下来,定义了一个名为`rs_analysis`的函数,用于R/S分析。在`rs_analysis`函数中,首先计算时间序列的均值。然后,计算离差序列,即每个数据点与均值的差异。接下来,计算累加序列,即将离差序列进行累加。然后,计算极差序列,即累加序列的最大值与最小值之差。接下来,计算标准差序列,即每个数据点之前的离差序列的标准差。最后,计算R/S值,即极差序列与标准差序列的比值。
然后,使用`rs_analysis`函数计算出时间序列的R/S值,并绘制R/S图像。最后,使用`hurst`函数计算出时间序列的Hurst指数,并将其打印出来。
阅读全文