Modyfikacja symulacji liniowego akumulatora balistycznego (LBA) w R.

11

Model „Linear Ballistic Accumulator” (LBA) jest raczej skutecznym modelem ludzkiego zachowania w przyspieszonych prostych decyzjach. Donkin et al (2009, PDF ) zapewniają, że pozwolenia kod szacowania parametrów modelu danego człowieka dane behawioralne, a ja skopiowane ten kod (z pewnymi zmianami formatowania drobnych) na GIST tutaj . Chciałbym jednak wprowadzić pozornie niewielką modyfikację modelu, ale nie jestem pewien, jak ją wprowadzić w kodzie.

Na początek w modelu kanonicznym LBA reprezentuje każdą alternatywną odpowiedź jako konkurent w dość dziwnym wyścigu, tak że konkurenci mogą różnić się następującymi cechami:

  • Pozycja początkowa: zmienia się w zależności od rasy według jednolitego rozkładu ograniczonego przez U (0, X1).
  • Prędkość: jest utrzymywana na stałym poziomie w obrębie danej rasy (bez przyspieszenia), ale zmienia się w zależności od rasy zgodnie z rozkładem Gaussa określonym przez N (X2, X3)
  • Pozycja linii mety (X4)

Zatem każdy konkurent ma swój własny zestaw wartości dla X1, X2, X3 i X4.

Wyścig jest powtarzany wiele razy, a zwycięzca i jego czas są rejestrowane po każdym wyścigu. Stała X5 jest dodawana do każdego zwycięskiego czasu.

Teraz modyfikacją, którą chcę wprowadzić, jest zamiana zmienności w punkcie początkowym na linię mety. To znaczy, chcę, aby punkt początkowy wynosił zero dla wszystkich zawodników i wszystkich wyścigów, eliminując w ten sposób X1, ale chcę dodać parametr X6, który określa rozmiar zakresu równomiernego rozkładu wyśrodkowanego na X4, z którego każdy zawodnik linia mety jest próbkowana dla każdego wyścigu. Zatem w tym modelu każdy konkurent będzie miał wartości dla X2, X3, X4 i X6, a my nadal mamy wartość dla konkurenta dla X5.

Byłbym bardzo wdzięczny, gdyby ktoś chciał w tym pomóc.

Aha, aby zapewnić odwzorowanie opisanych powyżej parametrów nazwanych „X” na nazwy zmiennych używane przez kod LBA, który połączyłem: X1 = x0max; X2 = dryfować; X3 = sddrift; X4 = chi; X5 = Ter.

Mike Lawrence
źródło
1
W dostarczonym kodzie występują błędy. W całym wierszu umieść spację pośrodku operatorów logicznych, np. <=,> =, == i! =.
russellpierce
Sugerowana modyfikacja brzmi trywialnie, problem polega na tym, że jest / bardzo / zakopany w kodzie. Aby stworzyć pasowanie, nazywa się instalatorem. Monter najwyraźniej podaje modelom parametry, a następnie optymalnie otacza rzeczywistą funkcję dopasowania. Optymalizowana funkcja to obj.
russellpierce

Odpowiedzi:

1

To nie jest pełna odpowiedź. To tylko próba nadania wskaźnika. Nic nie wiem o LBA, po prostu lubię kod R, więc twój przebieg może się różnić.

Kluczem do znalezienia odpowiedniej sekcji kodu była wiedza, że ​​wartość Ter została po prostu dodana do końcowego wyniku obliczeń modelu (i cofnięcia z funkcji obj, która znajduje się w „instalatorze” optymalizacji i parametryzacji). To doprowadziło mnie do pqlba i lbameans. W lbameans Ter jest dodawany na końcu tmp $ mean, z kolei pochodnej funkcji n1mean, która przyjmuje jako parametry x0max, chi, drift i sdI, co wydawało się rozsądnym dopasowaniem dla twoich nazw X1: X4. Ale nic nie wywołuje lbameans, co prowadzi mnie z powrotem do pqlba. Przekopując się, widzę, że pqlba (przed dodaniem Ter) odbija się przez kilka funkcji - i kończy się na fptpdf. W tym momencie jestem zahamowany.

Zaletą jest to, że jeśli mam rację, fptpdf ma wszystkich głównych graczy. Złą stroną jest to, że: 1) zajęło by więcej czasu sprawdzenie, czy parametry robią inne rzeczy i muszą być kontrolowane przed fptpdf (prawdopodobnie), i 2) Eliminacja X1 (aka x0max) jest problematyczna, ponieważ funkcja jest podzielona przez x0max. Ustawienie go na 0 powoduje wtedy oczywiste problemy (dzielenie przez 0 jest złe, prawda?). Dlatego prawdopodobnie konieczne jest lepsze zrozumienie działania modelu, zanim będzie można osiągnąć założone cele.

Powodzenia.

russellpierce
źródło