Hoe uitschieters in r te verwijderen


Een uitschieter is een waarneming die abnormaal ver verwijderd is van andere waarden in een dataset. Uitschieters kunnen problematisch zijn omdat ze de resultaten van een analyse kunnen beïnvloeden.

In deze tutorial wordt uitgelegd hoe u uitschieters in R kunt identificeren en verwijderen.

Hoe uitschieters in R te identificeren

Voordat u uitbijters kunt verwijderen, moet u eerst beslissen wat u als een uitbijter beschouwt. Er zijn twee veel voorkomende manieren om dit te doen:

1. Gebruik het interkwartielbereik.

De interkwartielafstand (IQR) is het verschil tussen het 75e percentiel (Q3) en het 25e percentiel (Q1) in een dataset. Het meet de verdeling van de gemiddelde 50% van de waarden.

Je kunt een waarneming als uitbijter definiëren als deze 1,5 maal de interkwartielafstand boven het derde kwartiel (Q3) of 1,5 maal de interkwartielafstand onder het eerste kwartiel (Q1) ligt.

Uitschieters = Waarnemingen > Q3 + 1,5*IQR of < Q1 – 1,5*IQR

2. Gebruik z-scores.

Een z-score vertelt u hoeveel standaarddeviaties een bepaalde waarde afwijkt van het gemiddelde. We gebruiken de volgende formule om een z-score te berekenen:

z = (X – μ) / σ

Goud:

  • X is een enkele onbewerkte gegevenswaarde
  • μ is het populatiegemiddelde
  • σ is de standaarddeviatie van de populatie

U kunt een waarneming als uitschieter definiëren als de z-score kleiner dan -3 of groter dan 3 is.

Uitschieters = Waarnemingen met z-scores > 3 of < -3

Hoe uitschieters in R te verwijderen

Zodra u hebt besloten wat u als een uitbijter beschouwt, kunt u deze identificeren en uit een dataset verwijderen. Om te illustreren hoe u dit kunt doen, gebruiken we het volgende dataframe:

 #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

We kunnen vervolgens uitschieters definiëren en verwijderen met behulp van de z-score-methode of de interkwartielbereikmethode:

Z-score-methode:

De volgende code laat zien hoe u de z-score van elke waarde in elke kolom van het gegevensframe berekent en vervolgens de rijen verwijdert die ten minste één z-score hebben met een absolute waarde groter dan 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

Het oorspronkelijke dataframe had 1000 rijen en 3 kolommen. Het nieuwe dataframe heeft 994 rijen en 3 kolommen, wat ons vertelt dat 6 rijen zijn verwijderd omdat ze ten minste één z-score hadden met een absolute waarde groter dan 3 in een van hun kolommen.

Interkwartielbereikmethode:

In sommige gevallen willen we misschien alleen uitschieters in een kolom van een dataframe identificeren. Laten we bijvoorbeeld zeggen dat we alleen rijen met een uitbijter in kolom ‚A‘ van ons dataframe willen verwijderen.

De volgende code laat zien hoe u rijen uit het dataframe verwijdert waarvan de waarde in kolom ‚A‘ 1,5 keer het interkwartielbereik boven het derde kwartiel (Q3) of 1,5 keer het interkwartielbereik onder het eerste kwartiel (Q1) is. .

 #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

Het oorspronkelijke dataframe had 1000 rijen en 3 kolommen. Het nieuwe dataframe heeft 994 rijen en 3 kolommen, wat ons vertelt dat 6 rijen zijn verwijderd omdat ze ten minste één uitschieter in kolom A bevatten.

Wanneer uitschieters verwijderen?

Als er één of meer uitschieters aanwezig zijn, moet u eerst verifiëren dat deze niet het gevolg zijn van een gegevensinvoerfout. Soms voert een individu eenvoudigweg de verkeerde gegevenswaarde in terwijl hij de gegevens opslaat.

Als de uitbijter het resultaat blijkt te zijn van een gegevensinvoerfout, kunt u besluiten om er een nieuwe waarde aan toe te kennen, zoals het gemiddelde of de mediaan van de dataset.

Als de waarde echt een uitschieter is, kunt u ervoor kiezen deze te verwijderen als deze een aanzienlijke impact heeft op uw algehele analyse. Zorg ervoor dat u in uw eindrapport of analyse vermeldt dat u een uitbijter hebt verwijderd.

Aanvullende bronnen

In deze tutorial hebben we rnorm() gebruikt om vectoren van normaal verdeelde willekeurige variabelen te genereren, gegeven een vectorlengte n , een populatiegemiddelde μ en een populatiestandaarddeviatie σ . Meer informatie over deze functie kunt u hier vinden.

We hebben ook sapply() gebruikt om een functie toe te passen op elke kolom in een dataframe dat z-scores berekende. Meer informatie over deze functie kunt u hier vinden.

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert