使用z得分找出异常值

时间:2015-03-04 23:09:39

标签: r outliers

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

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

对于z得分的计算,但由于我是编程的初学者,我发现因为矩阵而难以解决问题。

2 个答案:

答案 0 :(得分:1)

这段代码怎么样:

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个标准偏差。 首先,我创建一个随机矩阵。 然后我逐行缩放(应用函数的&#39; 1&#39;参数) 我申请了&#39; abs&#39;避免必须在两侧进行测试(&lt;和&gt;),因为测试是对称的 最终它会给你异常值。但你也可能想看看它们在哪里,只需这样做:

image(temp > 2)

enter image description here

编辑:如果你需要它作为输入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

答案 1 :(得分:0)

myfun <- function(x, zs) { 
    x1 <- apply(x, 1, scale)
    x2 <- (abs(x1) - abs(zs)) > 0
    return(x * x2)
}