आर में tsoutliers पैकेज का उपयोग करके टाइम सीरीज़ (LS / AO / TC) में आउटलेयर का पता लगाना। समीकरण प्रारूप में आउटलेयर का प्रतिनिधित्व कैसे करें?


35

टिप्पणियाँ: सबसे पहले मैं नए tsoutliers पैकेज के लेखक को एक बड़ा धन्यवाद कहना चाहूंगा जो चेन और लियू की टाइम सीरीज़ की एकतरफा पहचान को लागू करता है जो जर्नल ऑफ़ द अमेरिकन स्टेटिस्टिकल एसोसिएशन में 1993 में ओपन सोर्स सॉफ्टवेयर में प्रकाशित हुआ था ।आर

पैकेज समय श्रृंखला डेटा में iteratively out उल्लिखित 5 विभिन्न प्रकारों का पता लगाता है:

  1. एडिटिव आउटलीयर (AO)
  2. इनोवेशन आउटलाइर (IO)
  3. स्तर शिफ्ट (एलएस)
  4. अस्थायी परिवर्तन (टीसी)
  5. मौसमी स्तर की पारी (SLS)

इससे भी बड़ी बात यह है कि यह पैकेज पूर्वानुमान पैकेज से auto.arima को लागू करता है ताकि आउटलेयर का पता लगाना सहज हो। इसके अलावा समय श्रृंखला डेटा की बेहतर समझ के लिए पैकेज अच्छा प्लॉट तैयार करता है।

नीचे मेरे सवाल हैं:

मैंने इस पैकेज का उपयोग करके कुछ उदाहरणों को चलाने की कोशिश की और इसने बहुत अच्छा काम किया। Additive आउटलेर और स्तर बदलाव सहज हैं। हालाँकि, अस्थायी परिवर्तन और इनोवेटिव आउटलेर को सौंपने के संबंध में मेरे 2 प्रश्न थे, जिन्हें मैं समझने में असमर्थ हूँ।

अस्थायी परिवर्तन बाह्य उदाहरण:

निम्नलिखित उदाहरण पर विचार करें:

library(tsoutliers)
library(expsmooth)
library(fma)

outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)

कार्यक्रम सही ढंग से निम्न स्थान पर एक स्तर बदलाव और एक अस्थायी परिवर्तन का पता लगाता है।

Outliers:
  type ind time coefhat tstat
1   LS  12 1935   37.14 3.153
2   TC  20 1943   36.38 3.350

नीचे कथानक और मेरे प्रश्न हैं।

  • समीकरण प्रारूप में अस्थायी परिवर्तन कैसे लिखें? (लेवल शिफ्ट को बाइनरी वैरिएबल के रूप में आसानी से लिखा जा सकता है, 1935 से पहले कभी भी / ऑब्जर्व 12 0 है और 1935 के बाद और 1. के बाद कभी भी।)

पैकेज मैनुअल और लेख में अस्थायी परिवर्तन के लिए समीकरण इस प्रकार है:

एल(बी)=11-δबी

जहाँ 0.7 है। मैं ऊपर के उदाहरण में इसका अनुवाद करने के लिए संघर्ष कर रहा हूं।δ

  • मेरा दूसरा सवाल इनोवेटिव आउटलुक के बारे में है, मैं कभी भी
    प्रैक्टिकल में इनोवेटिव आउटलुक नहीं आया हूं । कोई भी संख्यात्मक उदाहरण या मामला उदाहरण बहुत मददगार होगा।

बाहरी कारकों के कारण

संपादित करें: @Irststat, tsoutliers फ़ंक्शन बाहरी लोगों की पहचान करने और एक उपयुक्त ARIMA मॉडल का सुझाव देने के लिए एक उत्कृष्ट कार्य करता है। नील डेटासेट को देखते हुए, auto.arima के आवेदन को देखें और फिर tsoutliers (डिफ़ॉल्ट के साथ जिसमें auto.arima शामिल हैं) लागू करें:

auto.arima(Nile)
Series: Nile 
ARIMA(1,1,1)                    

Coefficients:
         ar1      ma1
      0.2544  -0.8741
s.e.  0.1194   0.0605

sigma^2 estimated as 19769:  log likelihood=-630.63
AIC=1267.25   AICc=1267.51   BIC=1275.04

Tsoutliers फ़ंक्शन को लागू करने के बाद, यह एक एलएस आउटरीयर और एडिटिव आउटलाइडर की पहचान करता है और ARIMA ऑर्डर (0,0,0) की सिफारिश करता है।

nile.outliers <- tso(Nile,types = c("AO","LS","TC"))
nile.outliers
Series: Nile 
ARIMA(0,0,0) with non-zero mean 

Coefficients:
      intercept       LS29       AO43
      1097.7500  -242.2289  -399.5211
s.e.    22.6783    26.7793   120.8446

sigma^2 estimated as 14401:  log likelihood=-620.65
AIC=1249.29   AICc=1249.71   BIC=1259.71

