Skip to content

Instantly share code, notes, and snippets.

@Gattermeier
Created April 13, 2017 17:55
Show Gist options
  • Save Gattermeier/d89024e3f6d054dea952220387fe7bc5 to your computer and use it in GitHub Desktop.
Save Gattermeier/d89024e3f6d054dea952220387fe7bc5 to your computer and use it in GitHub Desktop.
Lower bound of Wilson score confidence interval for a Bernoulli parameter
// Node.js implementation of Evan Miller's algorithm for ranking stuff based on upvotes:
// http://www.evanmiller.org/how-not-to-sort-by-average-rating.html
const stats = require('simple-statistics')
const lower_bound = (upvotes, n = 0, confidence = 0.95) => {
if (n === 0) return 0
// for performance purposes you might consider memoize the calcuation for z
const z = stats.probit(1-(1-confidence)/2)
// p̂, the fraction of upvotes
const phat = 1.0 * upvotes / n
return (phat + z*z / (2*n) - z * Math.sqrt((phat * (1 - phat) + z*z / (4*n)) / n)) / (1 + z*z/n)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment