我一直相信(见这里和这里)马氏距离与 PCA 旋转数据上的欧几里得距离相同。换句话说,采用多元正态数据, 所有的马氏距离来自任何给定的点(比如) 应该与条目的欧几里得距离相同从, 在哪里是数据和 PCA 旋转矩阵的乘积。
1. 这是真的吗?
我下面的代码向我暗示它不是。特别是,看起来围绕 PCA-欧几里得距离的马氏距离方差随着 PCA-欧几里得距离的大小而增加。这是一个编码错误,还是宇宙的一个特征?它是否与对某事的估计不精确有关?得到平方的东西?
N=1000
cr = runif(1,min=-1,max=1)
A = matrix(c(1,cr,cr,1),2)
e<-mvrnorm(n = N,rep(0,2),A)
mx = apply(e, 2, mean)
sx = apply(e, 2, sd)
e = t(apply(e,1,function(X){(X-mx)/sx}))
plot(e[,1],e[,2])
dum<-rep(0,2)
md = mahalanobis(e,dum,cov(e))
pc = prcomp(e,center=F,scale=F)
d<-as.matrix(dist(rbind(dum,pc$x),method='euclidean',diag=F))
d<-d[1,2:ncol(d)]
plot(d,md^.5)
abline(0,1)
2. 如果上面的答案是正确的,可以用 PCA 旋转的欧几里得距离代替马氏距离?
如果没有,是否有类似的度量标准可以捕获多元距离,按相关性进行缩放,并且存在哪些分布结果以允许计算观察概率?
编辑 我已经运行了一些模拟来研究 MD 和 SED 在 n 和 p 梯度上缩放/旋转数据的等效性。正如我之前提到的,我对观察的概率感兴趣。我希望找到一种很好的方法来让观察成为多元正态分布的一部分的概率,但是我已经得到了估计分布的数据。请参阅下面的代码。看起来 PCA 缩放/旋转的 SED 是MD 的轻微偏差估计量,具有相当数量的方差似乎停止增加.
f = function(N=1000,n,p){
a = runif(p^2,-1,1)
a = matrix(a,p)
S = t(a)%*%a
x = mvrnorm(N,rep(0,p),S)
mx = apply(x, 2, mean)
sx = apply(x, 2, sd)
x = t(apply(x,1,function(X){(X-mx)/sx}))
Ss = solve(cov(x))
x = x[sample(1:N,n,replace=F),]
md = mahalanobis(x,rep(0,p),Ss,inverted=T)
prMD<-pchisq(md,df = p)
pc = prcomp(x,center=F,scale=F)
d<-mahalanobis(scale(pc$x),rep(0,ncol(pc$x)),diag(rep(1,ncol(pc$x))))
prPCA<-pchisq(d,df = min(p,n))#N is the number of PCs where N<P
return(data.frame(prbias = as.numeric(mean(prMD - prPCA)), prvariance = as.numeric(mean((prMD - prPCA)^2))))
}
grid = data.frame(n=100,p=2:200)
grid$prvariance <-grid$prbias <-NA
for (i in 1:nrow(grid)){
o = f(n=grid[i,]$n,p=grid[i,]$p)
grid[i,3:4]<-o
}
par(mfrow=c(1,2))
with(grid, plot(p,prbias))
abline(v=100)
m = lm(prbias~p,data=grid)
abline(m,col='red',lty=2)
with(grid, plot(p,prvariance))
abline(v=100)
两个问题: 1. 对我在这些模拟中的发现有何批评?2. 谁能将我的发现形式化为偏差和方差的分析表达式作为 n 和 p 的函数?我会接受这样做的答案。