despike {oce} | R Documentation

## Remove spikes from a time series

### Description

Remove spikes from a time series

### Usage

    despike(x, reference=c("median","smooth", "trim"), n=4, k=7, min=NA, max=NA,
            replace=c("reference", "NA"), skip)

### Arguments

`x` | a vector of (time-series) values, a list of vectors, a data frame, or an object that inherits from class `oce`.
`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 `x` and the reference time series, used for `reference="median"` or `reference="smooth"`; see ‘Details.’
`k` | length of running median used with `reference="median"`, and ignored for other values of `reference`.
`min` | minimum non-spike value of `x`, used with `reference="trim"`.
`max` | maximum non-spike value of `x`, used with `reference="trim"`.
`replace` | an indication of what to do with spike values, with `"reference"` indicating to replace them with the reference time series, and `"NA"` indicating to replace them with `NA`.
`skip` | optional vector naming columns to be skipped. This is ignored if `x` is a simple vector. Any items named in `skip` will be passed through to the return value without modification. In some cases, `despike` will set up reasonable defaults for `skip`, e.g. for a `ctd` object, `skip` will be set to `c("time", "scan", "pressure")` if it is not supplied as an argument.

### Details

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`.

### Value

A new vector in which spikes are replaced as described above.

### Author(s)

Dan Kelley

### Examples

    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)

[Package oce version 0.9-18 Index]