Analysis of Short Time Series

Using Fourier Transform as coefficients in short time series data helps with prediction.

Michael DeWitt https://michaeldewittjr.com
07-19-2018

I enjoy reading Rob Hyndman’s blog. The other day he did some analysis of a short times series. More about that is available at his blog here. The neat thing that he shows is that you don’t need a tremendous amount of data to decompose seasonality. Using fourier transforms1.

He sets up a small data set:

df <- ts(c(2735.869,2857.105,2725.971,2734.809,2761.314,2828.224,2830.284,
2758.149,2774.943,2782.801,2861.970,2878.688,3049.229,3029.340,3099.041,
3071.151,3075.576,3146.372,3005.671,3149.381), start=c(2016,8), frequency=12)

Which only has 20 months of data in it. He then applies a time series linear model with 2 sine/ cosine pair terms.

library(forecast)
library(ggplot2)
decompose_df <- tslm(df ~ trend + fourier(df, 2))

We can see the coefficients of the model here:

summary(decompose_df)

Call:
tslm(formula = df ~ trend + fourier(df, 2))

Residuals:
Min       1Q   Median       3Q      Max
-100.572  -33.513    5.743   24.430   79.728

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept)         2637.357     24.862 106.080  < 2e-16 ***
trend                 24.541      2.077  11.816 1.14e-08 ***
fourier(df, 2)S1-12   76.553     17.105   4.475 0.000523 ***
fourier(df, 2)C1-12   -4.281     17.105  -0.250 0.806010
fourier(df, 2)S2-12   36.931     16.203   2.279 0.038850 *
fourier(df, 2)C2-12   10.402     16.802   0.619 0.545780
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 50.98 on 14 degrees of freedom
Multiple R-squared:  0.917, Adjusted R-squared:  0.8874
F-statistic: 30.94 on 5 and 14 DF,  p-value: 4.307e-07

From there tou can see the trends for each of the components.

trend <- coef(decompose_df) + coef(decompose_df)['trend']*seq_along(df)
components <- cbind(
data = df,
trend = trend,
season = df - trend - residuals(decompose_df),
remainder = residuals(decompose_df)
)
autoplot(components, facet=TRUE) out <-forecast(decompose_df, newdata = df)
autoplot(out) 1. Read more about Fourier series and transforms on wikipedia. They are in my opinion a modern marvel of mathematics

Corrections

If you see mistakes or want to suggest changes, please create an issue on the source repository.

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. Source code is available at https://github.com/medewitt/medewitt.github.io, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".