每日时间序列与ts ..如何指定开始和结束

时间:2014-05-12 08:37:49

标签: r time-series

我的每日时间序列从星期六开始,到星期三结束。每周都有明显的周期。它存储在R中的向量a中。因此,我尝试将其转换为时间序列对象 -

ts(a,frequency=7)

这给了我 -

Time Series:
Start = c(1, 1) 
End = c(13, 5) 

(1,1)和(13,5)是什么意思?在这种情况下,指定开始和结束的最佳方法是什么。互联网上的所有示例都处理年度数据,而不是每天。

1 个答案:

答案 0 :(得分:20)

让我们使用文档(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参数中的第一个数字是取决于频率的周期数,而第二个数字是该周期中的第一个事件(并非所有系列都从1月或周日开始)

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周的周六