【问题标题】:plotting stl with time series data用时间序列数据绘制 stl
【发布时间】:2012-01-17 00:31:06
【问题描述】:

我正在尝试使用 stl 来细分我的时间序列数据中的季节性和趋势。我有刻度数据,并且我创建了一个 ts 对象。

我运行了一个 SQL 查询以获取以下表格中的数据

    > x
         datetime       price
1  2010-09-08 1501        9110
2  2010-09-08 1501        9110
3  2010-09-08 1501        9110
4  2010-09-08 1501        9110
5  2010-09-08 1501        9115
6  2010-09-08 1501        9115
7  2010-09-08 1501        9110
8  2010-09-08 1502        9115
9  2010-09-08 1502        9115
10 2010-09-08 1502        9115
11 2010-09-08 1503        9120
12 2010-09-08 1503        9115
13 2010-09-08 1503        9115
14 2010-09-08 1503        9115
15 2010-09-08 1503        9115
16 2010-09-08 1503        9115
17 2010-09-08 1503        9115
18 2010-09-08 1503        9115
19 2010-09-08 1503        9115
20 2010-09-08 1503        9115
21 2010-09-08 1503        9115
22 2010-09-08 1503        9110
23 2010-09-08 1503        9105
24 2010-09-08 1503        9105
25 2010-09-08 1503        9110
26 2010-09-08 1504        9110
27 2010-09-08 1504        9110
28 2010-09-08 1504        9110
29 2010-09-08 1504        9110
30 2010-09-08 1504        9115
31 2010-09-08 1504        9115
32 2010-09-08 1504        9115
33 2010-09-08 1504        9115
34 2010-09-08 1504        9115
35 2010-09-08 1504        9115
36 2010-09-08 1504        9115
37 2010-09-08 1504        9120

我通过运行以下命令将其转换为 ts:

> xt<-ts(x[,2])
> xt
Time Series:
Start = 1 
End = 37 
Frequency = 1 
 [1] 9110 9110 9110 9110 9115 9115 9110 9115 9115 9115 9120 9115 9115 9115 9115
[16] 9115 9115 9115 9115 9115 9115 9110 9105 9105 9110 9110 9110 9110 9110 9115
[31] 9115 9115 9115 9115 9115 9115 9120

> drg<-stl(log(xt),"per")
Error in stl(log(xt), "per") : 
  series is not periodic or has less than two periods

> is.ts(xt)
[1] TRUE

关于如何修复错误的任何建议,以便能够查看不同趋势组件的细分...

【问题讨论】:

  • 我没有对时间序列做太多的工作,所以只是澄清一下:是plot函数产生错误还是stl?即如果您在自己的行上执行drg &lt;- stl(...),然后在plot(drg) 上执行,哪一行会引发错误?我的猜测是plot,所以drg 可能不是您所期望的。您能否提供一小部分数据样本来重现您的问题?
  • 这是 stl 部分 &gt; drg&lt;-stl(log(xt),"per") Error in stl(log(xt), "per") : series is not periodic or has less than two periods 我会在几分钟内用一小部分数据更新我的帖子
  • 刚刚更新的帖子包含重现问题的小数据样本
  • 请不要cross post。至少,礼貌地说你做了,这样其他人才能受益。

标签: r time-series


【解决方案1】:

错误就在那里,你可以看到

 > drg<-stl(log(xt),"per")
 Error in stl(log(xt), "per") : 
   series is not periodic or has less than two periods

stl() 函数需要一个时间序列对象一个频率(或同样地,增量),所以 seasonal 部分是有意义的。对于较长期的宏观经济序列,通常为月度数据的 1/12,或季度数据的 1/4。有关详细信息,请参阅 help(ts),并更仔细地查看 ts()stl() 的示例,以及其中使用的数据类型。

使用业务日常数据执行此操作...更难,因为日历是不规则的。有了你的日内数据,你必须想出一些方案。这些数据根本不同:市场开盘和收盘,而宏观数据可以被概念化为连续的。

【讨论】:

  • 感谢 Dirk,感谢您的推理和澄清。以您的专业知识,您对潜在方案有什么建议,也许可以应用于每周 OHLC 数据。或者您是否建议使用其他函数对股票价格进行类似类型的分析
  • @itcplpl 尝试使用 zooxts 包以它们的格式创建系列,然后使用它们的 @987654327 强制转换为 ts 对象@ 方法。除此之外,直接使用加法模型对季节性和趋势分量进行建模——我最近使用 mgcv 包做了类似的事情,该包具有用于每周效果的循环平滑器。比 STL 涉及更多,但值得像 STL 这样的固定技术可以匹配的努力
猜你喜欢
  • 2020-04-09
  • 2013-12-25
  • 2014-05-12
  • 2017-03-04
  • 2011-09-30
  • 2018-10-21
  • 2011-03-19
相关资源
最近更新 更多