异常值删除(pracma包中的outlierMAD命令)

时间:2014-10-16 19:38:57

标签: r error-handling dataset package outliers

我想从我的数据集的每一列中删除异常值...通过搜索网络,似乎Hampel标识符应该是我的问题的一个很好的解决方案,它具有异常值检测技术:[median – t * MAD, median + t * MAD]。< / p>

使用以下提供的说明: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

3 个答案:

答案 0 :(得分:1)

abs(x [i] -x0)的逻辑值&gt; t0 * S0应为True或False。如果任何变量是NA或被视为非数字,则可能发生错误。 在NA存在的情况下,如果na.rm = FALSE,则中值可以产生NA而不是中值。为中位数设置na.rm = TRUE将修复X0和S0,但如果x [I] = NA本身,则无助于上面的逻辑表达式。 尝试检查NA或其他一些非数字值的数据。希望这可以帮助。

答案 1 :(得分:0)

我使用'pracma'包的hampel函数得到了同样的错误。这个问题是由我的时间序列引起的,该时间序列少于5次。检查你的是否足够长。

答案 2 :(得分:0)

需要降低K值,或者如果nrow(df)> 0,则保持一个条件。 5然后应用hample,否则跳过hample并继续进行5组

的平均值