使用 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)
}
我正在尝试在 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)
}