假设我有多个时间序列需要进行预测。如果我对每个序列都有相应的时间序列对象,我可以拟合(为了举例)ARIMA模型等等。但是,当所有系列都在一个xts对象中时,我知道必须有一种简单的自动化此过程的方法(暂且不考虑不同的变量可能需要不同的ARIMA模型;那可能是另一个时间的问题)。
以下是一些示例数据,作为一个xts对象(六家不同企业的日收入):
我可以从这个对象中提取一个时间序列...
并进行预测。
以下是一些示例数据,作为一个xts对象(六家不同企业的日收入):
library(xts)
ts <- structure(c(534L, 549L, 636L, 974L, 848L, 895L, 1100L, 1278L,
1291L, 1703L, 1532L, 533L, 619L, 642L, 939L, 703L, 759L, 1213L,
1195L, 1153L, 1597L, 1585L, 649L, 597L, 628L, 924L, 703L, 863L,
1261L, 1161L, 1212L, 1616L, 1643L, 583L, 694L, 611L, 891L, 730L,
795L, 1242L, 1210L, 1159L, 1501L, 1702L, 513L, 532L, 580L, 917L,
978L, 947L, 1227L, 1253L, 1121L, 1697L, 1569L, 646L, 636L, 516L,
869L, 980L, 937L, 1173L, 1203L, 1204L, 1511L, 1640L), .Dim = c(11L,
6L), .Dimnames = list(NULL, c("Americas_Globe", "Americas_Lucky",
"Americas_Star", "Asia_Star", "EuroPac_Globe", "EuroPac_Lucky"
)), index = structure(c(1367384400, 1367470800, 1367557200, 1367643600,
1367730000, 1367816400, 1367902800, 1367989200, 1368075600, 1368162000,
1368248400), tzone = "", tclass = c("POSIXlt", "POSIXt")), .indexCLASS = c("POSIXlt",
"POSIXt"), tclass = c("POSIXlt", "POSIXt"), .indexTZ = "", tzone = "", class = c("xts",
"zoo"))
我可以从这个对象中提取一个时间序列...
ts.amerglob <- ts[,1] #Extract the "Americas_Global company time-series
并对其进行建模,例如可以使用ARIMA模型拟合:
ts.ag.arima <- arima(ts.amerglob, order=c(0,1,1))
并进行预测。
ts.ag.forecasts <- forecast.Arima(ts.ag.arima, h=5)
如果我想对这个ts对象中的6家公司都进行此操作怎么办?
在拟合标准回归模型时,我使用了by()来对数据的子集进行类似的操作。但是,在这里应用该方法似乎行不通:
co.arima <- by(ts, ts[,1:6],
function(x) arima(x, order=c(1,0,1)))
返回有关序列长度的错误:
error in tapply(seq_len(11L), list(INDICES = c(534L, 549L, 636L, 974L, :
arguments must have same length
有没有一种简单的方法可以同时应用时间序列模型到多个时间序列中,并提取相关信息?最终,我想要做的是将每一个时间序列的预测结果放入一个数据框或者矩阵中(但是如果能够对模型过程中的中间步骤,例如每个时间序列的auto.arima()输出,进行同样的操作就更好了)...
lapply(res, forecast.Arima, h=5)
或者更加明确的lapply(res, function(model) forecast.Arima(model, h=5))
。 - agstudy