Title: | Linear Trend Segmentation |
---|---|
Description: | Performs the detection of linear trend changes for univariate time series by implementing the bottom-up unbalanced wavelet transformation proposed by H. Maeng and P. Fryzlewicz (2023). The estimated number and locations of the change-points are returned with the piecewise-linear estimator for signal. |
Authors: | Hyeyoung Maeng [aut, cre], Piotr Fryzlewicz [aut] |
Maintainer: | Hyeyoung Maeng <[email protected]> |
License: | GPL |
Version: | 1.3.0 |
Built: | 2025-02-14 03:24:38 UTC |
Source: | https://github.com/cran/trendsegmentR |
This function is used inside trendsegment
and performs the inverse TGUW transformation by undoing the orthonormal transformation of TGUW
in reverse order.
Details of the inverse TGUW transformation can be found in H. Maeng and P. Fryzlewicz (2023), Detecting linear trend changes in data sequences.
invTGUW(ts.obj)
invTGUW(ts.obj)
ts.obj |
A list returned by |
ts.obj |
The modified ts.obj is the result of the inverse TGUW transformation and |
Hyeyoung Maeng [email protected], Piotr Fryzlewicz [email protected]
trendsegment
, TGUW
, thresholding
x <- c(1:10, rep(5,9)) n <- length(x) x <- x + rnorm(n) tguwfit <- TGUW(x) th.const <- 1.3 lambda <- (stats::mad(diff(diff(x)))/sqrt(6)) * sqrt(2 * log(n)) * th.const thrfit <- thresholding(ts.obj = tguwfit, lambda = lambda, minsegL = 5, bal = 0, connected = TRUE) invfit <- invTGUW(ts.obj = thrfit) invfit
x <- c(1:10, rep(5,9)) n <- length(x) x <- x + rnorm(n) tguwfit <- TGUW(x) th.const <- 1.3 lambda <- (stats::mad(diff(diff(x)))/sqrt(6)) * sqrt(2 * log(n)) * th.const thrfit <- thresholding(ts.obj = tguwfit, lambda = lambda, minsegL = 5, bal = 0, connected = TRUE) invfit <- invTGUW(ts.obj = thrfit) invfit
Performs the bottom-up unbalanced wavelet decomposition. This function is used inside trendsegment
.
Details of the TGUW transformation can be found in H. Maeng and P. Fryzlewicz (2023), Detecting linear trend changes in data sequences.
TGUW(x, p = 0.04)
TGUW(x, p = 0.04)
x |
An input vector to be decomposed. |
p |
Proportion of all possible remaining merges which specifies the number of merges allowed in a single pass over the data. The default is 0.04. |
A list with the followings:
x |
The original input vector |
n |
The length of |
twotogether |
A vector indicating locations of the detail coefficients returned by Type 3 merges (merging two sets of paired smooth coefficients). This is used in |
merging.hist |
An array of dimension 4 by 3 by |
ts.coeffs |
The transformed |
Hyeyoung Maeng [email protected], Piotr Fryzlewicz [email protected]
trendsegment
, thresholding
, invTGUW
x <- c(1:10, rep(5,9)) n <- length(x) x <- x + rnorm(n) tguwfit <- TGUW(x) tguwfit
x <- c(1:10, rep(5,9)) n <- length(x) x <- x + rnorm(n) tguwfit <- TGUW(x) tguwfit
This function is used inside trendsegment
and performs the thresholding of the detail coefficients returned by the Tail-Greedy Unbalanced Wavelet (TGUW) transformation.
The denoising is achieved by a prespecified threshold in a "connected" way in that it prunes the branches if and only if
the detail coefficient itself and all of its children coefficients are below some thresholds in its size. Also, the
"two together" rule is applied to any paired detail coefficients returned by Type 3
merging (merging two sets of paired smooth coefficients) in the sense that both detail coefficients should be survived if at least one of their size is over threshold. For details, see H. Maeng and P. Fryzlewicz (2023), Detecting linear trend changes in data sequences.
thresholding(ts.obj, lambda, minsegL, bal = 0, connected = FALSE)
thresholding(ts.obj, lambda, minsegL, bal = 0, connected = FALSE)
ts.obj |
A list returned by |
lambda |
The magnitude of the threshold. It has a form of |
minsegL |
The minimum segment length of estimated signal returned by |
bal |
The minimum ratio of the length of the shorter region to the length of the entire merging region especially when the merges of Type 2 (merging one initial and a paired smooth coefficient) or of Type 3 (merging two sets of (paired) smooth coefficients) are performed. Only triplets which satisfy this balancedness condition survives in denoising. Point anomalies can be detected only if |
connected |
If connected=TRUE, the thresholding puts the connected rule above the |
ts.obj |
The modified ts.obj containing zero detail coefficients in the |
Hyeyoung Maeng [email protected], Piotr Fryzlewicz [email protected]
x <- c(1:10, rep(5,9)) n <- length(x) x <- x + rnorm(n) tguwfit <- TGUW(x) th.const <- 1.3 lambda <- (stats::mad(diff(diff(x)))/sqrt(6)) * sqrt(2 * log(n)) * th.const thrfit <- thresholding(ts.obj = tguwfit, lambda = lambda, minsegL = 5, bal = 0, connected = FALSE) thrfit
x <- c(1:10, rep(5,9)) n <- length(x) x <- x + rnorm(n) tguwfit <- TGUW(x) th.const <- 1.3 lambda <- (stats::mad(diff(diff(x)))/sqrt(6)) * sqrt(2 * log(n)) * th.const thrfit <- thresholding(ts.obj = tguwfit, lambda = lambda, minsegL = 5, bal = 0, connected = FALSE) thrfit
The main function of the package trendsegmentR
. This function estimates the number and locations of change-points in linear trend of noisy data. The estimated change-points may contain point anomalies (segments including only one data point) if any. It also returns the estimated signal, the best linear fit for each segment between a pair of adjacent change-points. The algorithm includes three steps, Tail-Greedy Unbalanced Wavelet (TGUW) transform (TGUW
), thresholding (thresholding
) and inverse TGUW transform (invTGUW
).
trendsegment( x, indep = FALSE, th.const = krt.hvt(x)$thr, p = 0.04, bal = 0, minsegL = floor(0.9 * log(length(x))), continuous = FALSE, connected = FALSE )
trendsegment( x, indep = FALSE, th.const = krt.hvt(x)$thr, p = 0.04, bal = 0, minsegL = floor(0.9 * log(length(x))), continuous = FALSE, connected = FALSE )
x |
A data vector to be examined for change-point detection. |
indep |
If x is known to be independent over time, let indep=TRUE, otherwise the default is indep=FALSE. |
th.const |
Robust thresholding parameter used in |
p |
Proportion of all possible remaining merges which specifies the number of merges allowed in a single pass over the data. This is used in |
bal |
The minimum ratio of the length of the shorter region to the length of the entire merging region especially when the merges of Type 2 (merging one initial and a paired smooth coefficient) or of Type 3 (merging two sets of (paired) smooth coefficients) are performed. The default is set to 0. |
minsegL |
The minimum segment length of estimated signal returned by |
continuous |
If continuous=TRUE, the estimated signal returned by |
connected |
If connected=TRUE, the |
The algorithm is described in H. Maeng and P. Fryzlewicz (2023), Detecting linear trend changes in data sequences.
A list with the following.
x |
The original input vector |
est |
The estimated piecewise-linear signal of |
no.of.cpt |
The estimated number of change-points. |
cpt |
The estimated locations of change-points. |
Hyeyoung Maeng [email protected], Piotr Fryzlewicz [email protected]
x <- c(rep(0,100), seq(0, 4, length.out = 100), rep(3, 100), seq(3, -1, length.out=99)) n <- length(x) x <- x + rnorm(n) tsfit <- trendsegment(x = x) tsfit plot(x, type = "b", ylim = range(x, tsfit$est)) lines(tsfit$est, col=2, lwd=2) abline(v=tsfit$cpt, col=3, lty=2, lwd=2)
x <- c(rep(0,100), seq(0, 4, length.out = 100), rep(3, 100), seq(3, -1, length.out=99)) n <- length(x) x <- x + rnorm(n) tsfit <- trendsegment(x = x) tsfit plot(x, type = "b", ylim = range(x, tsfit$est)) lines(tsfit$est, col=2, lwd=2) abline(v=tsfit$cpt, col=3, lty=2, lwd=2)