Tampaknya Anda mencari paku dalam interval waktu yang relatif tenang . "Relatif" berarti dibandingkan dengan nilai-nilai terdekat yang khas, yang menyarankan perataan seri. Sebuah kuat halus diinginkan justru karena tidak harus dipengaruhi oleh paku lokal beberapa. "Tenang" berarti variasi di sekitar yang halus itu kecil. Sekali lagi, perkiraan variasi lokal yang kuat diperlukan. Akhirnya, "lonjakan" akan menjadi residu besar sebagai kelipatan dari variasi lokal.
Untuk menerapkan resep ini , kita perlu memilih (a) seberapa dekat arti "terdekat", (b) resep untuk menghaluskan, dan (c) resep untuk menemukan variasi lokal. Anda mungkin harus bereksperimen dengan (a), jadi mari kita menjadikannya parameter yang mudah dikontrol. Pilihan yang baik dan tersedia untuk (b) dan (c) masing-masing adalah Lowess dan IQR . Berikut ini adalah R
implementasinya:
library(zoo) # For the local (moving window) IQR
f <- function(x, width=7) { # width = size of moving window in time steps
w <- width / length(x)
y <- lowess(x, f=w) # The smooth
r <- zoo(x - y$y) # Its residuals, structured for the next step
z <- rollapply(r, width, IQR) # The running estimate of variability
r/z # The diagnostic series: residuals scaled by IQRs
}
Sebagai contoh penggunaannya, pertimbangkan data simulasi ini di mana dua lonjakan berturut-turut ditambahkan ke periode tenang (dua berturut-turut harus lebih sulit untuk dideteksi daripada satu lonjakan terisolasi):
> x <- c(rnorm(192, mean=0, sd=1), rnorm(96, mean=0, sd=0.1), rnorm(192, mean=0, sd=1))
> x[240:241] <- c(1,-1) # Add a local spike
> plot(x)
Berikut ini plot diagnostiknya:
> u <- f(x)
> plot(u)
Terlepas dari semua kebisingan di data asli, plot ini dengan indah mendeteksi paku (yang relatif kecil) di tengah. Otomatis deteksi dengan memindai f(x)
nilai-nilai lebih besar (lebih besar dari sekitar 5 dalam nilai absolut: percobaan untuk melihat apa yang paling baik dengan data sampel).
> spikes <- u[abs(u) >= 5]
240 241 273
9.274959 -9.586756 6.319956
Deteksi palsu pada waktu 273 adalah outlier lokal acak. Anda dapat memperhalus tes untuk mengecualikan (sebagian besar) nilai palsu tersebut dengan memodifikasi f
untuk mencari nilai diagnostik r/z
dan nilai IQR rendah yang berjalan bersamaan z
. Namun, meskipun diagnostik memiliki skala dan interpretasi universal (tanpa unit), makna IQR "rendah" tergantung pada unit data dan harus ditentukan dari pengalaman.