R中的arima预测的交叉验证

时间:2017-10-28 15:04:08

标签: r time-series forecasting

我想确保理解R fitsummary函数。

以下是我如何将它们用于包含100个数据点的时间序列,这些数据点分为火车和测试样本:

x = ts(MyData)
train = x[1:80,1]
test = x[81:length(x), 1]
fit = arima(train, order=c(1,1,0))
summary(fit, test)

我是否认为summary会将时间步长81到100的拟合模型与实际值x[81], x[82], ..., x[100]进行比较?

1 个答案:

答案 0 :(得分:1)

methods(summary)显示以下列表:

> methods(summary)
 [1] summary.aov                    summary.aovlist*            summary.aspell*
 [4] summary.check_packages_in_dir* summary.connection          summary.data.frame     
 [7] summary.Date                   summary.default             summary.ecdf*
[10] summary.factor                 summary.glm                 summary.infl*
[13] summary.lm                     summary.loess*              summary.manova
[16] summary.matrix                 summary.mlm*                summary.nls*       
[19] summary.packageStatus*         summary.PDF_Dictionary*     summary.PDF_Stream*
[22] summary.POSIXct                summary.POSIXlt             summary.ppr*          
[25] summary.prcomp*                summary.princomp*           summary.proc_time  
[28] summary.shingle*               summary.srcfile             summary.srcref      
[31] summary.stepfun                summary.stl*                summary.table 
[34] summary.trellis*               summary.tukeysmooth*        summary.yearmon*   
[37] summary.yearqtr*               summary.zoo*

正如您所看到的,Arima类没有方法(这是fit对象的类),所以这不是发生的事情(即您没有将预测与您的预测进行比较)实际值)。您正在使用上面列表中的summary.default

您也可以从以下内容中看到:

a <- arima(USAccDeaths, order = c(1,1,0))
identical(summary(a), summary(a, USAccDeaths[1:100]))
#[1] TRUE

summary(a)summary(a, USAccDeaths[1:100])之间没有区别。

使用RMSE进行比较:

library(forecast)
fit <- arima(USAccDeaths[1:50], order = c(1,1,0))
preds <- as.vector(forecast(fit, h = 10)$mean)
RMSE <- sqrt(mean((preds - as.vector(USAccDeaths[51:60])) ^ 2))
RMSE
#[1] 2056.483

越接近零,模型越好。