我有一个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)))
当我使用:
执行第二个组件的qqplot时qqPlot(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99)))
下图显示了2个明确的异常值 - 左下角的红点是患者1。
有没有直接的方法来计算数据中这些点的索引,以便将它们删除?
答案 0 :(得分:6)
出于某种原因,我不相信支持识别方法
在car
包中(qqPlot()
的来源)
让我们来看看USArrests数据的PCA ......
pca <- prcomp(USArrests)
使用qqPlot
的情节很容易。
require(car)
qqPlot(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99)))
但是,qqPlot()
不允许通过identify()
进行点选择。
identify(qqPlot(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99))))
# numeric(0)
但是,您可以在qqnorm()
包中使用stats
。
identify(qqnorm(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99))))
这将产生一个不太复杂的图形,但您应该能够通过qqline()
(也在stats
)手动添加线和置信区间以及更多的数学运算。
答案 1 :(得分:3)
您可以在R中尝试identify方法。通常,运行
identify(qqPlot(pca$x[,2],pch = 20, col = c(rep("red", 33), rep("blue", 99))))
并左键单击要识别的点。分数向量中的点索引应与原始数据中的相同。
答案 2 :(得分:0)
您还可以使用fviz_pca_ind()
库中的factoextra
函数来可视化影响,如下所示:
require(factoextra)
pca = prcomp(mydata)
fviz_pca_ind(pca,
col.ind = "contrib", # Color by contribution
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07") #assign gradient
)
这会自动标记个人,并根据他们的影响为他们着色。