以下是我在python中实现自回归模型的代码:
import matplotlib.pyplot as plt
import pandas as pd
import yfinance as yfs
import seaborn as sns
from statsmodels.tsa.api import acf,graphics,pacf
from statsmodels.tsa.ar_model import AutoReg,ar_select_order
data =yfs.download(tickers="AAPL",progress=False,start='2021-01-01',end='2023-01-01')
data.drop(["High","Volume","Low","Close","Adj Close"],axis=1,inplace=True)
data =data.asfreq('d')
data.dropna(axis=0,inplace=True)
data.reset_index(inplace=True)
print(data.head())
# data['percentage_change'] =data['Open'].pct_change()
# print(data.head())
# # data.plot()
# # plt.show()
# data['Open_Difference'] =data['Open'].diff()
# print(data.head())
# data.plot()
# plt.show()
model=AutoReg(data['Open'].ravel(),lags=3,old_names=False)
model =model.fit()
data['prediction'] =model.predict(start=len(data),end=len(data)+10)
# print(model.summary())
# data.plot()
# plt.show()
print(data.head())
我正在从雅虎下载苹果的数据,想要实现自回归模型(三阶),并进行预测,下面是表:
Date Open
0 2021-01-04 133.520004
1 2021-01-05 128.889999
2 2021-01-06 127.720001
3 2021-01-07 128.360001
4 2021-01-08 132.429993
但代码显示错误:
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\Data_Science\Autoregressive_model.py", line 23, in <module>
data['prediction'] =model.predict(start=len(data),end=len(data)+10)
File "C:\Users\User\PycharmProjects\Data_Science\venv\lib\site-packages\pandas\core\frame.py", line 3980, in __setitem__
self._set_item(key, value)
File "C:\Users\User\PycharmProjects\Data_Science\venv\lib\site-packages\pandas\core\frame.py", line 4174, in _set_item
value = self._sanitize_column(value)
File "C:\Users\User\PycharmProjects\Data_Science\venv\lib\site-packages\pandas\core\frame.py", line 4915, in _sanitize_column
com.require_length_match(value, self.index)
File "C:\Users\User\PycharmProjects\Data_Science\venv\lib\site-packages\pandas\core\common.py", line 571, in require_length_match
raise ValueError(
ValueError: Length of values (11) does not match length of index (503)
Process finished with exit code 1
如何修复它,以便以图形方式显示原始和预测的时间序列?提前感谢