r - 一次将移动平均线应用于多个时间序列
问题描述
我有一个包含 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)
解决方案
推荐阅读
- json - PowerShell 将 json 内容发布为拉取请求评论正文
- excel - 在 Excel 中向包含文本中数字的单元格添加色阶
- ionic-framework - 如何解决“离子项目”不是离子中的已知元素
- jmeter - JMeter ActiveMQ 主题测试计划
- java - 如何将类型转换器的使用限制为 Spring MVC 中的特定控制器?
- python - libpng 错误:IHDR 数据无效(拼接 3 个图像)
- django - Django 覆盖保存方法:返回 super().save() 还是不返回?
- python - 使用 Python 从 json 中的嵌入对象中获取值
- javascript - React 组件上的打字稿错误:“元素”类型的参数不可分配给类型的参数
- java - 如何追加到Arraylist的第一个元素?