मैं एक समय श्रृंखला में शोर पैच कैसे उजागर कर सकता हूं?


9

मेरे पास बहुत समय श्रृंखला डेटा है - जल स्तर और समय बनाम वेग। यह एक हाइड्रोलिक मॉडल सिमुलेशन से आउटपुट है। समीक्षा प्रक्रिया के भाग के रूप में यह पुष्टि करने के लिए कि मॉडल उम्मीद के मुताबिक प्रदर्शन कर रहा है, मुझे यह सुनिश्चित करने के लिए प्रत्येक बार श्रृंखला को प्लॉट करना होगा कि डेटा में कोई "वॉबलर्स" नहीं हैं (उदाहरण के लिए नीचे छोटा वॉबल देखें)। मॉडलिंग सॉफ्टवेयर का यूआई उपयोग करना इस डेटा को जांचने का एक बहुत धीमा और श्रमसाध्य तरीका है। इसलिए मैंने एक्सेल में परिणाम सहित मॉडल से डेटा के विभिन्न बिट्स आयात करने के लिए एक छोटा VBA मैक्रो लिखा है और उन सभी को एक ही बार में प्लॉट किया है। मैं समय श्रृंखला के आंकड़ों का विश्लेषण करने और किसी भी ऐसे खंड को उजागर करने की उम्मीद कर रहा हूं, जो संदिग्ध हैं।

मेरा अभी तक केवल यही विचार है कि मैं डेटा के ढलान पर कुछ विश्लेषण कर सकता हूं। कहीं भी है कि ढलान तेजी से एक सकारात्मक खोज खिड़की के भीतर कई बार सकारात्मक होने से बदल जाता है अस्थिर के रूप में वर्गीकृत किया जा सकता है। क्या मुझे कोई सरल चाल याद आ रही है? अनिवार्य रूप से, एक "स्थिर" सिमुलेशन को बहुत चिकनी वक्र प्रदान करना चाहिए। किसी भी अचानक परिवर्तन की गणना में अस्थिरता का परिणाम होने की संभावना है।

उदाहरण मामूली अस्थिरता


1
सरल तरीकों के एक सूट के लिए टुकी की पुस्तक ईडीए पढ़ें । उदाहरण के लिए, पुस्तक में प्रारंभिक, वह सरल धूम्रपान करने वालों और अवशिष्ट प्राप्त करने के लिए उनके उपयोग का वर्णन करता है। पूर्ण अवशिष्टों का एक अनुवर्ती चिकनी आपके घटता की स्थानीय परिवर्तनशीलता को चार्ट करेगा, उच्च जा रहा है जहां आपके पास तेजी से, अचानक, या बाहरी परिवर्तन होते हैं, और अन्यथा कम रहते हैं। कई और अधिक परिष्कृत तरीके संभव हैं, लेकिन शायद यह पर्याप्त होगा। Tukey's smoothers को VBA में कोड करना अपेक्षाकृत आसान है: मैंने इसे किया है
whuber

@ वाउचर यह अनिवार्य रूप से हाई-पास फिल्टर के फिसलने की शक्ति है?
अमीबा

@ बंबा शायद। इस तरह के फिल्टर के बारे में मेरी समझ यह है कि वे पूरी तरह से स्थानीय नहीं हैं और वे निश्चित रूप से मजबूत नहीं हैं, जबकि तुकी के धूम्रपान करने वालों में ये दोनों महत्वपूर्ण गुण हैं। (आजकल लोगों लेस या चौरसाई के लिए Gams है, जो ठीक है का उपयोग करें, लेकिन उन बहुत कम लागू करने के लिए सरल कर रहे हैं।)
whuber

जवाबों:


11

सादगी के लिए, मैं डेटा के एक मजबूत चिकनी के सापेक्ष अवशिष्टों के आकार (पूर्ण मूल्यों) का विश्लेषण करने का सुझाव दूंगा। स्वचालित पहचान के लिए, उन आकारों को एक संकेतक द्वारा प्रतिस्थापित करने पर विचार करें: 1 जब वे कुछ उच्च मात्रा से अधिक होते हैं, तो स्तर पर कहते हैं1-α, और 0 अन्यथा। इस सूचक को चिकना करें और अधिक से अधिक चिकने मूल्यों को उजागर करेंα

आकृति

बाएँ भूखंडों पर ग्राफिक 1201नीले रंग में डेटा बिंदुओं के साथ-साथ काले रंग में एक मजबूत, स्थानीय चिकनी। दाईं ओर का ग्राफिक उस चिकने के अवशिष्ट के आकार को दर्शाता है। काली बिंदीदार रेखा उनकी 80 वीं प्रतिशतक (इसके अनुरूप) हैα=0.2)। लाल वक्र का निर्माण ऊपर वर्णित के रूप में किया गया है, लेकिन इसे (मानों से) बढ़ाया गया है0 तथा 1) साजिश रचने के लिए पूर्ण अवशिष्टों की व्यवस्था।

