UNPKG

wilson-interval-func

Version:
104 lines (80 loc) 2.6 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _pnormaldist = require('pnormaldist'); var _pnormaldist2 = _interopRequireDefault(_pnormaldist); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var WilsonInterval = function () { function WilsonInterval() { (0, _classCallCheck3.default)(this, WilsonInterval); } (0, _createClass3.default)(WilsonInterval, null, [{ key: 'calc', /** * * @param positiveVotes * @param totalVotes * @returns {number} */ value: function calc(positiveVotes, totalVotes) { var z = (0, _pnormaldist2.default)(1 - (1 - WilsonInterval.CONFIDENCE) / 2); return totalVotes ? WilsonInterval.lowerBound(positiveVotes, totalVotes, z) : 0; } /** * * @param positiveVotes * @param totalVotes * @param confidence * @returns {number} */ }, { key: 'lowerBound', value: function lowerBound(positiveVotes, totalVotes, confidence) { var phat = 1.0 * positiveVotes / totalVotes, numerator = WilsonInterval.calcNumerator(totalVotes, confidence, phat), denominator = WilsonInterval.calcDenominator(totalVotes, confidence); return numerator / denominator; } /** * * @param total * @param z * @returns {number} */ }, { key: 'calcDenominator', value: function calcDenominator(total, z) { return 1 + z * z / total; } /** * * @param total * @param z * @param phat * @returns {number} */ }, { key: 'calcNumerator', value: function calcNumerator(total, z, phat) { return phat + z * z / (2 * total) - z * Math.sqrt((phat * (1 - phat) + z * z / (4 * total)) / total); } /** * * @returns {number} * @constructor */ }, { key: 'CONFIDENCE', get: function get() { return .975; } }]); return WilsonInterval; }(); exports.default = WilsonInterval; module.exports = WilsonInterval;