@@ -123,3 +123,38 @@ def test_idata_property():
123
123
)
124
124
assert hasattr (result , "idata" )
125
125
assert isinstance (result .idata , az .InferenceData )
126
+
127
+
128
+ def test_result_reproducibility ():
129
+ """Test that we can reproduce the results from the model. We could in theory test
130
+ this with all the model and experiment types, but what is being targetted is
131
+ the ModelBuilder.fit method, so we should be safe testing with just one model. Here
132
+ we use the DifferenceInDifferences experiment class."""
133
+ # Load the data
134
+ df = cp .load_data ("did" )
135
+ # Set a random seed
136
+ sample_kwargs ["random_seed" ] = 42
137
+ # Calculate the result twice
138
+ result1 = cp .pymc_experiments .DifferenceInDifferences (
139
+ df ,
140
+ formula = "y ~ 1 + group + t + group:post_treatment" ,
141
+ time_variable_name = "t" ,
142
+ group_variable_name = "group" ,
143
+ treated = 1 ,
144
+ untreated = 0 ,
145
+ model = cp .pymc_models .LinearRegression (sample_kwargs = sample_kwargs ),
146
+ )
147
+ result2 = cp .pymc_experiments .DifferenceInDifferences (
148
+ df ,
149
+ formula = "y ~ 1 + group + t + group:post_treatment" ,
150
+ time_variable_name = "t" ,
151
+ group_variable_name = "group" ,
152
+ treated = 1 ,
153
+ untreated = 0 ,
154
+ model = cp .pymc_models .LinearRegression (sample_kwargs = sample_kwargs ),
155
+ )
156
+ assert np .all (result1 .idata .posterior .mu == result2 .idata .posterior .mu )
157
+ assert np .all (result1 .idata .prior .mu == result2 .idata .prior .mu )
158
+ assert np .all (
159
+ result1 .idata .prior_predictive .y_hat == result2 .idata .prior_predictive .y_hat
160
+ )
0 commit comments