在 R 中使用来自 MVN 的 mvOutlier 标记异常值

Label outliers using mvOutlier from MVN in R

我正在尝试使用 RMVN 包的 mvOutlier() 函数在卡方 Q-Q 图上标记离群值。

我已经设法通过标签识别异常值并获得它们的 x 坐标。我尝试使用 text() 将前者放在图上,但 x- 和 y- 坐标似乎被翻转了。

基于文档中的示例:

library(MVN)
data(iris)
versicolor <- iris[51:100, 1:3]
# Mahalanobis distance
result <- mvOutlier(versicolor, qqplot = TRUE, method = "quan")
labelsO<-rownames(result$outlier)[result$outlier[,2]==TRUE]
xcoord<-result$outlier[result$outlier[,2]==TRUE,1]
text(xcoord,label=labelsO)

这会产生以下结果:

我也试过text(x = xcoord, y = xcoord,label = labelsO),当点在y = x线附近时没问题,但当不满足正态性(并且点偏离这条线)时可能会失败。

有人可以建议如何访问卡方分位数,或者为什么 text() 函数的 x 坐标似乎不符合输入参数。

查看 mvOutlier 函数内部,它似乎没有保存卡方值。现在,您的 text 代码将 xcoord 视为 y 值,并假定实际的 x 值为 1:2。值得庆幸的是,卡方值是一个相当简单的计算,因为在这种情况下它是基于等级的。

result <- mvOutlier(versicolor, qqplot = TRUE, method = "quan")
labelsO<-rownames(result$outlier)[result$outlier[,2]==TRUE]
xcoord<-result$outlier[result$outlier[,2]==TRUE,1]
#recalculate chi-squared values for ranks 50 and 49 (i.e., p=(size:(size-n.outliers + 1))-0.5)/size and df = n.variables = 3
chis = qchisq(((50:49)-0.5)/50,3)
text(xcoord,chis,label=labelsO)

在之前的回复中提到,MVN packge不支持标记异常值。虽然这不是真正必要的,因为它可以手动完成,但我们仍然可以考虑在 mvOutlier(...) 函数中添加 "labeling outliers" 选项。确实感谢您的关注。我们可能会将其包含在包的后续更新中。

MVN 包的基于 Web 的版本现在可以标记异常值(异常值检测选项卡下的高级选项)。您可以通过 http://www.biosoft.hacettepe.edu.tr/MVN/

访问此网络工具