Learn R Programming

pastecs (version 1.3.21)

tsd: Decomposition of one or several regular time series using various methods

Description

Use a decomposition method to split the series into two or more components. Decomposition methods are either series filtering/smoothing (difference, average, median, evf), deseasoning (loess) or model-based decomposition (reg, i.e., regression).

Usage

tsd(x, specs=NULL, method="loess",
    type=if (method == "census") "multiplicative" else "additive",
    lag=1, axes=1:5, order=1, times=1, sides=2, ends="fill", weights=NULL,
    s.window=NULL, s.degree=0, t.window=NULL, t.degree=2, robust=FALSE,
    trend=FALSE, xreg=NULL)
# S3 method for tsd
print(x, ...)
# S3 method for tsd
summary(object, ...)
# S3 method for summary.tsd
print(x, ...)
# S3 method for tsd
plot(x, series=1, stack=TRUE, resid=TRUE, col=par("col"),
    lty=par("lty"), labels=dimnames(X)[[2]], leg=TRUE, lpos=c(0, 0), xlab="time",
    ylab="series", main=paste("Series decomposition by", x$specs$method, "-",
    x$specs$type), ...)
# S3 method for tsd
extract(e, n, series=NULL, components=NULL, ...)
# S3 method for tsd
specs(x, ...)
# S3 method for specs.tsd
print(x, ...)

Value

An object of type 'tsd' is returned. It has methods print(),

summary(), plot(), extract() and specs().

Arguments

x

an univariate or multivariate regular time series ('ts' object) to be decomposed for tsd(), or a 'tsd' object for the methods

specs

specifications are collected from a 'tsd' object, using the specs method. This allows for reusing parameters issued from a previous similar analysis

method

the method to use to decompose the time series. Currently, possible values are: "diff", "average", "median", "evf", "reg", "loess" (by default) or "census". The corresponding function decXXXX() is applied to each of the series in x

type

the type of model to use: either "additive" (by default) or "multiplicative". In the additive model, all components must be added to reconstruct the initial series. In the multiplicative model, they must be multiplied (one components has the same unit as the original series, and the other ones are dimensionless multiplicative factors)

lag

The lag between the two observations used to calculate differences. By default, lag=1

axes

the number of axes to show in the plot

order

(1) for the method 'difference': the order of the difference corresponds to the number of times it is applied, by default order=1, (2) for the method 'average': the order of the moving average (the window of the average being 2*order+1), centered around the current observation or at left of this observation depending upon the value of the sides argument. Weights are the same for all observations within the window. However, if the argument weights is provided, it supersedes order. One can also use order="periodic". In this case, a deseasoning filter is calculated according to the value of frequency

times

The number of times to apply the method (by default, once)

sides

If 2 (by default), the window is centered around the current observation. If 1, the window is at left of the current observation (including it)

ends

either "NAs" (fill first and last values that are not calculable with NAs), or "fill" (fill them with the average of observations before applying the filter, by default), or "circular" (use last values for estimating first ones and vice versa), or "periodic" (use entire periods of contiguous cycles, deseasoning)

weights

a vector indicating weight to give to all observations in the window. This argument has the priority over order

s.window

the width of the window used to extract the seasonal component. Use an odd value equal or just larger than the number of annual values (frequency of the time series). Use another value to extract other cycles (circadian, lunar,...). Using s.window="periodic" ensures a correct value for extracting a seasonal component when the time scale is in years units

s.degree

the order of the polynome to use to extract the seasonal component (0 or 1). By default s.degree=0

t.window

the width of the window to use to extract the general trend when trend=TRUE (indicate an odd value). If this parameter is not provided, a reasonable value is first calculated, and then used by the algorithm.

t.degree

the order of the polynome to use to extract the general trend (0, 1 or 2). By default t.degree=2

robust

if TRUE a robust regression method is used. Otherwise (FALSE), by default, a classical least-square regression is used

trend

If TRUE a trend is calculated (under R only). Otherwise, the series is decomposed into a seasonal component and residuals only

xreg

a second regular time series or a vector of the same length as x with corresponding values from the regression model

object

a 'tsd' object as returned by the function tsd(), or any of the decXXXX() functions

e

a 'tsd' object as returned by the function tsd(), or any of the decXXXX() functions

series

(1) for plot(): the series to plot. By default, series=1, the first (or possibly unique) series in the 'tsd' object is plotted. (2) for extract: the name or the index of the series to extract. If series is provided, then n is ignored. By default, series=NULL. It is also possible to use negative indices. In this case, all series are extracted, except those ones

