我应该使用1.5 * IQR规则通过在函数中使用以下两个方程式来确定左右尾部的离群值:

  • Q1-(1.5 * IQR)
  • Q3 +(1.5 * IQR)

  • 到目前为止,这是我尝试过的:

    IQR.outliers <- function(x) {
      if(any(is.na(x)))
        stop("x is missing values")
      if(!is.numeric(x))
        stop("x is not numeric")
      Q3<-quantile(x,0.75)
      Q1<-quantile(x,0.25)
      IQR<-(Q3-Q1)
      left<-x<(Q1-(1.5*IQR))
      right<-x>(Q3+(1.5*IQR))
      c(left,right)
    }

    最佳答案

    目前,您正在获得逻辑的载体。而是使用逻辑索引。假设您只需要值本身,而不是位置,那么:

    IQR.outliers <- function(x) {
      if(any(is.na(x)))
        stop("x is missing values")
      if(!is.numeric(x))
        stop("x is not numeric")
      Q3<-quantile(x,0.75)
      Q1<-quantile(x,0.25)
      IQR<-(Q3-Q1)
      left<- (Q1-(1.5*IQR))
      right<- (Q3+(1.5*IQR))
      c(x[x <left],x[x>right])
    }
    

    检查是否给出合理的结果:
    > IQR.outliers (1:100)
    integer(0)
    > IQR.outliers (c(1:100,1000))
    [1] 1000
    > IQR.outliers (rnorm(1000) )
    [1] -3.522064 -3.296682  2.910200  2.671333
    

    10-08 07:36