使用 z 分数查找异常值

Find outlier using z score

我正在尝试在 R 中创建一个函数。该函数应该使用 z 分数从矩阵中找到离群值。该函数应该有两个参数作为输入(x 是一个矩阵,zs 是一个整数)。对于矩阵的每个原始数据,该函数应计算每个元素的 zscore,如果 zscore 大于 zs 或小于 -zs,则该函数应打印该元素。我知道我可以使用:

z<- (x-mean(x))/sd(x)   or  z<- scale(x) 

关于z score的计算,但是我是编程初学者,因为矩阵的原因,我觉得很难解决这个问题。

这段代码怎么样:

set.seed(1)
mat <- matrix(rnorm(100), ncol=10)
temp <- abs(apply(mat, 1, scale))
mat[temp > 2]
### [1]  1.9803999  0.2670988 -1.2765922

我为你的 Z 限制取了 2 个标准差。 首先我创建一个随机矩阵。 然后我逐行缩放它(应用函数的“1”参数) 我应用 'abs' 以避免必须在两侧(< 和 >)进行测试,因为测试是对称的 最终它会给你异常值。但您可能还想查看它们的位置,只需执行以下操作:

image(temp > 2)

编辑:如果您需要它作为输入 x 和 zs 的函数,我将其包装:

outliers = function(x, zs) {
  temp <- abs(apply(x, 1, scale))
  return(x[temp > zs])
}

### > outliers(matrix(rnorm(100), ncol=10), 2)
### [1]  1.9803999  0.2670988 -1.2765922
myfun <- function(x, zs) { 
    x1 <- apply(x, 1, scale)
    x2 <- (abs(x1) - abs(zs)) > 0
    return(x * x2)
}