Potrebbe sembrare controintuitivo, ma usare l'approccio che descrivi non ha senso (per prendere le tue parole, preferirei scrivere "può portare a risultati molto diversi da quelli previsti") e non si dovrebbe mai farlo: i rischi di non funziona sono consequenziali e inoltre esiste un'alternativa più semplice, molto più sicura e meglio stabilita disponibile senza costi aggiuntivi.
Innanzitutto, è vero che se esiste un unico valore anomalo, alla fine lo troverai usando la procedura che suggerisci. Ma, in generale (quando potrebbe esserci più di un singolo valore anomalo nei dati), l'algoritmo che suggerisci si rompe completamente, nel senso che potenzialmente ti porta a rifiutare un buon punto dati come valore errato o a mantenere valori anomali come buoni punti dati con conseguenze potenzialmente catastrofiche.
Di seguito, faccio un semplice esempio numerico in cui la regola che proponi viene meno e quindi propongo un'alternativa molto più sicura e consolidata, ma prima spiegherò a) cosa c'è di sbagliato nel metodo che proponi eb) cosa preferisci di solito l'alternativa è.
In sostanza, non è possibile utilizzare la distanza di un'osservazione dalla media di una uscita e la deviazione standard dei dati per rilevare in modo affidabile valori anomali poiché le stime utilizzate (lasciare una media di uscita e deviazione standard) sono ancora suscettibili di essere trascinate verso il rimanente valori anomali: questo si chiama effetto di mascheramento.
In poche parole, un modo semplice per rilevare in modo affidabile valori anomali è utilizzare l'idea generale che hai suggerito (distanza dalla stima della posizione e della scala) ma sostituendo gli stimatori che hai usato (tralasciare una media, sd) con quelli robusti, ad esempio le stime progettato per essere molto meno suscettibile di essere influenzato da valori anomali.
Considera questo esempio, in cui aggiungo 3 valori anomali a 47 osservazioni autentiche tratte da un normale 0,1:
n <- 50
set.seed(123) # for reproducibility
x <- round(rnorm(n,0,1), 1)
x[1] <- x[1]+1000
x[2] <- x[2]+10
x[3] <- x[3]+10
Il codice seguente calcola l'indice di periferia in base alla media della deviazione e alla deviazione standard (ad es. L'approccio suggerito).
out_1 <- rep(NA,n)
for(i in 1:n){ out_1[i] <- abs( x[i]-mean(x[-i]) )/sd(x[-i]) }
e questo codice produce la trama che vedi sotto.
plot(x, out_1, ylim=c(0,1), xlim=c(-3,20))
points(x[1:3], out_1[1:3], col="red", pch=16)
L'immagine 1 mostra il valore dell'indice di periferia in funzione del valore delle osservazioni (il più lontano degli outlier è al di fuori dell'intervallo di questo diagramma ma gli altri due sono mostrati come punti rossi). Come puoi vedere, ad eccezione di quello più estremo, un indice di periferia costruito come suggerisci non riuscirebbe a rivelare i valori anomali: infatti il secondo e il terzo (più lieve) valori anomali ora hanno persino un valore (sul tuo indice di periferia) più piccolo di tuttile osservazioni autentiche! ... Sotto l'approccio da te suggerito, si terranno questi due estremi anomali nell'insieme delle osservazioni autentiche, portandoti a usare le 49 osservazioni rimanenti come se provenissero dallo stesso processo omogeneo, dandoti un finale stima della media e della sd basata su questi 49 punti dati di 0,45 e 2,32, una descrizione molto scadente diuna parte del campione!
xiX
O(xi,X)=|xi−med(X)|mad(X)
med (X)Xpazzo (X)
In R, questo secondo indice di periferia può essere calcolato come:
out_2 <- abs( x-median(x) )/mad(x)
e tracciato (come prima) usando:
plot(x, out_2, ylim=c(0,15), xlim=c(-3,20))
points(x[1:3], out_2[1:3], col="red", pch=16)
L'immagine 2 mostra il valore di questo indice di periferia alternativo per lo stesso set di dati. Come puoi vedere, ora tutti e tre i valori anomali vengono chiaramente rivelati come tali. Inoltre, questa regola di rilevazione anomala ha alcune proprietà statistiche stabilite. Ciò porta, tra l'altro, a regole di interruzione utilizzabili. Ad esempio, se si può presumere che la parte autentica dei dati sia disegnata da una distribuzione simmetrica con un secondo momento finito, è possibile rifiutare tutti i punti di dati per i quali
| Xio- med ( X) |pazzo (X)> 3.5
come valori anomali. Nell'esempio sopra, l'applicazione di questa regola porterebbe a contrassegnare correttamente l'osservazione 1,2 e 3. Rifiutando queste, la media e la sd delle restanti osservazioni è ricettiva 0,021 e 0,93, una descrizione molto migliore della parte autentica del campione !