despike {oce} | R Documentation |
Remove spikes from a time series
despike(x, reference=c("median","smooth", "trim"), n=4, k=7, min=NA, max=NA, replace=c("reference", "NA"), skip)
x |
a vector of (time-series) values, a list of vectors, a data frame,
or an object that inherits from class |
reference |
indication of the type of reference time series to be used in the detection of spikes; see ‘Details’. |
n |
an indication of the limit to differences between |
k |
length of running median used with |
min |
minimum non-spike value of |
max |
maximum non-spike value of |
replace |
an indication of what to do with spike values, with
|
skip |
optional vector naming columns to be skipped. This is ignored
if |
The method identifies spikes with respect to a "reference"
time-series, and replaces these spikes with the reference value, or with
NA
according to the value of action
.
For reference="median"
, the first step is to linearly interpolate
across any gaps, in which x==NA
. Then the reference time series is
constructed using runmed
as a running median of k
elements. Then, the standard deviation of the difference between x
and the reference is calculated. Any x
values that differ from the
reference by more than n
times this standard deviation are
considered to be spikes. If replace="reference"
, these x
values are replaced with the reference series, and the resultant time
series is returned. If replace="NA"
, the spikes are replaced with
NA
in the returned time series.
For reference="smooth"
, the processing is the same as for
"median"
, except that smooth
is used to calculate the
reference time series.
For reference="trim"
, the reference time series is constructed by
linear interpolation across any regions in which x<min
or
x>max
. In this case, the value of n
is ignored, and the
return value either uses the reference time series for spikes, or
NA
, according to the value of replace
.
A new vector in which spikes are replaced as described above.
Dan Kelley
n <- 50 x <- 1:n y <- rnorm(n=n) y[n/2] <- 10 # 10 standard deviations plot(x, y, type='l') lines(x, despike(y), col='red') lines(x, despike(y, reference="smooth"), col='darkgreen') lines(x, despike(y, reference="trim", min=-3, max=3), col='blue') legend("topright", lwd=1, col=c("black", "red", "darkgreen", "blue"), legend=c("raw", "median", "smooth", "trim")) # add a spike to a CTD object data(ctd) plot(ctd) T <- ctd[["temperature"]] T[10] <- T[10] + 10 ctd[["temperature"]] <- T CTD <- despike(ctd) plot(CTD)