Probability of different winners in a two candidate election (range voting vs majority)

Using the central limit theorem, there is a: $$\frac{1}{2} - \frac{\arctan(\sqrt{2})}{\pi} = 19.6\%$$ the two winners are different!


Let $X_{i} \in \{-1,1\}$ be whether voter $i$ votes for candidate $1$ or $2$. Then the margin of victory $\Delta$ in majority voting is: $$\Delta = \bar{X}\sqrt{n} \sim N(0,1)$$

Let $Y_{i} \in [-1,1]$ be the difference in voter $i$'s score for candidates $1$ and $2$. The pdf of $Y_{i}$ given $X_{i}$ is: $$f_{Y_{i}|X_{i}}(y_{i}|X_{i}=1) = 2(1-y_{i}), \quad y_{i}\in[0,1]$$ The expectation and variance can then be computed: $$\mathbb{E}[Y_{i}|X_{i}=1] = 1/3$$ $$\mathbb{E}[Y_{i}^{2}|X_{i}=1] = 1/6$$ $$\begin{align} \text{Var}(Y_{i}|X_{i}=1) &= 1/6-1/3^2 \\ &= 1/18 \end{align}$$


Let $\Lambda$ be the range voting outcome: $$\Lambda = \bar{Y}\sqrt{n}$$ The distribution of range voting $(\Lambda)$ conditional on majority voting $(\Delta)$ is: $$\Lambda | \Delta \sim N(\Delta/3, 1/18)$$ The conditional probability of candidate 1 winning the range vote is: $$\mathbb{P}[\Lambda < 0|\Delta] = \Phi\left( \frac{-\Delta \sqrt{18}}{3} \right)$$ Given candidate 2 wins the majority vote, the probability candidate 1 wins the range vote is: $$\begin{align} \mathbb{E}\big[\mathbb{P}[\Lambda < 0 | \Delta]\ \big| \, \Delta>0\big] &= 2\int_{0}^{\infty} \Phi\left( \frac{-\Delta \sqrt{18}}{3} \right)\phi(\Delta)d\Delta \\ &= \frac{1}{2} - \frac{\arctan(\sqrt{2})}{\pi} \\ &= .195913 \end{align}$$ Basically, $\Delta$ and $\Lambda$ follow a bivariate normal distribution when the number of voters $n$ gets large, therefore $\Lambda|\Delta$ is normally distributed as well. We can then compute whatever probabilities. Interestingly, nothing directly depends on $n$ (e.g. relevant means or variances), but rather that $\Delta$ and $\Lambda$ are approximately normal.


So not an answer per se, but I set up some simple python code.

import numpy as np

n=int(input("Enter number of voters: "))
m=int(input("Enter number of trials: "))

c1=np.random.rand(m,n)
c2=np.random.rand(m,n)
diff=np.subtract(c1,c2)
mv=np.sum(np.array(diff)>=0,axis=1)
mv=[x-n/2 for x in mv]
rv=np.subtract(np.sum(c1,axis=1),np.sum(c2,axis=1))
mv=np.sign(mv)
rv=np.sign(rv)
r=np.multiply(mv,rv)
r=np.sum(np.array(r)<0)

print("Loser of majority voting won range voting " +str(r) +" times out of "+str(m)+", "+str(int(r/m*100))+"% of the time")

I ran this for 100 trials as far as $n=100,000$, and it pretty consistently gives out an answer of around 13% (this is the probability of the range voting winner losing majority voting, you were trying to calculate the probability candidate C1 did this, so your answer would be half this). I couldn't get it to run for $n=1,000,000$, in retrospect I should have done the trials over a for loop and kept a counter but you could change that yourself if you wanted.

It's interesting information that this probability doesn't go to 0 at least.