stack

graphs of each component are either stacked (stack=TRUE, by default), or superposed on the same graph stack=FALSE

resid

do we have to plot also the "residuals" components (resid=TRUE, by default) or not? Usually, in a stacked graph, you would like to plot the residuals, while in a superposed graph, you would not

col

color of the plot

lty

line type for the plot

labels

the labels to use for all y-axes in a stacked graph, or in the legend for a superposed graph. By default, the names of the components ("trend", "seasonal", "deseasoned", "filtered", "residuals", ...) are used

leg

only used when stack=FALSE. Do we plot a legend (leg=TRUE or not?

lpos

position of the upper-left corner of the legend box in the graph coordinates (x,y). By default, leg=c(0,0)

xlab

the label of the x-axis

ylab

the label of the y-axis

main

the main title of the graph

n

the number of series to extract (from series 1 to series n). By default, n equals the number of series in the 'tsd' object. If both series and components arguments are NULL, all series and components are extracted and this method has exactly the same effect as tseries

components

the names or indices of the components to extract. If components=NULL (by default), then all components of the selected series are extracted. It is also possible to specify negative indices. In this case, all components are extracted, except those ones

...

(1) for tsd(): further arguments to pass to the corresponding decXXXX() function. (2) for plot(): further graphical arguments, (3) unused for the other functions or methods

Author

Frédéric Ibanez (ibanez@obs-vlfr.fr), Philippe Grosjean (phgrosjean@sciviews.org)

Details

To eliminate trend from a series, use "diff" or use "loess" with trend=TRUE. If you know the shape of the trend (linear, exponential, periodic, etc.), you can also use it with the "reg" (regression) method. To eliminate or extract seasonal components, you can use "loess" if the seasonal component is additive, or "census" if it is multiplicative. You can also use "average" with argument order="periodic" and with either an additive or a multiplicative model, although the later method is often less powerful than "loess" or "census". If you want to extract a seasonal cycle with a given shape (for instance, a sinusoid), use the "reg" method with a fitted sinusoidal equation. If you want to identify levels in the series, use the "median" method. To smooth the series, you can use preferably the "evf" (eigenvector filtering), or the "average" methods, but you can also use "median". To extract most important components from the series (no matter if they are cycles -seasonal or not-, or long-term trends), you should use the "evf" method. For more information on each of these methods, see online help of the corresponding decXXXX() functions.

References

Kendall, M., 1976. Time-series. Charles Griffin & Co Ltd. 197 pp.

Laloire, J.C., 1972. Méthodes du traitement des chroniques. Dunod, Paris, 194 pp.

Legendre, L. & P. Legendre, 1984. Ecologie numérique. Tome 2: La structure des données écologiques. Masson, Paris. 335 pp.

Malinvaud, E., 1978. Méthodes statistiques de l'économétrie. Dunod, Paris. 846 pp.

Philips, L. & R. Blomme, 1973. Analyse chronologique. Université Catholique de Louvain. Vander ed. 339 pp.

See Also

tseries, decdiff, decaverage, decmedian, decevf, decreg, decloess, deccensus

Examples

Run this code
data(releve)
# Regulate the series and extract them as a time series object
rel.regy <- regul(releve$Day, releve[3:8], xmin=6, n=87, units="daystoyears",
        frequency=24, tol=2.2, methods="linear", datemin="21/03/1989",
        dateformat="d/m/Y")
rel.ts <- tseries(rel.regy)

# Decompose all series in the set with the "loess" method
rel.dec <- tsd(rel.ts, method="loess", s.window=13, trend=FALSE)
rel.dec
plot(rel.dec, series=5, col=1:3)    # An plot series 5

# Extract "deseasoned" components
rel.des <- extract(rel.dec, series=3:6, components="deseasoned")
rel.des[1:10,]

# Further decompose these components with a moving average
rel.des.dec <- tsd(rel.des, method="average", order=2, times=10)
plot(rel.des.dec, series=3, col=c(2, 4, 6))
# In this case, a superposed graph is more appropriate:
plot(rel.des.dec, series=3, col=c(2,4), stack=FALSE, resid=FALSE,
        labels=c("without season cycle", "trend"), lpos=c(0, 55000))
# Extract residuals from the latter decomposition
rel.res2 <- extract(rel.des.dec, components="residuals")

Run the code above in your browser using DataLab