我正在研究 Michael Faraway 的Linear Models with R(第 11 章,第 164 页)中的 PCA 部分。
PCA 分析对异常值很敏感,马氏距离有助于我们识别它们。
作者通过绘制马氏距离与卡方分布的分位数来检查异常值。
if require(faraway)==F install.packages("faraway"); require(faraway)
data(fat, package='faraway')
cfat <- fat[,9:18]
n <- nrow(cfat); p <- ncol(cfat)
plot(qchisq(1:n/(n+1),p), sort(md), xlab=expression(paste(chi^2,
"quantiles")),
ylab = "Sorted Mahalanobis distances")
abline(0,1)
我确定要点:
identify(qchisq(1:n/(n+1),p), sort(md))
异常值似乎在第 242:252 行。我删除这些异常值并重新创建 QQ 图:
cfat.mod <- cfat[-c(242:252),] #remove outliers
robfat <- cov.rob(cfat.mod)
md <- mahalanobis(cfat.mod, center=robfat$center, cov=robfat$cov)
n <- nrow(cfat.mod); p <- ncol(cfat.mod)
plot(qchisq(1:n/(n+1),p), sort(md), xlab=expression(paste(chi^2,
"quantiles")),
ylab = "Sorted Mahalanobis distances")
abline(0,1)
identify(qchisq(1:n/(n+1),p), sort(md))
唉,现在看来,一组新的点(第 234:241 行)现在是异常值。每次我删除额外的异常值时,这种情况都会发生。
期待了解我做错了什么。