Ich arbeite gerade an einem Programm, um die Out-of-Sample-Performance mehrerer Prognosemodelle auf simulierten Daten zu bewerten. Für diejenigen, die mit Finanzen vertraut sind, funktioniert es genau wie Backtesting einer Handelsstrategie, außer dass ich Prognosen und nicht Transaktionen bewerten würde.Umgang mit mehrdimensionaler Ausgabe in paralleler Programmierung
Einige der Objekte, die ich derzeit mit for-Schleifen für diese Art von Aufgabe manipuliere, sind 7-dimensionale Arrays (Dimensionen stehen für Monte-Carlo-Replikationen, Datengenerierungsprozesse, Prognosehorizonte, 3 Dimensionen für die Modellparameterauswahl und eine Dimension für alle) die in der Analyse außerhalb der Stichprobe erfassten Zeiträume). Offensichtlich ist es schmerzhaft langsam, so dass paralleles Rechnen für mich ein Muss geworden ist.
Mein Problem ist: Wie behalte ich mehr als 2 Dimensionen in R? Lassen Sie uns Ihnen zeigen, mit ‚for-Schleifen‘ und nur 3 Dimensionen, was ich meine:
x <- array(dim=c(2,2,2))
for (i in 1:2){
for (j in 1:2){
for (k in 1:2){
x[i,j,k] <- i+j+k
}
}
}
Wenn ich so etwas wie ‚foreach‘ verwenden, ich bin sehr verärgert durch die Tatsache, dass meines Wissens zur Verfügung kombiniert Funktionalitäten Rückkehrlisten, Matrizen oder Vektoren - aber nicht beliebig große mehrdimensionale Arrays. Zum Beispiel:
library(doParallel)
library(foreach)
# Get the number of cores to use
no_cores <- max(1, detectCores()-1)
# Make cluster object using no_cores
cl <- makeCluster(no_cores)
# Initialize cluster for parallel computing
registerDoParallel(cl)
x <- foreach(i=1:2, .combine=rbind)%:%
foreach(j=1:2, .combine=cbind)%:%
foreach(k=1:2, .combine=c)%dopar%{
i+j+k
}
Hier, im Grunde kombiniere ich Ergebnisse in Vektoren, dann Matrizen und schließlich ich anhäufen Matrizen durch Reihen. Eine andere Option wäre die Verwendung von Listen oder Stapelmatrizen durch Spalten, aber Sie können sich die Unordnung vorstellen, wenn Sie 7 Dimensionen und Millionen von Iterationen verfolgen müssen.
Ich denke, ich könnte auch meine eigene 'kombinieren' Funktion schreiben und die Art von Ausgabe bekommen, die ich will, aber ich vermute, dass ich nicht die erste Person bin, die auf dieses Problem trifft. Entweder gibt es einen Weg, genau das zu tun, was ich will, oder jemand hier kann einen Weg weisen, anders über das Speichern meiner Ergebnisse zu denken. Es wäre nicht überraschend, dass ich einen absurd ineffizienten Weg einleite, um dieses Problem zu lösen - ich bin schließlich ein Ökonom, kein Datenwissenschaftler!
Jede Hilfe würde sehr geschätzt werden. Danke im Voraus.
Es ist eigentlich eine sehr gute Lösung. Es hat einige Zeit gedauert, bis ich mit R zusammengearbeitet habe, um zu verstehen, was du hier machen wolltest, aber ich werde diesen Vorschlag auf Eis legen, bis ich etwas neues zu erledigen habe. –