2012-01-17 5 views
1

J'essaie d'utiliser stl pour obtenir une ventilation de la saisonnalité et de la tendance dans mes données de timeseries. J'ai des données de tick, et j'ai créé un objet de ts.traçage stl avec des données de séries chronologiques

j'ai couru une requête SQL pour obtenir les données dans le formulaire ci-dessous

> 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 

et je converti en ts en exécutant les éléments suivants:

> 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 

toute suggestion sur la façon dont je peux fixer le erreur, pour être en mesure de voir la répartition des différentes composantes de la tendance ...

+0

Je n'ai pas beaucoup travaillé sur les séries temporelles, donc juste pour clarifier: est-ce la fonction 'plot' qui produit l'erreur ou' stl'? c'est-à-dire si vous faites le 'drg <-stl (...)' sur sa propre ligne et ensuite 'plot (drg)', quelle ligne renvoie l'erreur? Ma conjecture est «intrigue», alors peut-être que «drg» n'est pas ce que vous attendez qu'il soit. Pouvez-vous fournir un petit échantillon de vos données reproduisant votre problème? –

+0

c'est la partie stl '> drg <-stl (log (xt)," per ") Erreur dans stl (log (xt)," per "): la série n'est pas périodique ou a moins de deux périodes ' Je vais mettre à jour mon post avec un petit échantillon des données en quelques minutes – itcplpl

+0

juste mis à jour post avec un petit échantillon de données qui reproduit le problème – itcplpl

Répondre

11

L'erreur est là pour vous de voir

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

la nécessité de la fonction stl() à la fois un objet timeseries et une fréquence (ou également, incrément) de sorte que la partie saisonnière de sens. Pour les séries macro-économiques à plus long terme, il s'agit généralement de 1/12 pour les données mensuelles ou de 1/4 pour les données trimestrielles. Voir help(ts) pour plus de détails, et regardez de plus près les exemples pour ts() et stl(), et le type de données utilisées ici.

Faire cela avec les données de l'entreprise quotidienne est ... plus difficile que le calendrier est, bien, irrégulier. Avec vos données intra-quotidiennes, vous devez trouver un schéma. Ces données sont fondamentalement différentes: les marchés s'ouvrent et se ferment, tandis que les macro-données peuvent être conceptualisées comme étant continues.

+2

Merci Dirk, j'apprécie le raisonnement et votre clarification. Avec votre expertise, auriez-vous des suggestions sur un régime potentiel, peut-être qui peut être appliqué sur des données hebdomadaires OHLC. Ou y at-il une autre fonction que vous suggéreriez d'utiliser pour un type d'analyse similaire sur les cours boursiers? – itcplpl

+2

@itcplpl essayez avec le paquet * zoo * ou * xts * pour créer une série dans leurs formats, puis contractez l'objet 'ts' en utilisant leur' as.ts() 'méthodes. Autre que cela, modéliser les composantes saisonnières et de tendance directement en utilisant un modèle additif - j'ai fait quelque chose de similaire récemment en utilisant le paquetage mgcv qui a des lissages cycliques pour l'effet hebdomadaire. Bien plus impliqué que STL mais vaut bien l'effort que les techniques en conserve comme STL peuvent correspondre –

Questions connexes