Mercurial > hg > nsaunier > traffic-intelligence
comparison python/utils.py @ 859:a8de3c93f6b7
minor modifications to helper stat functions
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Fri, 21 Oct 2016 16:02:46 -0400 |
| parents | e310577cc0b8 |
| children | c7e72d758049 |
comparison
equal
deleted
inserted
replaced
| 858:2faabcbde2c4 | 859:a8de3c93f6b7 |
|---|---|
| 49 def fitLogNormal(x): | 49 def fitLogNormal(x): |
| 50 'returns the fitted location and scale of the lognormal (general definition)' | 50 'returns the fitted location and scale of the lognormal (general definition)' |
| 51 shape, loc, scale = lognorm.fit(x, floc=0.) | 51 shape, loc, scale = lognorm.fit(x, floc=0.) |
| 52 return log(scale), shape | 52 return log(scale), shape |
| 53 | 53 |
| 54 def sampleSize(stdev, tolerance, percentConfidence, printLatex = False): | 54 def sampleSize(stdev, tolerance, percentConfidence, nRoundingDigits = None, printLatex = False): |
| 55 from scipy.stats.distributions import norm | 55 from scipy.stats.distributions import norm |
| 56 k = round(norm.ppf(0.5+percentConfidence/200., 0, 1)*100)/100. # 1.-(100-percentConfidence)/200. | 56 if nRoundingDigits is None: |
| 57 k = round(norm.ppf(0.5+percentConfidence/200., 0, 1), 2) # 1.-(100-percentConfidence)/200. | |
| 58 else: | |
| 59 k = round(norm.ppf(0.5+percentConfidence/200., 0, 1), nRoundingDigits) | |
| 60 stdev = round(stdev, nRoundingDigits) | |
| 61 tolerance = round(tolerance, nRoundingDigits) | |
| 57 if printLatex: | 62 if printLatex: |
| 58 print('${0}^2\\frac{{{1}^2}}{{{2}^2}}$'.format(k, stdev, tolerance)) | 63 print('$z_{{{}}}^2\\frac{{s^2}}{{e^2}}={}^2\\frac{{{}^2}}{{{}^2}}$'.format(0.5+percentConfidence/200.,k, stdev, tolerance)) |
| 59 return (k*stdev/tolerance)**2 | 64 return (k*stdev/tolerance)**2 |
| 60 | 65 |
| 61 def confidenceInterval(mean, stdev, nSamples, percentConfidence, trueStd = True, printLatex = False): | 66 def confidenceInterval(mean, stdev, nSamples, percentConfidence, trueStd = True, printLatex = False): |
| 62 '''if trueStd, use normal distribution, otherwise, Student | 67 '''if trueStd, use normal distribution, otherwise, Student |
| 63 | 68 |
| 65 ex: norm.interval(0.95, loc = 0., scale = 2.3/sqrt(11)) | 70 ex: norm.interval(0.95, loc = 0., scale = 2.3/sqrt(11)) |
| 66 t.interval(0.95, 10, loc=1.2, scale = 2.3/sqrt(nSamples)) | 71 t.interval(0.95, 10, loc=1.2, scale = 2.3/sqrt(nSamples)) |
| 67 loc is mean, scale is sigma/sqrt(n) (for Student, 10 is df)''' | 72 loc is mean, scale is sigma/sqrt(n) (for Student, 10 is df)''' |
| 68 from scipy.stats.distributions import norm, t | 73 from scipy.stats.distributions import norm, t |
| 69 if trueStd: | 74 if trueStd: |
| 70 k = round(norm.ppf(0.5+percentConfidence/200., 0, 1)*100)/100. # 1.-(100-percentConfidence)/200. | 75 k = round(norm.ppf(0.5+percentConfidence/200., 0, 1), 2) |
| 71 else: # use Student | 76 else: # use Student |
| 72 k = round(t.ppf(0.5+percentConfidence/200., nSamples-1)*100)/100. | 77 k = round(t.ppf(0.5+percentConfidence/200., nSamples-1), 2) |
| 73 e = k*stdev/sqrt(nSamples) | 78 e = k*stdev/sqrt(nSamples) |
| 74 if printLatex: | 79 if printLatex: |
| 75 print('${0} \pm {1}\\frac{{{2}}}{{\sqrt{{{3}}}}}$'.format(mean, k, stdev, nSamples)) | 80 print('${0} \pm {1}\\frac{{{2}}}{{\sqrt{{{3}}}}}$'.format(mean, k, stdev, nSamples)) |
| 76 return mean-e, mean+e | 81 return mean-e, mean+e |
| 77 | 82 |
