Signal discrimination model
Continuous reproduction: memory strength and precision, with no separate guessing parameter
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.
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.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.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.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