让我们使用文档 (?ts) 探索 ts 如何在不同频率下工作
假设这是您的数据
dat <- data.frame(myts = sample(10, 24, replace = T),
Date = seq(as.Date("2008-10-11"), as.Date("2008-10-11") + 23, by = 1))
# myts Date
# 1 6 2008-10-11
# 2 9 2008-10-12
# 3 6 2008-10-13
# 4 9 2008-10-14
# 5 8 2008-10-15
# 6 6 2008-10-16
# 7 1 2008-10-17
# 8 9 2008-10-18
# 9 3 2008-10-19
# 10 5 2008-10-20
# 11 7 2008-10-21
# 12 4 2008-10-22
# 13 2 2008-10-23
# 14 9 2008-10-24
# 15 5 2008-10-25
# 16 9 2008-10-26
# 17 7 2008-10-27
# 18 8 2008-10-28
# 19 7 2008-10-29
# 20 2 2008-10-30
# 21 6 2008-10-31
# 22 6 2008-11-01
# 23 8 2008-11-02
# 24 1 2008-11-03
让我们比较相同数据和任意起点上不同频率的输出
print(ts(dat$myts, frequency = 7, start = c(1950, 3)), calendar = T)
# p1 p2 p3 p4 p5 p6 p7
# 1950 6 9 6 9 8
# 1951 6 1 9 3 5 7 4
# 1952 2 9 5 9 7 8 7
# 1953 2 6 6 8 1
print(ts(dat$myts, frequency = 12, start = c(1950, 3)), calendar = T)
# Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 1950 6 9 6 9 8 6 1 9 3 5
# 1951 7 4 2 9 5 9 7 8 7 2 6 6
# 1952 8 1
print(ts(dat$myts, frequency = 4, start = c(1950, 3)), calendar = T)
# Qtr1 Qtr2 Qtr3 Qtr4
# 1950 6 9
# 1951 6 9 8 6
# 1952 1 9 3 5
# 1953 7 4 2 9
# 1954 5 9 7 8
# 1955 7 2 6 6
# 1956 8 1
print(ts(dat$myts, frequency = 7), calendar = T)
# p1 p2 p3 p4 p5 p6 p7
# 1 6 9 6 9 8 6 1
# 2 9 3 5 7 4 2 9
# 3 5 9 7 8 7 2 6
# 4 6 8 1
我们可以从输出中学到 3 件事
1- ts 熟悉 12 和 4 频率并将它们识别为月份和季度,而它以不那么直接的方式打印 7 频率。
2- start 参数中的第一个数字是取决于频率的周期数,而第二个数字是该周期内的第一个事件(因为并非所有系列都从一月或周日开始)。
3- 当您未指定起点时,ts 函数假定您从第一个周期的开头开始(因此在您的示例中为 (1,1))
现在,为了让这个时间序列对您更有意义,您可能会计算一年中的第几周(因为我们通常一年大约有 52 周)和第一次观察的天数(例如: 1 = 星期日,2 = 星期一等)并将它们解析为start 参数(请参阅?strftime)
startW <- as.numeric(strftime(head(dat$Date, 1), format = "%W"))
startD <- as.numeric(strftime(head(dat$Date, 1) + 1, format =" %w"))
print(ts(dat$myts, frequency = 7, start = c(startW, startD)), calendar = T)
# p1 p2 p3 p4 p5 p6 p7
#39 6
#40 9 6 9 8 6 1 9
#41 3 5 7 4 2 9 5
#42 9 7 8 7 2 6 6
#43 8 1
这意味着我们的第一次观察(发生在 2008 年 10 月 11 日)是 2008 年第 39 周的星期六