Welcome to Project Skellam, a project of mine I am working on to predict and analyse the performance of football teams (soccer in Australia & the US) given the number of goals scored and conceded.
There will be scope in the future to extend this modelling to other sports (especially ice hockey & the NHL), pending modifications to the model.
I am using RStudio to do all my predictions and analyses. Source codes and text files will become available at a future point in time.
We start by creating an input text file containing the current table at the end of a particular gameweek/matchday. This table would include the number of games played, number of goals scored and conceded, goal difference and current points tally.
For each team, we will use the running average goals scored and conceded to draw up two sets of two random samples, both Poisson random variable whose means are the current average goals scored and conceded; one set will be used to predict the remaining results for the season and the other set will be used to compute the expected number of points to be obtained from the current number of games to be played.
This data will be used to calculate the number of points expected to be scored at the current point in time as well as the number of points expected to be scored by the end of the season. We repeat this simulation 1,000,000 (1 million or 10^6) times and put the results into a vector/list.
The means and standard errors of these two sets of data will be put in to a single table which will also contain the actual data, and the difference between the current observed number of points and expected number of points is added to the table for each team. This will allow us to compute the chi-squared statistic, which we can then use to compute a p-value to compare the performance of the model to the actual data.
The source code is available to download here. A sample input text file is also available here. (Use "Save link as..." to download the actual files.)
GW1 GW2 GW3 GW4 GW5 GW6 GW7 GW8 GW9 GW10 GW11 GW12 GW13 GW14 GW15 GW16 GW17 GW18 GW19
GW20 GW21 GW22 GW23
Last updated: 20 December 2021