Come rimuovere gli outlier in r


Un valore anomalo è un’osservazione anormalmente distante da altri valori in un set di dati. I valori anomali possono essere problematici perché possono influenzare i risultati di un’analisi.

Questo tutorial spiega come identificare e rimuovere i valori anomali in R.

Come identificare i valori anomali in R

Prima di poter rimuovere i valori anomali, è necessario decidere cosa considerare come valore anomalo. Esistono due modi comuni per eseguire questa operazione:

1. Utilizzare l’intervallo interquartile.

L’intervallo interquartile (IQR) è la differenza tra il 75° percentile (Q3) e il 25° percentile (Q1) in un set di dati. Misura la distribuzione media del 50% dei valori.

È possibile definire un’osservazione come valore anomalo se è 1,5 volte l’intervallo interquartile al di sopra del terzo quartile (Q3) o 1,5 volte l’intervallo interquartile al di sotto del primo quartile (Q1).

Valori anomali = Osservazioni > Q3 + 1,5*IQR o < Q1 – 1,5*IQR

2. Usa i punteggi z.

Un punteggio z ti dice quante deviazioni standard un dato valore è dalla media. Usiamo la seguente formula per calcolare uno z-score:

z = (X – μ) / σ

Oro:

  • X è un singolo valore di dati grezzi
  • μ è la media della popolazione
  • σ è la deviazione standard della popolazione

È possibile definire un’osservazione come un valore anomalo se il suo punteggio z è inferiore a -3 o superiore a 3.

Valori anomali = Osservazioni con punteggi z > 3 o < -3

Come rimuovere gli outlier in R

Una volta deciso cosa considerare un valore anomalo, è possibile identificarlo e rimuoverlo da un set di dati. Per illustrare come eseguire questa operazione, utilizzeremo il seguente frame di dati:

 #make this example reproducible 
set.seed(0)

#create data frame with three columns A', 'B', 'C' 
df <- data.frame(A=rnorm(1000, mean=10, sd=3),
                 B=rnorm(1000, mean=20, sd=3),
                 C=rnorm(1000, mean=30, sd=3))

#view first six rows of data frame
head(df)
         ABC
1 13.78886 19.13945 31.33304
2 9.02130 25.52332 30.03579
3 13.98940 19.52971 29.97216
4 13.81729 15.83059 29.09287
5 11.24392 15.58069 31.47707
6 5.38015 19.79144 28.19184

Possiamo quindi definire e rimuovere i valori anomali utilizzando il metodo z-score o il metodo dell’intervallo interquartile:

Metodo del punteggio Z:

Il codice seguente mostra come calcolare il punteggio z di ciascun valore in ciascuna colonna del frame di dati e quindi rimuovere le righe che hanno almeno un punteggio z con un valore assoluto maggiore di 3:

 #find absolute value of z-score for each value in each column
z_scores <- as.data.frame (sapply(df, function(df) (abs(df-mean(df))/sd(df))))

#view first six rows of z_scores data frame
head(z_scores)

          ABC
1 1.2813403 0.25350805 0.39419878
2 0.3110243 1.80496734 0.05890232
3 1.3483190 0.12766847 0.08112630
4 1.2908343 1.32044506 0.38824414
5 0.4313316 1.40102642 0.44450451
6 1.5271674 0.04327186 0.70295309

#only keep rows in dataframe with all z-scores less than absolute value of 3 
no_outliers <- z_scores[!rowSums(z_scores>3), ]

#view row and column count of new data frame
dim(no_outliers)

[1] 994 3

Il frame di dati originale aveva 1000 righe e 3 colonne. Il nuovo frame di dati ha 994 righe e 3 colonne, il che ci dice che 6 righe sono state rimosse perché avevano almeno un punteggio z con un valore assoluto maggiore di 3 in una delle colonne.

Metodo dell’intervallo interquartile:

In alcuni casi, potremmo voler identificare solo i valori anomali in una colonna di un frame di dati. Ad esempio, supponiamo di voler rimuovere solo le righe con un valore anomalo nella colonna “A” del nostro frame di dati.

Il codice seguente mostra come rimuovere le righe dal frame di dati il cui valore nella colonna “A” è 1,5 volte l’intervallo interquartile sopra il terzo quartile (Q3) o 1,5 volte l’intervallo interquartile sotto il primo quartile (Q1). .

 #find Q1, Q3, and interquartile range for values in column A
Q1 <- quantile(df$A, .25)
Q3 <- quantile(df$A, .75)
IQR <- IQR(df$A)

#only keep rows in dataframe that have values within 1.5*IQR of Q1 and Q3
no_outliers <- subset(df, df$A> (Q1 - 1.5*IQR) & df$A< (Q3 + 1.5*IQR))

#view row and column count of new data frame
dim(no_outliers) 

[1] 994 3

Il frame di dati originale aveva 1000 righe e 3 colonne. Il nuovo frame di dati ha 994 righe e 3 colonne, il che ci dice che 6 righe sono state rimosse perché contenevano almeno un valore anomalo nella colonna A.

Quando rimuovere i valori anomali

Se sono presenti uno o più valori anomali, è necessario innanzitutto verificare che non siano il risultato di un errore di immissione dei dati. A volte un individuo inserisce semplicemente il valore dei dati errato durante il salvataggio dei dati.

Se l’outlier risulta essere il risultato di un errore di immissione dei dati, puoi decidere di assegnargli un nuovo valore come la media o la mediana del set di dati.

Se il valore è davvero un valore anomalo, puoi scegliere di rimuoverlo se avrà un impatto significativo sull’analisi complessiva. Assicurati solo di menzionare nel rapporto finale o nell’analisi che hai rimosso un valore anomalo.

Risorse addizionali

In questo tutorial, abbiamo utilizzato rnorm() per generare vettori di variabili casuali normalmente distribuite data una lunghezza del vettore n , una media della popolazione μ e una deviazione standard della popolazione σ . Puoi saperne di più su questa funzionalità qui .

Abbiamo anche utilizzato sapply() per applicare una funzione a ciascuna colonna in un frame di dati che calcolava i punteggi z. Puoi saperne di più su questa funzionalità qui .

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *