2012-01-17 75 views
1

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

我跑了一个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 

我如何能解决任何建议错误,能够看到不同趋势分量的细分...

+0

我还没有做很多时间系列的工作,所以只是为了澄清:是'plot'函数产生错误还是'stl'?即,如果你在自己的行上执行'drg < - stl(...)',然后执行'plot(drg)',哪行会抛出错误?我的猜测是'plot',或许'drg'不是你所期望的。你能否提供一小部分数据来重现你的问题? – 2012-01-17 01:35:08

+0

stl部分'> drg <-stl(log(xt),“per”) stl(log(xt),“per”)中的错误: 系列不是周期性的或者具有少于两个周期 '我将在短短几分钟内更新我的帖子,并提供一小段数据样本 – itcplpl 2012-01-17 01:58:32

+0

刚刚更新后的小数据样本重现问题 – itcplpl 2012-01-17 02:10:50

回答

11

错误在那里你可以看到

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

stl()功能既需要时间序列对象一个频率(或同等地,增量),因此季节性部分使任何意义。对于较长期的宏观经济系列,月度通常为1/12,季度数据通常为1/4。有关详细信息,请参阅help(ts),并仔细查看ts()stl()的示例以及此处使用的数据类型。

这样做与商业日常数据一样难,因为日历很不规则。通过您的日常数据,您必须提出一些方案。这些数据是根本不同的:市场开放和关闭,而宏观数据可以概念化为连续的。

+2

谢谢德克,我很感谢你的理由和你的澄清。凭借您的专业知识,您是否会对潜在计划提出任何建议,或许可以应用于每周OHLC数据。还是有另一种功能,你会建议使用相似类型的股票分析类型 – itcplpl 2012-01-17 02:36:29

+2

@itcplpl尝试用*动物园*或* xts *包创建一系列的格式,然后强迫'ts'对象使用他们的' as.ts()'方法。除此之外,直接使用添加剂模型对季节和趋势组件进行建模 - 我最近使用mgcv软件包进行了类似的操作,该软件包具有用于每周效果的循环平滑器。更多的涉及STL,但非常值得像STL这样的罐头技术可以匹配的努力 – 2012-01-17 20:25:15