Наличие выбросов в данных часто искажает результаты анализа и может привести к неблагоприятным последствиям. Существует несколько методов обнаружения выбросов в данных и избавления от них. Предлагаем рассмотреть один из простых методов с использованием особенностей функции boxplot в R.
Предположим, что у нас есть 2 набора данных, в которых наблюдаются выбросы. Мы их идентифицируем графическим методом и удалим из нашего набора. Вот код R:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
x<-c(2.633213, 2.654674, 2.746650, 2.657763, 2.525229, 2.549804, 2.537088, 1.974909, 1.838017, 1.791683, 1.782088, 1.664908, 1.689402, 1.688826, 1.661763, 1.734322, 1.744875, 1.710471, 1.735690, 1.800677, 1.607354, 1.896810, 2.294757) y<-c(4.358015, 4.489513, 4.560919, 4.613810, 4.599738, 4.621614, 4.633119, 4.616862, 4.754681, 4.849953, 4.945791, 5.019631, 4.805033, 4.989170, 5.024305, 5.065325, 4.970247, 4.998086, 5.096887, 4.977657, 4.888269, 3.479053, 2.878145) plot(x,y) boxplot(x) boxplot(y) # boxplot не только рисует картинку, но и сохраняет все ее параметры в объекте, из которого мы можем их достать. # Выбросы хранятся тут: boxplot.stats(y)$out # Заберём индексы точек выбросов ind <- which(y %in% boxplot.stats(y)$out) # Сохраним координаты точек выбросов в отдельном dataframe vybrosy <- data.frame(x=x[ind], y=y[ind]) plot(x,y,col='green', pch=18, ylim=c(0,max(y))) points(vybrosy$x, vybrosy$y, col='red',pch=18) x <- x[-ind] y <- y[-ind] boxplot(y) plot(x,y,col='purple', pch=16, ylim=c(0,max(y))) |