Как удалить выбросы из фрейма данных в R? - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть фрейм данных с 25 переменными.Я хочу удалить из него выбросы.

Я обыскал форум SO и обнаружил, что существуют специальные решения, которые люди предлагают для разных сообщений.

Существует ли какая-либо стандартная функция R, которая удаляет выбросы из данных?

Вот две функции, которые я нашел из поиска.Насколько они хороши, ИЛИ, есть ли какое-то стандартное лучшее решение для достижения этого в R.

remove_outliers: Ссылка 1

Удаление выбросов - быстрое и грязное: Ссылка 2

РЕДАКТИРОВАТЬ

Данные в моем фрейме данных содержат непрерывные данные из двух источников: погоды и земли.Прогноз погоды зависит от температуры, влажности, ветра, дождя, солнечной радиации.А из грунта - грунтовые воды и влажность почвы.Я хочу найти связь между влажностью почвы и другими переменными.Я анализирую данные, используя разные модели.Теперь я хочу увидеть результаты после удаления выбросов из данных.

РЕДАКТИРОВАТЬ Я использовал и отредактировал код из одного учебника, к которому я добавил ссылку выше.Это работает нормально, когда есть некоторые выбросы в данных.Но возникает ошибка, когда их нет.Как это исправить.

Вот код:

outlier_rem<-Data_combined #data-frame with 25 var, few have outliers

#removong outliers from the column

outliers <- boxplot(outlier_rem$var1, plot=FALSE)$out
#print(outliers)
#ol<-outlier_rem[which(outlier_rem$var1 %in% outliers),]
ol<-outlier_rem[-which(outlier_rem$var1 %in% outliers),]

dim(ol)
boxplot(ol)

Вот сообщение об ошибке, когда ol возвращает 0 vale.

> dim(ol)
[1]  0 25
> boxplot(ol)
no non-missing arguments to min; returning Infno non-missing arguments to max; returning -InfError in plot.window(xlim = xlim, ylim = ylim, log = log, yaxs = pars$yaxs) : 
  need finite 'ylim' values

1 Ответ

0 голосов
/ 18 февраля 2019

Я использую неравенство Чебышева в качестве критерия отбрасывания экстремальных значений.Преимущество состоит в том, что оно справедливо для многих вероятностных распределений.Правило гласит, что не более 1 / k ^ 2 значений может быть больше, чем на k стандартных отклонений от среднего значения.Например:

> x <- rchisq(1000, 13)
> 
> mean(x)
[1] 12.83906
> sd(x)
[1] 4.93234
> 
> Ndesv <- 5
> 
> x[x > (mean(x) + Ndesv * sd(x))]
[1] 38.7575
> 
> Conf <- (1 - 1 / Ndesv^2)
> print(Conf)
[1] 0.96
> 

Надеюсь, это поможет вам.

...