Ich bin nicht sicher, ob es eine effizientere Methode zur Berechnung des ECDF an den Datenpunkten gibt , aber der folgende Brute-Force-Ansatz sollte für die Berechnung des ECDF über das Daten- "Raster" effizient sein . Es ist eine einfache Verallgemeinerung der 1D-Version.
Angenommen, Sie haben einen Datensatz, der aus Punkten in Dimensionen besteht und in der Matrix . Der Einfachheit halber gehe ich davon aus, dass vollständig aus eindeutigen Zahlen besteht (dh allgemeine Position *). Ich werde die Matlab- Notation im folgenden Pseudocode verwenden, wie ich es mir für den Algorithmus vorgestellt habe, aber ich kann dies bei Interesse erweitern.NdN×dXX
Zuerst berechnen
[x:,k,I:,k]=sort[X:,k] für ,k=1:d
Dabei ist die koordinatenweise Rangmatrix und die Koordinatengitterachsenmatrix (beide mit der Größe ).IxN×d
Dann rastern die Datenpunkte in den implizierten Datenraster, Berechnen eines (normalisiert) Histogramm als
.P=accumarray[I,1N,N×ones[1,d]]
Integrieren Sie dann dieses "EPDF" in jede Dimension, um das ECDF zu erhalten:
für .P=cumsum[P,k]k=1:d
Jetzt ist die ECDF, die bei .Pi1,…,idxi1,1,…xid,d
Dieser Algorithmus benötigt Zeit für jede Sortierung und für jede Summe, sodass die Gesamtkosten . Da das gerasterte ECDF selbst -Elemente enthält, sollte dies im Wesentlichen optimal sein.O[NlogN]O[Nd]O[d(Nd+NlogN)]O[Nd]
(* Die Annahme bestimmter Punkte kann gelockert werden, indem anstelle von zusammen mit ein wenig Buchhaltung verwendet wird.)unique[]sort[]