The package title no longer begins with the word “Elo”.
Fixed one URL redirect
Added a reference to the help page and vignette for
elo.glm()
.
Breaking changes:
Restricted the version of R to >= 3.6.
Changed the impact of the group()
formula special in
elo.run()
. It now indicates when to update Elos.
(#54)
Removed elo.run2()
, to be replaced by passing
arguments to elo.run()
. A message is issued when the R
backend is used.
The [.elo.k()
(new) and
[.elo.players.matrix()
methods now drop any extra classes
when j=
is specified.
Changed a warning to an error in final.elos()
when
using regressed=TRUE
without regression after the last
game.
elo.glm()
, elo.markovchain()
,
elo.winpct()
, elo.colley()
now emit NAs for
running predictions on groups that haven’t been seen yet. (#56)
Other changes:
Added subset=
argument to auc()
and
favored()
.
Added ignore.skipped=FALSE
argument to
auc()
, favored()
, and mse()
running methods.
Added attributes to
fitted.elo.running(..., running=TRUE)
to indicate the group
(i.e., model) from which the prediction arises.
Added elo.run.multiteam()
for when matchups consist
of multiple teams. (#54)
Improved documentation, including expanding from 1 to 3 vignettes
Fixed a bug with the as.data.frame()
method for
elo.run()
when players()
are involved.
(#55)
Changed how tournament
is created (though the data
didn’t actually change).
Made some methods more explicit: length.elo.k()
,
is.na.elo.k()
, [.elo.k()
,
is.na.elo.players.matrix()
Made one fix for R-devel related to subsetting a vector with a classed object.
Added elo.colley()
, with its corresponding helper
functions.
Allowed k()
to take two arguments, to give
differential updates to “team.A” and “team.B”. This has one user-visible
effect: as.data.frame.elo.run()
now has one more column
than it did before, and its column names have changed. (#45)
Added elo.run2()
, which allows for custom
probabilities and updates, but by default returns the same as
elo.run()
(except more slowly). (#47)
Added a pkgdown
site:
https://eheinzen.github.io/elo/
Added the running=TRUE
option to
elo.glm()
. This gives an object of class
"elo.running"
, with corresponding methods for
summary()
, fitted()
, predict()
,
mse()
, auc()
, and
favored()
.
Added weights=
to elo.glm()
.
Added support for adjust()
in elo.glm()
to include adjustments in the logistic regression.
Added a new inline function neutral()
, to denote
neutral field in elo.glm()
and
elo.markovchain()
.
Removed the rm.ties=
argument from
elo.glm()
. Ties will have to be removed instead with
subset=
or before running the function altogether.
Added elo.markovchain()
, with corresponding methods
for summary()
, fitted()
,
predict()
, mse()
, auc()
, and
favored()
. This also has the running=TRUE
option.
Added elo.winpct()
, with corresponding methods for
summary()
, fitted()
, predict()
,
mse()
, auc()
, and favored()
. This
also has the running=TRUE
option.
Added a function to denote margin of victory, for continuous
modeling in elo.glm()
, elo.markovchain()
, and
elo.winpct()
: mov()
.
Added auc.elo.glm()
. (#37)
Made favored()
S3 and added
favored.elo.glm()
. (#38)
Made mse()
S3 and added mse.elo.glm()
.
(#43)
Added summary.elo.glm()
.
Added predict.elo.glm()
.
Added brier()
as a synonym for
mse()
.
Added rank.teams()
.
Fixed a bug with adding NAs back in to fitted values and
residuals with na.exclude()
in elo.glm()
and
elo.run()
. (#39, #42)
Fixed a bug with adjust()
variables not getting
subsetted correctly with na.action
in
model.frame()
. (#40)
Added is.na.elo.adjust()
to test for NAs in the
adjustment vector. (#41)
Widened the version dependency to R 3.3.0.
Allowed players()
matrices in elo.run()
to find Elos of individual players playing at the same time.
Added elo.glm()
, a simple function to run logistic
regressions on Elo setups.
Fixed a bug in the favored()
function (used in
summary.elo.run()
). (#29)
Exported and revamped the class structure of the specials allowed in formulas. (#30)
Allowed access to elo.model.frame()
even when the
package isn’t loaded. (#34)
Allowed regression to different values for each team. (#35)
Fixed a bug with initial Elos and deep copying in C++. (#25)
Added an argument to regress()
allowing users to
stop regressing teams which have stopped playing. (#26)
This version is not backwards compatible!
Changed the signatures of elo.calc()
and
elo.update()
to match formula interface.
Changed elo.calc()
, elo.update()
, and
elo.prob()
to S3 generics, and implemented formula methods.
The default methods now include options to adjust Elos. (#3)
elo.run()
:
elo.run()
no longer accepts numeric values for
team.A
.
elo.run()
now accepts special functions
group()
and regress()
. If the latter is used,
the class of the returned object becomes
"elo.run.regressed"
. (#11, #12, #19, #22)
The $elos
component of "elo.run"
objects has been completely reworked, and now uses 1-based indexing.
Because of this, the print.elo.run()
method also had to be
fixed. (#16)
Renamed last()
to final.elos()
(#9).
Changed tournament
dataset.
The elo
package now imports
pROC::auc()
.
elo.prob()
now accepts vectors of team names (like
elo.run()
) as input. (#6)
Documentation and the vignette have been updated.
Implemented elo.model.frame()
. The output is a
data.frame
with appropriately named columns.
Implemented predict.elo.run()
and
predict.elo.run.regressed()
. (#2, #19)
Added is.score()
to test for “score-ness”.
Implemented summary.elo.run()
, along with helpers to
calculate AUC and MSE (auc()
and mse()
).
(#15)
Made the title more succinct.
Elaborated the description of the package.
Tweak the internal "elo.run"
object.
Tweaked the README and vignette.
Submit first version of elo
to CRAN.
Issues and code can be found on GitHub: https://github.com/eheinzen/elo/