Outliers:
  type ind time coefhat  tstat
1   LS  29 1899  -242.2 -9.045
2   AO  43 1913  -399.5 -3.306

यहाँ छवि विवरण दर्ज करें


8
मुझे यह देखकर खुशी हुई कि आपको पैकेज उपयोगी लगा, धन्यवाद! BTW मैंने फ़ंक्शन में एक टाइपो तय किया है जो परिणामों को प्लॉट करता है ताकि पैकेज के अगले रिलीज में y- अक्ष मूल और समायोजित श्रृंखला दोनों की सीमा को कवर करे।
javlacalle

2
पैकेज के अंतिम संस्करण में, पैकेज में समान नाम के फ़ंक्शन के साथ संघर्ष से बचने के लिए फ़ंक्शन tsoutliersका नाम बदल दिया गया है । tsoforecast
javlacalle

1
@javlacalle मैंने नवीनतम tsoutliers पैकेज डाउनलोड किया जिसमें अभी भी tsoutliers नहीं है। मुझे यकीन नहीं है कि जब पैकेज अपडेट किया जाएगा। मुझे खुशी है कि हमारे अलग-अलग नाम हैं।
फोरकास्टर

मैं अद्यतन के बारे में सूचित करने के लिए थोड़ा दौड़ा। CRAN पर अपडेट होने तक इसमें कुछ समय लगता है। मैंने अभी देखा है कि नवीनतम संस्करण 0.4 को सीआरएएन से डाउनलोड किया जा सकता है।
१०:३४ पर javlacalle

@javlacalle मैंने पाया कि मेरे मैक पर tsoutliers वास्तव में मुश्किल है। मैं GSL स्थापित काढ़ा, मैं का उपयोग कर संकलन करने की कोशिश की clangऔर gccऔर काम करता है। मुझे लगता है कि यह एक भयानक पैकेज है लेकिन स्थापना ने वास्तव में मेरा दिल तोड़ दिया।
B.Mr.W.

जवाबों:


19

filterδ=0δ=1

tc <- rep(0, 50)
tc[20] <- 1
tc1 <- filter(tc, filter = 0, method = "recursive")
tc2 <- filter(tc, filter = 0.3, method = "recursive")
tc3 <- filter(tc, filter = 0.7, method = "recursive")
tc4 <- filter(tc, filter = 1, method = "recursive")
par(mfrow = c(2,2))
plot(tc1, main = "TC delta = 0")
plot(tc2, main = "TC delta = 0.3")
plot(tc3, main = "TC delta = 0.7")
plot(tc4, main = "TC delta = 1", type = "s")

विस्मयकारी परिवर्तन

अपने उदाहरण में, आप outliers.effectsदेखे गए श्रंखला पर पाए गए बाहरी लोगों के प्रभावों का प्रतिनिधित्व करने के लिए फ़ंक्शन का उपयोग कर सकते हैं :

# unit impulse
m1 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = FALSE))
tsp(m1) <- tsp(chicken)
# weighted by the estimated coefficients
m2 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = TRUE))
tsp(m2) <- tsp(chicken)

नवोन्मेषी रूपरेखा, IO, अधिक अजीब है। माना जाने वाले अन्य प्रकार के आउटलेर्स के विपरीत tsoutliers, IO का प्रभाव चयनित मॉडल पर और पैरामीटर अनुमानों पर निर्भर करता है। यह तथ्य कई बाहरी लोगों के साथ श्रृंखला में परेशानी भरा हो सकता है। एल्गोरिथ्म के पहले पुनरावृत्तियों में (जहां कुछ बाहरी लोगों के प्रभाव का पता नहीं लगाया गया है और समायोजित किया जा सकता है) ARIMA मॉडल के अनुमानों की गुणवत्ता आईओ को सटीक रूप से परिभाषित करने के लिए पर्याप्त अच्छी नहीं हो सकती है। इसके अलावा, जैसा कि एल्गोरिथ्म प्रगति करता है एक नया ARIMA मॉडल चुना जा सकता है। इस प्रकार, ARIMA मॉडल के साथ प्रारंभिक चरण में एक IO का पता लगाना संभव है, लेकिन अंततः इसके गतिशील को अंतिम चरण में चुने गए दूसरे ARIMA मॉडल द्वारा परिभाषित किया गया है।

में इस दस्तावेज़ में यह दिखाया गया है कि, कुछ परिस्थितियों में, एक आईओ के प्रभाव इसकी घटना की तारीख के रूप में वृद्धि हो सकती है अतीत है, जो व्याख्या या ग्रहण करने के लिए कठिन बात है में और अधिक दूर हो जाता है।

