bmm
  • Get started
  • Functions
  • Articles
  • Changelog
  • Develop
  • Parameter recovery
  • Model explorer
  1. Categorical decision tasks
  2. Memory Measurement Model
  • All models
  • How to read a page
  • Categorical decision tasks
    • Memory Measurement Model
    • Multinomial processing tree, span task
  • Continuous reproduction tasks
    • Interference Measurement Model
    • Two-parameter mixture model
    • Three-parameter mixture model
    • Signal discrimination model
  • Signal detection
    • Signal detection theory, yes/no
    • Signal detection theory, m-alternative forced choice
    • Signal detection theory, confidence ratings
  • Response times
    • EZ Diffusion Model
    • Censored Shifted Wald Model
    • Diffusion Decision Model
  1. Categorical decision tasks
  2. Memory Measurement Model

Memory Measurement Model

Categorical recall: the correct item, other list items, distractors and new lures compete for the response

The task
simple span: no distractors; the candidates fall in three categories. complex span: a distractor follows each list letter, which adds two distractor categories and the filtering parameter f. At the start the screen holds the correct letter, 4 other list letters and 5 lures; complex span adds 1 close and 3 far distractors. In m3(): version = "ss" or "cs".
Task settings
Letters studied. It caps n_other at set size − 1 and, in complex span, the number of distractors offered. Otherwise it does not enter the likelihood: m3() takes only the number of candidates in each category. At the start, set size 6 allows up to 5 other list letters, 2 close distractors and 4 far ones.
Other list letters offered at test (orange). Each gets b + a, the correct letter's activation without c, so each one draws responses away from the correct letter. At the start each has 1.1 against the correct letter's 21.19, and a fifth one lowers P(correct) from 0.81 to 0.78. In bmm it is the other entry of num_options.
Distractors close to the cued position offered at test (green). Each gets b + f·a + f·c: the background plus a share f of the correct letter's a + c. At the start one close distractor is offered and takes 0.28 of the responses, against the correct letter's 0.55.
Other distractors offered at test (purple). Each gets b + f·a, with no share of c. At the start (f = 0.5) each has 0.6 against a lure's 0.1, and the 3 of them take 0.05 of the responses.
Lures: letters that were not shown (grey). They get the background activation b only, so they collect the responses that memory does not explain. At the start each lure has 0.1 against the correct letter's 21.19, and the 5 of them take 0.02 of the responses.
Parameters
How activations become the probabilities of the categories (choice_rule in m3()); the three rules are different models of that step. simple: each category's share of the summed activations n·A, at the start 21.19 / (21.19 + 4 · 1.1 + 5 · 0.1) = 0.81 for the correct letter. softmax, bmm's default: the share of n·eA, so differences between activations count rather than ratios. gaussian: every candidate's activation gets standard normal noise and the strongest is recalled.
General activation, which every letter of the studied list gets: an other list letter has b + a, the correct letter b + a + c. Raising a draws responses to the other list letters, as when the letters are remembered but not where they were. At the start, raising a from 1 to 2.72 moves P(other) from 0.17 to 0.33.
Context activation from the cue: the letter at the cued position (the box with the question mark) gets all of c, and in complex span the distractors close to it (green) get f·c. Raising c raises P(correct) and takes from the other list letters, the far distractors and the lures. At the start, raising c from 20.09 to 33.12 moves P(correct) from 0.81 to 0.87. In complex span the same step moves P(correct) from 0.55 to 0.59 and the close distractors from 0.28 to 0.30.
Filtering: the share of a that every distractor gets and of c that the close ones get. At 0 the distractors act as lures; at 1 a close distractor (green) is as strong as the correct letter and a far one (purple) as an other list letter. At the start, f = 0.5 puts a close distractor at 10.64, half way between a lure's 0.1 and the correct letter's 21.19. bmm estimates f on the logit scale.
Predicted proportions
Draws N trials from the predicted proportions and marks each category's share in the sample on its bar (black line). Below the panel: each category's expected share and, in brackets, the sample's. The sample keeps its random numbers while the sliders move, so it changes with the parameters; New sample draws other ones. In bmm: rm3(), in the code under In bmm.
Probability of each response category on a trial. Dashed: bmm's prior means. Black: the sample.
P(correct) across response-set size

What the model says

The memory measurement model (M3; Oberauer & Lewandowsky, 2019), implemented in the R package bmm, treats recall as a choice among response candidates, the options a participant can give. Each candidate has an activation, how strongly it comes to mind, and candidates with the same sources of activation form a category. In a simple-span task (bmm’s version ss) there are three categories: the item at the cued position (corr), the other list items (other), and candidates that were not on the list (npl, not-presented lures). A complex-span task (version cs) adds distractors, items processed between the list items, in two more categories: distractors in or close to the cued position (dist_context) and the other distractors (dist_other). The activations are

\[ \begin{aligned} A_\text{corr} &= b + a + c & A_\text{dist\_context} &= b + f \cdot a + f \cdot c \\ A_\text{other} &= b + a & A_\text{dist\_other} &= b + f \cdot a \\ A_\text{npl} &= b \end{aligned} \]

with background activation b, general activation a, context activation c and, in complex span, filtering f between 0 and 1. A choice rule turns the activations into the probability \(p_i\) that a response falls in category \(i\); bmm offers three, which are different models of that step. Each category is weighted by its number of candidates \(n_i\) (num_options in bmm), and \(j\) runs over the categories:

