使用R概率

时间:2017-01-04 10:53:13

标签: r outliers multivariate-testing mahalanobis

我一直在寻找使用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):这只显示情节。这很难 自动查找异常值。而且我不知道如何添加 这个概率
  • 烹饪的距离(link):一个男人说他用过厨师的 距离,但我认为没有任何强有力的学术证据 证明这没问题。

2 个答案:

答案 0 :(得分:3)

我将给你留下这两个链接,第一个是关于多变量异常检测的不同方法的论文,而第二个是关于如何在R中实现这些。

Cook的距离是查看数据点影响的有效方式,因此有助于检测外围点。马哈拉诺比斯距离也定期使用。

对于测试示例,虹膜数据集无用。它用于分类问题,因为它是明显可分的。您排除50个数据点将会消除整个物种。

多变量数据中的异常值检测 -

http://www.m-hikari.com/ams/ams-2015/ams-45-48-2015/13manojAMS45-48-2015-96.pdf

R实施

http://r-statistics.co/Outlier-Treatment-With-R.html

答案 1 :(得分:0)

有非常有趣的选择。

第一个,Rlof 包,用于计算局部异常值因子。它计算反映观测异常程度的分数(称为局部异常值因子)。它测量一个点的局部密度相对于它的邻居的偏差。这个想法是检测密度比邻居低得多的样本。 在实践中,局部密度是从 k 个最近的邻居中获得的。

其次,孤独包。

它应用了一种受随机森林启发的方法,称为隔离森林。

两者都会生成不同的分数,这不是概率,而是允许确定阈值,从中分配问题类型和主题知识认为合适的异常数据的数量。

相关问题