我刚开始尝试使用ts
类来分析一些时间序列数据。
我有一种感觉,ts
类不太适合分析日常或每周的数据。几乎所有我在网上看到的例子或者在Cowpertwait和Metcalfe的"使用R进行时间序列初步分析"中看到的例子都是使用月度或年度数据。
我想使用ts
来分析每周的数据,这样做是否不可取?
我刚开始尝试使用ts
类来分析一些时间序列数据。
我有一种感觉,ts
类不太适合分析日常或每周的数据。几乎所有我在网上看到的例子或者在Cowpertwait和Metcalfe的"使用R进行时间序列初步分析"中看到的例子都是使用月度或年度数据。
我想使用ts
来分析每周的数据,这样做是否不可取?
主要问题在于大多数想要分析每日或每周数据的人希望使用一年365天或52周的频率,但是一年中的天数或周数不是恒定的甚至不是365或52。如果在每日数据的情况下在闰年中减少一天,或者在每周数据的情况下使用一年中除了有8或9天之外的7天作为每周的天数,则可以虚假处理它。有无尽的方案可行。
请阅读这个线程以获得一个示例。
zoo
在处理日常数据方面表现良好。例如,如果您有一个每日的水流量序列 Q 和相应的日期时间戳 D(使用 as.Date()
创建),则可以使用它来处理。
Q.z <- zoo(Q, order.by=D)
将创建一个对象,可以很好地绘制,并且您可以使用函数 window()
提取单个年份,例如:
window(Q.z, start = as.Date('2000-01-01'), end=as.Date('2000-31-12')
查看 zoo
包以获取更多信息。
时间单位并不重要,只有每个单位内的数据点数量(频率)才重要。对于 ts
及其函数而言,一天、一年、十年或其他时间单位都没有区别。你无需告诉它正在处理一周或一天的时间段。这并不重要!
我认为每日/每周数据的问题在于它们都有闰年单位。每四年有额外的366天和53个星期。或者自1900年以来一直如此。因此,“频率”要么不是恒定的,要么是一个分数。否则,ts应该可以正常工作。
解决星期的最简单方法是使用星期开始的日期。在类Unix系统上,您还可以使用ISO星期,并且还有一个实现它们的软件包。当然,如果您的数据已经按周计算,则只需要将其用于标记图表等。