Модификация моделирования линейного баллистического аккумулятора (LBA) в R

11

Модель «Линейный баллистический накопитель» (LBA) - довольно успешная модель поведения человека при выполнении простых простых задач. Донкин и др. (2009, PDF ) предоставляют код, который позволяет оценивать параметры модели с учетом данных о поведении человека, и я скопировал этот код (с некоторыми незначительными изменениями форматирования) здесь . Тем не менее, я хотел бы внести незначительную модификацию в модель, но я не уверен, как добиться этой модификации в коде.

Чтобы начать с канонической модели, LBA представляет каждую альтернативу ответа как участника в довольно странной гонке, так что участники могут отличаться следующими характеристиками:

  • Начальная позиция: это варьируется от расы к гонке в соответствии с равномерным распределением, ограниченным U (0, X1).
  • Скорость: она поддерживается постоянной в пределах данной гонки (без ускорения), но изменяется от гонки к гонке в соответствии с гауссовым распределением, определяемым как N (X2, X3)
  • Положение финиша (X4)

Таким образом, каждый конкурент имеет свой собственный набор значений для X1, X2, X3 и X4.

Гонка повторяется много раз, победитель и их время записываются после каждой гонки. Константа X5 добавляется к каждому выигрышному времени.

Теперь, изменение, которое я хочу сделать, состоит в том, чтобы поменять изменчивость в начальной точке на финишную черту. То есть я хочу, чтобы начальная точка была нулевой для всех участников и всех рас, исключая тем самым X1, но я хочу добавить параметр X6, который определяет размер диапазона равномерного распределения с центром в X4, из которого каждый участник финишная черта отбирается для каждой гонки. В этой модели у каждого конкурента будут значения для X2, X3, X4 и X6, и у нас все еще будет значение для конкурента для X5.

Буду очень признателен, если кто-нибудь захочет помочь с этим.

Да, и обеспечить сопоставление названных выше параметров «X» с именами переменных, которые используются в коде LBA, который я связал: X1 = x0max; Х2 = дрейф Х3 = сдвиг; Х4 = хи; Х5 = Тер.

Майк Лоуренс
источник
1
Есть ошибки в коде, как указано. Повсюду вы помещаете пробел в середине логических операторов, например, <=,> =, == и! =.
Russellpierce
Предлагаемая вами модификация звучит тривиально, проблема в том, что она / очень / скрыта в коде. Чтобы создать припадки, он называет слесаря. Fitter, очевидно, дает моделям свои параметры, а затем оборачивает фактическую функцию подгонки в optim. Оптимизируемая функция - объект.
Russellpierce

Ответы:

1

Это не полный ответ. Это просто попытка дать указатель. Я ничего не знаю о LBA, мне просто нравится код R, так что ваш опыт может варьироваться.

Ключом к поиску соответствующей части кода было знание того, что значение Ter было просто добавлено к конечному результату расчетов модели (и обратное отслеживание из функции obj, которая находится в оболочке optim и параметризации 'fitter'). Это привело меня к pqlba и lbameans. В lbameans Ter добавляется как в конце tmp $ mean, что, в свою очередь, происходит от функции n1mean, которая принимает в качестве параметров x0max, chi, drift и sdI, которые выглядят как разумные совпадения для ваших имен X1: X4. Но ничто не вызывает lbameans, что приводит меня к pqlba. Копаясь в этом, я вижу, что pqlba (до добавления Ter) прыгает через пару функций - и заканчивается в fptpdf. На данный момент я в тупике.

Приятно то, что, если я прав, в fptpdf присутствуют все основные игроки. Плохая часть заключается в том, что: 1) потребуется больше времени, чтобы увидеть, что параметры делают другие вещи и нужно ли их контролировать до fptpdf (возможно), и 2) устранение X1 (он же x0max) проблематично, потому что функция разделена в x0max. Установка его в 0 тогда вызывает очевидные проблемы (деление на 0 - плохо, хорошо?). Таким образом, прежде чем вы сможете достичь своих целей, вероятно, необходимо лучше понять, как работает модель.

Удачи.

russellpierce
источник