您如何预测具有多个回归变量的 ARIMA?
How do you forecast ARIMA with multiple regressors?
我的问题的完整 R 数据和代码在这里:https://pastebin.com/QtG6A7ZX。
我是R的新手,在时间序列分析方面还是初学者,请见谅。
我正在尝试使用 2 个虚拟编码的回归变量对一些注册数据进行建模和预测。我已经使用auto.arima
拟合模型:
model <- auto.arima(enroll, xreg=x)
在使用此模型进行预测之前,我试图通过仅选择时间序列的一部分(1:102 而不是 1:112)以及同样的部分回归变量列表来测试其准确性。
基于auto.arima
,我拟合的部分模型如下:
model_par <-arima((enroll_partial), c(1, 1, 1),seasonal = list(order = c(1, 0, 0), period = 5), xreg=x_par)
我尝试了三种不同的预测方法并得到了基本相同的错误:
fcast_par <- forecast(model_par, h=10) #error
fcast_par <- forecast(model_par, h=10, xreg=x_par) #error
fcast_par <- forecast(model_par, h=10, xreg=forecast(x_par,h=10)) #error
'xreg' and 'newxreg' have different numbers of columns
我已经使用 auto.arima
对部分数据进行了测试。这行得通,但给了我一个不同的模型,虽然我指定了 10 个预测,但我得到了超过 50 个:
model_par2 <- auto.arima(enroll_partial, xreg=x_par)
fcast_par <- forecast(model_par2, h=12, xreg=x_par)
fcast_par
所以,我的主要问题是,如何指定一个精确的模型并根据我的数据使用 1 个以上的回归变量进行预测(参见上面的 Paste Bin link)?
你有两个问题。其中之一是 R 中的各种预测函数(故意?)让您感到困难。
第一个问题是您需要为预测期定义回归变量的值。使用 window()
:
从 x
中提取相关数据
x_fcst <- window(x,start=c(2017,4))
第二个问题是 forecast()
(派遣到 forecast.Arima()
)在这里是一个转移注意力的问题。您需要使用 predict()
(发送到 predict.Arima()
- 请注意两种情况下的大写!):
predict(model_par,newxreg=x_fcst,h=nrow(x_fcst))
产生
$pred
Time Series:
Start = c(2017, 3)
End = c(2019, 1)
Frequency = 5
[1] 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451
[9] 52.00451
$se
Time Series:
Start = c(2017, 3)
End = c(2017, 3)
Frequency = 5
[1] 17.13345
您也可以使用 auto.arima()
。令人困惑的是,这次 forecast()
(仍会发送到 forecast.Arima()
) 有效:
model_par2 <- auto.arima(enroll_partial, xreg=x_par)
forecast(model_par2,xreg=x_fcst)
产生
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
2017.40 39.91035 17.612358 62.20834 5.808514 74.01219
2017.60 59.51003 32.783451 86.23661 18.635254 100.38481
2017.80 69.81000 39.290834 100.32917 23.134962 116.48505
2018.00 57.49140 23.601444 91.38136 5.661183 109.32162
2018.20 55.45759 18.503034 92.41214 -1.059524 111.97470
2018.40 34.57866 -7.306747 76.46406 -29.479541 98.63686
2018.60 52.30199 6.702068 97.90192 -17.437074 122.04106
2018.80 61.61591 12.582055 110.64977 -13.374900 136.60672
2019.00 50.47661 -1.765945 102.71917 -29.421485 130.37471
是的,您得到的预测数量是原来的五倍。第一列是预期预测,其他列给出预测区间。这些由 level
参数控制 forecast()
.
forecast()
函数来自 forecast 包,并与来自该包的模型函数一起使用。这就是为什么可以使用 forecast(model_par2,xreg=x_fcst)
.
从 auto.arima()
生成预测的原因
arima()
函数来自 stats 包,因此不能保证它可以与 forecast()
一起使用。要指定您自己的 ARIMA 模型,您可以使用 Arima()
函数,它的行为与 arima()
非常相似,但您将能够使用 forecast(model_par2,xreg=x_fcst)
.[=18= 从中生成预测]
我的问题的完整 R 数据和代码在这里:https://pastebin.com/QtG6A7ZX。
我是R的新手,在时间序列分析方面还是初学者,请见谅。
我正在尝试使用 2 个虚拟编码的回归变量对一些注册数据进行建模和预测。我已经使用auto.arima
拟合模型:
model <- auto.arima(enroll, xreg=x)
在使用此模型进行预测之前,我试图通过仅选择时间序列的一部分(1:102 而不是 1:112)以及同样的部分回归变量列表来测试其准确性。
基于auto.arima
,我拟合的部分模型如下:
model_par <-arima((enroll_partial), c(1, 1, 1),seasonal = list(order = c(1, 0, 0), period = 5), xreg=x_par)
我尝试了三种不同的预测方法并得到了基本相同的错误:
fcast_par <- forecast(model_par, h=10) #error
fcast_par <- forecast(model_par, h=10, xreg=x_par) #error
fcast_par <- forecast(model_par, h=10, xreg=forecast(x_par,h=10)) #error
'xreg' and 'newxreg' have different numbers of columns
我已经使用 auto.arima
对部分数据进行了测试。这行得通,但给了我一个不同的模型,虽然我指定了 10 个预测,但我得到了超过 50 个:
model_par2 <- auto.arima(enroll_partial, xreg=x_par)
fcast_par <- forecast(model_par2, h=12, xreg=x_par)
fcast_par
所以,我的主要问题是,如何指定一个精确的模型并根据我的数据使用 1 个以上的回归变量进行预测(参见上面的 Paste Bin link)?
你有两个问题。其中之一是 R 中的各种预测函数(故意?)让您感到困难。
第一个问题是您需要为预测期定义回归变量的值。使用 window()
:
x
中提取相关数据
x_fcst <- window(x,start=c(2017,4))
第二个问题是 forecast()
(派遣到 forecast.Arima()
)在这里是一个转移注意力的问题。您需要使用 predict()
(发送到 predict.Arima()
- 请注意两种情况下的大写!):
predict(model_par,newxreg=x_fcst,h=nrow(x_fcst))
产生
$pred
Time Series:
Start = c(2017, 3)
End = c(2019, 1)
Frequency = 5
[1] 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451 52.00451
[9] 52.00451
$se
Time Series:
Start = c(2017, 3)
End = c(2017, 3)
Frequency = 5
[1] 17.13345
您也可以使用 auto.arima()
。令人困惑的是,这次 forecast()
(仍会发送到 forecast.Arima()
) 有效:
model_par2 <- auto.arima(enroll_partial, xreg=x_par)
forecast(model_par2,xreg=x_fcst)
产生
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
2017.40 39.91035 17.612358 62.20834 5.808514 74.01219
2017.60 59.51003 32.783451 86.23661 18.635254 100.38481
2017.80 69.81000 39.290834 100.32917 23.134962 116.48505
2018.00 57.49140 23.601444 91.38136 5.661183 109.32162
2018.20 55.45759 18.503034 92.41214 -1.059524 111.97470
2018.40 34.57866 -7.306747 76.46406 -29.479541 98.63686
2018.60 52.30199 6.702068 97.90192 -17.437074 122.04106
2018.80 61.61591 12.582055 110.64977 -13.374900 136.60672
2019.00 50.47661 -1.765945 102.71917 -29.421485 130.37471
是的,您得到的预测数量是原来的五倍。第一列是预期预测,其他列给出预测区间。这些由 level
参数控制 forecast()
.
forecast()
函数来自 forecast 包,并与来自该包的模型函数一起使用。这就是为什么可以使用 forecast(model_par2,xreg=x_fcst)
.
auto.arima()
生成预测的原因
arima()
函数来自 stats 包,因此不能保证它可以与 forecast()
一起使用。要指定您自己的 ARIMA 模型,您可以使用 Arima()
函数,它的行为与 arima()
非常相似,但您将能够使用 forecast(model_par2,xreg=x_fcst)
.[=18= 从中生成预测]