\[ \begin{aligned} \text{simple:}&\quad p_i = \frac{n_i A_i}{\sum_j n_j A_j} \\[4pt] \text{softmax:}&\quad p_i = \frac{n_i e^{A_i}}{\sum_j n_j e^{A_j}} \\[4pt] \text{gaussian:}&\quad p_i = n_i \int \phi(z)\, \Phi(z)^{n_i - 1} \prod_{j \neq i} \Phi(z + A_i - A_j)^{n_j}\, dz \end{aligned} \]

Under the gaussian rule every candidate’s activation gets independent standard normal noise and the largest value is recalled; \(\phi\) and \(\Phi\) are the standard normal density and distribution function. bmm computes the integral with 40-node Gauss-Hermite quadrature, and this page uses bmm’s nodes. Only the ratios of activations matter under the simple rule, and only their differences under softmax and gaussian, so one activation has to set the scale: bmm fixes b at 0.1 under the simple rule and at 0 under the other two. a reaches every item on the studied list, c comes from the cue and reaches the item at the cued position, and f scales a for every distractor and c for the distractors close to the cued position.

The task

One trial is cued recall from a candidate set. A list of letters is studied one at a time; then one box is cued with a question mark, and the participant picks the letter that was in it from the candidates on the screen. The candidates are the correct letter (blue), the other letters of the list (orange) and letters that were not on the list (grey). Slots marked xxx are not in use on this trial. Set size is the number of letters studied; n_other of the other list letters are offered at test, so n_other is at most set size − 1. N is the total number of candidates.

In the complex-span version a distractor letter follows each list letter (dashed tiles); it is read aloud and not to be remembered. Which distractors count as close to the cued position is left to the design: m3() takes only the number of candidates in each category, however the design assigned them. The assignment here is this page’s choice. It cues the third letter (the last one in a shorter list) and counts the distractor just after it and the one just before it as close in context (green), the others as not (purple). At set size 1 the cued letter is the first, with no distractor before it, so only one distractor is close. n_dist_context of the close and n_dist_other of the other distractors are offered at test. Set size goes up to 6 and lures up to 9 there, so that every candidate fits on the screen.

Explore

Each bar is the probability of a response in that category; the bars sum to 1. Raising a lifts every list item and, by \(f \cdot a\), every distractor, so the lures lose responses. Raising c lifts the correct item: P(correct) rises, and other list items, lures and far distractors lose. In complex span the near distractors gain \(f \cdot c\) as well, and their share can rise or fall. Raising f moves the near distractors’ activation from a lure’s (b, at f = 0) toward the correct item’s (b + a + c, at f = 1), and the far distractors’ toward another list item’s (b + a). With positive a and c the distractors together then draw more responses, though one distractor category alone can lose some to the other. Set size alone does not move the bars (see below). Reset returns the parameters to the current rule’s prior means and the task settings to their starting values.

Slider ranges come from bmm’s default priors. The simple rule estimates log a with normal(0, 1) and log c with normal(3, 1); softmax estimates a and c directly with normal(3, 1), gaussian with normal(2, 1). Each slider spans the prior mean ± 3 SD: under the simple rule a runs from 0.05 to 20 and c from 1 to 403, under softmax both run from 0 to 6, under gaussian from −1 to 5. f is estimated on the logit scale with a logistic(0, 1) prior, whose SD is π/√3 ≈ 1.81, so its slider runs from 0.004 to 0.996 and starts at 0.5. The sliders start at the prior means (dashed). Switching the rule restarts a and c there; the same number means something else under each rule.

Across task settings

The counts \(n_i\) enter the probabilities \(p_i\), and through them the likelihood (the probability the model assigns to the observed responses). The model therefore predicts how recall changes with the size of the response set without a new parameter: the parameters stay as set; only the counts change. Every added candidate competes with the correct one, so P(correct) falls as N grows. Other list items have activation b + a, so for positive a they compete harder than lures, which have only b. Distractors far from the cue have b + f a: with f near 0 they compete like lures, with f near 1 like other list items. Under the simple and softmax rules a count multiplies its category’s weight; under the gaussian rule a category with \(n\) candidates competes through the largest of \(n\) noisy values, so the same added candidates lower P(correct) along a different curve. These numbers follow the controls.

Set size is not in the likelihood of either version. It limits how many list items and distractors can be offered, and only those counts enter. A longer list with the same response set predicts the same proportions unless the bmm formula lets the parameters differ between set sizes.

In bmm


  

The code updates with the controls. m3() defines the model (version = "ss" for simple span, "cs" for complex span), dm3() returns the log probability of a set of response counts, and bmf() writes the formula for bmm(), which estimates a, c and, in complex span, f from data; my_data stands for your own data, and fitting runs Stan through brms. b is not passed: bmm adds it from the choice rule. In the complex-span code the distractor categories are called distcontext and distother: bmm turns category names into brms parameter names, which cannot contain underscores. See the M3 article for the full model, including custom activation functions, and the reference pages for m3() and dm3().

bmm model explorer · source · code GPL-2, text CC BY 4.0

 
  • Report an issue

Built with Quarto. No R, no server: everything runs in your browser.