我的问题的完整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'和'newxreg'的列数不同
我已经对部分数据使用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
所以,我的主要问题是,如何给定我的数据,如何指定一个精确的模型并使用多个回归变量进行预测(请参见上面的粘贴框链接)?
答案 0 :(得分:1)
您有两个问题。其中之一是R中的各种预测功能使您(故意?)感到困难。
第一个问题是您需要定义预测期内回归变量的值。使用x
从window()
中提取相关数据:
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
的{{1}}参数控制。
答案 1 :(得分:1)
forecast()
函数来自预测程序包,并与该程序包中的模型函数一起使用。这就是为什么可以使用auto.arima()
从forecast(model_par2,xreg=x_fcst)
生成预测的原因。
arima()
函数来自stats包,因此不能保证它可以与forecast()
一起使用。要指定自己的ARIMA模型,可以使用Arima()
函数,该函数的行为与arima()
非常相似,但是您可以使用forecast(model_par2,xreg=x_fcst)
从中产生预测。