我试图标签上使用卡方QQ图离群mvOutlier()的功能MVN包R。
我设法通过标签识别异常值并获得它们的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)
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果:

我也试过text(x = xcoord, y = xcoord,label = labelsO),当点靠近 y = x 线时很好,但当不满足正态性时可能会失败(并且点偏离这条线)。
有人可以建议如何访问卡方分位数或为什么函数的x坐标text()似乎不服从输入参数。
查看mvOutlier函数内部,看起来它没有保存卡方值。现在,您的text代码将其视为xcoordy 值,并假设实际的 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)
Run Code Online (Sandbox Code Playgroud)