我正在尝试将每日时间序列分解为季节,趋势和余数部分。我们可以看一个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无法处理每日时间序列。 非常感谢你!
答案 0 :(得分:2)
decompose
要求
ts
系列 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))
给予: