Skip to content

Commit bc82d00

Browse files
committed
add summary to GATE and CATE example
1 parent ba3f505 commit bc82d00

File tree

3 files changed

+619
-737
lines changed

3 files changed

+619
-737
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*idea

doc/examples/py_double_ml_cate.ipynb

Lines changed: 528 additions & 639 deletions
Large diffs are not rendered by default.

doc/examples/py_double_ml_gate.ipynb

Lines changed: 90 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88
"In this simple example, we illustrate how the [DoubleML](https://docs.doubleml.org/stable/index.html) package can be used to estimate group average treatment effects."
99
],
1010
"metadata": {
11-
"collapsed": false,
12-
"pycharm": {
13-
"name": "#%% md\n"
14-
}
11+
"collapsed": false
1512
}
1613
},
1714
{
@@ -22,20 +19,14 @@
2219
"The data will be generated with a simple data generating process to enable us to know the true group effects."
2320
],
2421
"metadata": {
25-
"collapsed": false,
26-
"pycharm": {
27-
"name": "#%% md\n"
28-
}
22+
"collapsed": false
2923
}
3024
},
3125
{
3226
"cell_type": "code",
3327
"execution_count": 1,
3428
"metadata": {
35-
"collapsed": true,
36-
"pycharm": {
37-
"name": "#%%\n"
38-
}
29+
"collapsed": true
3930
},
4031
"outputs": [],
4132
"source": [
@@ -51,10 +42,7 @@
5142
"For simplicity, the treatment effect within each group is generated to be constant, such that it corresponds to the group average treatment effect."
5243
],
5344
"metadata": {
54-
"collapsed": false,
55-
"pycharm": {
56-
"name": "#%% md\n"
57-
}
45+
"collapsed": false
5846
}
5947
},
6048
{
@@ -72,10 +60,7 @@
7260
" return te"
7361
],
7462
"metadata": {
75-
"collapsed": false,
76-
"pycharm": {
77-
"name": "#%%\n"
78-
}
63+
"collapsed": false
7964
}
8065
},
8166
{
@@ -100,10 +85,7 @@
10085
" \\end{cases}.$$"
10186
],
10287
"metadata": {
103-
"collapsed": false,
104-
"pycharm": {
105-
"name": "#%% md\n"
106-
}
88+
"collapsed": false
10789
}
10890
},
10991
{
@@ -169,10 +151,7 @@
169151
" return data, covariates"
170152
],
171153
"metadata": {
172-
"collapsed": false,
173-
"pycharm": {
174-
"name": "#%%\n"
175-
}
154+
"collapsed": false
176155
}
177156
},
178157
{
@@ -181,10 +160,7 @@
181160
"We will consider a quite small number of covariates to ensure fast calcualtion."
182161
],
183162
"metadata": {
184-
"collapsed": false,
185-
"pycharm": {
186-
"name": "#%% md\n"
187-
}
163+
"collapsed": false
188164
}
189165
},
190166
{
@@ -206,10 +182,7 @@
206182
" x_cols=covariates)"
207183
],
208184
"metadata": {
209-
"collapsed": false,
210-
"pycharm": {
211-
"name": "#%%\n"
212-
}
185+
"collapsed": false
213186
}
214187
},
215188
{
@@ -219,10 +192,7 @@
219192
"The first step is to fit a [DoubleML IRM Model](https://docs.doubleml.org/stable/guide/models.html#interactive-regression-model-irm) to the data."
220193
],
221194
"metadata": {
222-
"collapsed": false,
223-
"pycharm": {
224-
"name": "#%% md\n"
225-
}
195+
"collapsed": false
226196
}
227197
},
228198
{
@@ -238,7 +208,7 @@
238208
},
239209
{
240210
"data": {
241-
"text/plain": "<doubleml.double_ml_irm.DoubleMLIRM at 0x25f62a87430>"
211+
"text/plain": "<doubleml.double_ml_irm.DoubleMLIRM at 0x2ca8ff66a40>"
242212
},
243213
"execution_count": 5,
244214
"metadata": {},
@@ -262,10 +232,7 @@
262232
"dml_irm.fit(store_predictions=True)"
263233
],
264234
"metadata": {
265-
"collapsed": false,
266-
"pycharm": {
267-
"name": "#%%\n"
268-
}
235+
"collapsed": false
269236
}
270237
},
271238
{
@@ -275,10 +242,7 @@
275242
"Next, we can specify the groups as [DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) with boolean columns."
276243
],
277244
"metadata": {
278-
"collapsed": false,
279-
"pycharm": {
280-
"name": "#%% md\n"
281-
}
245+
"collapsed": false
282246
}
283247
},
284248
{
@@ -292,10 +256,7 @@
292256
" columns=['Group 1', 'Group 2', 'Group 3'])"
293257
],
294258
"metadata": {
295-
"collapsed": false,
296-
"pycharm": {
297-
"name": "#%%\n"
298-
}
259+
"collapsed": false
299260
}
300261
},
301262
{
@@ -316,10 +277,7 @@
316277
"groups.head()"
317278
],
318279
"metadata": {
319-
"collapsed": false,
320-
"pycharm": {
321-
"name": "#%%\n"
322-
}
280+
"collapsed": false
323281
}
324282
},
325283
{
@@ -328,10 +286,7 @@
328286
"To calculate GATEs just call the ``gate()`` method and supply the DataFrame with the group definitions and the ``level`` (with default of ``0.95``)."
329287
],
330288
"metadata": {
331-
"collapsed": false,
332-
"pycharm": {
333-
"name": "#%% md\n"
334-
}
289+
"collapsed": false
335290
}
336291
},
337292
{
@@ -354,10 +309,7 @@
354309
"print(gate.confint(level=0.95))"
355310
],
356311
"metadata": {
357-
"collapsed": false,
358-
"pycharm": {
359-
"name": "#%%\n"
360-
}
312+
"collapsed": false
361313
}
362314
},
363315
{
@@ -366,10 +318,7 @@
366318
"The confidence intervals above are point-wise, but by setting the option ``joint`` and providing a number of bootstrap repetitions ``n_rep_boot``."
367319
],
368320
"metadata": {
369-
"collapsed": false,
370-
"pycharm": {
371-
"name": "#%% md\n"
372-
}
321+
"collapsed": false
373322
}
374323
},
375324
{
@@ -392,10 +341,7 @@
392341
"print(ci)"
393342
],
394343
"metadata": {
395-
"collapsed": false,
396-
"pycharm": {
397-
"name": "#%%\n"
398-
}
344+
"collapsed": false
399345
}
400346
},
401347
{
@@ -404,10 +350,7 @@
404350
"Finally, let us plot the estimates together with the true effect within each group."
405351
],
406352
"metadata": {
407-
"collapsed": false,
408-
"pycharm": {
409-
"name": "#%% md\n"
410-
}
353+
"collapsed": false
411354
}
412355
},
413356
{
@@ -444,12 +387,9 @@
444387
],
445388
"metadata": {
446389
"collapsed": false,
447-
"pycharm": {
448-
"name": "#%%\n"
449-
},
450390
"tags": [
451-
"nbsphinx-thumbnail"
452-
]
391+
"nbsphinx-thumbnail"
392+
]
453393
}
454394
},
455395
{
@@ -458,10 +398,7 @@
458398
"It is also possible to supply disjoint groups as a single vector (still as a data frame). Remark the slightly different name."
459399
],
460400
"metadata": {
461-
"collapsed": false,
462-
"pycharm": {
463-
"name": "#%% md\n"
464-
}
401+
"collapsed": false
465402
}
466403
},
467404
{
@@ -491,10 +428,7 @@
491428
"groups.head()"
492429
],
493430
"metadata": {
494-
"collapsed": false,
495-
"pycharm": {
496-
"name": "#%%\n"
497-
}
431+
"collapsed": false
498432
}
499433
},
500434
{
@@ -518,10 +452,71 @@
518452
"print(ci)"
519453
],
520454
"metadata": {
521-
"collapsed": false,
522-
"pycharm": {
523-
"name": "#%%\n"
455+
"collapsed": false
456+
}
457+
},
458+
{
459+
"cell_type": "markdown",
460+
"source": [
461+
"The coefficients of the best linear predictor can be seen via the summary (the values can be accessed through the underlying model ``.blp_model``)."
462+
],
463+
"metadata": {
464+
"collapsed": false
465+
}
466+
},
467+
{
468+
"cell_type": "code",
469+
"execution_count": 32,
470+
"outputs": [
471+
{
472+
"data": {
473+
"text/plain": " coef std err t P>|t| [0.025 0.975]\nGroup_1 3.126939 0.149758 20.879973 5.621183e-70 2.832703 3.421176\nGroup_2 1.234062 0.142020 8.689369 5.300034e-17 0.955029 1.513095\nGroup_3 0.026815 0.117683 0.227859 8.198497e-01 -0.204402 0.258032",
474+
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>coef</th>\n <th>std err</th>\n <th>t</th>\n <th>P&gt;|t|</th>\n <th>[0.025</th>\n <th>0.975]</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Group_1</th>\n <td>3.126939</td>\n <td>0.149758</td>\n <td>20.879973</td>\n <td>5.621183e-70</td>\n <td>2.832703</td>\n <td>3.421176</td>\n </tr>\n <tr>\n <th>Group_2</th>\n <td>1.234062</td>\n <td>0.142020</td>\n <td>8.689369</td>\n <td>5.300034e-17</td>\n <td>0.955029</td>\n <td>1.513095</td>\n </tr>\n <tr>\n <th>Group_3</th>\n <td>0.026815</td>\n <td>0.117683</td>\n <td>0.227859</td>\n <td>8.198497e-01</td>\n <td>-0.204402</td>\n <td>0.258032</td>\n </tr>\n </tbody>\n</table>\n</div>"
475+
},
476+
"execution_count": 32,
477+
"metadata": {},
478+
"output_type": "execute_result"
479+
}
480+
],
481+
"source": [
482+
"gate.summary"
483+
],
484+
"metadata": {
485+
"collapsed": false
486+
}
487+
},
488+
{
489+
"cell_type": "markdown",
490+
"source": [
491+
"Remark that the confidence intervals are slightly smaller, since they are not based on the White's heteroskedasticity robus standard errors."
492+
],
493+
"metadata": {
494+
"collapsed": false
495+
}
496+
},
497+
{
498+
"cell_type": "code",
499+
"execution_count": 33,
500+
"outputs": [
501+
{
502+
"name": "stdout",
503+
"output_type": "stream",
504+
"text": [
505+
"================== DoubleMLBLP Object ==================\n",
506+
"\n",
507+
"------------------ Fit summary ------------------\n",
508+
" coef std err t P>|t| [0.025 0.975]\n",
509+
"Group_1 3.126939 0.149758 20.879973 5.621183e-70 2.832703 3.421176\n",
510+
"Group_2 1.234062 0.142020 8.689369 5.300034e-17 0.955029 1.513095\n",
511+
"Group_3 0.026815 0.117683 0.227859 8.198497e-01 -0.204402 0.258032\n"
512+
]
524513
}
514+
],
515+
"source": [
516+
"print(gate)"
517+
],
518+
"metadata": {
519+
"collapsed": false
525520
}
526521
},
527522
{
@@ -552,10 +547,7 @@
552547
"_ = plt.ylabel('Effect and 95%-CI')"
553548
],
554549
"metadata": {
555-
"collapsed": false,
556-
"pycharm": {
557-
"name": "#%%\n"
558-
}
550+
"collapsed": false
559551
}
560552
}
561553
],
@@ -580,4 +572,4 @@
580572
},
581573
"nbformat": 4,
582574
"nbformat_minor": 0
583-
}
575+
}

0 commit comments

Comments
 (0)