Entgeltliche Optimierung eines Agent-based models

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Anti
Beiträge: 23
Registriert: Di Nov 06, 2018 10:48 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von Anti » Fr Nov 09, 2018 4:47 pm

jogo hat geschrieben:
Fr Nov 09, 2018 11:24 am
Auch kannst Du die Lesbarkeit weiter erhöhen, indem Du nicht in numerische Werte konvertierst:
sondern einfach:
Generell eine gute Idee. Allerdings habe ich in späteren Generationen bei der Paarung von Individuen vom Asian- und Papuan-Typus auch eine Durchmischung der autosomalen Gene und somit Werte zwischen [0, 1]. Ich werde hier also bei der 0/1-Codierung bleiben.

jogo
Beiträge: 988
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von jogo » Fr Nov 09, 2018 10:23 pm

Ja, das ist ein gutes Argument für numeric.

Anti
Beiträge: 23
Registriert: Di Nov 06, 2018 10:48 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von Anti » Sa Nov 10, 2018 1:45 am

Was für n langer Arbeitstag ... schon wieder :(

Naja, jetzt hab ich wenigstens meinen Code vollständig geschrieben und konnte auf die Schnelle auch keine offensichtlichen Fehler ausmachen (auch wenn ich ihn jetzt um kurz nach halb 2 Uhr morgens nicht mehr hab über ein paar Jahre simulieren lassen). Ich würde mich daher sehr freuen, wenn Ihr mir nun noch Tipps zur Effizierung (besonders eine immense Laufzeit-Verkürzung ist mir wichtig - Ziel für einen vollständigen Lauf mit einem gegebenen Parameter-Set ist < 2 min.; dann können mehrere Parameter-Sets parallel laufen) geben könntet oder sich einer von Euch erbarmen würde, diese umzusetzen. Vllt. kennt Ihr aber auch Jemanden, der mir dabei helfen könnte und der darauf Lust hätte. Ich wäre dafür extremst dankbar (300 € und eine Erwähnung in meiner Diss sind Euch gewiss).

Besten Dank und gute Nacht
Anti

PS: Anbei natürlich der vollständige Code ...
Dateianhänge
files.7z
(31.92 KiB) 11-mal heruntergeladen

jogo
Beiträge: 988
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von jogo » Mi Nov 14, 2018 8:34 am

Hallo Anti,

wenn ich Deinen Code laufen lasse bekomme ich den Fehler:
Fehler in migration : Objekt 'migration' nicht gefunden
Bitte teste selbst nochmal in einer frischen R-session.
Der Fehler kommt aus der dritten Zeile hier:

Code: Alles auswählen

    for (mig in migratables) {
      if (runif(1) < ifelse(runlist$Aoverall[mig] > 0.5, runsummary$asian.migrations[i], runsummary$papuan.migrations[i])) {                                #will individual j migrate?
        deme.candidates <- migration[[runlist$residence[mig]]][,1]

Gruß, Jörg

Anti
Beiträge: 23
Registriert: Di Nov 06, 2018 10:48 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von Anti » Mi Nov 14, 2018 11:01 am

Hmm, das ist seltsam. "migration" heißt die Liste, die eigentlich in Zeile 12 geladen wird. Ist die bei Dir korrekt importiert worden? Ich kann den Fehler aktuell nicht nachvollziehen.

jogo
Beiträge: 988
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von jogo » Mi Nov 14, 2018 11:06 am

ah, ich hatte das Paket rlist nicht installiert. mea culpa

Anti
Beiträge: 23
Registriert: Di Nov 06, 2018 10:48 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von Anti » Mi Nov 14, 2018 11:23 am

Dubium ... [kein Problem]

jogo
Beiträge: 988
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von jogo » Mi Nov 14, 2018 12:53 pm

ist das eigentlich die einzige Stelle, wo eine Funktion aus dem Paket rlist verwendet wird?
Das Ablegen und das Zurückholen von R-Objekten - das können auch die Funktionen save() und load() von base R.

So, Dein Skript läuft gerade vor sich hin. Nach etwa 1,5 Stunden kommen da irgendwelche Kontrollprints (fortlaufende Zahlen) und ich weiß nicht recht aus welcher Ecke des Skripts ...

Während ich diese Nachricht schrieb, fand Dein Skript ein jähes Ende:

Code: Alles auswählen

...
[1] 4689
[1] 4690
Fehler in sample.int(length(x), size, replace, prob) : 
  ungültiges erstes Argument
ich könnte mir vorstellen, dass bei diesem Funktionaufruf vielleicht auch length(x) gleich 0 sein könnte.

Bei mir sieht der Anfang jetzt so aus:

Code: Alles auswählen

setwd("~/Desktop/R.Zeug/Anti/files")

load("myData.RData")
mit der Datei myData.RData (siehe Anhang)

Gruß, Jörg
Dateianhänge
myData.zip
drei Objekte
(30.89 KiB) 1-mal heruntergeladen

Anti
Beiträge: 23
Registriert: Di Nov 06, 2018 10:48 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von Anti » Mi Nov 14, 2018 3:25 pm

jogo hat geschrieben:
Mi Nov 14, 2018 12:53 pm
ist das eigentlich die einzige Stelle, wo eine Funktion aus dem Paket rlist verwendet wird?
Das Ablegen und das Zurückholen von R-Objekten - das können auch die Funktionen save() und load() von base R.
Ja, das ist tatsächlich die einzige Nutzung des Pakets. Kann Dir aktuell tatsächlich auch nicht sagen, warum ich nit load() verwendet habe.
jogo hat geschrieben:
Mi Nov 14, 2018 12:53 pm
So, Dein Skript läuft gerade vor sich hin. Nach etwa 1,5 Stunden kommen da irgendwelche Kontrollprints (fortlaufende Zahlen) und ich weiß nicht recht aus welcher Ecke des Skripts ...
Erst nach 1.5 h? Hmm, bei mir geht das nach ein paar Minuten. Wenn ich mich recht entsinne, hatte ich da nur irgendwo im Code einmal "print" stehen. Da ich hier auf der Arbei leider mein 7z-File nicht öffnen kann, kann ich aktuell nicht sagen, wo das ist. Das muß aber entweder bei der Migration oder bei der Verpaarung sein.
jogo hat geschrieben:
Mi Nov 14, 2018 12:53 pm
Während ich diese Nachricht schrieb, fand Dein Skript ein jähes Ende:

Code: Alles auswählen

...
[1] 4689
[1] 4690
Fehler in sample.int(length(x), size, replace, prob) : 
  ungültiges erstes Argument
ich könnte mir vorstellen, dass bei diesem Funktionaufruf vielleicht auch length(x) gleich 0 sein könnte.
Grml. Hört sich wirklich so an wie length(x)==0 oder length(x)==1. Und ich dachte, ich hätte da schon überall die Konditionen vorher getestet. Schau ich mir aber nochmal an.
jogo hat geschrieben:
Mi Nov 14, 2018 12:53 pm
Bei mir sieht der Anfang jetzt so aus:

Code: Alles auswählen

setwd("~/Desktop/R.Zeug/Anti/files")

load("myData.RData")
mit der Datei myData.RData (siehe Anhang)
Alles in einer Datei zu haben ist natürlich die elegantere Lösung. Danke dafür!

Gestern Nacht (nach einem 11 h-Arbeitstag) kam mir die Idee, daß ich als Alternative zur Simulation vllt. doch das Ganze gleichungsbasiert angehen könnte. Im Prinzip kann ich für jeden Schritt den Erwartungswert für die Admixture für einzelne Populationen berechnen. Wenn ich nun noch die Varianz in einzelnen Populationen und Covarianz über alle simulierten Populationen berechnen kann, könnte ich am Schluß auch so die plausibelsten Parameter für die Outcomes schätzen. Allerdings erfordert das Ganze natürlich mehr mathematisches Können und birgt die Gefahr von mehr Fehlern, die man einbauen kann. Ich werde aber drüber nachdenken, ob ich stattdessen diesen Weg gehen sollte. Zum aktuellen Zeitpunkt kann ich noch nicht sehen, wie ich meinen Code schneller zum Laufen bringen können sollte. Bin aber für Anregungen und Ideen nach wie vor dankbar und werde sie gerne umsetzen.

Danke nochmal
Anti

jogo
Beiträge: 988
Registriert: Fr Okt 07, 2016 8:25 am

Re: Entgeltliche Optimierung eines Agent-based models

Beitrag von jogo » Do Nov 15, 2018 3:26 pm

Hallo Anti,

ich habe eine kleine Frage:
Stimmt es, dass pro Parameterkombination der gesamte Dataframe runlist (mit seinen 26 Mio Zeilen) jeweils in eine CSV-Datei geschrieben werden soll?
Wie groß ist eine solche Datei? (ups, das war schon die zweite Frage)

Hier noch eine heiße Spur zu dem Fehler bei sample():

Code: Alles auswählen

print(which(fertiles==fer))
[1] 299
Fehler in sample.int(length(x), size, replace, prob) : 
  ungültiges erstes Argument
> traceback()
2: sample.int(length(x), size, replace, prob)
1: sample(partner.candidates, 1)
> partner.candidates
integer(0)
(ich hatte noch einen kleinen Aufruf message("print(which(fertiles==fer))") eingefügt)
Es gibt also eine Stelle, an der partner.candidates null Elemente hat.

Gruß, Jörg

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste