Modifizieren der LBA-Simulation (Linear Ballistic Accumulator) in R.


11

Das "Linear Ballistic Accumulator" -Modell (LBA) ist ein ziemlich erfolgreiches Modell für menschliches Verhalten bei beschleunigten einfachen Entscheidungsaufgaben. Donkin et al (2009, PDF ) zur Verfügung stellt Code, erlaubt es, die Parameter des Modells gegeben menschliche Verhaltensdaten zu schätzen, und ich habe diesen Code kopiert (mit einigen kleineren Formatierungsänderungen) auf einen Kern hier . Ich möchte jedoch eine scheinbar geringfügige Änderung am Modell vornehmen, bin mir jedoch nicht sicher, wie diese Änderung im Code erreicht werden soll.

Um mit dem kanonischen Modell zu beginnen, repräsentiert LBA jede Antwortalternative als Konkurrent in einem ziemlich seltsamen Rennen, so dass sich die Konkurrenten in den folgenden Merkmalen unterscheiden können:

  • Startposition: Diese variiert von Rennen zu Rennen gemäß einer durch U (0, X1) begrenzten gleichmäßigen Verteilung.
  • Geschwindigkeit: Diese wird innerhalb eines bestimmten Rennens konstant gehalten (keine Beschleunigung), variiert jedoch von Rennen zu Rennen gemäß einer durch N (X2, X3) definierten Gaußschen Verteilung.
  • Ziellinienposition (X4)

Somit hat jeder Teilnehmer seinen eigenen Wertesatz für X1, X2, X3 und X4.

Das Rennen wird viele Male wiederholt, wobei der Sieger und seine Zeit nach jedem Rennen aufgezeichnet werden. Zu jeder Gewinnzeit wird eine Konstante von X5 hinzugefügt.

Die Änderung, die ich jetzt vornehmen möchte, besteht darin, die Variabilität im Startpunkt zur Ziellinie zu tauschen. Das heißt, ich möchte, dass der Startpunkt für alle Teilnehmer und alle Rennen Null ist, wodurch X1 eliminiert wird, aber ich möchte einen Parameter X6 hinzufügen, der die Größe des Bereichs einer auf X4 zentrierten Gleichverteilung angibt, von der aus jeder Teilnehmer stammt Die Ziellinie wird für jedes Rennen abgetastet. In diesem Modell hat dann jeder Konkurrent Werte für X2, X3, X4 und X6, und wir haben immer noch den konkurrenzübergreifenden Wert für X5.

Ich wäre sehr dankbar, wenn jemand bereit wäre, dabei zu helfen.

Oh, und um eine Zuordnung der oben beschriebenen "X" -Parameter zu den Variablennamen bereitzustellen, die von dem von mir verknüpften LBA-Code verwendet werden: X1 = x0max; X2 = Driftrat; X3 = sddrift; X4 = Chi; X5 = Ter.


1
Der angegebene Code enthält Fehler. Währenddessen setzen Sie ein Leerzeichen in die Mitte der logischen Operatoren, z. B. <=,> =, == und! =.
Russellpierce

Die von Ihnen vorgeschlagene Änderung klingt trivial. Das Problem ist, dass sie im Code / sehr / vergraben ist. Um Passungen zu erstellen, wird es als Monteur bezeichnet. Der Monteur gibt den Modellen anscheinend seine Parameter und verpackt dann die eigentliche Anpassungsfunktion in optim. Die zu optimierende Funktion ist obj.
Russellpierce

Antworten:


1

Dies ist keine vollständige Antwort. Es ist nur ein Versuch, einen Zeiger zu geben. Ich weiß nichts über LBA, ich mag nur R-Code, daher kann Ihre Millage variieren.

Der Schlüssel zum Finden des geeigneten Codeabschnitts war das Wissen, dass der Wert Ter einfach zum Endergebnis der Modellberechnungen hinzugefügt wurde (und das Zurückverfolgen der obj-Funktion, die sich im Optimierungs- und Parametrisierungs-Wrapper 'fitter' befindet). Das führte mich zu pqlba und lbameans. In lbameans wird Ter als am Ende von tmp $ mean hinzugefügt, was wiederum von der Funktion n1mean abgeleitet ist, die als Parameter x0max, chi, drift und sdI akzeptiert, was als vernünftige Übereinstimmung für Ihre X1: X4-Namen erschien. Aber nichts nennt lbameaner und führt mich zurück zu pqlba. Wenn ich das durchforste, kann ich sehen, dass pqlba (vor dem Hinzufügen von Ter) durch ein paar Funktionen springt - und bei fptpdf landet. An diesem Punkt bin ich geschwächt.

Das Schöne daran ist, dass fptpdf, wenn ich recht habe, alle wichtigen Akteure anwesend hat. Der schlechte Teil ist, dass 1) es länger dauern würde, um zu sehen, ob die Parameter andere Dinge tun und vor fptpdf (wahrscheinlich) gesteuert werden müssen, und 2) das Eliminieren von X1 (auch bekannt als x0max) problematisch ist, weil die Funktion geteilt ist von x0max. Das Setzen auf 0 verursacht dann offensichtliche Probleme (das Teilen durch 0 ist schlecht, mkay?). Daher ist wahrscheinlich ein besseres Verständnis der Funktionsweise des Modells erforderlich, bevor Sie Ihre Ziele erreichen können.

Viel Glück.

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.