2012-11-11 11 views
7

Diesmal werde ich keine direkte Frage stellen, wie man Ausreißer erkennt, wie ich es zuvor in einer meiner Fragen getan habe. Ich habe ein paar Beiträge zu diesem Thema gelesen, aber nicht bekommen, was ich brauchte. Ich habe eine Reihe von Werten, die unten angegeben sind: JetztUnivariate Ausreißererkennung

y<-c(0.59, 0.61, 0.59, 1.55, 1.33, 3.50, 1.00, 1.22, 2.50, 3.00, 3.79, 3.98, 4.33, 4.45, 4.59, 4.72, 4.82, 4.90, 4.96, 7.92, 5.01, 5.01, 4.94, 5.05, 5.04, 5.03, 5.06, 5.10, 5.04, 5.06, 7.77, 5.07, 5.08, 5.08, 5.12, 5.12, 5.08, 5.17, 5.18) 

wie die meisten der Forscher sagen, dass der Ausreißererkennungsprozess nicht nur auf den Daten abhängt, sondern auch vom Kontext ab. Ich habe mehrere Pakete von R wie Ausreißer (grubbs test), extremevalues, mvoutlier (pcout-Methode) verwendet, konnte aber nicht den besten Weg finden, sie zu verwenden. Hier sind in diesem Fall (abhängig von meinen Anforderungen) 7,77 (Obs Nr. 31), 7,92 (Obs auf 20) und 3,50 (Obs Nr. 6) Ausreißer. Mit dem Grubbs-Test des Ausreißers kann ich 7.77 und 7.92 als Ausreißer, aber nicht als 3.50 erkennen. Ich weiß nicht, ob ich meine Daten hier posten kann oder nicht, aber nachdem ich den Trend der Daten über die Handlung oder die Verteilung gesehen habe, wäre Beobachtung Nr. 6 als Ausreißer offensichtlich.

Ich versuche, ein nicht lineares Modell zu diesen Daten anzupassen, aber wegen dieser Ausreißer konnte ich nicht die beste Anpassung finden (beste Anpassung ist nicht die einzige Anforderung) und trotzdem muss ich diese Ausreißer wie ich erkennen ein passendes separates Modell für diese Ausreißer.

Meine Frage ist sehr einfach. Ist es möglich, dass ich diese 3 Ausreißer mit einem Standardpaket erkennen kann oder wie kann ich mein nicht linear generiertes Modell verwenden, um diese Ausreißer zu erkennen?

Mit freundlichen Grüßen

Shahzad

enter image description here

+0

Haben Sie in Betracht gezogen, rlm im MASS-Paket zu verwenden, um stattdessen eine robuste lineare Regression durchzuführen? – tcash21

+1

@ tcash21 Ja ich habe es verwendet und es ist eine lineare Regression. Ich habe auch nlrob (robuste nichtlineare Regression), konnte aber keine Möglichkeit finden, die besagten Ausreißer mit dem generierten Modell zu erkennen. – Shahzad

Antwort

4
library(TSA) 
ar = TSA::arima(y, c(1,0,0)) 
detectAO(ar) 

zeigt genau diese 3 Punkte (ind Indizes möglichen Ausreißer ist):

> detectAO(ar) 
      [,1]  [,2]  [,3] 
ind  6.000000 20.000000 31.000000 
lambda2 4.739695 5.957604 5.490739 

Aber Vorsicht, dies zu beantragen Ansatz für jede Art von Daten .

+0

Danke. Ist die regelmäßige Arima-Reihenfolge (wie hier 1,0,0) von den Daten abhängig? – Shahzad

+0

Ich meine, Sie sollten die Art Ihrer Daten verstehen. – redmode

+0

Zum Beispiel: 'auto.arima()' Funktion von 'Vorhersage' Bibliothek führt Suche nach besten ARIMA-Modell in Klasse von Modellen.Mit einer solchen Schätzung können Sie jedoch keine Ausreißer erkennen, sofern diese Punkte als typische Daten behandelt werden, die mit einem Modell, nicht aber mit Ausreißern versehen werden sollten. – redmode

5

Nur um zu sagen, dass ich versuchte, detectAO() wie oben vorgeschlagen zu verwenden und es fand nichts mit meinen Daten (die ähnlich aussahen: kurze Spikes kommen aus einem kontinuierlichen Trend). Nachdem ich gegoogelt hatte, stellte ich fest, dass der Hempel-Filter (Funktion hempel() aus Paket pracma) tun konnte, was ich brauchte. Ich dachte, ich würde das hier hinzufügen, falls jemand anders nach einer Lösung sucht.

0
install.packages("forecast")   
library(forecast) 
tsoutliers(data) 

Diese drei Codes in R beantworten Ihre Frage. Danach wird tsclean(data) Ihre Daten bereinigen.

Schritte sind wie folgt:

install.packages("forecast") 
library(forecast) 
t_s<- ts(y) 
plot(t_s) 
tsoutliers(t_s) 
t_s_new<-tsclean(t_s) 
plot(t_s_new) 

Wenn noch Problem vorhanden ist, zu mir zurück. Ich werde einen ausgeklügelteren Ausreißerdetektor bereitstellen.

+1

Sie sollten mehr Ihre Antworten ausarbeiten und erklären – avcajaraville