我从下午3点开始,每天都有以下来电数据集。到晚上10点看起来像这样:
Date hour Count Year Month Day
01.01.2001 15 69 2001 1 1
01.01.2001 16 12 2001 1 1
01.01.2001 17 56 2001 1 1
01.01.2001 18 34 2001 1 1
01.01.2001 19 44 2001 1 1
01.01.2001 20 91 2001 1 1
01.01.2001 21 82 2001 1 1
01.01.2001 22 49 2001 1 1
...
17.08.2003 22 103 2003 8 17
需要做的是时间序列分析,包括预测,指数平滑,移动平均等。
我现在面临的问题是如何申报ts功能?我只有从晚上3点到晚上10点的高峰时段,所以我不能将频率声明为24。
有人可以帮帮我吗?
非常感谢 欢呼声,答案 0 :(得分:6)
1)假设该系列节目在下午3点开始,那天是连续的,并且从下午3点到晚上10点的所有时间都存在:
tser <- ts(DF[-1], freq = 8)
,并提供:
> tser
Time Series:
Start = c(1, 1)
End = c(1, 8)
Frequency = 8
hour Count Year Month Day
1.000 15 69 2001 1 1
1.125 16 12 2001 1 1
1.250 17 56 2001 1 1
1.375 18 34 2001 1 1
1.500 19 44 2001 1 1
1.625 20 91 2001 1 1
1.750 21 82 2001 1 1
1.875 22 49 2001 1 1
这将代表第1天下午3点的指数为1.0,第1天下午4点为1 + 1/8,第1天下午5点为1 + 2/8,...,第1天晚上10点为1 + 7/8,第2天下午3点为2,第2天下午4点为2 + 1/8等
2)这是相同的,但日期从1970-01-01以来的天数开始,而不是从1开始:
tser <- ts(DF[-1], start = as.Date("2001-01-01"), freq = 8)
,并提供:
> tser
Time Series:
Start = c(11323, 1)
End = c(11323, 8)
Frequency = 8
hour Count Year Month Day
11323.00 15 69 2001 1 1
11323.12 16 12 2001 1 1
11323.25 17 56 2001 1 1
11323.38 18 34 2001 1 1
11323.50 19 44 2001 1 1
11323.62 20 91 2001 1 1
11323.75 21 82 2001 1 1
11323.88 22 49 2001 1 1
也就是说,这将代表每一天作为1970-01-01以来的天数加上,如前所述,小时为0,1 / 8,...,7/8。
如果您以后需要重新生成日期/时间:
library(chron)
tt <- as.numeric(time(tser))
as.chron(tt %/% 1) + (8 * tt%%1 + 15)/24
,并提供:
[1] (01/01/01 15:00:00) (01/01/01 16:00:00) (01/01/01 17:00:00)
[4] (01/01/01 18:00:00) (01/01/01 19:00:00) (01/01/01 20:00:00)
[7] (01/01/01 21:00:00) (01/01/01 22:00:00)
3)动物园如果保持它们的间距不重要那么你可以试试这个:
library(zoo)
library(chron)
z <- zoo(DF[-1], as.chron(format(DF$Date), "%d.%m.%Y") + DF$hour/24)
,并提供:
> z
hour Count Year Month Day
(01/01/01 15:00:00) 15 69 2001 1 1
(01/01/01 16:00:00) 16 12 2001 1 1
(01/01/01 17:00:00) 17 56 2001 1 1
(01/01/01 18:00:00) 18 34 2001 1 1
(01/01/01 19:00:00) 19 44 2001 1 1
(01/01/01 20:00:00) 20 91 2001 1 1
(01/01/01 21:00:00) 21 82 2001 1 1
(01/01/01 22:00:00) 22 49 2001 1 1
动物园方法不要求所有时间都存在,也不要求连续几天。
注意:我不确定您是否真的需要单独分配所有日期和小时字段,因为它们可以轻松生成,因此这可能就足够了。
Count <- z$Count
年份可以通过as.numeric(format(time(Count), "%Y"))
恢复,并且可以使用%m
,%d
或%H
代替%Y
恢复月,日和小时。
还可以使用month.day.year(time(Count))
生成月,日和年列的列表。
years(time(Count))
,months(time(Count))
,days(time(Count))
和hours(time(Count))
会产生指定数量的因素。