如何通过R中的一个脚本多次预测一个变量?

时间:2019-01-22 12:41:57

标签: r model rstudio forecasting ets

假设您有一个数据集,如下所示:

|Month|Food|Sales|
|01|Apple|1564|
|02|Apple|1323|
....
|12|Apple|1645|
|01|Banana|2158|

...一直延续到“西葫芦”模式。

因此,可以说您希望这样预测R中的销售额:

ets <- forecast(ets(data))

我该如何预测“食品”列中的每个值,以使它们的所有预测值分开?

当前,我正在将数据设置为仅查看“ Apple”并进行预测。然后,我必须返回并将子设置数据更改为“香蕉”并进行预测。我希望将它们的每个输出都分开,以便将它们导出到Excel。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以编写一个自定义函数,该函数使用水果的名称并执行预测所需的所有步骤,然后将该功能apply列出所有您知道的水果。我这里有一个代码示例,但是请注意,您可能需要根据自己的具体情况进行很多更改。

首先,一些数据:

df <- data.frame(
  month = rep(1:12, times = 5),
  fruit = rep(c("Apple", "Banana", "Citrus", "Date", "Elderberry"), each = 12),
  sales = runif(12*5, min = 100, max = 10000)
)

接下来,我想创建一个自定义函数。在这种情况下,我唯一的论点是水果的类型。我可能想添加更多的参数,例如“我希望多长时间我的预测”,等等。请注意,此函数返回整个forecast对象-您可能想要选择{{1 }}模型的一部分。

fitted

我可以通过告诉它要预测哪种水果来运行此功能:

forecast_custom <- function(selected_fruit) {
  df_sub <- subset(df, fruit == selected_fruit)
  ts_sub <- ts(df_sub$sales)

  forecast(ets(ts_sub))
}

我还可以使用forecast_custom("Apple") 家族中的某种东西一次将其用于所有类型的水果。

apply

如果需要,还可以使用lapply(unique(df$fruit), forecast_custom) 包中的map函数代替purrrlapplysapply函数在输入内容和输出内容方面更加严格。例如,使用map生成美观的数据框会更容易:

purrr

答案 1 :(得分:0)

您可以使用R中的apply函数和levels函数来创建多个预测,该函数可以找到水果类型的唯一值。

然后,您将创建一个“预测功能”,根据水果类型[Fruit]对输入数据帧[DF]进行切片,如下面的代码所示,以预测特定的输入水果。该函数返回一个ets预测对象。

library(forecast)
DF <- data.frame(month = rep(seq(1,12,by=1),3),
                 fruit = c(rep("apples",12),rep("banana",12),rep("orange",12)),
                 Sales = sample(0:1000, 12*3))


forecastFruit <- function(Fruit, inputDF)
{
  timeSeries <- ts(inputDF[inputDF$fruit == Fruit,]$Sales)
  forecast(ets(timeSeries))
}

Forecast <- lapply(levels(DF$fruit), forecastFruit, inputDF = DF)


plot(Forecast[[1]])
plot(Forecast[[2]])
plot(Forecast[[3]])

lapply的输出将根据预测集合中的三个对象列出。