rollapply

___ qstnhdr ___ Führen Sie effizient einen zeilenweisen Verteilungstest durch ___ answer29853834 ___

Eine Quelle der Beschleunigung ist es, eine kleinere Version von %code% zu schreiben, die weniger tut. %code% unter ist restriktiver als %code% . Es geht beispielsweise davon aus, dass Sie keine fehlenden Werte haben und dass Sie immer die Statistik für einen zweiseitigen Test wünschen.

%Vor%

Überprüfen Sie, ob die Ausgabe konsistent mit %code% ist.

%Vor%

Bestimmen Sie nun die Einsparungen durch die kleinere Funktion:

%Vor%     
___ answer29853943 ___

Ich konnte die paarweise Kruskal-Wallis-Statistik mit %code% mit %code% berechnen.

%Vor%

Dies bringt das erwartete Ergebnis, ist aber für einen Datensatz Ihrer Größe langsam. Langsam langsam langsam. Dies liegt möglicherweise daran, dass %code% bei jeder Iteration viel mehr berechnet als nur die Statistik; es bekommt auch den p-Wert und macht eine Menge Fehlerprüfung.

In der Tat, wenn wir einen großen Datensatz wie folgt simulieren:

%Vor%

Die %code% -Lösung benötigt viel Zeit. Ich hielt die Ausführung nach ungefähr 2 Stunden an, zu welchem ​​Zeitpunkt fast alle (aber nicht alle) Ergebnisse berechnet worden waren.

Obwohl %code% wahrscheinlich schneller ist als eine %code% -Schleife, ist es wahrscheinlich nicht die beste Gesamtlösung in Bezug auf die Leistung.

    
___ tag123r ___ R ist eine freie, quelloffene Programmiersprache und Softwareumgebung für statistische Berechnungen, Bioinformatik, Visualisierung und allgemeine Datenverarbeitung. Stellen Sie minimale, reproduzierbare, repräsentative Beispiele für Ihre Fragen bereit. Verwenden Sie dput () für Daten und geben Sie alle Nicht-Basis-Pakete mit Bibliotheksaufrufen an. Bilder für Daten oder Code nicht einbetten, eingerückte Codeblöcke verwenden. Verwenden Sie für statistische Fragen http://stats.stackexchange.com. ___ qstntxt ___

Ich habe eine Matrix, in der jede Zeile ein Muster aus einer Distribution ist. Ich möchte einen rollenden Vergleich der Verteilungen mit %code% durchführen und die Teststatistik jeweils speichern. Der einfachste Weg, dies konzeptionell zu implementieren, ist eine Schleife:

%Vor%

Meine realen Daten haben jedoch ~ 400 Spalten und ~ 300.000 Zeilen für ein einzelnes Beispiel, und ich habe viele Beispiele. Also ich möchte, dass es schnell geht. Der Kolmogorov-Smirnov-Test ist nicht so mathematisch kompliziert, und wenn die Antwort lautet: "Implementiere ihn in %code% ", werde ich das widerwillig akzeptieren, aber ich wäre etwas überrascht - es ist schon sehr schnell, darauf zu rechnen ein einzelnes Paar in R.

Methoden, die ich versucht habe, aber nicht funktionieren konnten: %code% mit %code% , %code% mit %code% (was ich zum Generieren der Distributionen verwende) und %code% einfüllen eine Schleife (bearbeiten: diese funktioniert, aber es ist immer noch langsam).

    
___ tag123optimierung ___ Optimierung ist der Akt der Verbesserung einer Methode oder eines Designs. In der Programmierung nimmt die Optimierung normalerweise die Form an, die Geschwindigkeit eines Algorithmus zu erhöhen oder die benötigten Ressourcen zu reduzieren. Eine weitere Bedeutung der Optimierung sind numerische Optimierungsalgorithmen. ___ answer29853863 ___

Hier ist eine %code% -Lösung, die das gleiche Ergebnis wie Ihre Schleife erzielt. Ich habe Zweifel, ob das tatsächlich schneller ist als die Schleife, aber vielleicht kann es als erster Schritt zu einer Lösung dienen.

%Vor%     
___ tag123rolllapply ___ rollapply ist eine Funktion im zoo-Paket, die zum Ausführen von Rollvorgängen für ein Objekt verwendet wird. ___ answer29854723 ___

Eine schnelle und schmutzige Implementierung in Rcpp

%Vor%

für die Matrix der Größe %code% , es ist unter 1s abgeschlossen.

%Vor%

Und das Ergebnis scheint genau zu sein.

%Vor%     
___
4
Antworten

Führen Sie effizient einen zeilenweisen Verteilungstest durch

Ich habe eine Matrix, in der jede Zeile ein Muster aus einer Distribution ist. Ich möchte einen rollenden Vergleich der Verteilungen mit ks.test durchführen und die Teststatistik jeweils speichern. Der einfachste Weg, dies konzeptionell zu im...
24.04.2015, 15:32