正确创建R中的时间序列,每日数据上的auto.arima函数

时间:2015-12-28 23:10:10

标签: r time-series forecasting

我正在零售商处创建特定商品的每日销售时间序列。我在下面列出了几个问题,我希望得到一些帮助(数据和代码可以遵循)。请注意,我正在从csv文件中读取我的实际数据集,其中观察(日期)是行,每个变量都在列中。提前感谢您的帮助,请知道我是R编码的新手。

1)似乎R正在按日期的观察编号读取我的时间序列(即4月5日,数据集中的第5个日期,值为5,而不是出售的297个单位特定的一天)。我该如何解决这个问题?

2)我相信我的'声明告诉R,数据从2013年第91天(4月1日)开始;我编码正确吗?当我绘制数据时,似乎R可能以不同的方式解释这个陈述。

3)我是否需要为xreg创建单独的时间序列?例如,我应该为每个变量创建一个时间序列,然后取出它们的联合,然后将它们cbind吗?

4)我是否已将变量记录在正确的语句中,还是应该在代码中的其他位置执行?

require("forecast")
G<-read.csv("SingleItemToyDataset.csv")
GT<-ts(G$Units, start = c(2013, 91), frequency = 365.25)
X = cbind(log(G$Price), G$Time, as.factor(G$PromoOne), as.factor(G$PromoTwo), as.factor(G$Mon), as.factor(G$Tue), as.factor(G$Wed), as.factor(G$Thu), as.factor(G$Fri), as.factor(G$Sat))
Fit<-auto.arima(log(GT), xreg = X)


        Date Day Units Price Time PromoOne PromoTwo Mon Tue Wed Thu Fri Sat
