Learn R Programming

wq (version 0.4.8)

pett: Nonparametric Change-Point Detection

Description

Locates a single change-point in an annual series based on the Pettitt test.

Usage

pett(x, plot = FALSE, order = FALSE, pval = .05, pchs = c(19, 21), ...)

Arguments

x
a numeric vector, matrix or data frame with no missing interior values
plot
Should the trends be plotted when x is a matrix?
order
Should the plotted trends be ordered by size?
pval
p-value for significance
pchs
Plot symbols for significant and not significant trend estimates, respectively
...
Other arguments to pass to plotting function

Value

A list of the following if x is a vector:
pettitt.K
Pettitt's statistic
p.value
significance probability for statistic
change.point
last position preceding change to new level
change.time
if available, time of change.point position
change.size
median of all differences between points after and up to change.point
or a matrix with corresponding columns if x is a matrix or data frame.

Details

Pettitt's (1979) method is a rank-based nonparametric test for abrupt changes in a time series. It uses the Mann-Whitney statistic for testing that two samples (before and after the change-point) come from the same distribution, choosing the change-point that maximizes the statistic. The p-value is approximate but accurate to 0.01 for $p \le$ 0.5. Serial correlation is ignored, so the interval between points should be long enough to avoid strong serial correlation. The size of the change is estimated as the median difference between all pairs of observations in which the first one is after the change-point and the second is up to the change-point.

Missing values are allowed at the beginning or end of each variable but interior missing values will produce an NA. Otherwise the change-point might not be meaningful.

If plot = TRUE, a dot plot of change.times is shown. If sort = TRUE, the dots are sorted by change.time. The plot symbols indicate, respectively, that the trend is significant or not significant. The plot can be customized by passing any arguments used by dotchart such as xlab, as well as graphical parameters described in par.

References

Pettitt, A. N. (1979) A non-parametric approach to the change-point problem. Journal of the Royal Statistical Society. Series C (Applied Statistics) 28(2), 126--135.

Examples

Run this code
# data from Pettitt (1979, Table 1):
y <- c(-1.05, 0.96, 1.22, 0.58, -0.98, -0.03, -1.54, -0.71, -0.35, 0.66, 0.44,
  0.91, -0.02, -1.42, 1.26, -1.02, -0.81, 1.66, 1.05, 0.97, 2.14, 1.22, -0.24,
  1.60, 0.72, -0.12, 0.44, 0.03, 0.66, 0.56, 1.37, 1.66, 0.10, 0.80, 1.29, 0.49,
  -0.07, 1.18, 3.29, 1.84)
pett(y) # K=232, p=0.0146, change-point=17, the same results as Pettitt
# identify the year of a change-point in an annual time series:
pett(Nile)
# apply to a matrix time series:
y <- ts.intersect(Nile, LakeHuron)
pett(y)
pett(y, plot = TRUE, xlab = "Change-point")
legend("topleft", legend = "p < 0.05", pch = 19, bty="n")
# note how a smooth trend can disguise a change-point:
y <- 1:100 + c(rep(0, 75), rep(10, 25)) # smooth trend with change-point at 75
pett(y) # gives 50, erroneously
pett(residuals(lm(y~I(1:100)))) # removing trend gives 75, correctly

Run the code above in your browser using DataLab