代码之家  ›  专栏  ›  技术社区  ›  pisistrato

如何用非线性阈值查找异常值

  •  0
  • pisistrato  · 技术社区  · 8 年前

    假设我有一个数据帧,比如

    x <- round(runif(1000,-5,5), 2)
    y <- round(runif(1000,0,5), 2)
    z <- sprintf("%s%05d", "A", seq.int(1000))
    df <- data.frame(x, y, z)
    

    如何找到哪个数据点(z列中的点名称)是非线性阈值的异常值,如下所示

    y=a/(| x |-c)

    哪里 a 和 c 是否可以任意选择值?

    |x |是x的模量

    1 回复  |  直到 8 年前
        1
  •  1
  •   Kelli-Jean    8 年前

    如注释中所述,您可以为此创建一个简短的函数:

    find_outliers = function(df, a, c){
      y_threshold = a/(abs(df$x)-c)
      return(df$z[df$y>y_threshold])
    }
    
    a=1
    c=0.1
    find_outliers(df,a,c)
    
    推荐文章