识别和删除PCA和QQ图中的异常值

use*_*211 4 r outliers quantile pca

我有一个132 x 107的数据集,包括2个患者类型 - (患者1的33)和(患者2的99).

我正在寻找异常值,所以我在数据集上运行了pca,并使用以下命令完成了前4个组件的qqplots

pca = prcomp(data, scale. = TRUE)
plot(pca$x, pch = 20, col = c(rep("red", 33), rep("blue", 99)))  
Run Code Online (Sandbox Code Playgroud)

当我使用以下内容执行第二个组件的qqplot时:

qqPlot(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99)))     
Run Code Online (Sandbox Code Playgroud)

下图显示了2个明确的异常值 - 左下角的红点是患者1.

QQ情节

有没有直接的方法来计算数据中这些点的索引,以便可以删除它们?

joe*_*nko 7

出于某种原因,我不相信car包中支持识别方法(来源qqPlot())

让我们来看看USArrests数据的PCA ......

pca <- prcomp(USArrests) 
Run Code Online (Sandbox Code Playgroud)

这种使用的情节qqPlot很简单.

require(car)
qqPlot(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99)))
Run Code Online (Sandbox Code Playgroud)

但是,qqPlot()不允许通过点选择identify().

identify(qqPlot(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99))))
# numeric(0)
Run Code Online (Sandbox Code Playgroud)

但是,您可以qqnorm()stats包中使用.

identify(qqnorm(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99))))
Run Code Online (Sandbox Code Playgroud)

这将生成一个不太复杂的图形,但您应该能够通过qqline()(也在stats)和更多的数学手动添加线和置信区间.