def identify_outliers(scale_errors,needs_sort,bin,x): # Useful constants roottwo = 1.414213562373095 madfac = 1.482602218505602 n = len(x) # Get the residuals y = median_model(needs_sort,bin,x) res = [] for i in range(n): res.append(y[i][1] - x[i][1]) # Scale the errors if scale_errors == 1: maderror = madfac*median_deviation(res) errors = [row[2] for row in x] mederror = median_(errors) sigmafac = maderror/mederror print 'Scaling errors by ',sigmafac else: sigmafac = 1.0 # Number of sigmas to clip sigmas = coolmath.inverf(1.0-(1.0/n)) # Identify outliers outlier=[0 for i in range(n)] for i in range(n): if abs(res[i]) >= sigmas*sigmafac*x[i][2]: outlier[i] = 1 else: outlier[i] = 0 print 'Number of outliers = ',sum(outlier),' [',100.0*sum(outlier)/n,'%]' return outlier
def identify_outliers(scale_errors, needs_sort, bin, x): # Useful constants roottwo = 1.414213562373095 madfac = 1.482602218505602 n = len(x) # Get the residuals y = median_model(needs_sort, bin, x) res = [] for i in range(n): res.append(y[i][1] - x[i][1]) # Scale the errors if scale_errors == 1: maderror = madfac * median_deviation(res) errors = [row[2] for row in x] mederror = median_(errors) sigmafac = maderror / mederror print 'Scaling errors by ', sigmafac else: sigmafac = 1.0 # Number of sigmas to clip sigmas = coolmath.inverf(1.0 - (1.0 / n)) # Identify outliers outlier = [0 for i in range(n)] for i in range(n): if abs(res[i]) >= sigmas * sigmafac * x[i][2]: outlier[i] = 1 else: outlier[i] = 0 print 'Number of outliers = ', sum( outlier), ' [', 100.0 * sum(outlier) / n, '%]' return outlier
def truncatedgaussian_sample(xmin, xmax, mu, sigma, x): roottwo = 1.414213562373095 temp = math.erfc((-xmin + mu) / (roottwo * sigma)) + x * ( math.erfc((-xmax + mu) / (roottwo * sigma)) - math.erfc((-xmin + mu) / (roottwo * sigma)) ) y = mu + roottwo * sigma * coolmath.inverf(-1.0 + temp) return y
import math import coolmath print 'x = ?' x = float(raw_input()) y = coolmath.inverf(x) print 'inverf(x) = ',y print 'erf[inverf(x)] = ',math.erf(y)
import math import coolmath print 'x = ?' x = float(raw_input()) y = coolmath.inverf(x) print 'inverf(x) = ', y print 'erf[inverf(x)] = ', math.erf(y)
def cappedgaussian_sample(xmin, mu, sigma, x): roottwo = 1.414213562373095 temp = math.erfc((-xmin + mu) / (roottwo * sigma)) + x * (2.0 - math.erfc((-xmin + mu) / (roottwo * sigma))) y = mu + roottwo * sigma * coolmath.inverf(-1.0 + temp) return y
def gaussian_sample(mu, sigma, x): roottwo = 1.414213562373095 y = mu + roottwo * sigma * coolmath.inverf(-1.0 + 2.0 * x) return y