Next: dpss() Up: Time Series Macros Help Previous: crsspectrum()   Contents


detrend(x [,Degree]), REAL vector or matrix x, integer scalar or vector

Keywords: time domain
y1 <- detrend(y, k, time:tt) detrends each column of REAL vector or
matrix by subtracting a degree k polynomial P_k(tt).  Each column of y,
which can have no MISSING values, is considered as a time series
observed at time points tt[1], tt[2], ..., tt[N], where N = nrows(y).
tt is a REAL vector of length N and with no MISSING values.  y1 has the
same size and shape as y.

k is usually an integer scalar but can be a length ny = ncols(y) vector
of integers, in which case column j is detrended by a degree k[j]

When k = 1, a linear trend is removed.  When k = 0, only the sample mean
is subtracted.  When k < 0, nothing is subtracted and y1 = y.
Each polynomial is fit by least squares.

You can find the trend values themselves by y - detrend(y,i,time:tt).

detrend(y, time:tt) is equivalent to detrend(y, 1, time:tt), subtracting
least squares regression lines a + b*tt from columns of y.
detrend(y [,k]) is equivalent to detrend(y [,k], time:run(nrows(y))).
This is what you should use with discrete parameter time series observed
at equally spaced time points.

Caution: Some early versions of detrend() used k = 0 as the default,
so that detrend(y) removed only the column means.  It was changed
because it seemed inconsistent with the usual meaning of "detrend".


Compute residuals from linear trend:

  Cmd> detrended <- detrend(y) # or detrend(y,1,time:run(nrows(y)))

Plot a discrete parameter monthly time series starting January 1995
together with cubic trend:

  Cmd> tsplot(hconcat(y,y-detrend(y,3)),1995,1/12,title:"Time series")
Detrend y[,1] linearly, y[,2] using a cubic polynomial and y[,3] not at

  Cmd> y1 <- detrend(y,vector(1,3,-1))

See also regress(), orthopoly(), tsplot().

Gary Oehlert 2003-01-15