import mathimport calcdef fact(x):result=1while x>=1:result=result*xx=x-1return resultdef binom(total,slots):if slots<0 or slots>total:return 0# return fact(total*1.0)/\# (fact(slots*1.0)*\# fact(total-slots))nom=1for k in range(0,slots):nom*=total-kdenom=fact(slots)return nom/denomdef binomPDF(totaltrials,successcnt,probofsuccess):probofsuccnt=math.pow(probofsuccess,successcnt)proboffailcnt=math.pow((1-probofsuccess),(totaltrials-successcnt))binomco=binom(totaltrials,successcnt)return binomco*probofsuccnt*proboffailcntdef binommoreCDF(totaltrials,successcnt,probofsuccess):result=0while successcnt<=totaltrials:result+=binomPDF(totaltrials,successcnt,probofsuccess)successcnt+=1return resultdef binomlessCDF(totaltrials,successcnt,probofsuccess):result=0for sc in range(0,successcnt):result+=binomPDF(totaltrials,sc,probofsuccess)return resultdef normalPDF(x,mean=0,deviat=1):return (1/(deviat*math.sqrt(2*math.pi)))*\math.exp(-(math.pow(x-mean,2)/(2*math.pow(deviat,2))))def normalCDF(low,high,mean=0,deviat=1):def f(x):return normalPDF(x,mean,deviat)ff=calc.I(f)return ff(high,low)def poisPDF(x,lamb):return math.exp(-lamb)*(lamb**x)/fact(x)def poisCDF(low,high,lamb):sum=0for k in range(low,high+1):sum+=poisPDF(k,lamb)
return sumdef gamma(alpha):xmax=alpha*100if alpha==int(alpha):return fact(alpha-1)def f(x):return (x**(alpha-1))*math.exp(-x)ff=calc.I(f)return ff(xmax,0)def gammalin(alpha):al=alpha-1ali=int(al)alf=fact(ali)if ali==al:return alfal1=fact(alpha)rem=al-alirise=rem*(al1-alf)return alf+rise#http://en.wikipedia.org/wiki/Lanczos_approximation#slightly modifieddef lanczos(z):# z = complex(z)# Coefficients used by the GNU Scientific Libraryg = 7p = [0.99999999999980993, 676.5203681218851, -1259.1392167224028,771.32342877765313, -176.61502916214059, 12.507343278686905,-0.13857109526572012, 9.9843695780195716e-6, 1.5056327351493116e-7]# Reflection formula#if z.real < 0.5:if z < 0.5:return math.pi / (math.sin(math.pi*z)*lanczos(1-z))else:z -= 1x = p[0]for i in range(1, g+2):x += p[i]/(z+i)t = z + g + 0.5return math.sqrt(2*math.pi) * t**(z+0.5) * math.exp(-t) * xdef gammaPDF(x,shape,rate=.5):# return ((rate**shape)/float(gamma(shape)))*\return ((rate**shape)/float(lanczos(shape)))*\(x**(shape-1))*\math.exp(-rate*x)def gammaCDF(low,high,shape,rate=.5):def f(x):return gammaPDF(x,shape,rate)ff=calc.I(f)return ff(high,low)def chiPDF(chisq,df):return gammaPDF(chisq,df/2.)
def chilessCDF(chisq,df):return gammaCDF(10**-8,chisq,df/2.)def chimoreCDF(chisq,df):if df/2.>1:return 1-gammaCDF(10**-8,chisq,df/2.)return gammaCDF(chisq,df*100,df/2.)def expect(x,y,z):return (x*y)/(1.0*z)def chisqterm(x,y):return math.pow((x-y),2)/(y*1.0)def addrow(arr):res=0for val in arr:res+=valreturn resdef addcol(arr,i):res=0for row in arr:res+=row[i]return resdef rowtots(arr):res=[]for row in arr:res.append(addrow(row))return resdef coltots(arr):res=[]for index in range(len(arr[0])):res.append(addcol(arr,index))return resdef info(arr):res=0total=0for numb in arr:total+=numbfor numb in arr:if numb!=0:res=res-((numb*1.0/total)*math.log((numb*1.0/total),2))return resclass chi:def __init__(self,tab):self.tab=tabself.rowcnt=len(tab)self.colcnt=len(tab[0])self.rowtots=rowtots(tab)self.coltots=coltots(tab)self.tot=addrow(self.rowtots)self.val=self.getval()self.df=(self.rowcnt-1)*(self.colcnt-1)
Reward Your Curiosity
Everything you want to read.
Anytime. Anywhere. Any device.
No Commitment. Cancel anytime.