def test_tc(modelfile, distfile):
    with open(modelfile, "r") as modelfp:
        model = DDPModel()
        model.init_from(modelfp, ',')
        
    with open(distfile, "r") as distfp:
        dist = DistributionModel()
        dist.init_from(distfp, ',')

    output = StringIO.StringIO()

    dist.apply_as_distribution(model).write(output, ',')
    print output.getvalue()

    output.close()
Beispiel #2
0
    def apply_as_distribution(self, model):
        if model.kind() == 'ddp_model':
            if len(model.xx) != len(self.yy):
                raise ValueError("Wrong number of values.")

            for ii in range(len(model.xx)):
                if model.get_xx()[ii] != self.get_yy()[ii]:
                    raise ValueError("Wrong values in distribution.")

            vv = self.lin_p().dot(model.lin_p())

            return DDPModel('ddp1',
                            'distribution',
                            self.xx_is_categorical,
                            self.get_xx(),
                            model.yy_is_categorical,
                            model.get_yy(),
                            vv,
                            scaled=self.scaled)

        elif model.kind() == 'spline_model':
            if len(model.xx) != len(self.yy):
                raise ValueError("Wrong number of values.")

            for ii in range(len(model.xx)):
                if model.get_xx()[ii] not in self.get_yy():
                    raise ValueError("Wrong values in distribution.")

            pp = self.lin_p()
            conditionals = []

            for ii in range(len(self.xx)):
                conds = []

                for jj in range(len(model.xx)):
                    original = model.get_conditional(model.get_xx()[jj])
                    conditional = SplineModelConditional(
                        original.y0s, original.y1s, original.coeffs)
                    conditional.scale(
                        pp[ii, self.get_yy().index(model.get_xx()[jj])])
                    conds.append(conditional)

                conditionals.append(
                    SplineModelConditional.approximate_sum(conds))

            return SplineModel(self.xx_is_categorical,
                               self.get_xx(),
                               conditionals,
                               scaled=self.scaled)

        else:
            raise ValueError("Unknown model type in apply_as_distribution")
Beispiel #3
0
import sys, StringIO
sys.path.append("../lib/models")

from model import Model
from ddp_model import DDPModel
from spline_model import SplineModel

mod1 = DDPModel.create_lin([0, 1], dict(control=[.5, .5], treatment=[0, 1]))
mod2 = DDPModel.create_lin([0, 1], dict(control=[.5, .5], treatment=[1, 0]))

def printmod(mod):
    output = StringIO.StringIO()
    mod.write(output, ',')
    print output.getvalue()

printmod(Model.combine([mod1, mod2], [.5, .5]))
printmod(Model.combine([mod1, mod2], [.25, 2]))

mod1 = SplineModel.create_gaussian(dict(control=(0, 1), treatment=(1, 1e-3)))
mod2 = SplineModel.create_gaussian(dict(control=(0, 1), treatment=(0, 1e-3)))

def printmod2(mod):
    output = StringIO.StringIO()
    mod.write_gaussian_plus(output, ',')
    print output.getvalue()

printmod2(Model.combine([mod1, mod2], [.5, .5]))
printmod2(Model.combine([mod1, mod2], [.25, 2]))
Beispiel #4
0
        model = BinModel(newmodels[0].get_xx(), allmodel)

        return model

    # Both models are BinModels
    @staticmethod
    def combine(one, two):
        if not one.scaled or not two.scaled:
            raise ValueError("Cannot combine unscaled models")

        (one, two, xx) = UnivariateModel.intersect_x(one, two)

        allxx = set(one.xx) | set(two.xx)
        allxx = np.array(allxx)
        midpts = (allxx[1:] + allxx[:-1]) / 2
        onemodel = one.model.recategorize_x(map(model.get_bin_at, midpts), range(1, len(allxx)))
        twomodel = two.model.recategorize_x(map(model.get_bin_at, midpts), range(1, len(allxx)))

        model = Model.combine([onemodel, twomodel], [1, 1])

        return BinModel(allxx, model, True)

from ddp_model import DDPModel

Model.mergers["bin_model"] = BinModel.merge
Model.mergers["bin_model+ddp_model"] = lambda models: DDPModel.merge(map(lambda m: m.to_ddp(), models))
Model.mergers["bin_model+spline_model"] = lambda models: DDPModel.merge(map(lambda m: m.to_ddp(), models))
Model.combiners['bin_model+bin_model'] = BinModel.combine
Model.combiners["bin_model+ddp_model"] = lambda one, two: DDPModel.combine(one.to_ddp(), two)
Model.combiners["bin_model+spline_model"] = lambda one, two: DDPModel.combine(one.to_ddp(), two)
Beispiel #5
0
        if not one.scaled or not two.scaled:
            raise ValueError("Cannot combine unscaled models")

        (one, two, xx) = UnivariateModel.intersect_x(one, two)

        allxx = set(one.xx) | set(two.xx)
        allxx = np.array(allxx)
        midpts = (allxx[1:] + allxx[:-1]) / 2
        onemodel = one.model.recategorize_x(map(model.get_bin_at, midpts),
                                            range(1, len(allxx)))
        twomodel = two.model.recategorize_x(map(model.get_bin_at, midpts),
                                            range(1, len(allxx)))

        model = Model.combine([onemodel, twomodel], [1, 1])

        return BinModel(allxx, model, True)


from ddp_model import DDPModel

Model.mergers["bin_model"] = BinModel.merge
Model.mergers["bin_model+ddp_model"] = lambda models: DDPModel.merge(
    map(lambda m: m.to_ddp(), models))
Model.mergers["bin_model+spline_model"] = lambda models: DDPModel.merge(
    map(lambda m: m.to_ddp(), models))
Model.combiners['bin_model+bin_model'] = BinModel.combine
Model.combiners["bin_model+ddp_model"] = lambda one, two: DDPModel.combine(
    one.to_ddp(), two)
Model.combiners["bin_model+spline_model"] = lambda one, two: DDPModel.combine(
    one.to_ddp(), two)
Beispiel #6
0
import sys, StringIO
sys.path.append("../lib/models")

from model import Model
from ddp_model import DDPModel
from spline_model import SplineModel

mod1 = DDPModel.create_lin([0, 1], dict(control=[.5, .5], treatment=[0, 1]))
mod2 = DDPModel.create_lin([0, 1], dict(control=[.5, .5], treatment=[1, 0]))


def printmod(mod):
    output = StringIO.StringIO()
    mod.write(output, ',')
    print output.getvalue()


printmod(Model.combine([mod1, mod2], [.5, .5]))
printmod(Model.combine([mod1, mod2], [.25, 2]))

mod1 = SplineModel.create_gaussian(dict(control=(0, 1), treatment=(1, 1e-3)))
mod2 = SplineModel.create_gaussian(dict(control=(0, 1), treatment=(0, 1e-3)))


def printmod2(mod):
    output = StringIO.StringIO()
    mod.write_gaussian_plus(output, ',')
    print output.getvalue()


printmod2(Model.combine([mod1, mod2], [.5, .5]))