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önnteAntworten:
Der Mahalanobis-Abstand entspricht dem euklidischen Abstand auf den PCA-transformierten Daten (nicht nur PCA-gedreht!), Wobei ich mit "PCA-transformiert" meine (i) zuerst gedreht, um unkorreliert zu werden, und (ii) dann skaliert, um standardisiert zu werden . Dies ist, was @ttnphns in den obigen Kommentaren gesagt hat und was sowohl @DmitryLaptev als auch @whuber in ihren Antworten, mit denen Sie verlinkt haben ( eins und zwei ), gemeint und explizit geschrieben haben. Ich empfehle Ihnen daher, ihre Antworten erneut zu lesen und diesen Punkt sicherzustellen wird klar.
Dies bedeutet , dass Sie Ihren Code Arbeit einfach machen durch den Austausch
pc$x
mitscale(pc$x)
in der vierten Zeile von unten.In Bezug auf Ihre zweite Frage mitn<p Die Kovarianzmatrix ist singulär und daher ist der Mahalanobis-Abstand undefiniert. Denken Sie in der Tat an die euklidische Distanz in den PCA-transformierten Daten. wannn<p Einige der Eigenwerte der Kovarianzmatrix sind Null und die entsprechenden PCs haben eine Varianz von Null (alle Datenpunkte werden auf Null projiziert). Es ist daher unmöglich, diese PCs zu standardisieren, da es unmöglich ist, durch Null zu teilen. Mahalanobis Entfernung kann nicht "in diese Richtungen" definiert werden.
Was man tun kann, ist sich ausschließlich auf den Unterraum zu konzentrieren, in dem die Daten tatsächlich liegen, und die Mahalanobis-Entfernung in diesem Unterraum zu definieren. Dies entspricht der Durchführung von PCA und der Beibehaltung von Komponenten ungleich Null. Ich denke, das haben Sie in Ihrer Frage Nr. 2 vorgeschlagen. Die Antwort darauf lautet also ja. Ich bin mir jedoch nicht sicher, wie nützlich dies in der Praxis sein kann, da dieser Abstand wahrscheinlich sehr instabil ist (Eigenwerte nahe Null sind mit sehr schlechter Genauigkeit bekannt, werden jedoch in der Mahalanobis-Formel invertiert, was möglicherweise zu groben Fehlern führt). .
quelle
Der Mahalanobis-Abstand ist der skalierte euklidische Abstand, wenn die Kovarianzmatrix diagonal ist. In PCA ist die Kovarianzmatrix zwischen Komponenten diagonal. Der skalierte euklidische Abstand ist der euklidische Abstand, bei dem die Variablen anhand ihrer Standardabweichungen skaliert wurden. Siehe S. 303 in Encyclopedia of Distances , ein sehr nützliches Buch, übrigens.
Es scheint, dass Sie versuchen, die euklidische Distanz für die Teilmenge der PCA-Faktoren zu verwenden. Sie haben wahrscheinlich die Dimensionalität mit PCA reduziert. Sie können dies tun, aber es wird ein Fehler auftreten, der "proportional" zu dem Anteil der Varianz ist, der durch Ihre PCA-Komponenten erklärt wird. Natürlich müssen Sie auch den Abstand für die Skala anpassen (dh Abweichungen erklären).
quelle