bmm
  • Get started
  • Functions
  • Articles
  • Changelog
  • Develop
  • Parameter recovery
  • Model explorer
  1. Continuous reproduction tasks
  2. Signal discrimination 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. Continuous reproduction tasks
  2. Signal discrimination model

Signal discrimination model

Continuous reproduction: memory strength and precision, with no separate guessing parameter

The task
Task settings

No task setting enters the likelihood. The model describes the response error, the distance on the wheel between the colour the participant chose and the target's colour, and nothing else about the trial: not the set size, not the other items.

Parameters
Memory strength: how much more activation the target's colour has than the colours far from it. The SDM has no guessing parameter: at c = 0 every colour is equally likely, which is guessing. At the start, c = 7.39 puts 0.93 of the responses within ±20° of the target; at c = 0 that share drops to 0.11, the part of the circle the window covers.
Precision: how fast activation falls with the distance from the target's colour, the concentration of the von Mises shape. Higher kappa narrows the density and, unlike in the mixture models, also lowers the floor far from the target, as a larger c does. At the start, raising kappa from 5.75 to 12.2 moves the share of responses within ±20° of the target from 0.93 to 1.00.
Parametrization:
Two ways of writing the same family of densities. sqrtexp, bmm's default, writes the activation as c·√(kappa/2π)·ekappa (cos x − 1); bessel, the original, as c·ekappa cos x / (2π I0(kappa)). The same density has a different c in each, so switching converts c and the curve stays: at the start, 7.39 becomes 7.57.
Two ways to write the same family; see What the model says.
Predicted error distribution
Draws N trials from the predicted distribution and shows their response errors as bars of 10° behind the curves. Each bar averages the density over its 10°, so the bars stay below a peak narrower than that. Below the legend: the expected mean |error|, circular SD and share within ±20°, against the same for this sample. The circular SD is √(−2 ln R), with R the length of the mean error vector; it grows without bound as the errors approach uniform, so above 140° only that bound is shown, and in a small sample of widely spread errors it comes out lower than expected. The sample keeps its random numbers while the sliders move, so it changes with the parameters; New sample draws other ones. In bmm: rsdm(), in the code under In bmm; R draws its own sample, so its numbers differ from the page's.
Solid: now; dashed: starting values (see Explore); band: ±20° around the target, the window the readout counts.
Activation and normaliser
Activation: the exponent in the density's numerator, for each response error. The density is its exponential divided by the normaliser Z, the constant that makes the density integrate to 1.

What the model says

The signal discrimination model (SDM; Oberauer, 2023) describes errors in continuous reproduction with one distribution and no separate guessing parameter; the model is available in the R package bmm. Every response error \(x\) on the wheel has an activation that is highest at the target’s colour and falls with the distance from it in the shape of a von Mises distribution with the precision kappa; the memory strength c scales it. The density is the exponential of the activation, divided by a constant \(Z\) that makes it integrate to 1. In bmm’s default (sqrtexp) parametrization:

\[ f(x) = \frac{1}{Z} \exp\!\left( c \sqrt{\frac{\kappa}{2\pi}}\; e^{\kappa(\cos(x - \mu) - 1)} \right), \qquad Z = \int_{-\pi}^{\pi} \exp\!\left( c \sqrt{\frac{\kappa}{2\pi}}\; e^{\kappa(\cos(x - \mu) - 1)} \right) dx \]

In the equation \(\mu\) is the location of the distribution, which bmm fixes at 0 unless mu is added to the model formula in bmf(). The bessel parametrization is the original one: the activation is \(c\, e^{\kappa \cos(x - \mu)} / (2\pi I_0(\kappa))\), with \(I_0\) the modified Bessel function of order 0. At c = 0 nothing is recalled and every error is equally likely, so guessing is not a separate component but the limit of weak memory. With a larger c the density concentrates on the target; kappa sets how narrow the concentration is.

The task

