在R中使用3d绘图时识别异常值

时间:2014-03-31 04:06:26

标签: r outliers

我是R的新手,拥有1024行数据,包含3列数值数据。我创建了一个plot3d,我需要识别一个异常值的行号,它在plot3D中像一个疼痛的拇指一样突出,但在任何其他图中都是不可见的。

3 个答案:

答案 0 :(得分:1)

希望这有助于为您完成工作。

> data <- c(-1.5454, -0.6855, 0.1003, -0.5284, -0.4065, -0.2645, 
            -1.0868, -0.5329, 0.1623, -1e-04, -0.9569, -2.0055, 
            0.389, -0.8356, -2.2085, 0.5326, 0.0391, -0.5044, 
            -1.8376, -0.7834, 0.3436)
## original data
> dd <- data.frame(matrix(data, ncol = 3, byrow = TRUE))
## find the row number of the largest row maximum
> which.max(apply(dd, 1, max))
[1] 6
## Use the previous line to remove the unwanted row
> newDd <- dd[ -which.max(apply(dd, 1, max)), ] 
## plot the two data frames together to see the difference
> library(plot3D)
> par(mfrow = c(1, 2))
> with(dd, scatter3D(X1, X2, X3, phi = 0, theta = 50, bty = "g",
                     col = gg.col(100), pch = 19, cex = 2, colkey = FALSE))
> with(newDd, scatter3D(X1, X2, X3, phi = 0, theta = 50, bty = "g",
                        col = gg.col(100), pch = 19, cex = 2, colkey = TRUE))

enter image description here

答案 1 :(得分:0)

使用built-int arrayInd查找最大值(或最小值):

arrayInd(which.max(as.matrix(df)), .dim = dim(df))

例如,我们将用一个拇指做一个3列数据框。

df <- data.frame(structure(replicate(3, runif(1024, 0, 1), simplify = FALSE), .Names = c('one', 'two', 'three')))
df[50, 2] <- 10

现在我们得到

arrayInd(which.max(as.matrix(df)), .dim = dim(df))
#      [,1] [,2]
# [1,]   50    2

我们看到罪犯排在第50行和第2列。

答案 2 :(得分:0)

欢迎用户3479729。请发布reproducible example。否则你将得不到答案或不好答案。

如果&#39; M&#39;是你绘制的矩阵和&#39; thres&#39;是你的异常数据的门槛(我需要假设你正在绘制一个矩阵?),你可以使用:

> which(M>thres,arr.ind=TRUE)