gpt4 book ai didi

R - 时间序列每小时

转载 作者:行者123 更新时间:2023-12-05 00:23:44 24 4
gpt4 key购买 nike

从下午 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。

有人可以帮我吗?

非常感谢
干杯,

最佳答案

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 年 1 月 1 日以来的天数,加上之前的 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))将产生指定数量的因子。

关于R - 时间序列每小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27802358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com