Coder Social home page Coder Social logo

nfl4th's Introduction

nfl4th

R-CMD-check CRAN status Lifecycle: stable Support Server

This is the package that powers the fourth down calculator introduced in this piece on The Athletic.

The code that powers the Twitter fourth down bot is in this folder here and the code that runs the Shiny app is here.

Installation

The easiest way to get the released version of nfl4th is to install it from CRAN with:

install.packages("nfl4th")

To get a bug fix or to use a feature from the development version, you can install the development version of nfl4th from GitHub with:

install.packages("nfl4th", repos = c("https://nflverse.r-universe.dev", getOption("repos")))

or by using remotes:

if (!require("remotes")) install.packages("remotes")
remotes::install_github("nflverse/nfl4th")

Features

  • The go for it model gives probabilities for possibilities of yards gained and includes the possibility of earning a first down via defensive penalty
  • The punt model includes the possibility for getting blocked, returned for a touchdown, or fumbled on the return
  • The field goal model is a simple model of field goal % by distance and roof type

Current limitations

There are some edge cases that are not accounted for. These should only make a marginal difference to the recommendations as they are largely edge cases (e.g. the possibility for a field goal to be blocked and returned).

  • The go for it model does not allow for the possibility of a turnover return. However, long returns are extremely rare: For example, in 2018 and 2019 there were only four defensive touchdowns on plays where teams went for fourth downs out of 1,236 plays, and all of these happened when the game was well in hand for the other team.
  • The punt model doesn’t account for the punter or returner, ignores penalties on returns and ignores the potential for blocked punts to be returned for touchdowns
  • The field goal model doesn’t account for who the kicker is, what the weather is (only relevant for outdoor games), or the possibility of a kick being blocked and returned for a touchdown

Get Started

To get started with nfl4th please see this article. Some examples of 4th down research using the package can be found here.

nfl4th's People

Contributors

actions-user avatar guga31bb avatar mrcaseb avatar tanho63 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

peteowen1

nfl4th's Issues

Release nfl4th 1.0.1

Prepare for release:

Submit to CRAN:

  • usethis::use_version('patch')
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Accepted 🎉
  • usethis::use_github_release()
  • usethis::use_dev_version()

Recommendation strength: Log odds vs Percentage Points

Not sure if this is the correct place for discussion, as new to Github, just point me in the right direction if not.

Seems like the main complaints with the bot currently are either lack of player-based info, or that recommendations seem weird when game is essentially over i.e. model almost always calls a decision a toss-up when win prob. is > 90%

Obviously harder to interpret log-odds instead of percentage points but if people are going to complain that the bot is too on the fence in these situations then maybe log-odds could be considered.

Just a thought, let me know what you think.

Release nfl4th 1.0.0

First release:

Prepare for release:

  • usethis::use_version('major')
  • Polish NEWS
  • devtools::build_readme()
  • urlchecker::url_check()
  • devtools::check(remote = TRUE, manual = TRUE)
  • devtools::check_win_devel()
  • rhub::check_for_cran()
rhub::check_for_cran(
  show_status = FALSE, 
  platforms = rhub::platforms()$name,
  env_vars = c(R_CHECK_FORCE_SUGGESTS = "true", 
               R_CHECK_CRAN_INCOMING_USE_ASPELL = "true", 
               R_COMPILE_AND_INSTALL_PACKAGES = "always"))
  • Check code quality with goodpractice::gp()
  • Update cran-comments.md
  • Review pkgdown reference index for, e.g., missing topics

Submit to CRAN:

  • devtools::release()
  • Approve email

Wait for CRAN...

  • Accepted 🎉
  • usethis::use_github_release()
  • usethis::use_dev_version()
  • Update install instructions in README
  • Tweet

Release nfl4th 1.0.1

Prepare for release:

Submit to CRAN:

  • usethis::use_version('patch')
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Accepted 🎉
  • usethis::use_github_release()
  • usethis::use_dev_version()

Release nfl4th 1.0.3

Prepare for release:

  • git pull
  • Check current CRAN check results
  • Polish NEWS
  • usethis::use_github_links()
  • urlchecker::url_check()
  • devtools::build_readme()
  • devtools::check(remote = TRUE, manual = TRUE)
  • devtools::check_win_devel()
  • revdepcheck::revdep_check(num_workers = 4)
  • Update cran-comments.md
  • git push

Submit to CRAN:

  • usethis::use_version('patch')
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Accepted 🎉
  • usethis::use_github_release()
  • usethis::use_dev_version(push = TRUE)

Take tidyverse out of Suggests

Dear Ben Baldwin,

Your package, nfl4th, lists the tidyverse in either Depends,
Imports, or Suggests in the DESCRIPTION file. This is a bad idea because,
in short, the tidyverse is a set of packages designed for interactive data
analysis, and it includes a very large number (>80) of direct and indirect
dependencies, most of which your package probably doesn't use.

Instead of depending on the entire tidyverse, please import from, suggest,
or depend on the packages in the tidyverse that you actually use. This
will make your package faster to install and will head off potential
problems down the road.

Thanks!

Hadley

Consider delaying data download

Data downloads are executed on package load. As a result, the package cannot be installed on systems without an Internet connection (which is the case for package builders for RPM creation, connectivity is not allowed there for security reasons). This data could be placed e.g. in user dirs using tools::R_user_dir.

Release nfl4th 1.0.2

Prepare for release:

Submit to CRAN:

  • usethis::use_version('patch')
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Accepted 🎉
  • usethis::use_github_release()
  • usethis::use_dev_version()

CRAN doesn't allow us to use `rappdirs::user_cache_dir()`

With v1.0.3 we released code to CRAN that creates a user cache directory using rappdirs. We received this lovely mail a couple days later

This uses ~/.cache/nfl4th (and /Users/ripley/Library/Caches/nfl4th on
macOS). That is prohibited under the CRAN policy with which you have
just warranted compliance.
The package is now scheduled for archival on 2023-08-29, and this will
necessitate archiving its CRAN strong reverse dependency, nflverse.
--
Brian D. Ripley, [email protected]
Emeritus Professor of Applied Statistics, University of Oxford

This is a known issue, see r-lib/rappdirs#27 and r-lib/rappdirs#40
So now we are forced to switch over to tools:: R_user_dir() which is problematic because it was introduced with R4.0.0.
The solution is to use the backports package with R versions < 4.0

Fun fact: even the freakin .Rd file of tools:: R_user_dir() claims, that rappdirs works fine.
image

Release nfl4th 1.0.4

Prepare for release:

  • git pull
  • Check current CRAN check results
  • Polish NEWS
  • usethis::use_github_links()
  • urlchecker::url_check()
  • devtools::build_readme()
  • devtools::check(remote = TRUE, manual = TRUE)
  • devtools::check_win_devel()
  • revdepcheck::revdep_check(num_workers = 4)
  • Update cran-comments.md
  • git push

Submit to CRAN:

  • usethis::use_version('patch')
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Accepted 🎉
  • usethis::use_github_release()
  • usethis::use_dev_version(push = TRUE)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.