R中arima预测的交叉验证
Cross-validation of arima forecast in R
我想确保我理解 R 的 fit
和 summary
函数。
以下是我如何将它们用于包含 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]
?
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
class(即 fit
对象的 class)没有方法,所以不会发生这种情况(即您没有将预测值与实际值进行比较)。您正在使用上述列表中的 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
它越接近零,您的模型就越好。
我想确保我理解 R 的 fit
和 summary
函数。
以下是我如何将它们用于包含 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]
?
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
class(即 fit
对象的 class)没有方法,所以不会发生这种情况(即您没有将预测值与实际值进行比较)。您正在使用上述列表中的 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
它越接近零,您的模型就越好。