def results(): x, y, e = get_data() reg = PolynomialRegressor(degree=1, xs=x, ys=y) mi, ma = min(x), max(x) pad = (ma - mi) * 0.1 fxs = linspace(mi - pad, ma + pad) plt.errorbar( x, y, yerr=e, ) reg.calculate() l, u = reg.calculate_error_envelope(fxs, error_calc='CI') plt.plot(fxs, l, 'b') plt.plot(fxs, u, 'b') # plt.plot(fxs, reg.predict(fxs), 'b-') print('Age={}, SD={} SEM={} CI={}'.format(reg.predict(328), reg.predict_error(328), reg.predict_error(328, 'SEM'), reg.predict_error(328, 'CI'))) reg = WeightedPolynomialRegressor(degree=1, xs=x, ys=y, yserr=e) reg.calculate() plt.plot(fxs, reg.predict(fxs), 'g') l, u = reg.calculate_error_envelope(fxs, error_calc='CI') plt.plot(fxs, l, 'r') plt.plot(fxs, u, 'r') print('Weighted fit Age={}, SD={} SEM={} CI={}'.format( reg.predict(328), reg.predict_error(328), reg.predict_error(328, 'SEM'), reg.predict_error(328, 'CI'))) plt.show()
def setUp(self): self.xs = np.linspace(0, 10, 10) self.ys = np.random.normal(self.xs, 1) ''' draper and smith p.8 ''' self.xs = [ 35.3, 29.7, 30.8, 58.8, 61.4, 71.3, 74.4, 76.7, 70.7, 57.5, 46.4, 28.9, 28.1, 39.1, 46.8, 48.5, 59.3, 70, 70, 74.5, 72.1, 58.1, 44.6, 33.4, 28.6 ] self.ys = [ 10.98, 11.13, 12.51, 8.4, 9.27, 8.73, 6.36, 8.50, 7.82, 9.14, 8.24, 12.19, 11.88, 9.57, 10.94, 9.58, 10.09, 8.11, 6.83, 8.88, 7.68, 8.47, 8.86, 10.36, 11.08 ] self.es = np.random.normal(1, 0.5, len(self.xs)) self.slope = -0.0798 self.intercept = 13.623 self.Xk = 28.6 self.ypred_k = 0.3091 xs = self.xs ys = self.ys es = self.es self.wls = WeightedPolynomialRegressor(xs=xs, ys=ys, yserr=es, fit='linear')
def _poly_regress(self, r, x, y, ox, oy, index, fit, fod, apply_filter, scatter, selection): if hasattr(scatter, 'yerror'): es = scatter.yerror.get_data() if selection: es = delete(es, selection, 0) if r is None or not isinstance(r, WeightedPolynomialRegressor): r = WeightedPolynomialRegressor(yserr=es) else: if r is None or not isinstance(r, PolynomialRegressor): r = PolynomialRegressor() r.trait_set(xs=x, ys=y, degree=fit) if apply_filter: r = self._apply_outlier_filter(r, ox, oy, index, fod) return r
def _poly_regress(self, scatter, r, fit): if hasattr(scatter, 'yerror'): if r is None or not isinstance(r, WeightedPolynomialRegressor): r = WeightedPolynomialRegressor() else: if r is None or not isinstance(r, PolynomialRegressor): r = PolynomialRegressor() self._set_regressor(scatter, r) r.trait_set(degree=fit) r.set_truncate(scatter.truncate) r.calculate() if r.ys.shape[0] < fit + 1: return self._set_excluded(scatter, r) return r
def _poly_regress(self, scatter, r, fit): from pychron.core.regression.ols_regressor import PolynomialRegressor from pychron.core.regression.wls_regressor import WeightedPolynomialRegressor if hasattr(scatter, 'yerror') and any(scatter.yerror.get_data()): if r is None or not isinstance(r, WeightedPolynomialRegressor): r = WeightedPolynomialRegressor() else: if r is None or not isinstance(r, PolynomialRegressor): r = PolynomialRegressor() self._set_regressor(scatter, r) r.trait_set(degree=fit) r.set_truncate(scatter.truncate) if r.ys.shape[0] < fit + 1: return r.calculate() self._set_excluded(scatter, r) return r
def _get_regressor(self, fit, error_type, xs, ys, es): fit = fit.lower() if fit in ('linear', 'parabolic', 'cubic'): reg = WeightedPolynomialRegressor(fit=fit) elif fit in [ 'preceding', 'bracketing interpolate', 'bracketing average' ]: reg = InterpolationRegressor(kind=fit) elif fit == 'weighted mean': reg = WeightedMeanRegressor() else: print 'fit {} not valid'.format(fit) raise NotImplementedError mi = min(xs) xs = [xi - mi for xi in xs] reg.trait_set(error_type=error_type, xs=xs, ys=ys, yserr=es) reg.calculate() return reg
def _get_regressor(self, fit, error_type, xs, ys, es): fit=fit.lower() if fit in ('linear','parabolic','cubic'): reg = WeightedPolynomialRegressor(fit=fit) elif fit in ['preceding', 'bracketing interpolate', 'bracketing average']: reg = InterpolationRegressor(kind=fit) elif fit =='weighted mean': reg = WeightedMeanRegressor() else: print 'fit {} not valid'.format(fit) raise NotImplementedError mi= min(xs) xs=[xi-mi for xi in xs] reg.trait_set(error_type=error_type, xs=xs, ys=ys, yserr=es) reg.calculate() return reg