@@ -76,40 +76,44 @@ class TestLogisticRegressionEstimator(unittest.TestCase):
76
76
77
77
@classmethod
78
78
def setUpClass (cls ) -> None :
79
- cls .scarf_df = pd .DataFrame (
80
- [
81
- {"length_in" : 55 , "completed" : 1 },
82
- {"length_in" : 55 , "completed" : 1 },
83
- {"length_in" : 55 , "completed" : 1 },
84
- {"length_in" : 60 , "completed" : 1 },
85
- {"length_in" : 60 , "completed" : 0 },
86
- {"length_in" : 70 , "completed" : 1 },
87
- {"length_in" : 70 , "completed" : 0 },
88
- {"length_in" : 82 , "completed" : 1 },
89
- {"length_in" : 82 , "completed" : 0 },
90
- {"length_in" : 82 , "completed" : 0 },
91
- {"length_in" : 82 , "completed" : 0 },
92
- ]
93
- )
79
+ cls .scarf_df = pd .DataFrame ([
80
+ { 'length_in' : 55 , 'large_gauge' : 1 , 'color' : 'orange' , 'completed' : 1 },
81
+ { 'length_in' : 55 , 'large_gauge' : 0 , 'color' : 'orange' , 'completed' : 1 },
82
+ { 'length_in' : 55 , 'large_gauge' : 0 , 'color' : 'brown' , 'completed' : 1 },
83
+ { 'length_in' : 60 , 'large_gauge' : 0 , 'color' : 'brown' , 'completed' : 1 },
84
+ { 'length_in' : 60 , 'large_gauge' : 0 , 'color' : 'grey' , 'completed' : 0 },
85
+ { 'length_in' : 70 , 'large_gauge' : 0 , 'color' : 'grey' , 'completed' : 1 },
86
+ { 'length_in' : 70 , 'large_gauge' : 0 , 'color' : 'orange' , 'completed' : 0 },
87
+ { 'length_in' : 82 , 'large_gauge' : 1 , 'color' : 'grey' , 'completed' : 1 },
88
+ { 'length_in' : 82 , 'large_gauge' : 0 , 'color' : 'brown' , 'completed' : 0 },
89
+ { 'length_in' : 82 , 'large_gauge' : 0 , 'color' : 'orange' , 'completed' : 0 },
90
+ { 'length_in' : 82 , 'large_gauge' : 1 , 'color' : 'brown' , 'completed' : 0 },
91
+ ])
94
92
95
93
def test_ate (self ):
96
- df = self .scarf_df
94
+ df = self .scarf_df . copy ()
97
95
logistic_regression_estimator = LogisticRegressionEstimator ("length_in" , 65 , 55 , set (), "completed" , df )
98
96
ate , _ = logistic_regression_estimator .estimate_ate ()
99
97
self .assertEqual (round (ate , 4 ), - 0.1987 )
100
98
101
99
def test_risk_ratio (self ):
102
- df = self .scarf_df
100
+ df = self .scarf_df . copy ()
103
101
logistic_regression_estimator = LogisticRegressionEstimator ("length_in" , 65 , 55 , set (), "completed" , df )
104
102
rr , _ = logistic_regression_estimator .estimate_risk_ratio ()
105
103
self .assertEqual (round (rr , 4 ), 0.7664 )
106
104
107
105
def test_odds_ratio (self ):
108
- df = self .scarf_df
106
+ df = self .scarf_df . copy ()
109
107
logistic_regression_estimator = LogisticRegressionEstimator ("length_in" , 65 , 55 , set (), "completed" , df )
110
108
odds = logistic_regression_estimator .estimate_unit_odds_ratio ()
111
109
self .assertEqual (round (odds , 4 ), 0.8948 )
112
110
111
+ def test_ate_effect_modifiers (self ):
112
+ df = self .scarf_df .copy ()
113
+ logistic_regression_estimator = LogisticRegressionEstimator ("length_in" , 65 , 55 , set (), "completed" , df , effect_modifiers = {"large_gauge" : 0 })
114
+ ate , _ = logistic_regression_estimator .estimate_ate ()
115
+ self .assertEqual (round (ate , 4 ), - 0.3388 )
116
+
113
117
114
118
class TestInstrumentalVariableEstimator (unittest .TestCase ):
115
119
"""
@@ -368,7 +372,7 @@ def test_program_15_ate(self):
368
372
"smokeyrs" ,
369
373
}
370
374
causal_forest = CausalForestEstimator (
371
- "qsmk" , 1 , 0 , covariates , "wt82_71" , df , {Input ( "smokeintensity" , int ) : 40 }
375
+ "qsmk" , 1 , 0 , covariates , "wt82_71" , df , {"smokeintensity" : 40 }
372
376
)
373
377
ate , _ = causal_forest .estimate_ate ()
374
378
self .assertGreater (round (ate , 1 ), 2.5 )
@@ -395,7 +399,7 @@ def test_program_15_cate(self):
395
399
"smokeyrs" ,
396
400
}
397
401
causal_forest = CausalForestEstimator (
398
- "qsmk" , 1 , 0 , covariates , "wt82_71" , smoking_intensity_5_and_40_df , {Input ( "smokeintensity" , int ) : 40 }
402
+ "qsmk" , 1 , 0 , covariates , "wt82_71" , smoking_intensity_5_and_40_df , {"smokeintensity" : 40 }
399
403
)
400
404
cates_df , _ = causal_forest .estimate_cates ()
401
405
self .assertGreater (cates_df ["cate" ].mean (), 0 )
@@ -415,7 +419,7 @@ def test_X1_effect(self):
415
419
"""When we fix the value of X2 to 0, the effect of X1 on Y should become ~2 (because X2 terms are cancelled)."""
416
420
x2 = Input ("X2" , float )
417
421
lr_model = LinearRegressionEstimator (
418
- "X1" , 1 , 0 , {"X2" }, "Y" , effect_modifiers = {x2 : 0 }, formula = "Y ~ X1 + X2 + (X1 * X2)" , df = self .df
422
+ "X1" , 1 , 0 , {"X2" }, "Y" , effect_modifiers = {x2 . name : 0 }, formula = "Y ~ X1 + X2 + (X1 * X2)" , df = self .df
419
423
)
420
424
test_results = lr_model .estimate_ate ()
421
425
ate = test_results [0 ]
0 commit comments