Positional CMR addresses experiments where items repeat within a study list. Instead of encoding items by their identity, it encodes them by their serial position, giving each presentation of a repeated item a distinct contextual trace.
The Problem with Repeated Items
In standard CMR, each item has a single representation. When an item repeats:
At encoding: The same item representation integrates with the current (different) context
At retrieval: The item’s context is a blend of both presentations
This blending can’t explain why people sometimes recall the first presentation but not the second, or show different spacing effects depending on which presentation they retrieve.
The Positional Solution
Positional CMR replaces item-based encoding with position-based encoding:
Aspect
Standard CMR
Positional CMR
Feature layer
Item identities
Serial positions
A repeated item
One representation
Separate trace per presentation
Recallability
Per-item
Per-position
Context reinstatement
One context
Weighted blend of positions
Mathematical Specification
Encoding
When studying the item at position \(i\):
1. Position representation:\[\mathbf{p}_i = \mathbf{e}_i\]
A one-hot vector for position \(i\), not the item’s identity.
from jaxcmr.models.positional_cmr import CMRparams = {"encoding_drift_rate": 0.5,"start_drift_rate": 0.5,"recall_drift_rate": 0.5,"learning_rate": 0.5,"primacy_scale": 2.0,"primacy_decay": 0.8,"shared_support": 0.05,"item_support": 0.25,"choice_sensitivity": 0.6,"mfc_sensitivity": 3.0, # New parameter"stop_probability_scale": 0.05,"stop_probability_growth": 0.2,"learn_after_context_update": True,"allow_repeated_recalls": False,}model = CMR(list_length=16, parameters=params)# Study a list with repetitions: [1, 2, 3, 1, 4, 2, ...]for item in [1, 2, 3, 1, 4, 2, 5, 6, 7, 8]: model = model.experience(item)# Items 1 and 2 now have two traces each (at different positions)
When To Use
Use Positional CMR when:
Items repeat within a study list
You want to model which presentation is recalled
Spacing effects matter (first vs. second presentation)
Source memory is relevant (when was this presented?)
Use standard CMR when:
Items are unique within each list
Repetitions aren’t theoretically important
You want a simpler model
Theoretical Implications
Positional encoding assumes:
Position is primary: Memory traces are fundamentally organized by when things happened
Identity is secondary: Item identity is bound to position, not the reverse
Selective retrieval: People can selectively access specific presentations
This contrasts with item-based encoding where repeated presentations strengthen a single trace.
Implementation Notes
The studied array tracks which item was presented at each position:
Code
self.studied = jnp.zeros(list_length, dtype=int)# After studying item 5 at position 3:self.studied[3] =5# (using 1-indexed item IDs)
Recallability is tracked per-position:
Code
self.recallable = jnp.zeros(list_length, dtype=bool)# When item 5 (at positions 3 and 7) is recalled:# All matching positions become non-recallableself.recallable =self.recallable * (self.studied !=5)