Finden Sie Daten und Vertrauens-Ellipsen (Regionen?) Für einen bivariaten Median?


7

Ich frage mich, wie ich Daten und Vertrauensellipsen um einen bivariaten Median berechnen kann. Zum Beispiel kann ich leicht eine Datenellipse oder eine Konfidenzellipse für den bivariaten Mittelwert der folgenden Daten berechnen (hier nur eine Datenellipse).

library("car")
set.seed(1)
df <- data.frame(x = rnorm(200, mean = 4, sd = 1.5),
                 y = rnorm(200, mean = 1.4, sd = 2.5))
plot(df)
with(df, dataEllipse(x, y, level = 0.68, add = TRUE))

Geben Sie hier die Bildbeschreibung ein

Aber ich habe Probleme damit, wie ich das für einen bivariaten Median machen würde? Im univariaten Fall könnte ich einfach ein Bootstrap-Resample durchführen, um das erforderliche Intervall zu generieren, aber ich bin mir nicht sicher, wie ich dies in den bivariaten Fall übersetzen soll?

Wie von @Andy W hervorgehoben, ist der Median nicht eindeutig definiert. In diesem Fall haben wir den räumlichen Median verwendet , indem wir einen Punkt gefunden haben, der die L1-Norm der Abstände zwischen Beobachtungen an diesem Punkt minimiert. Eine Optimierung wurde verwendet, um den räumlichen Median aus den beobachteten Datenpunkten zu berechnen.

Außerdem sind die x, y-Datenpaare im tatsächlichen Anwendungsfall zwei Eigenvektoren einer Hauptkoordinatenanalyse einer Unähnlichkeitsmatrix, daher sollten x und y orthogonal sein, wenn dies einen bestimmten Angriffsweg bietet.

Im tatsächlichen Anwendungsfall möchten wir die Daten- / Konfidenzellipse für Punktgruppen im euklidischen Raum berechnen. Zum Beispiel:

Geben Sie hier die Bildbeschreibung ein

Die Analyse ist ein multivariates Analogon eines Levene-Tests zur Homogenität von Varianzen zwischen Gruppen. Wir verwenden räumliche Mediane oder Standardgruppenschwerpunkte als Maß für die multivariate zentrale Tendenz und möchten das Äquivalent der Datenellipse in der obigen Abbildung für den Fall des räumlichen Medians hinzufügen.


4
Der Median in höheren Dimensionen ist nicht eindeutig definiert. Möglicherweise interessieren Sie sich jedoch für Boxplots, die auf höhere Dimensionen verallgemeinert sind, z. B. The Bagplot: A Bivariate Boxplot (Rousseeuw et al., 1999).
Andy W

+1 Danke @AndyW - Ich hatte den Bagplot völlig vergessen (schätze, das ist es, was du bekommst, wenn du meine EDA-Vorlesungen seit einigen Jahren nicht mehr unterrichtest - ich bin total verrückt geworden!). Ich hätte die Art des Medians angeben sollen, an den ich gedacht hatte - - Ich werde den Beitrag aktualisieren, aber wir haben den räumlichen Median berechnet, den Punkt, der die L1-Norm der Abstände der Datenpunkte zu diesem Punkt minimiert.
Gavin Simpson

1
Wenn Sie wissen, dass die und Richtungen orthogonal sind, warum schätzen Sie ihre Mediane nicht unabhängig voneinander? Mit anderen Worten, hat der Median für Ihre Anwendung etwas Besonderes ? xyL1
whuber

2
@whuber Ah, ich könnte dort irregeführt haben. Ich werde eine neue Feige hinzufügen, die ein echtes Beispiel für den Anwendungsfall ist. Eine aus den Originaldaten berechnete Unähnlichkeitsmatrix wird mit PCoA in einen euklidischen Raum eingebettet. Was ich jedoch vernachlässigt habe, ist, dass wir die räumlichen Mediane in diesem euklidischen Raum für Gruppen von Datenpunkten berechnen. Während also x und y über alle Gruppen orthogonal sind, kann innerhalb einer Gruppe eine Korrelation bestehen. Eine Illustration finden Sie in der aktualisierten Abbildung in einer Minute. Entschuldigung dafür; Ich habe die Wichtigkeit bestimmter Aspekte des realen Anwendungsfalls nicht gewürdigt, als ich das Q.
Gavin Simpson am

