【发布时间】:2017-05-18 15:23:00
【问题描述】:
我一直在到处寻找使用 R 识别多元异常值的最佳方法,但我认为我还没有找到任何可信的方法。
我们可以以虹膜数据为例,因为我的数据也包含多个字段
data(iris)
df <- iris[, 1:4] #only taking the four numeric fields
首先,我使用库 MVN 中的 Mahalanobis 距离
library(MVN)
result <- mvOutlier(df, qqplot = TRUE, method = "quan") #non-adjusted
result <- mvOutlier(df, qqplot = TRUE, method = "adj.quan") #adjusted Mahalonobis distance
两者都导致大量异常值(150 个中的 50 个为未调整的,49/150 个为调整的),我认为这需要进一步完善。不幸的是,我似乎无法在 mvOutlier 方法中找到一个变量来设置阈值(说增加一个点成为异常值的概率,以便我们有一个较小的数字)
其次,我使用了异常值库。这是为了找到单变量异常值。因此,我的计划是在数据的每个维度上找到异常值,并且那些在所有维度上都是异常值的点被视为数据集的异常值。
library(outliers)
result <- scores(df, type="t", prob=0.95) #t test, probability is 0.95
result <- subset(result, result$Sepal.Length == T & result$Sepal.Width == T & result$Petal.Length == T & result$Petal.Width == T)
为此我们可以设置概率,但我认为它不能代替多元异常值检测。
我尝试过的其他一些方法
- library(mvoutlier):这仅显示情节。很难 自动找出异常值。而且我不知道如何添加 概率成这个
- cook's distance (link): 一个男人说他用cook's 距离,但我认为没有任何强有力的学术证据可以证明 证明这没问题。
【问题讨论】:
标签: r outliers multivariate-testing mahalanobis