Как удалить выбросы в 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)
 A B C
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)

 A B C
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», которое в 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-значения. Подробнее об этой функции можно прочитать здесь .

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.