परिवर्तनीय αसटीक पर नियंत्रण की अनुमति देता है। इस उदाहरण में, सेटिंगα से कम 0.20 सेटिंग करते समय, लगभग 22 घंटों के शोर में एक छोटे से अंतराल की पहचान करता है α से अधिक 0.20 0 घंटे के पास तेजी से बदलाव भी करता है।

चिकनी का विवरण ज्यादा मायने नहीं रखता है। इस उदाहरण में एक लेस चिकनी (में लागू Rके रूप में loessके साथ span=0.05यह स्थानीय बनाना) इस्तेमाल किया गया था, लेकिन फिर भी एक विंडोड मतलब किया ठीक होगा। पूर्ण अवशिष्टों को सुचारू करने के लिए मैंने चौड़ाई 17 (लगभग 24 मिनट) की खिड़की के माध्यम से पीछा किया। ये विंडो स्मूथ एक्सेल में लागू करने के लिए अपेक्षाकृत आसान हैं। एक कुशल VBA कार्यान्वयन (एक्सेल के पुराने संस्करणों के लिए, लेकिन नए संस्करणों में भी काम करने के लिए स्रोत कोड) http://www.quantdec.com/Excel/smoothing.htm पर उपलब्ध है ।


R कोड

#
# Emulate the data in the plot.
#
xy <- matrix(c(0, 96.35,  0.3, 96.6, 0.7, 96.7, 1, 96.73, 1.5, 96.74, 2.5, 96.75, 
               4, 96.9, 5, 97.05, 7, 97.5, 10, 98.5, 12, 99.3, 12.5, 99.35, 
               13, 99.355, 13.5, 99.36, 14.5, 99.365, 15, 99.37, 15.5, 99.375, 
               15.6, 99.4, 15.7, 99.41, 20, 99.5, 25, 99.4, 27, 99.37),
             ncol=2, byrow=TRUE)
n <- 401
set.seed(17)
noise.x <- cumsum(rexp(n, n/max(xy[,1])))
noise.y <- rep(c(-1,1), ceiling(n/2))[1:n]
noise.amp <- runif(n, 0.8, 1.2) * 0.04
noise.amp <- noise.amp * ifelse(noise.x < 16 | noise.x > 24.5, 0.05, 1)
noise.y <- noise.y * noise.amp

g <- approxfun(noise.x, noise.y)
f <- splinefun(xy[,1], xy[,2])
x <- seq(0, max(xy[,1]), length.out=1201)
y <- f(x) + g(x)
#
# Plot the data and a smooth.
#
par(mfrow=c(1,2))
plot(range(xy[,1]), range(xy[,2]), type="n", main="Data", sub="With Smooth",
     xlab="Time (hours)", ylab="Water Level")
abline(h=seq(96, 100, by=0.5), col="#e0e0e0")
abline(v=seq(0, 30, by=5), col="#e0e0e0")
#curve(f(x) + g(x), xlim=range(xy[,1]), col="#2070c0", lwd=2, add=TRUE, n=1201)
lines(x,y, type="l", col="#2070c0", lwd=2)

span <- 0.05
fit <- loess(y ~ x, span=span)
y.hat <- predict(fit)
lines(fit$x, y.hat)
#
# Plot the absolute residuals to the smooth.
#
r <-  abs(resid(fit))
plot(fit$x, r, type="l", col="#808080",
     main="Absolute Residuals", sub="With Smooth and a Threshold",
     xlab="Time hours", ylab="Residual Water Level")
#
# Smooth plot an indicator of the smoothed residuals.
#
library(zoo)
smooth <- function(x, window=17) {
  x.1 <- rollapply(ts(x), window, mean)
  x.2 <- rollapply(x.1, window, median)
  return(as.vector(x.2))
}
alpha <- 0.2
threshold <- quantile(r, 1-alpha)
abline(h=threshold, lwd=2, lty=3)
r.hat <- smooth(r >threshold)
x.hat <- smooth(fit$x)
z <- max(r)/2 * (r.hat > alpha)
lines(x.hat, z, lwd=2, col="#c02020")
par(mfrow=c(1,1))

1
+1। क्या आपने किसी तरह ओपी के प्लॉट के डेटा को खंगाल डाला?
अमीबा

2
@Amoeba यह बहुत अधिक परेशानी होगी, विशेष रूप से 15 घंटों के बाद विगली बिट्स के लिए। मैंने वक्र पर एक दर्जन बिंदुओं को देखा, एक तख़्ती लगाई, कुछ मध्यवर्ती बिंदुओं को डाला जिससे अजीब स्पाइक्स से छुटकारा मिल सके। पूरी प्रक्रिया में बस कुछ ही मिनट लगे और परिणामस्वरूप प्रश्न में दिखाए गए जैसे गुणात्मक रूप से एक डेटासेट प्राप्त हुआ।
whuber

मैंने सोचा कि आपको मेरे प्लॉट का डेटा कैसे मिला! चीयर्स! मैं इसे जाने दूँगा।
davehughes87

एफडब्ल्यूआईडब्ल्यू, मैंने चित्रण बनाने के लिए उपयोग किए गए कोड को पोस्ट किया। हालांकि यह VBA नहीं है, शायद यह विवरण स्पष्ट करेगा। (सीसी @amoeba)
whuber
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.