I would use the bootstrap method.
See here: http://phe.rockefeller.edu/LogletLab/whitepaper/node17.html
A simple example for a noisy Gaussian:
x = arange(-10, 10, 0.01) # model function def f(p): mu, s = p return exp(-(x-mu)**2/(2*s**2)) # create error function for dataset def fff(d): def ff(p): return df(p) return ff # create noisy dataset from model def noisy_data(p): return f(p)+normal(0,0.1,len(x)) # fit dataset to model with least squares def fit(d): ff = fff(d) p = leastsq(ff,[0,1])[0] return p # bootstrap estimation def bootstrap(d): p0 = fit(d) residuals = f(p0)-d s_residuals = std(residuals) ps = [] for i in range(1000): new_d = d+normal(0,s_residuals,len(d)) ps.append(fit(new_d)) ps = array(ps) mean_params = mean(ps,0) std_params = std(ps,0) return mean_params, std_params data = noisy_data([0.5, 2.1]) mean_params, std_params = bootstrap(data) print "95% confidence interval:" print "mu: ", mean_params[0], " +/- ", std_params[0]*1.95996 print "sigma: ", mean_params[1], " +/- ", std_params[1]*1.95996
so12311 Apr 27 '11 at 22:11 2011-04-27 22:11
source share