时间序列数据平稳性检验及ARIMA模型拟合
时间序列数据平稳性检验及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()
代码说明
- 导入必要的库,包括pandas、numpy、matplotlib、statsmodels等。
- 读取数据,使用pandas的read_excel()函数读取Excel文件,并将其设置为浮点数类型。
- 定义平稳性检验函数check_stationarity(),使用statsmodels.tsa.stattools.adfuller()函数进行ADF检验,并输出检验结果。
- 查看原始数据的平稳性,调用check_stationarity()函数进行检验。
- 进行差分处理,使用while循环,不断对数据进行差分,直到ADF检验的p-value小于0.05。
- 重新设置时间索引为整数索引,使用reset_index()函数将时间索引重置为整数索引。
- 查看差分后数据的平稳性,再次调用check_stationarity()函数进行检验。
- 构建ARIMA模型,使用statsmodels.tsa.arima.model.ARIMA()函数构建ARIMA模型,并使用fit()函数拟合数据。
- 输出模型系数,使用result.summary().tables[1]获取模型系数。
- 获取差分序列拟合值,使用result.fittedvalues获取拟合值。
- 可视化拟合结果,使用matplotlib.pyplot绘制拟合结果图。
运行结果
运行修改后的代码,可以得到平稳性检验结果、差分处理后的数据、ARIMA模型拟合结果以及可视化结果。
注意事项
- 请将代码中的文件路径替换为您的实际路径。
- ARIMA模型的阶数需要根据数据的特点进行调整。
- 平稳性检验的p-value阈值可以根据具体情况进行调整。
希望本文能够帮助您理解如何使用Python进行时间序列数据的平稳性检验、差分处理、ARIMA模型拟合和可视化结果,并避免时间索引不支持导致的警告问题。如果您还有其他问题,请随时提问。
原文地址: http://www.cveoy.top/t/topic/bJ4d 著作权归作者所有。请勿转载和采集!