【发布时间】:2013-12-18 23:57:25
【问题描述】:
将this thread 中的内容再进一步:我已经尽力了,但最终还是碰壁了。我希望使用 PLYR 来创建一些具有大规模外生回归量的 ARIMA 模型。我一直在使用的过程的高级概述(带有示例数据的代码如下)
1) 我有一个数据框,其中包含业务、地区、收入和订单,全部按日期进行
2) 对于业务 + 地区的每种组合,我想根据以前的收入值 + 以前的订单值创建收入预测。
3) 我想使用 ARIMA 模型(使用 auto.arima() )来计算收入和订单的最佳订单,然后将该信息应用于 预测 em> 函数
4) 我遇到的问题似乎归结为无法将多个列表传递给 PLYR 参数以进行操作,这很可能反过来归结为我没有完全了解如何llply 有效(希望这是一项简单的任务)
这是我正在处理的一些示例数据:
library(plyr)
library(xts)
library(forecast)
data <- data.frame(
biz = sample(c("telco","shipping","tech"), 100, replace = TRUE),
region = sample(c("mideast","americas","asia"), 100, replace = TRUE),
date = rep(seq(as.Date("2010-02-01"), length=10, by = "1 day"),10),
revenue = sample(1:100),
orders = sample(1:100)
)
编辑:首先通过ddply重新组织数据,去掉重复的条目:
dataframe <- ddply(data, c("biz","region","date"), function(df) {
c(revenue = sum(df[,4]),
orders = sum(df[,5]))
})
第 1 步:创建一个列表,其中包含每个业务 + 区域组合的时间序列信息:
list1 <- dlply(dataframe, .(biz,region), identity)
第 2 步:将该列表转换为 XTS 对象,以便我们可以将其用于时间序列分析:
xtsobject <- llply(list1, function(list) {
xts(x=list[,c("revenue","orders")], order.by=list[,"date"])
})
这就是我遇到麻烦的地方。我想从 auto.arima() 函数中列出订单以传递给 forecast.Arima() 函数。如果我只做一个没有外生回归变量的变量,这将很简单:
arimamodel1 <- llply(xtsobject, function(list) {
fity <- auto.arima(list$revenue)
})
然后我会将该列表应用到 forecast.Arima() 函数:
forecast1 <- llply(arimamodel1, function(model) {
forecast.Arima(model, h=2)
})
结果很好。我已尝试更改参数以包含一些额外回归变量的空间,但我不确定预测是否实际上拉入了 x 值:
arimamodel2 <- llply(xtstest, function(list) {
fity <- auto.arima(list$revenue, xreg=list$orders)
fitx <- auto.arima(list$orders)
})
以及预测:
forecast2 <- llply(arimamodel2, function(model) {
forecast.Arima(model, h=2)
})
...但似乎在预测函数中,我应该按照我通常使用具有多个回归量的 Forecast.Arima() 的方式来解释 x 回归模型;类似:
forecast.Arima(model,h=2, xreg=forecast(model,h=2)$mean)
但这不起作用。是否有人对如何使用 PLYR 基于 auto.arima() 对多个回归量进行预测有任何见解?
【问题讨论】: