In case someone is interested ...
doing more search queries pnormaldist led me to this stackoverflow article: Objective-C Wilson Evaluation Interval Implementation
I converted this objective-c to C # mannually and it is completely untested
public class WilsonScore { private static double pnormaldist(double qn) { double[] b = { 1.570796288, 0.03706987906, -0.8364353589e-3, -0.2250947176e-3, 0.6841218299e-5, 0.5824238515e-5, -0.104527497e-5, 0.8360937017e-7, -0.3231081277e-8, 0.3657763036e-10, 0.6936233982e-12 }; if (qn < 0.0 || 1.0 < qn) return 0.0; if (qn == 0.5) return 0.0; double w1 = qn; if (qn > 0.5) w1 = 1.0 - w1; double w3 = -Math.Log(4.0 * w1 * (1.0 - w1)); w1 = b[0]; int i = 1; for (; i < 11; i++) w1 += b[i] * Math.Pow(w3, i); if (qn > 0.5) return Math.Sqrt(w1 * w3); return -Math.Sqrt(w1 * w3); } public static double ci_lower_bound(int pos, int n, double power) { if (n == 0) return 0.0; double z = pnormaldist(1 - power / 2); double phat = 1.0 * pos / n; return (phat + z * z / (2 * n) - z * Math.Sqrt((phat * (1 - phat) + z * z / (4 * n)) / n)) / (1 + z * z / n); } }
source share