R/S法计算的Hurst指数全部Python代码,包括读取多维数据EXCEL文件的代码及全部步骤的代码,要求不需要太好的显卡就能跑,不费时间
时间: 2024-03-06 18:46:23 浏览: 66
以下是用Python实现R/S法计算多维数据的Hurst指数的全部代码,包括读取Excel文件、计算R/S值、拟合Hurst指数等全部步骤。
首先,安装必要的库:
```python
!pip install pandas numpy scipy matplotlib
```
然后,读取Excel文件并计算R/S值:
```python
import pandas as pd
import numpy as np
def calc_rs(data):
rs = []
for m in range(1, len(data)):
cumsum = np.cumsum(data - data.mean(axis=0), axis=0)
r = np.max(cumsum[m:], axis=0) - np.min(cumsum[m-1:], axis=0)
s = np.std(data, axis=0) * np.sqrt(m)
rs.append(r / s)
return rs
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
rs = calc_rs(df.iloc[:, 1:].values)
```
最后,拟合Hurst指数并输出结果:
```python
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
def hurst_func(m, h, c):
return c * m ** h
hursts = []
for i in range(rs.shape[1]):
popt, pcov = curve_fit(hurst_func, np.arange(1, len(rs)+1), rs[:, i])
hurst = popt[0]
hursts.append(hurst)
print('Hurst exponent of dimension {}:'.format(i+1), hurst)
plt.plot(np.arange(1, len(rs)+1), rs, 'o', label='R/S')
for hurst in hursts:
plt.plot(np.arange(1, len(rs)+1), hurst_func(np.arange(1, len(rs)+1), hurst, 1), label='Dimension {}'.format(i+1))
plt.legend()
plt.show()
```
上述代码可用于计算多维数据的Hurst指数,其中`data.xlsx`为包含多维数据的Excel文件,每个维度对应一列数据,第一列为时间戳。如果需要对其他格式的数据进行计算,可以修改读取数据的部分。如有需要,还可以对代码进行优化以提高性能。
阅读全文