时间序列数据平稳性检验及ARIMA模型拟合

在使用ARIMA模型拟合时间序列数据时,如果数据的时间索引不被支持,会导致警告信息。为了避免这个问题,需要将时间索引重新设置为整数索引。

代码示例

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.arima.model import ARIMA

# 读取数据
data = pd.read_excel('D:\M_hua\text.xlsx', index_col=0, header=None, skiprows=[0])
data = data.astype(float)

# 平稳性检验
def check_stationarity(series):
    result = adfuller(series)
    print('ADF检验结果:')
    print('ADF Statistic:', result[0])
    print('p-value:', result[1])
    print('Critical Values:')
    for key, value in result[4].items():
        print(f'{key}: {value}')

# 查看原始数据的平稳性
print('原始数据的平稳性检验结果:')
check_stationarity(data.iloc[:, 0])

# 进行差分处理,直至平稳
diff_count = 0
while not adfuller(data.iloc[:, 0])[1] < 0.05:
    data = data.diff().dropna()
    diff_count += 1

# 重新设置时间索引为整数索引
data.reset_index(drop=True, inplace=True)

# 查看差分后数据的平稳性
print(f'经过{diff_count}阶差分后数据的平稳性检验结果:')
check_stationarity(data.iloc[:, 0])

# 构建ARIMA模型,并拟合数据
model = ARIMA(data, order=(1, 0, 1))
result = model.fit()

# 输出模型系数
print('模型系数:')
print(result.summary().tables[1])

# 获取差分序列拟合值
fitted_values = result.fittedvalues

# 可视化拟合结果
plt.plot(np.arange(len(data)), data.values, label='差分后数据')
plt.plot(np.arange(len(data)), fitted_values.values, color='red', label='拟合结果')
plt.legend()
plt.xlabel('时间')
plt.ylabel('数据')
plt.title('ARIMA模型拟合结果')
plt.show()

代码说明

  1. 导入必要的库,包括pandas、numpy、matplotlib、statsmodels等。
  2. 读取数据,使用pandas的read_excel()函数读取Excel文件,并将其设置为浮点数类型。
  3. 定义平稳性检验函数check_stationarity(),使用statsmodels.tsa.stattools.adfuller()函数进行ADF检验,并输出检验结果。
  4. 查看原始数据的平稳性,调用check_stationarity()函数进行检验。
  5. 进行差分处理,使用while循环,不断对数据进行差分,直到ADF检验的p-value小于0.05。
  6. 重新设置时间索引为整数索引,使用reset_index()函数将时间索引重置为整数索引。
  7. 查看差分后数据的平稳性,再次调用check_stationarity()函数进行检验。
  8. 构建ARIMA模型,使用statsmodels.tsa.arima.model.ARIMA()函数构建ARIMA模型,并使用fit()函数拟合数据。
  9. 输出模型系数,使用result.summary().tables[1]获取模型系数。
  10. 获取差分序列拟合值,使用result.fittedvalues获取拟合值。
  11. 可视化拟合结果,使用matplotlib.pyplot绘制拟合结果图。

运行结果

运行修改后的代码,可以得到平稳性检验结果、差分处理后的数据、ARIMA模型拟合结果以及可视化结果。

注意事项

  1. 请将代码中的文件路径替换为您的实际路径。
  2. ARIMA模型的阶数需要根据数据的特点进行调整。
  3. 平稳性检验的p-value阈值可以根据具体情况进行调整。

希望本文能够帮助您理解如何使用Python进行时间序列数据的平稳性检验、差分处理、ARIMA模型拟合和可视化结果,并避免时间索引不支持导致的警告问题。如果您还有其他问题,请随时提问。

时间序列数据平稳性检验及ARIMA模型拟合

原文地址: http://www.cveoy.top/t/topic/bJ4d 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录