首页 > 解决方案 > 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 可以用于单变量时间序列吗?

任何见解或指导将不胜感激。非常感谢你。

标签: pythonrtime-seriesstatsmodelsarima

解决方案


摘要:我不知道您如何创建显示为“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)

这给出了以下情节:

R 预测

当我运行以下 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 的版本看起来与问题中发布的图像完全不同。


推荐阅读