Удаление выбросов (команда outlierMAD в пакете pracma)

Я хотел бы удалить выбросы из каждого столбца моего набора данных... При поиске в Интернете кажется, что идентификатор Hampel должен быть хорошим решением моей проблемы, в которой есть метод обнаружения выбросов: [median – t * MAD, median + t * MAD].

С инструкциями, предоставленными: http://exploringdatablog.blogspot.com/2012/01/moving-window-filters-and-pracma.html Я хотел бы использовать команду "outlierMAD" для выполнения своей задачи:

outlierMAD <- function (x, k){
   n <- length(x)
   y <- x
   ind <- c()
   L <- 1.4826
   t0 <- 3
   for (i in (k + 1):(n - k)) {
    x0 <- median(x[(i - k):(i + k)])
    S0 <- L * median(abs(x[(i - k):(i + k)] - x0))
    if (abs(x[i] - x0) > t0 * S0) {
        y[i] <- x0
        ind <- c(ind, i)
    }
   }
    list(y = y, ind = ind)
}

Но при попытке я получил ошибку:

Error in if (abs(x[i] - x0) > t0 * S0) { : 
missing value where TRUE/FALSE needed

Может ли кто-нибудь помочь мне в этом? Как я могу избежать NA в моих данных?

Ссылку на мои образцы данных можно найти по адресу: https://drive.google.com/file/d/0B86_a8ltyoL3NHNaeWk3d1QyQms/view?usp=sharing


person Vicki1227    schedule 16.10.2014    source источник
comment
дублируется это.   -  person user189035    schedule 23.10.2014


Ответы (3)


Логическое значение abs(x[i] - x0) > t0 * S0 должно быть True или False. Ошибка может произойти, если какая-либо из переменных имеет значение NA или рассматривается как нечисловая. В случае присутствия NA медиана может дать NA вместо медианного значения, если na.rm=FALSE. Установка na.rm=TRUE для медианы исправит X0 и S0, но не поможет в логическом выражении выше, если x[I]=NA само по себе. Попробуйте проверить свои данные по NA или другим нечисловым значениям. Надеюсь это поможет.

person skiv    schedule 21.11.2014

Я получил ту же ошибку, используя функцию hampel пакета «pracma». Проблема была вызвана моим временным рядом, который имеет менее 5 наблюдений. Проверьте, достаточно ли длинна ваша.

person Fabián    schedule 19.04.2016

необходимо уменьшить значение K или сохранить одно условие, если nrow (df)> 5, затем применить пример, в противном случае пропустить пример и перейти к среднему значению для этих 5 наборов.

person Prasad Kadiyala    schedule 20.10.2016