예제 #1
0
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()
예제 #2
0
    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')
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
    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
예제 #8
0
    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
예제 #9
0
    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