在 R 中使用来自 MVN 的 mvOutlier 标记异常值
Label outliers using mvOutlier from MVN in R
我正在尝试使用 R
中 MVN
包的 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/
访问此网络工具
我正在尝试使用 R
中 MVN
包的 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/