python - Python中等效R的arima函数
问题描述
我使用 statsmodel 的 arima 函数尝试使用 Python 进行时间序列预测,它给了我与 r 的 arima 函数不同的结果。我使用了相同的超参数。
R的版本:
fit <- arima(data[1:9000,3], order = c(3,0,3), seasonal = list(order = c(0,0,0)))
predd = forecast(fit,h=1000)
pred = cbind(data[9001:10000,3], predd$mean)
Python的版本:
series = df[0:9000].copy()
model = ARIMA(series, order=(3, 0, 3))
model_fitted = model.fit()
predictions = model_fitted.predict(start=len(series), end=len(df)-1)
附件是R 和 Python 的 arima的绘图结果图
我究竟做错了什么?
除了 statsmodel 之外,还有其他 Python 包/函数 arima 可以用于单变量时间序列吗?
任何见解或指导将不胜感激。非常感谢你。
解决方案
摘要:我不知道您如何创建显示为“R 版本”的第一张图像,但是当我运行您提供的 R 代码并绘制结果时,它们看起来与我的 Python 结果相同,并且看起来不像“您包含的 R 版本”图表。我最好的猜测是,当您创建显示 R 结果的图像时,您以某种方式绘制了样本内预测。
详情见下文。
详情:
我首先从您提供的链接下载数据集“dataset.txt”,https://gist.github.com/DouddaS/5043a340ff7d7b35b255b4f8f74fc534
现在,如果我运行以下 R 代码:
library(forecast)
y <- read.csv('dataset.txt')
fit <- arima(y[1:9000, 1], order = c(3,0,3), seasonal = list(order = c(0,0,0)))
predd = forecast(fit,h=1000)
pred = cbind(y[9001:10000,1], predd$mean)
autoplot(pred)
这给出了以下情节:
当我运行以下 Python 代码时:
y = pd.read_csv('dataset.txt')
model = sm.tsa.arima.ARIMA(y.iloc[:9000, 0], order=(3, 0, 3))
model_fitted = model.fit()
pred = model_fitted.predict(start=len(series), end=len(y)-1)
predd = pd.concat([y.iloc[9000:, 0], pred], axis=1)
predd.plot()
然后我得到以下情节:
这些看起来与我基本相同,而 R 的版本看起来与问题中发布的图像完全不同。
推荐阅读
- python - 如何使用 tensorflow 实现类似于 Conv2D 的这一层?
- git - git rebase 丢失了我的更改。我有详细的历史。知道出了什么问题吗?
- typewriter - 如何生成包含父类和所有子类的单个文件?
- spring-boot - Spring Webclient 连接未正确关闭
- r - 如何从 R 中的绘图中删除元素?
- excel - 如何从单元格中间取出某些字符并将它们放在最后
- typescript - Typescript 正在转换 tsconfig 文件夹“上方”的文件
- curl - 使用 curl (Postman) 的 Bitbucket API 身份验证
- javascript - 标签值更改时转发(onchange)
- ios - 以编程方式创建的约束有问题