IO में एक दिलचस्प क्षमता है क्योंकि यह मौसमी आउटलेर्स को पकड़ सकता है। अन्य प्रकार के आउटलेरर्स जिन्हें tsoutliersमौसमी पैटर्न पर कब्जा नहीं है। फिर भी, कुछ मामलों में IO के बजाय एक संभावित मौसमी स्तर की बदलाव, SLS की खोज करना बेहतर हो सकता है (जैसा कि पहले उल्लेखित दस्तावेज़ में दिखाया गया है)।

IO की एक आकर्षक व्याख्या है। इसे कभी-कभी एक योज्य बहिर्वाह के रूप में समझा जाता है जो अशांति शब्द को प्रभावित करता है और फिर ARIMA मॉडल के गतिशील के अनुसार श्रृंखला में प्रचारित करता है। इस अर्थ में, IO एक योज्य आउटलेयर की तरह है, दोनों एक ही अवलोकन को प्रभावित करते हैं लेकिन IO अशांति शब्द में एक आवेग है जबकि AO एक आवेग है जो सीधे ARIMA मॉडल या डेटा जनरेटिंग प्रक्रिया द्वारा उत्पन्न मूल्यों में जोड़ा जाता है। । क्या आउटलेयर इनोवेशन को प्रभावित करते हैं या डिस्टर्बेंस टर्म से बाहर हैं यह चर्चा का विषय हो सकता है।

पिछले संदर्भ में आपको वास्तविक डेटा के कुछ उदाहरण मिल सकते हैं जहां IO का पता लगाया गया है।


विस्तृत प्रतिक्रिया के लिए धन्यवाद। मैं वास्तव में इसकी प्रशंसा करता हूँ। मेरे कुछ अतिरिक्त प्रश्न हैं। क्या auto.arima का उपयोग करने में कोई लाभ हैं, p, d, q की पहचान करें और फिर tsoutliers का उपयोग करके arima को tsmethod के रूप में उपयोग करें?
फोरकास्टर

1
forecast::auto.arimaसाथ में उपयोग करने का मुख्य लाभ tsoutliersयह है कि सब कुछ स्वचालित हो जाता है। हालांकि, वैकल्पिक विकल्पों के साथ स्वचालित प्रक्रियाओं को चलाने की सलाह दी जाती है। उदाहरण के लिए आप पहले ACF या यूनिट रूट परीक्षणों को देख सकते हैं और फिर पास होने के लिए ARIMA मॉडल का चयन कर सकते हैं tsoutliers। यदि आपके प्रस्तावित मॉडल के लिए कोई आउटलेयर पाया जाता है तो आप समायोजित श्रृंखला के लिए फिर से विश्लेषण दोहरा सकते हैं। यह एक पुनरावृत्त प्रक्रिया है। स्वचालित प्रक्रिया एक सहायक मार्गदर्शिका प्रदान करती है लेकिन यह जरूरी नहीं कि अंतिम या अद्वितीय समाधान दे सकती है।
javlacalle

1
आउटलेर्स का पता लगाने की प्रक्रिया पुनरावृत्त है। सुरक्षा के लिए स्वीकार्य पुनरावृत्तियों की संख्या पर एक सीमा निर्धारित है। जब आप चेतावनी maxit.iloopको देखते हैं तो आप तर्क को 5-6 तक बढ़ाते हुए एल्गोरिथ्म चलाने की कोशिश कर सकते हैं और देख सकते हैं कि परिणाम बदलते हैं या नहीं। यदि चेतावनी एक बड़े maxit.iloop(जैसे 20 या अधिक) के साथ वापस आ जाती है तो यह संकेत हो सकता है कि कुछ ठीक से मॉडल नहीं किया जा रहा है। कुछ मामलों में IO को आउटलेयर के प्रकारों से हटाना एक अच्छा विकल्प हो सकता है। ज्यादातर मामलों में आप चेतावनी को अनदेखा कर सकते हैं। आप suppressWarningsउनसे बचने के लिए उपयोग कर सकते हैं।
javlacalle

2
@ मैं इस विषय को अच्छी तरह से कवर करने वाली पाठ्यपुस्तक नहीं जानता। जैसा कि इस पोस्ट में चर्चा की गई दृष्टिकोण हस्तक्षेप विश्लेषण से संबंधित है, इस मुद्दे के बारे में एक अध्याय के साथ किसी भी पाठ्यपुस्तक (इकोनोमेट्रिक्स या टाइम सीरीज़) सहायक होगा; उदाहरण के लिए, टाइम सीरीज विश्लेषण। आर में अनुप्रयोगों के साथ । विवरण के लिए, आपको इस मुद्दे से निपटने वाले कई जर्नल लेखों की समीक्षा करनी चाहिए, उदाहरण के लिए चेन और लियू (1993) और इसके संदर्भ में।
ज्वालाचल

2
@ मुगन, मैं त्से के लेख को भी देखूंगा । इसके अलावा, मैं Pankratz द्वारा क्लासिक पुस्तक की जांच करूंगा जिसमें आउटलेयर पर अच्छा कवरेज है।
फोरकास्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.