Ich bin zu der Überzeugung gelangt (siehe hier und hier ), dass der Mahalanobis-Abstand dem euklidischen Abstand in den PCA-gedrehten Daten entspricht. Mit anderen Worten, multivariate normale Daten, die Mahalanobis Entfernung aller 's von einem bestimmten Punkt (sagen wir ) sollte dem euklidischen Abstand der Einträge von entsprechen von , wo ist das Produkt der Daten und der PCA-Rotationsmatrix.
1. Ist das wahr?
Mein Code unten deutet darauf hin, dass dies nicht der Fall ist. Insbesondere sieht es so aus, als ob die Varianz des Mahalanobis-Abstandes um den PCA-euklidischen Abstand in der Größe des PCA-euklidischen Abstandes zunimmt. Ist dies ein Codierungsfehler oder ein Merkmal des Universums? Hat es mit Ungenauigkeit bei der Schätzung von etwas zu tun? Etwas, das quadratisch wird?
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. Wenn die Antwort auf das oben Gesagte zutrifft, kann man die PCA-gedrehte euklidische Distanz als Ersatz für die Mahalanobis-Distanz verwenden, wenn ?
Wenn nicht, gibt es eine ähnliche Metrik, die den durch Korrelation skalierten multivariaten Abstand erfasst und für die Verteilungsergebnisse vorliegen, um die Wahrscheinlichkeit einer Beobachtung berechnen zu können?
BEARBEITEN Ich habe einige Simulationen durchgeführt, um die Äquivalenz von MD und SED für skalierte / gedrehte Daten über einen Gradienten von n und p zu untersuchen. Wie ich bereits erwähnt habe, interessiert mich die Wahrscheinlichkeit einer Beobachtung. Ich hoffe, einen guten Weg zu finden, um die Wahrscheinlichkeit zu ermitteln, dass eine Beobachtung Teil einer multivariaten Normalverteilung ist, für die ich aber einen habeDaten zur Schätzung der Verteilung. Siehe den Code unten. Es sieht so aus, als ob die PCA-skalierte / gedrehte SED ein leicht voreingenommener Schätzer der MD ist, mit einer angemessenen Varianz, die nicht mehr zuzunehmen scheint, wenn.
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)
Zwei Fragen: 1. Kritik an dem, was ich in diesen Simulationen finde? 2. Kann jemand das, was ich finde, mit einem analytischen Ausdruck für die Verzerrung und die Varianz als Funktionen von n und p formalisieren? Ich würde eine Antwort akzeptieren, die dies tut.
1/eigenvalue
von der Komponente. (Und das Gleiche gilt auch, wenn wir über Entfernungen zwischen Punkten und Schwerpunkt anstelle von Punkt-Punkt-Entfernungen sprechen.) Diese Gewichtung kompensiert die Unterschiede zwischen Mahalanobis und Euklidisch, die ich in meinem Kommentar angesprochen habe.
Mahalanobis singular
die Antworten auf Ihre zweite Frage liefern könnte