How odd was the UEFA draw?

December 31, 2012

(This article was first published on A Distant ObserveR, and kindly contributed to R-bloggers)

I’ve been away for some time without closely following the media, and without significant internet access. When such a period is over it takes some time to regain momentum. Thus my short exit poll series will be continued in 2013. For now I’m still sorting out what I missed over the last weeks. Today’s short post is part of this process.

There has been some discussion while I was away about how probable the UEFA Champions League draw really was. The Daily Mail quoted “leading football statisticians” that came up with 2160900:1, and bookies that would have offered 5000:1.

R-bloggers have contributed several articles, and the consensus arrived at was that the chances were 1:5463, or 0.0001830496. I’ll take this for granted.


The odds are much better


0.0001830496 still doesn’t seem like a hell of a chance. But this number doesn’t reflect the probability of seeing what happened in Nyon. Here’s why:

The UEFA made several dry runs, not just the one that has been discussed. According to the German magazine SPIEGEL ONLINE a UEFA speaker confirmed that they’re carrying out “numerous tests”.

Just one of the “numerous” dry runs turned out to be the same as the final draw. I don’t know how many draws have been made for testing purposes. But let’s assume they’re routinely doing ten dry runs before the final draw.

Let’s assume further that there are 5463 different results that are all equally probable. Then, mathematically, the chances of what has been discussed widely are about 1:546.3, or 0.001830496.


From Nyon to Monte Carlo…


Let’s do some simulation now. I created the function sim.nyon as a quick and dirty way to do the whole job:

sim.nyon <- function(poss, testruns, n.sims) {
  # parameters:
  # poss: number of possible results to draw from
  # testruns: number of dry runs before the final draw
  # n.sims: number of simulations to be run
  runs <- testruns + 1 # dry runs plus final draw
  y <- sample(poss, (n.sims*runs), replace = TRUE)
  y <- matrix(y, nrow = n.sims)
  y <- y – y[,runs]
  y <- y[, -runs] <- apply(y, 1, function(x) {any(x==0)})

In the UEFA case we want to run 10,000 simulations with 5463 possibilities and assume 10 dry runs:

possibilities <- 5463
testruns <- 10
sims <- 10^4
sim.nyon(possibilities, testruns, sims)
#  9981    19

After all the UEFA thingy doesn’t seem to be that improbable after all.

To leave a comment for the author, please follow the link and comment on their blog: A Distant ObserveR. offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.


Mango solutions

RStudio homepage

Zero Inflated Models and Generalized Linear Mixed Models with R

Dommino data lab

Quantide: statistical consulting and training



CRC R books series

Six Sigma Online Training

Contact us if you wish to help support R-bloggers, and place your banner here.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)