Source: https://cran.r-project.org/web/packages/validate/vignettes/JSS_3483.pdf