The photo-finish circuit
The race is a resistor network. Click a runner to delete it.
Twelve runners moved by two common factors. Each runner's colour is its position in factor space, so similar colours mean similar factor exposure. Node size is win share. Wire thickness is the photo-finish tie density between two runners — the probability density of the race coming down to exactly that pair, which is also the weight in the calibration Jacobian's graph Laplacian: the race is literally a resistor network.
Click a node to remove that runner. The engine then computes each survivor's new win probability qj exactly, and the bar for j is the excess over the naive IIA rule that just redistributes the deleted share proportionally: qj / (pj/(1−pi)) − 1. Bars are ordered by factor similarity to the deleted runner, most similar at the top — runners that resemble the deleted one gain disproportionately, exactly the red-bus/blue-bus failure of IIA. Everything is computed live in your browser by the same algorithm the Python package ships.
No runner deleted. Click one.
Python version of this demo · the JS module and its parity tests · the paper