Як видалити викиди в r


Викид — це спостереження, яке аномально віддалено від інших значень у наборі даних. Викиди можуть бути проблематичними, оскільки вони можуть вплинути на результати аналізу.

У цьому підручнику пояснюється, як визначити та видалити викиди в R.

Як визначити викиди в R

Перш ніж ви зможете видалити викиди, ви повинні вирішити, що ви вважаєте викидом. Є два поширені способи зробити це:

1. Використовуйте інтерквартильний діапазон.

Інтерквартильний діапазон (IQR) — це різниця між 75-м процентилем (Q3) і 25-м процентилем (Q1) у наборі даних. Він вимірює розподіл середніх 50% значень.

Ви можете визначити спостереження як викид, якщо воно в 1,5 рази перевищує інтерквартильний діапазон вище третього квартиля (Q3) або в 1,5 рази перевищує інтерквартильний діапазон нижче першого квартиля (Q1).

Викиди = Спостереження > Q3 + 1,5*IQR або < Q1 – 1,5*IQR

2. Використовуйте z-оцінки.

Z-показник показує, скільки стандартних відхилень дане значення має від середнього. Ми використовуємо наступну формулу для розрахунку z-показника:

z = (X – μ) / σ

золото:

  • X – це одне значення необроблених даних
  • μ – середнє значення сукупності
  • σ — стандартне відхилення сукупності

Ви можете визначити спостереження як викид, якщо його z-показник менший за -3 або більший за 3.

Викиди = спостереження з z-показниками > 3 або < -3

Як видалити викиди в R

Після того, як ви визначитеся, що ви вважаєте викидом, ви зможете визначити та видалити їх із набору даних. Щоб проілюструвати, як це зробити, ми використаємо наступний кадр даних:

 #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

Потім ми можемо визначити та видалити викиди за допомогою методу z-показника або методу інтерквартильного діапазону:

Метод Z-оцінки:

У наведеному нижче коді показано, як обчислити z-показник кожного значення в кожному стовпці кадру даних, а потім видалити рядки, які мають принаймні один z-показник із абсолютним значенням, більшим за 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

Початковий кадр даних мав 1000 рядків і 3 стовпці. Новий фрейм даних містить 994 рядки та 3 стовпці, що говорить нам про те, що 6 рядків було видалено, оскільки вони мали принаймні один z-показник з абсолютним значенням, більшим за 3, в одному зі своїх стовпців.

Метод інтерквартильного діапазону:

У деяких випадках нам може знадобитися лише ідентифікувати викиди в стовпці кадру даних. Наприклад, скажімо, ми хочемо видалити лише рядки з викидом у стовпці «A» нашого кадру даних.

У наведеному нижче коді показано, як видалити рядки з кадру даних, значення яких у стовпці «A» в 1,5 рази перевищує інтерквартильний діапазон вище третього квартиля (Q3) або в 1,5 рази перевищує інтерквартильний діапазон нижче першого квартиля (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

Початковий кадр даних мав 1000 рядків і 3 стовпці. Новий фрейм даних містить 994 рядки та 3 стовпці, що означає, що 6 рядків було видалено, оскільки вони містили принаймні один викид у стовпці A.

Коли видаляти викиди

Якщо присутні один або кілька викидів, ви повинні спочатку переконатися, що вони не є результатом помилки введення даних. Іноді особа просто вводить неправильне значення даних під час збереження даних.

Якщо викид виявляється результатом помилки введення даних, ви можете вирішити призначити йому нове значення, наприклад середнє або медіана набору даних.

Якщо значення дійсно викидається, ви можете видалити його, якщо воно матиме значний вплив на загальний аналіз. Просто не забудьте зазначити у своєму остаточному звіті чи аналізі, що ви усунули викид.

Додаткові ресурси

У цьому підручнику ми використали rnorm() для генерації векторів нормально розподілених випадкових змінних із заданою довжиною вектора n , середнім μ сукупності та стандартним відхиленням сукупності σ . Ви можете дізнатися більше про цю функцію тут .

Ми також використали sapply() , щоб застосувати функцію до кожного стовпця у кадрі даних, яка обчислює z-показники. Ви можете дізнатися більше про цю функцію тут .

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *