分解动物园对象而无周期性错误

时间:2019-06-05 09:07:25

标签: r time-series xts zoo

我正在尝试将每日时间序列分解为季节,趋势和余数部分。我们可以看一个fpp2软件包提供的Google股票示例:

加载库

library(forecast)
library(lubridate) 
library(zoo)
library(fpp2)

将包的时间序列转换为数字向量

google <- as.numeric(goog)

根据文档,Google股票从2013年2月25日到2017年2月23日

googZ <- zoo(google, seq(from = as.Date("2013-02-25"), to = as.Date("2017-02-23"), by = "days"))

分解(googZ)错误:时间序列不超过2个周期

decompose(googZ)
  

分解(googZ)错误:时间序列不超过2个周期

这是可行的,但我不确定为什么不启用Google

autoplot(decompose(AirPassengers))
str(AirPassengers)

我不明白为什么会这样,因为我们清楚地知道并正确定义了时间序列。 请注意,我使用了zoo软件包,因为ts无法处理每日时间序列。 非常感谢你!

1 个答案:

答案 0 :(得分:2)

decompose要求

  • 规则排列的ts系列
  • 每个期间
  • 相同的点数,例如假设一年为一年,则每年365点
  • 期间为1
  • 将周期内的点分开,其中delatt = 1 / frequency,而frequency是每个周期的点数

Date类对象表示为自大纪元(1970年1月1日)以来的天数。由于leap年Date对象每年没有相同的点数,因此连续年份之间的差是365或366,而不是1,并且点是相隔1,而不是分开。

我们可以强制使它适合ts对象的方法是,每年使用前365天(在leap年,该日期将在12月31日下降),然后再使用它。请注意,year对象的POSIXlt组件是自1900年以来的年数,因此我们必须加回1900,并且yday组件的1月1日为0,1月2日为1,依此类推。非-年为364,a年为365。

library(ggplot2)
library(zoo)

lt <- as.POSIXlt(time(goog2))
tt <- with(lt, ts(coredata(goog2[yday < 365]), 
  start = year[1] + 1900 + yday[1]/365, frequency = 365))
autoplot(decompose(tt))

给予:

screenshot