2
Ich denke, ein Ansatz kann auf Bootstrapping basieren: Ermitteln Sie die Bootstrap-Verteilung Ihrer geometrischen Medianschätzungen und markieren Sie dann einen Bereich, der Bruchteil der Schätzungen enthält. Wenn Sie gerne davon ausgehen, dass die Schätzungen einer Normalverteilung folgen, ist es einfach: Passen Sie einen 2d-Gaußschen Wert an und zeichnen Sie eine entsprechende Ellipse. Wenn nicht, können Sie z. B. die Kernel-Dichteschätzung der 2d-Verteilung abrufen und dann den Bereich finden, der der Wahrscheinlichkeitsdichte umfasst. 1α1α
Amöbe

Antworten:


6

Das ist eine schöne Frage.

Ich werde dem Vorschlag von @ amoeba folgen und die räumlichen Mediane depth::med()mit verwenden method="Spatial". Es gibt jedoch eine leichte Komplikation: Es medgefällt nicht, wenn doppelte Datenpunkte vorhanden sind, sodass wir keinen einfachen Bootstrap durchführen können. Stattdessen zeichne ich ein Bootstrap-Beispiel und zittere dann jeden Punkt um einen winzigen Betrag - weniger als die Mindestabstände in jeder der und Dimensionen im ursprünglichen Datenmuster -, bevor ich den räumlichen Median berechne.xy

Schließlich werde ich die kleinste Ellipse berechnen, die einen bestimmten Anteil (95%) der Bootstrap-Mediane und des Plots abdeckt .

library(depth)      # for med()
library(MASS)           # for cov.rob()
library(cluster)    # for ellipsoidhull()

# create data
set.seed(1)
df <- data.frame(x = rnorm(200, mean = 4, sd = 1.5),
                 y = rnorm(200, mean = 1.4, sd = 2.5))

# find minimum distances in each dimension for later jittering
foo <- outer(X=df$x,Y=df$x,FUN=function(xx,yy)abs(xx-yy))
delta.x <- min(foo[upper.tri(foo)])/2
foo <- outer(X=df$y,Y=df$y,FUN=function(xx,yy)abs(xx-yy))
delta.y <- min(foo[upper.tri(foo)])/2

# bootstrap spatial medians, using jittering
n.boot <- 1000
pb <- winProgressBar(max=n.boot)
boot.med <- matrix(NA,nrow=n.boot,ncol=2)
for ( ii in 1:n.boot ) {
    setWinProgressBar(pb,ii,paste(ii,"of",n.boot))
    index <- sample(1:nrow(df),nrow(df),replace=TRUE)
    bar <- df[index,] + 
      data.frame(x=runif(nrow(df),-delta.x,delta.x),
                 y=runif(nrow(df),-delta.y,delta.y))
    boot.med[ii,] <- med(bar,method="Spatial")$median
}
close(pb)

# specify confidence level
pp <- 0.95

# find smallest ellipse containing the specified proportion of bootstrapped medians
fit <- cov.rob(boot.med, quantile.used = ceiling(pp*n.boot), method = "mve")
best_ellipse <- ellipsoidhull( boot.med[fit$best,] )

plot(df)
points(boot.med,pch=19,col="grey",cex=0.5)
points(df)
lines(predict(best_ellipse), col="red")
legend("bottomright",bg="white",pch=c(21,19,NA),
    col=c("black","grey","red"),pt.bg=c("white",NA,NA),lwd=c(0,0,1),
    legend=c("Observations","Bootstrapped medians","Confidence ellipse"))

Vertrauensellipse

Schließlich ist zu beachten, dass der bivariate räumliche Median asymptotisch normalverteilt ist (Brown, 1983, JRSS, Serie B ) , sodass wir auch auf den obigen "zitternden Bootstrap" verzichten und die Ellipse direkt berechnen können, wobei wir darauf vertrauen, dass asymptotisch genug ist ". Ich kann diesen Beitrag bearbeiten, um diese parametrische Vertrauensellipse einzuschließen, wenn ich die Zeit in den nächsten Tagen finde.n=200

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.