Modifica della simulazione dell'accumulatore balistico lineare (LBA) in R


11

Il modello "Linear Ballistic Accumulator" (LBA) è un modello piuttosto efficace per il comportamento umano in compiti di decisione semplici accelerati. Donkin et al (2009, PDF ) forniscono un codice che consente di stimare i parametri del modello dati i dati comportamentali umani, e ho copiato questo codice (con alcune piccole modifiche di formattazione) su una sintesi qui . Tuttavia, vorrei apportare una modifica apparentemente minore al modello, ma non sono sicuro di come ottenere questa modifica nel codice.

Per iniziare con il modello canonico, LBA rappresenta ogni alternativa di risposta come concorrente in una gara piuttosto strana tale che i concorrenti possono differire nelle seguenti caratteristiche:

  • Posizione di partenza: varia da una gara all'altra secondo una distribuzione uniforme delimitata da U (0, X1).
  • Velocità: questa viene mantenuta costante all'interno di una determinata gara (nessuna accelerazione) ma varia da una gara all'altra secondo una distribuzione gaussiana definita da N (X2, X3)
  • Posizione del traguardo (X4)

Pertanto, ogni concorrente ha il proprio set di valori per X1, X2, X3 e X4.

La gara si ripete più volte, con il vincitore e il loro tempo registrati dopo ogni gara. Una costante di X5 viene aggiunta ad ogni tempo vincente.

Ora, la modifica che voglio fare è scambiare la variabilità dal punto di partenza al traguardo. Cioè, voglio che il punto di partenza sia zero per tutti i concorrenti e tutte le gare, eliminando così X1, ma voglio aggiungere un parametro, X6, che specifica la dimensione dell'intervallo di una distribuzione uniforme centrata su X4 da cui ogni concorrente è il traguardo viene campionato per ogni gara. In questo modello, quindi, ogni concorrente avrà valori per X2, X3, X4 e X6 e abbiamo ancora il valore tra concorrenti per X5.

Le sarei molto grato se qualcuno fosse disposto ad aiutare con questo.

Oh, e per fornire una mappatura dai parametri denominati "X" sopra descritti ai nomi delle variabili utilizzati dal codice LBA che ho collegato: X1 = x0max; X2 = derive; X3 = sddrift; X4 = chi; X5 = Ter.


1
Ci sono errori nel codice come previsto. In tutto si mette uno spazio nel mezzo di operatori logici, ad es. <=,> =, == e! =.
Russellpierce,

La modifica che suggerisci sembra banale, il problema è che è / molto / sepolto nel codice. Per creare accoppiamenti, chiama più in forma. Apparentemente Fitter fornisce ai modelli i suoi 'parametri e quindi avvolge la funzione di adattamento effettiva in optim. La funzione da ottimizzare è obj.
Russellpierce,

Risposte:


1

Questa non è una risposta completa. È solo un tentativo di dare un puntatore. Non so nulla di LBA, mi piace solo il codice R, quindi il tuo millage può variare.

La chiave per trovare la sezione di codice appropriata era sapere che il valore Ter veniva semplicemente aggiunto al risultato finale dei calcoli del modello (e backtracking dalla funzione obj che si trova nel wrapper di ottimizzazione e parametrizzazione 'fitter'). Questo mi ha portato a pqlba e lbameans. In lbameans, Ter viene aggiunto alla fine della media tmp $, a sua volta derivato dalla funzione n1mean che accetta come parametri x0max, chi, drift e sdI che sembrano corrispondenze ragionevoli per i nomi X1: X4. Ma nulla chiama lbameans, riportandomi a pqlba. Scorrendo questo, vedo che pqlba (prima di aggiungere Ter) rimbalza attraverso un paio di funzioni - e finisce su fptpdf. A questo punto sono stymied.

La parte bella è che, se ho ragione, fptpdf ha tutti i principali attori presenti. La parte negativa è che, 1) ci vorrebbe più tempo per vedere se i parametri stanno facendo altre cose e devono essere controllati prima di fptpdf (probabilmente), e 2) Eliminare X1 (aka x0max) è problematico perché la funzione è divisa di x0max. Impostarlo su 0 causa quindi evidenti problemi (dividere per 0 è male?). Pertanto, prima di poter raggiungere i tuoi obiettivi è probabilmente necessaria una maggiore comprensione di come funziona il modello.

In bocca al lupo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.