进一步考虑this thread中的内容:我尽可能地走了,但终于碰到了一堵墙。我希望使用 PLYR 来创建一些具有外部回归量的 ARIMA 模型。我一直在使用的过程的高级概述(代码示例数据如下)
1)我有一个包含业务,地区,收入和订单的数据框,所有这些都是按日期
2)对于业务+地区的每个组合,我想根据以前的收入值+以前的订单价值创建收入预测。
3)我想使用ARIMA模型(使用 auto.arima ())来计算收入和订单的最佳订单,然后将该信息应用于预测功能
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)
})
...但似乎在预测功能中,我应该做的事情是以我通常使用的方式来考虑x回归模型.Arima()具有多个回归量;类似的东西:
forecast.Arima(model,h=2, xreg=forecast(model,h=2)$mean)
但这不起作用。有没有人对如何使用PLYR根据auto.arima()为多个回归量进行预测有任何见解?
答案 0 :(得分:1)
我很确定我想出来了,万一有人偶然发现这个问题。只需要创建一个遍历所有这些参数的函数,然后通过lapply或llply传递该函数(问题中的数据对于auto.arima不起作用,因为它的创建方式,但它适用于我正在使用的实际数据):
arimafunc <- function(list) {
fity <- auto.arima(list$revenue, xreg=list$orders)
fitx <- auto.arima(list$orders)
forecast <- forecast.Arima(fity,h=2,xreg=forecast(fitx,h=2)$mean)
return(forecast)
}
然后通过列表申请:
forecasts <- lapply(xtsobject,FUN=arimafunc)
我确信有一种方法可以使用像llply这样的内置功能或其中一个基本命令mapply来实现这一点,但现在可以使用......