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)
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([])
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)
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)
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)
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)