I need to calculate binomial confidence intervals for large set of data within a script of python. Do you know any function or library of python that can do this?
Ideally I would like to have a function like this http://statpages.org/confint.html implemented on python.
Thanks for your time.
Answer
I would say that R (or another stats package) would probably serve you better if you have the option. That said, if you only need the binomial confidence interval you probably don’t need an entire library. Here’s the function in my most naive translation from javascript.
def binP(N, p, x1, x2): p = float(p) q = p/(1-p) k = 0.0 v = 1.0 s = 0.0 tot = 0.0 while(k<=N): tot += v if(k >= x1 and k <= x2): s += v if(tot > 10**30): s = s/10**30 tot = tot/10**30 v = v/10**30 k += 1 v = v*q*(N+1-k)/k return s/tot def calcBin(vx, vN, vCL = 95): ''' Calculate the exact confidence interval for a binomial proportion Usage: >>> calcBin(13,100) (0.07107391357421874, 0.21204372406005856) >>> calcBin(4,7) (0.18405151367187494, 0.9010086059570312) ''' vx = float(vx) vN = float(vN) #Set the confidence bounds vTU = (100 - float(vCL))/2 vTL = vTU vP = vx/vN if(vx==0): dl = 0.0 else: v = vP/2 vsL = 0 vsH = vP p = vTL/100 while((vsH-vsL) > 10**-5): if(binP(vN, v, vx, vN) > p): vsH = v v = (vsL+v)/2 else: vsL = v v = (v+vsH)/2 dl = v if(vx==vN): ul = 1.0 else: v = (1+vP)/2 vsL =vP vsH = 1 p = vTU/100 while((vsH-vsL) > 10**-5): if(binP(vN, v, 0, vx) < p): vsH = v v = (vsL+v)/2 else: vsL = v v = (v+vsH)/2 ul = v return (dl, ul)