【发布时间】:2016-04-25 13:04:24
【问题描述】:
我正在研究 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 行)现在是异常值。每次我删除额外的异常值时,这种情况都会发生。
期待了解我做错了什么。
【问题讨论】:
-
我们需要
md进行故障排除。 -
你可能没有做错什么。这是错误指定模型的常见问题。
-
同意@Alex,您正在根据排除旧异常值的“新”数据集重新计算异常值。
-
@BrandonBertelsen “一直都是异常值”。 Explanation
-
哈哈,我从没见过。很好的比喻。我喜欢乌龟。
标签: r pca outliers mahalanobis