Module:Verification

From Granblue Fantasy Wiki
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