One trial is a colour reproduction. The participant sees a display of coloured items, then one item is cued, and the participant chooses its colour on a wheel. The response error is the angle between the chosen colour and the target’s colour on the wheel, in radians from −π to π. The SDM, in bmm, uses a single signal, the target’s colour, so that error is all it takes from the trial. The colours of the other items, their locations and the set size are not inputs of the density, which is why the Task settings panel is empty.

Explore

The Predicted error distribution panel shows the density of the response error. Move c and the peak rises while the distribution outside it sinks towards zero; move kappa and the peak changes its width. The Activation and normaliser panel shows what the density is made of: the activation of each error, whose height at 0° is set by c and whose width by kappa, and the constant \(Z\) that turns its exponential into a density. The readout under it gives \(Z\), the density at the target and the share of responses within ±20° of it, the window shaded in the density panel.

\(Z\) has no closed form, and bmm computes it numerically too (with R’s integrate()). This page sums the exponential of the activation over 1024 equally spaced points of the circle, which matches bmm’s integral to better than 10⁻⁹ on the log density in every test of this site’s code against bmm.

The c slider runs from 0 to 20 and the kappa slider from 0.1 to 50, moving evenly in log units for kappa; the number fields show natural units. These ranges are this page’s choice and do not come from the default priors, which would give 0.78 to 70 for c and 0.61 to 55 for kappa (the prior mean ± 3 times the scale 0.75 on the log scale). The article names no ranges, and these cover every value it simulates and fits. Like kappa, c is estimated on the log scale in bmm, but its slider moves in natural units, because a log scale has no place for c = 0, the limit at which every error is equally likely. bmm’s default priors are student_t(5, 2, 0.75) on log c and student_t(5, 1.75, 0.75) on log kappa; the starting values, which the dashed curves keep, are their centres, \(e^{2} = 7.39\) and \(e^{1.75} = 5.75\). Typed values outside the sliders’ ranges are used as long as the density can be computed, and the hint under the sliders says when a value lies beyond its slider. The radio buttons switch the parametrization. The two give the same family of densities with different values of c, so switching converts c, rounded to three digits in the number field, and the curve stays where it is. At kappa = 0 the density is uniform for every c in both, so switching leaves c as it is. bmm converts with c_sqrtexp2bessel() and c_bessel2sqrtexp(). Reset returns everything to the starting values.

Across task settings

The likelihood of sdm has no set-size variable: the density uses the response error and nothing else about the trial. The memory strength c and the precision kappa are set by the parameters alone, whatever the number of items on the display. Set size can change them only if the parameters differ between the conditions of an experiment, for example between set sizes. In bmm that is a formula such as c ~ 0 + set_size with set_size coded as a factor (a factor column in the data, or factor(set_size) in the formula): 0 + drops the intercept, so every set size gets its own value of the parameter (formula syntax). A numeric set_size in the same formula estimates a single slope for set size instead, which without the intercept runs through the origin. What the model then predicts at each set size is whatever the estimated values say: how the parameters differ between set sizes comes from the data, and the model makes no prediction about it. No slider on this page makes a parameter depend on set size for that reason. The interference measurement model (IMM) is the contrast, as the Across set size panel on that page shows: every item on the display adds its own activation \(c\,e^{-s d_i} + a\) to the sum that each weight is divided by, so with the parameters fixed the target’s weight falls with set size, unless a = 0 and s is so large that the non-targets’ activations vanish.

In bmm


  

The code updates with the controls. dsdm() returns the density of the response error in radians, in the parametrization chosen above. sdm() defines the model for a data set in which each row is a trial and resp_error holds the response error in radians; the model it fits uses the sqrtexp parametrization, so under bessel the code also shows c converted. bmf() writes the formula and bmm() estimates the parameters; my_data stands for your own data, and fitting runs Stan through brms. See the SDM article and the reference pages for sdm() and dsdm(). bmm cites the model as Oberauer, K. (2023). Measurement models for visual working memory—A factorial model comparison. Psychological Review, 130(3), 841-852. https://doi.org/10.1037/rev0000328

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.