Example #1
0
    def testCausalCumulativePeriods(self):
        """Tests whether model for response has correct coefficients."""

        # Fully set up a TBR object.
        tbr_model = tbr.TBR()
        target = self.key_response

        # Engineer some 'causal' costs in the cooldown period.
        data = self.data.copy()
        cool_index = data[self.key_period] == 2
        treat_index = data[self.key_group] == 2
        data.loc[(cool_index & treat_index), target] += 100.0

        tbr_model.fit(data,
                      target,
                      key_response=self.key_response,
                      key_cost=self.key_cost,
                      key_group=self.key_group,
                      key_period=self.key_period,
                      key_date=self.key_date)
        dist_test = tbr_model.causal_cumulative_distribution(periods=(1))
        dist_cool = tbr_model.causal_cumulative_distribution(periods=(1, 2))

        val_test = dist_test.mean()[-1]
        val_cool = dist_cool.mean()[-1]
        self.assertLessEqual(val_test, val_cool)
Example #2
0
    def testPeriodIndexFailsWithEmptyPeriods(self):
        """Tests making a period index for an empty iterable raises a ValueError."""

        # Fully set up a TBR object.
        tbr_model = tbr.TBR()
        target = self.key_response
        tbr_model.fit(self.data,
                      target,
                      key_response=self.key_response,
                      key_cost=self.key_cost,
                      key_group=self.key_group,
                      key_period=self.key_period,
                      key_date=self.key_date)

        with self.assertRaises(ValueError):
            tbr_model._make_period_index([])
Example #3
0
    def testPeriodIndexWorksForZero(self):
        """Tests making a period index for an empty iterable raises a ValueError."""

        # Fully set up a TBR object.
        tbr_model = tbr.TBR()
        target = self.key_response
        tbr_model.fit(self.data,
                      target,
                      key_response=self.key_response,
                      key_cost=self.key_cost,
                      key_group=self.key_group,
                      key_period=self.key_period,
                      key_date=self.key_date)

        num_in_period = sum(tbr_model.analysis_data[self.key_period] == 0)
        index_count = sum(tbr_model._make_period_index(0))
        self.assertEqual(index_count, num_in_period)
Example #4
0
    def testAnalysisDataGenerated(self):
        """Checks whether the salesandcost example data is available."""

        # Fully set up a TBR object.
        tbr_model = tbr.TBR()
        target = self.key_response
        tbr_model.fit(self.data,
                      target,
                      key_response=self.key_response,
                      key_cost=self.key_cost,
                      key_group=self.key_group,
                      key_period=self.key_period,
                      key_date=self.key_date)

        constructed_cols = set(tbr_model.analysis_data.keys())
        correct_cols = {target, self.key_period}

        self.assertCountEqual(constructed_cols, correct_cols)
Example #5
0
    def testSemanticsAvailable(self):
        """Check if semantics for the data are available."""

        # Fully set up a TBR object.
        tbr_model = tbr.TBR()
        target = self.key_response
        tbr_model.fit(self.data,
                      target,
                      key_response=self.key_response,
                      key_cost=self.key_cost,
                      key_group=self.key_group,
                      key_period=self.key_period,
                      key_date=self.key_date)

        # Check one member of each of the col names, group and period semantics.
        self.assertEqual(tbr_model.df_names.group, self.key_group)
        self.assertEqual(tbr_model.groups.treatment, self.groups.treatment)
        self.assertEqual(tbr_model.periods.cooldown, self.periods.cooldown)
Example #6
0
    def testResponseModelCorrect(self):
        """Tests whether model for response has correct coefficients."""

        # Fully set up a TBR object.
        tbr_model = tbr.TBR()
        target = self.key_response
        tbr_model.fit(self.data,
                      target,
                      key_response=self.key_response,
                      key_cost=self.key_cost,
                      key_group=self.key_group,
                      key_period=self.key_period,
                      key_date=self.key_date)

        # Extract slope coefficient from python model.
        response_coef_py = tbr_model.pre_period_model.params[1]

        # Slope coefficient under the R package.
        response_coef_r = 0.9997001

        self.assertAlmostEqual(response_coef_py, response_coef_r)