elo.glm {elo} | R Documentation |
Compute a (usually logistic) regression model for a series of matches.
Description
Compute a (usually logistic) regression model for a series of matches.
Usage
elo.glm(
formula,
data,
family = "binomial",
weights,
na.action,
subset,
...,
running = FALSE,
skip = 0
)
Arguments
formula |
A formula. See the help page for formulas for details. |
data |
A |
family |
Argument passed to |
weights |
Argument passed to |
na.action |
A function which indicates what should happen when the data contain NAs. |
subset |
An optional vector specifying a subset of observations. |
... |
Argument passed to |
running |
Logical, denoting whether to calculate "running" projected probabilities. If true, a model is fit for
group 1 on its own to predict group 2, then groups 1 and 2 to predict 3, then groups 1 through 3 to predict 4, etc.
Groups are determined in |
skip |
Integer, denoting how many groups to skip before fitting the running models. This is helpful if groups are small, where glm would have trouble converging for the first few groups. The predicted values are then set to 0.5 for the skipped groups. |
Details
The formula syntax is the same as other elo
functions. A data.frame
of indicator variables is built, where an entry is 1 if a team is home, 0 if
a team didn't play, and -1 if a team is a visitor. Anything passed to adjust()
in
formula
is also put in the data.frame. A glm
model is then
run to predict wins or margin of victory.
With this setup, the intercept represents the home-field advantage. Neutral fields can be indicated
using the neutral()
function, which sets the intercept to 0.
Note that any weights specified in players()
will be ignored.
This is essentially the Bradley-Terry model.
Value
An object of class c("elo.glm", "glm")
. If running==TRUE
, the class "elo.glm.running"
is prepended.
References
https://en.wikipedia.org/wiki/Bradley
See Also
glm
, summary.elo.glm
, score
,
mov
, elo.model.frame
Examples
data(tournament)
elo.glm(score(points.Home, points.Visitor) ~ team.Home + team.Visitor, data = tournament,
subset = points.Home != points.Visitor)
elo.glm(mov(points.Home, points.Visitor) ~ team.Home + team.Visitor, data = tournament,
family = "gaussian")