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



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

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

这种模式一直延续到"西葫芦"。

所以假设你想预测R的销售额:

ets <- forecast(ets(data))

我如何预测"食物"栏中的每一个值,使其单独给出所有预测?

目前,我正在将我的数据设置为只看"苹果"并进行预测。然后,我必须返回并将我的子设置数据更改为"Banana",然后进行预测。我想把它们的每一个输出都分开,这样我就可以把它们导出到Excel中。

谢谢!

您可以编写一个自定义函数,该函数采用水果的名称并执行预测所需的所有步骤,然后将该函数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对象-例如,您可能想选择模型的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)

如果需要,也可以使用purrr包中的map函数,而不是lapplysapplymap函数对输入和输出的内容更加严格。例如,使用purrr:生成好看的数据帧会更容易

forecast_custom <- function(selected_fruit) {
df_sub <- subset(df, fruit == selected_fruit)
ts_sub <- ts(df_sub$sales)
data.frame(
fruit = selected_fruit,
month = 13:24,
forecasted_sales = as.numeric(forecast(ets(ts_sub))$fitted)
)
}
> map_df(unique(df$fruit), forecast_custom)
#>         fruit month forecasted_sales
#> 1       Apple    13        4781.3679
#> 2       Apple    14        4781.3330
#> 3       Apple    15        4780.8736
#> 4       Apple    16        4781.2790
#> 5       Apple    17        4781.3523

您可以通过使用R中的应用函数和查找水果类型的唯一值的levels函数来创建多个预测。

然后创建一个"预测函数",根据水果类型[Firuit]对输入数据帧[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的输出将由预测ets中的三个对象组成。

相关内容

  • 没有找到相关文章

最新更新