【问题标题】:Decomposing an xts Time Serie with STL()使用 STL() 分解 xts 时间序列
【发布时间】:2019-07-30 12:58:11
【问题描述】:

我正在尝试分解 xts 时间序列并创建一个包含 2 列的数据框。

  1. 观察日期
  2. 分解时间序列的趋势值

基础数据框的结构如下:

Date        x     y        z
2016-01-01 40419.35 12595 3.20
2016-01-02 44283.35 13904 3.18
2016-01-03 36277.23 10355 3.50
2016-01-04 42545.05 11929 3.56
2016-01-05 42402.22 13737 3.08
2016-01-06 49919.22 13661 3.65
...
2018-12-30 48719.22 13563 3.65
2018-12-31 49919.22 13661 3.65

这是我到目前为止所做的。

#1. Creating an xts object with weekly frequency
TimeSeries <- xts(x=Data[,-1],order.by=as.Date(Data$Date,"%Y/%m/%d")) 
TimeSeriesWeekly <- period.apply(TimeSeriesWeekly, INDEX = endpoints(TimeSeriesWeekly, on = "weeks"), FUN = colSums) 
attr(TimeSeriesWeekly, 'frequency') <-52
TimeSeriesWeekly<-TimeSeriesWeekly[,1] #keeping only the X variable I want to decompose

#2. Converting to a TS object in order to apply stl() decomposition formula
TimeSeriesWeekly <- ts(TimeSeriesWeekly[,1],frequency=52)

#3. Decomposing the TS object and distilling the trend
TimeSeriesWeeklyDecomposed<-stl(TimeSeriesWeekly, s.window="periodic")
TimeSeriesWeeklyTrend     <- as.data.frame(TimeSeriesWeeklyDecomposed$time.series[,2])

我的问题是 TimeSeriesWeeklyTrend 数据框不包含日期变量。如何通过?

【问题讨论】:

  • 您好!您能否发布您的数据的 dput(),以便我们给您一个可重复的答案?
  • @SantiagoCapobianco 感谢您的评论。我在上面发布了基本数据的样子。这有帮助吗? dput() 函数创建了一个非常大的文件,我无法在此处发布:(
  • 如果完整的数据集太大而无法发布,您可以提取一个代表问题的样本并dput
  • dput(head(Data)) 结构(list(Dat = structure(c(16898, 17616, 17026, 16959, 17629, 17123), class= "日期"), x= c(40419.35 ,44283.35,36277.23,42545.05,42402.22,49919.22),Y = C(12595,13904,10355,11929,13737,13661),Z = C(3.20915839618896,3.18493598964327,3.50335393529696,3.56652275966133,3.08671616801339,3.65414098528658)),row.names = c(NA, 6L), class= "data.frame")
  • 我找到了解决办法,请问如何发布?

标签: r xts forecasting


【解决方案1】:

用下面的代码解决了问题:

#2. Converting to a TS object in order to apply stl() decomposition formula
ts_data  <- ts(as.numeric(TimeSeriesWeekly[,1]),frequency=52)

#3. Decomposing the TS object with STL()
TimeSeriesWeeklyDecomposed<-stl(ts_data , s.window="periodic")

#4 Appending it to the initial xts object
TimeSeriesWeekly <- merge(TimeSeriesWeekly,TimeSeriesWeeklyDecomposed$time.series[,2])
names(TimeSeriesWeekly)[ncol(TimeSeriesWeekly)]<-"Trend" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多