Modification de la simulation d'un accumulateur balistique linéaire (LBA) dans R


11

Le modèle "Linear Ballistic Accumulator" (LBA) est un modèle plutôt réussi pour le comportement humain dans des tâches de décision simples et rapides. Donkin et al (2009, PDF ) fournissent un code qui permet d'estimer les paramètres du modèle compte tenu des données de comportement humain, et j'ai copié ce code (avec quelques modifications mineures de formatage) dans un résumé ici . Cependant, je voudrais apporter une modification apparemment mineure au modèle mais je ne sais pas comment réaliser cette modification dans le code.

Pour commencer avec le modèle canonique, LBA représente chaque alternative de réponse en tant que concurrent dans une course plutôt étrange, de sorte que les concurrents peuvent différer par les caractéristiques suivantes:

  • Position de départ: elle varie d'une course à l'autre selon une distribution uniforme délimitée par U (0, X1).
  • Vitesse: elle est maintenue constante au sein d'une course donnée (pas d'accélération) mais varie de course en course selon une distribution gaussienne définie par N (X2, X3)
  • Position de la ligne d'arrivée (X4)

Ainsi, chaque concurrent a son propre ensemble de valeurs pour X1, X2, X3 et X4.

La course est répétée plusieurs fois, le vainqueur et son temps étant enregistrés après chaque course. Une constante de X5 est ajoutée à chaque temps gagnant.

Maintenant, la modification que je veux faire est d'échanger la variabilité du point de départ sur la ligne d'arrivée. Autrement dit, je veux que le point de départ soit nul pour tous les concurrents et toutes les races, éliminant ainsi X1, mais je veux ajouter un paramètre, X6, qui spécifie la taille de la plage d'une distribution uniforme centrée sur X4 à partir de laquelle chaque concurrent est la ligne d'arrivée est échantillonnée pour chaque course. Dans ce modèle, alors, chaque concurrent aura des valeurs pour X2, X3, X4 et X6, et nous avons toujours la valeur inter-concurrents pour X5.

Je serais très reconnaissant si quelqu'un était disposé à aider avec cela.

Oh, et pour fournir un mappage des paramètres nommés "X" décrits ci-dessus aux noms de variables utilisés par le code LBA j'ai lié: X1 = x0max; X2 = driftrate; X3 = sddrift; X4 = chi; X5 = Ter.


1
Il y a des erreurs dans le code fourni. Tout au long, vous placez un espace au milieu des opérateurs logiques, par exemple <=,> =, == et! =.
russellpierce

La modification que vous proposez semble banale, le problème est qu'elle est / très / enfouie dans le code. Pour créer des ajustements, il appelle ajusteur. L'ajusteur donne apparemment aux modèles ses paramètres, puis enveloppe la fonction d'ajustement réelle de manière optimale. La fonction en cours d'optimisation est obj.
russellpierce

Réponses:


1

Ce n'est pas une réponse complète. C'est juste une tentative de donner un pointeur. Je ne sais rien de LBA, j'aime juste le code R, donc votre millage peut varier.

La clé pour trouver la section de code appropriée était de savoir que la valeur Ter était simplement ajoutée au résultat final des calculs du modèle (et retour en arrière à partir de la fonction obj qui se trouve dans l'optim et le wrapper de paramétrage `` ajusteur ''). Cela m'a conduit à pqlba et lbameans. En lbameans, Ter est ajouté comme à la fin de tmp $ mean, à son tour dérivé de la fonction n1mean qui accepte comme paramètres x0max, chi, drift et sdI qui semblaient être des correspondances raisonnables pour vos noms X1: X4. Mais, rien n'appelle lbameans, me ramenant à pqlba. En fouillant à travers cela, je peux voir que pqlba (avant d'ajouter Ter) rebondit à travers quelques fonctions - et se retrouve à fptpdf. À ce stade, je suis bloqué.

La bonne partie est que, si j'ai raison, fptpdf a tous les principaux acteurs présents. La mauvaise partie est que, 1) il faudrait plus de temps pour voir si les paramètres font d'autres choses et doivent être contrôlés avant fptpdf (probablement), et 2) L'élimination de X1 (alias x0max) est problématique car la fonction est divisée par x0max. Le mettre à 0 provoque alors des problèmes évidents (diviser par 0 est mauvais mkay?). Ainsi, une meilleure compréhension du fonctionnement du modèle est probablement nécessaire avant de pouvoir atteindre vos objectifs.

Bonne chance.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.