在R中具有强大回归的异常值

时间:2014-06-27 20:11:15

标签: r regression robust

我使用lmrob库中的robustbase函数进行稳健回归。我会将其用作rob_reg<-lmrob(y~0+.,dat,method="MM",control=a1)。当我想要返回摘要时,我使用summary(rob_reg)并且一个强大的回归就是识别数据中的异常值。摘要输出的某个部分给出了以下内容,

6508 observations c(49,55,58,77,104,105,106,107,128,134,147,153,...) are outliers with |weight| <= 1.4e-06 ( < 1.6e-06);

列出所有异常值,在本例中为6508(我删除了多数,并将其替换为......)。我需要以某种方式获取这些异常值并将其从我的数据中删除。我以前做过的是使用summary(rob_reg)$rweights获取观察的所有权重,并删除那些权重小于上述示例中某个值的观察值,该值为1.6e-06。我想知道,有没有办法在没有首先得到所有观测值的权重的情况下得到只有异常值的列表?

1 个答案:

答案 0 :(得分:2)

这是一篇很老的帖子,但我最近有这个需要,所以我想我会分享我的解决方案。

    #fit the model
    fit = lmrob(y ~ x, data)
    #create a model summary
    fit.summary = summary(fit)

    #extract the outlier threshold weight from the summary 
    out.thresh = fit.summary$control$eps.outlier

    #returns the weights corresponding to the outliers
    #names(out.liers) corresponds to the index of the observation
    out.liers = fit.summary$rweights[which(fit.summary$rweights <= out.thresh)]

    #add a True/False variable for outlier to the original data by matching row.names of the original data to names of the list of outliers
    data$outlier = rep(NA, nrow(data))
    for(i in 1:nrow(data)){
      data$outlier[i] = ifelse(row.names(data[i] %in% names(out.liers), "True", "False")
    }