1   4/1/2013 Mon   351  5.06    1        1        0   1   0   0   0   0   0
2   4/2/2013 Tue   753  4.90    2        1        0   0   1   0   0   0   0
3   4/3/2013 Wed   133  5.32    3        1        0   0   0   1   0   0   0
4   4/4/2013 Thu   150  5.14    4        1        0   0   0   0   1   0   0
5   4/5/2013 Fri   297  5.00    5        1        0   0   0   0   0   1   0
6   4/6/2013 Sat   688  5.27    6        1        0   0   0   0   0   0   1
7   4/7/2013 Sun 1,160  5.06    7        1        0   0   0   0   0   0   0
8   4/8/2013 Mon   613  5.07    8        1        0   1   0   0   0   0   0
9   4/9/2013 Tue   430  5.07    9        1        0   0   1   0   0   0   0
10 4/10/2013 Wed   400  5.03   10        1        0   0   0   1   0   0   0
11 4/11/2013 Thu 1,530  4.97   11        1        0   0   0   0   1   0   0
12 4/12/2013 Fri 2,119  5.00   12        0        1   0   0   0   0   1   0
13 4/13/2013 Sat 1,094  5.09   13        0        1   0   0   0   0   0   1
14 4/14/2013 Sun   736  5.02   14        1        0   0   0   0   0   0   0
15 4/15/2013 Mon   518  5.10   15        1        0   1   0   0   0   0   0
16 4/16/2013 Tue   485  5.02   16        1        0   0   1   0   0   0   0
17 4/17/2013 Wed   472  5.05   17        1        0   0   0   1   0   0   0
18 4/18/2013 Thu   406  5.03   18        1        0   0   0   0   1   0   0
19 4/19/2013 Fri   564  5.00   19        1        0   0   0   0   0   1   0
20 4/20/2013 Sat   475  5.09   20        1        0   0   0   0   0   0   1
21 4/21/2013 Sun   621  5.04   21        1        0   0   0   0   0   0   0
22 4/22/2013 Mon   714  5.02   22        1        0   1   0   0   0   0   0
23 4/23/2013 Tue 1,217  5.32   23        0        0   0   1   0   0   0   0
24 4/24/2013 Wed 1,253  5.45   24        0        0   0   0   1   0   0   0
25 4/25/2013 Thu 1,169  5.06   25        0        0   0   0   0   1   0   0
26 4/26/2013 Fri 1,216  5.01   26        0        0   0   0   0   0   1   0
27 4/27/2013 Sat 1,127  5.02   27        0        0   0   0   0   0   0   1
28 4/28/2013 Sun   693  5.04   28        1        0   0   0   0   0   0   0
29 4/29/2013 Mon   388  5.01   29        1        0   1   0   0   0   0   0
30 4/30/2013 Tue   305  5.01   30        1        0   0   1   0   0   0   0
31  5/1/2013 Wed   207  5.03   31        1        0   0   0   1   0   0   0
32  5/2/2013 Thu   612  4.97   32        1        0   0   0   0   1   0   0
33  5/3/2013 Fri   671  5.01   33        1        0   0   0   0   0   1   0
34  5/4/2013 Sat 1,151  5.04   34        1        0   0   0   0   0   0   1
35  5/5/2013 Sun 2,578  5.00   35        1        0   0   0   0   0   0   0
36  5/6/2013 Mon 2,364  5.01   36        1        0   1   0   0   0   0   0
37  5/7/2013 Tue   423  5.03   37        1        0   0   1   0   0   0   0
38  5/8/2013 Wed   388  5.04   38        1        0   0   0   1   0   0   0
39  5/9/2013 Thu 1,417  4.70   39        0        1   0   0   0   1   0   0
40 5/10/2013 Fri 1,607  4.59   40        0        1   0   0   0   0   1   0
41 5/11/2013 Sat 1,217  4.86   41        1        0   0   0   0   0   0   1
42 5/12/2013 Sun   545  5.12   42        1        0   0   0   0   0   0   0
43 5/13/2013 Mon   461  5.01   43        1        0   1   0   0   0   0   0
44 5/14/2013 Tue   358  4.97   44        1        0   0   1   0   0   0   0
45 5/15/2013 Wed   310  5.00   45        1        0   0   0   1   0   0   0
46 5/16/2013 Thu   925  4.63   46        1        0   0   0   0   1   0   0
47 5/17/2013 Fri   266  4.99   47        1        0   0   0   0   0   1   0
48 5/18/2013 Sat   183  5.15   48        0        0   0   0   0   0   0   1
49 5/19/2013 Sun   363  5.20   49        0        0   0   0   0   0   0   0
50 5/20/2013 Mon 5,469  4.99   50        1        0   1   0   0   0   0   0
51 5/21/2013 Tue   647  4.81   51        1        0   0   1   0   0   0   0
52 5/22/2013 Wed   421  4.97   52        1        0   0   0   1   0   0   0
53 5/23/2013 Thu   353  4.93   53        1        0   0   0   0   1   0   0
54 5/24/2013 Fri   375  4.95   54        1        0   0   0   0   0   1   0
55 5/25/2013 Sat   575  4.88   55        1        0   0   0   0   0   0   1
56 5/26/2013 Sun   707  4.92   56        0        0   0   0   0   0   0   0
57 5/27/2013 Mon   533  4.89   57        0        0   1   0   0   0   0   0
58 5/28/2013 Tue   641  4.66   58        0        0   0   1   0   0   0   0
59 5/29/2013 Wed   264  4.85   59        0        0   0   0   1   0   0   0
60 5/30/2013 Thu   186  5.74   60        1        0   0   0   0   1   0   0
61 5/31/2013 Fri   207  6.40   61        1        0   0   0   0   0   1   0

1 个答案:

答案 0 :(得分:0)

1)我不确定你的意思,但也许你对R分配给你的数据框G的行名(在这种情况下是数字)感到困惑。假设您的代码下方打印的data.frame是G的样子,我认为G $ Units确实拥有您对建模感兴趣的数据(请注意,{{1}可能因为数字中的逗号而将R视为字符类;您应该从.csv文件中删除它们。

2)对于使用G$Units(或基础auto.arima()中的arima())进行建模,单变量ts不需要是实际的R对象。因此,您并不需要创建ts。尽管如此,GT的{​​{1}}和start参数可能有点奇怪。在这种情况下,您需要设置freq,即使一年在技术上有点长(即ts()

3)不,您不需要为freq=365创建单独的时间序列。事实上,您不需要为promos / days创建因子,因为它们已经编码为0/1。因此,像GT <- ts(G$Units, start=c(2013,91), freq=365)这样的东西就足够了。 (旁白:为什么你使用xreg作为协变量;数据中似乎没有任何趋势?)。

4)是的,对您所做的(共)变量进行对数变换很好,但我很好奇为什么价格协变量需要进行对数变换?