首页 > 解决方案 > 一次将移动平均线应用于多个时间序列

问题描述

我有一个包含 52 周内 100 种产品需求的数据集,我需要预测下一个时期每种产品的需求。我想测试几种方法(例如移动平均、ARIMA 等)并比较预测准确性。100 个产品的每个时间序列都存储在一个名为 Order_volume_ts 的 mts 对象中。当我现在使用以下代码运行移动平均线时,它当然会给我一条错误消息

Arima(Order_volume_ts, order=c(0,0,1))
Error in stats::arima(x = x, order = order, seasonal = seasonal, include.mean = include.mean,  : 
  only implemented for univariate time series

我通过使用 for() 公式将移动平均值应用于每个时间序列并将预测结果存储在单独的数据框中创建了一个解决方法。即使代码有效,我觉得必须有一种更简单的方法来做到这一点?

Results <- data.frame("Material_Number"="x","Forecast"=0)  #Creating a dummy data frame to store results
Results$Material_Number <- as.character(Results$Material_Number)
for(K in seq(100)) {
    MA_model <- Arima(Order_volume_ts[,K], order=c(0,0,1)) 
    MA_FC <- forecast(MA_model, h=1)   #Create forecast for next period
    Results[K,1] <- colnames(Order_volume_ts)[K]   #Store name of material in Results data frame
    Results[K,2] <- MA_FC$mean[1]   #Store forecast for next period in Results data frame
  }

这是两个产品的一些示例数据(还不是 ts 格式):

    Material_A            Material_B
 1:                  0                100
 2:                  5                400
 3:                  1                  0
 4:                  2                  0
 5:                  5                800
 6:                  0                  0
 7:                  1                  0
 8:                  1                100
 9:                  2                300
10:                  9                600
11:                  1                200
12:                  5                  0
13:                  4                  0
14:                  1                  0
15:                  5                400
16:                  3                500
17:                  2                300
18:                  0                600
19:                  2                400
20:                  3                500
21:                  3                100
22:                  1                200
23:                  6                  0
24:                  1                100
25:                  5                  0
26:                  5                200
27:                  0                100
28:                  4                  0
29:                  1                200
30:                  3                  0
31:                  4                200
32:                  2                300
33:                  1                  0
34:                  2                400
35:                  1                  0
36:                  2                  0
37:                  5                500
38:                  1                100
39:                  1                700
40:                  6                  0
41:                  1                  0
42:                 14                100
43:                  0                400
44:                  1                100
45:                  4                  0
46:                  9                100
47:                  5                  0
48:                  7                200
49:                  2                400
50:                  2                  0
51:                  2                  0
52:                  0                  0

ts 是用

Order_volume_ts <- ts(Order_volume_vector, start=c(2016,1), end=c(2016,52), frequency=52)

标签: r

解决方案


推荐阅读