Module:Verification
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Verification/doc
local p = {}
local getArgs = require('Module:Arguments').getArgs
function p.confidence(frame)
local args = getArgs(frame)
local ns = args['ns'] or 0
local nf = args['nf'] or 0
local z = args['z'] or 1.645
local perc = args['p'] or '0'
z = p.percentToInverseErf(perc, z)
return p._confidence(ns, nf, z)
end
function p.samples(frame)
local args = getArgs(frame)
local ns = args['ns'] or 0
local nf = args['nf'] or 0
local m = args['m'] or 0.005
local z = args['z'] or 1.645
local perc = args['p'] or '0'
z = p.percentToInverseErf(perc, z)
return p._samples(ns, nf, m, z)
end
function p.format(frame)
local args = getArgs(frame)
local f = args['format'] or ''
local v = args['value'] or ''
return string.format(f, v)
end
function p._confidence(ns, nf, z)
local n = ns+nf
return (z/n)*math.sqrt(ns*nf/n)
end
function p._samples(ns, nf, m, z)
local n = ns+nf
local sp = ns / n
return sp*(1-sp)*math.pow(z/m, 2)
end
function p.percentToInverseErf(percent, default)
-- https://www.wolframalpha.com/input/?i=probit(0.95)
local pn = tonumber(percent)
if (pn > 0) then
-- 95th
if pn == 90 then
return 1.6448536
-- 97.5th
elseif pn == 95 then
return 1.9599640
-- 99th
elseif pn == 98 then
return 2.3263479
end
end
return default
end
return p