Skip to content

More help with stl?

8 messages · stephen sefick, Ryan, rkevinburton at charter.net

#
I don't understand the output of stl. As a simple example:

y <- numeric(1:365)
y[250] = 1

stl <- stl(ts(y, frequency=7), s.window="periodic")

This returns without error but the results are puzzling to me. If you plot the results it is probably easiest to visualize what I mean.

plot(stl)

This shows the original data (a single spike at 250). A trend (which also shows a bump at 250). It is the rest that I have a question on. For the "seasonal" component it seems to show a sinusoid like wave with a period roughly a week (7 days) long all with the same amplitude. I can't see how a single spike can generate a "seasonal" component that is periodic for every period in the data. Finally the "remainder" portion of the data generated seems to show just what I want, a representation of the input. But if this is ruly the remainder (data - (trend + seasonal)) then shouldn't it have all entries close to zero? Please help me with my misunderstanding if you have any experience with stl. 

Finally it has been suggested that in order to find an overall formula to represent the data a model will need to be constructed. I unfortunately don't have any experience in developing a model. Any hints on where to start?

Thank you.

Kevin
#
I can't reproduce this because the data has two points 0 and one at
the ends of the data set, and I get an na.fail error.  There is no
periodic part to this data- it doesn't seem because there are only two
points.

stephen
On Tue, Sep 2, 2008 at 11:38 AM, <rkevinburton at charter.net> wrote:

  
    
#
There was a typo. I wnated to form an array so it should be:

y <- numeric(365)

Now you should be able to reproduce it.

Kevin
---- stephen sefick <ssefick at gmail.com> wrote:
#
.15+.52 #seasonal (.01*52) I think because you said it was periodic
[1] 0.67
[1] 1.47
now if you look at the little bit that is in the remainder being
negative then you can probably subtract about .4ish which is close to
1  which is the value of the time series in question, I think.

Is this example periodic?  Is your data periodic?
On Tue, Sep 2, 2008 at 12:21 PM, <rkevinburton at charter.net> wrote:

  
    
#
Trying your example:

y <- numeric(365) y y[250] = 1 y

y.stl <- stl(ts(y, frequency=7), s.window="periodic")

First of all, pay attention to the axes on your plot - the scales are
different for each panel. Your seasonal component is quite small in magnitude
compared to everything else.

Also, if you are unsure that data = seasonal + trend + remainder, just try

apply(y.stl$time.series, 1, sum)

which adds up the three components. This will get you back your original time
series.

The problem with your example is that you need to be giving sensible data to
the stl procedure. How does data with a bunch of zeros and one 1 represent
anything with weekly periodicity? For example, try the following plot:

library(lattice) xyplot(y ~ 1:365 | factor(rep(1:7, 53)[1:365]))

This groups your data into all Mondays, all Tuesdays, etc. Do you see anything
here indicating periodicity?

It was your specification of frequency=7 that created the cyclical pattern you
see in the seasonal component. The STL procedure has a step where it smooths,
in this case, each day of the week, and then strings each of those fitted
values back together. In the case of this data, it gets a positive value for
day 5 (refer to lattice plot above), and hence the seasonal pattern you see.

If you read the documentation, you will see that s.window="periodic" causes
the mean to be taken for each day of the week, which forces the day of the
week to be constant. If you would like the seasonal to be able to adapt, try
something like:

y.stl <- stl(ts(y, frequency=7), s.window=9, s.degree=1) plot(y.stl)

This will use local linear fitting to each week day and allow the seasonal to
evolve over time. You can play with s.window argument.

If you provided this example just as an example, hopefully this explanation
will be helpful. However, if this is what your data actually looks like, I
don't see how stl will do you any good.
#
The data is real. The fact that there are a bunch of zeros and only one value of 1 is just the way things are. I have over 20,000 data sets and some are like this. Admittedly this is not periodic but ideally you should see all frequencies at various amplitudes, remniscent of the impulse response to a system. I was not expecting long string of sinusoids all at the same amplitude. 

Thank you for your imput. This will help in my understanding.

Kevin
---- Ryan Hafen <rhafen at purdue.edu> wrote:
#
what kind of data is this?
On Tue, Sep 2, 2008 at 3:10 PM, <rkevinburton at charter.net> wrote:

  
    
#
Thank you. 
I am not saying the data is wrong. I can do somethiing like:
y = tread + seasonal + remainder
and it gives me back the original data almost exactly.
I just don't know how to interpret it. The data is clearly not periodic but I was expecting to get more information about the function that was indicated in the seasonal component. Something similar to the impulse response to a function generates values at basically all frequencies but different amplitudes. There is something different in the response to this function than say what would be expected from a Fourier analysis of frequencies.

Kevin
---- stephen sefick <ssefick at gmail.com> wrote: