@@ -10,54 +10,16 @@ jupyter: python3
1010import numpy as np
1111import pandas as pd
1212from itables import init_notebook_mode, show, options
13+ import os
14+ import sys
1315
14- init_notebook_mode(all_interactive=True)
16+ doc_dir = os.path.abspath(os.path.join(os.getcwd(), ".."))
17+ if doc_dir not in sys.path:
18+ sys.path.append(doc_dir)
19+
20+ from utils.style_tables import create_styled_table
1521
16- def highlight_range(s, level=0.95, dist=0.05, props=''):
17- color_grid = np.where((s >= level-dist) &
18- (s <= level+dist), props, '')
19- return color_grid
20-
21-
22- def color_coverage(df, level):
23- # color coverage column order is important
24- styled_df = df.apply(
25- highlight_range,
26- level=level,
27- dist=1.0,
28- props='color:black;background-color:red',
29- subset=["Coverage"])
30- styled_df = styled_df.apply(
31- highlight_range,
32- level=level,
33- dist=0.1,
34- props='color:black;background-color:yellow',
35- subset=["Coverage"])
36- styled_df = styled_df.apply(
37- highlight_range,
38- level=level,
39- dist=0.05,
40- props='color:white;background-color:darkgreen',
41- subset=["Coverage"])
42-
43- # set all coverage values to bold
44- styled_df = styled_df.set_properties(
45- **{'font-weight': 'bold'},
46- subset=["Coverage"])
47- return styled_df
48-
49-
50- def make_pretty(df, level, n_rep):
51- styled_df = df.style.hide(axis="index")
52- # Format only float columns
53- float_cols = df.select_dtypes(include=['float']).columns
54- styled_df = styled_df.format({col: "{:.3f}" for col in float_cols})
55-
56- # color coverage column order is important
57- styled_df = color_coverage(styled_df, level)
58- caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions"
59-
60- return show(styled_df, caption=caption, allow_html=True)
22+ init_notebook_mode(all_interactive=True)
6123```
6224
6325## ATE Coverage
@@ -79,34 +41,41 @@ print(metadata_df.T.to_string(header=False))
7941#| echo: false
8042
8143# set up data and rename columns
82- df = pd.read_csv("../../results/plm/plr_ate_coverage.csv", index_col=None)
44+ df_coverage = pd.read_csv("../../results/plm/plr_ate_coverage.csv", index_col=None)
8345
84- assert df["repetition"].nunique() == 1
85- n_rep = df["repetition"].unique()[0]
46+ if "repetition" in df_coverage.columns and df_coverage["repetition"].nunique() == 1:
47+ n_rep_coverage = df_coverage["repetition"].unique()[0]
48+ elif "n_rep" in df_coverage.columns and df_coverage["n_rep"].nunique() == 1:
49+ n_rep_coverage = df_coverage["n_rep"].unique()[0]
50+ else:
51+ n_rep_coverage = "N/A" # Fallback if n_rep cannot be determined
8652
87- display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"]
53+ display_columns_coverage = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"]
8854```
8955
9056### Partialling out
9157
9258``` {python}
9359# | echo: false
94- score = "partialling out"
95- level = 0.95
60+ score_po = "partialling out"
61+ level_95 = 0.95
9662
97- df_ate_95 = df[(df["level"] == level) & (df["score"] == score)][display_columns]
98- df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True)
99- make_pretty(df_ate_95, level, n_rep)
63+ df_po_95 = df_coverage[(df_coverage["level"] == level_95) & (df_coverage["score"] == score_po)][display_columns_coverage].copy()
64+ df_po_95.rename(columns={"Learner g": "Learner l"}, inplace=True)
65+
66+ styled_table_po_95 = create_styled_table(df_po_95, level_95, n_rep_coverage, coverage_cols=["Coverage"])
67+ show(styled_table_po_95, allow_html=True)
10068```
10169
10270``` {python}
10371#| echo: false
104- score = "partialling out"
105- level = 0.9
72+ level_90 = 0.9
73+
74+ df_po_90 = df_coverage[(df_coverage['level'] == level_90) & (df_coverage["score"] == score_po)][display_columns_coverage].copy()
75+ df_po_90.rename(columns={"Learner g": "Learner l"}, inplace=True)
10676
107- df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns]
108- df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True)
109- make_pretty(df_ate_9, level, n_rep)
77+ styled_table_po_90 = create_styled_table(df_po_90, level_90, n_rep_coverage, coverage_cols=["Coverage"])
78+ show(styled_table_po_90, allow_html=True)
11079```
11180
11281### IV-type
@@ -115,20 +84,23 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t
11584
11685``` {python}
11786#| echo: false
118- score = "IV-type"
119- level = 0.95
87+ score_iv = "IV-type"
88+ # level_95 is already defined
89+
90+ df_iv_95 = df_coverage[(df_coverage['level'] == level_95) & (df_coverage["score"] == score_iv)][display_columns_coverage]
12091
121- df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns]
122- make_pretty(df_ate_95, level, n_rep )
92+ styled_table_iv_95 = create_styled_table(df_iv_95, level_95, n_rep_coverage, coverage_cols=["Coverage"])
93+ show(styled_table_iv_95, allow_html=True )
12394```
12495
12596``` {python}
12697#| echo: false
127- score = "IV-type"
128- level = 0.9
98+ # level_90 is already defined
12999
130- df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns]
131- make_pretty(df_ate_9, level, n_rep)
100+ df_iv_90 = df_coverage[(df_coverage['level'] == level_90) & (df_coverage["score"] == score_iv)][display_columns_coverage]
101+
102+ styled_table_iv_90 = create_styled_table(df_iv_90, level_90, n_rep_coverage, coverage_cols=["Coverage"])
103+ show(styled_table_iv_90, allow_html=True)
132104```
133105
134106## ATE Sensitivity
@@ -142,9 +114,9 @@ Further, the corresponding confidence intervals are one-sided (since the directi
142114
143115``` {python}
144116#| echo: false
145- metadata_file = '../../results/plm/plr_ate_sensitivity_metadata.csv'
146- metadata_df = pd.read_csv(metadata_file )
147- print(metadata_df .T.to_string(header=False))
117+ metadata_file_sens = '../../results/plm/plr_ate_sensitivity_metadata.csv'
118+ metadata_df_sens = pd.read_csv(metadata_file_sens )
119+ print(metadata_df_sens .T.to_string(header=False))
148120```
149121
150122:::
@@ -153,91 +125,52 @@ print(metadata_df.T.to_string(header=False))
153125#| echo: false
154126
155127# set up data and rename columns
156- df = pd.read_csv("../../results/plm/plr_ate_sensitivity.csv", index_col=None)
128+ df_sensitivity = pd.read_csv("../../results/plm/plr_ate_sensitivity.csv", index_col=None)
157129
158- assert df["repetition"].nunique() == 1
159- n_rep = df["repetition"].unique()[0]
130+ if "repetition" in df_sensitivity.columns and df_sensitivity["repetition"].nunique() == 1:
131+ n_rep_sensitivity = df_sensitivity["repetition"].unique()[0]
132+ elif "n_rep" in df_sensitivity.columns and df_sensitivity["n_rep"].nunique() == 1:
133+ n_rep_sensitivity = df_sensitivity["n_rep"].unique()[0]
134+ else:
135+ n_rep_sensitivity = "N/A"
160136
161- display_columns = [
137+ display_columns_sensitivity = [
162138 "Learner g", "Learner m", "Bias", "Bias (Lower)", "Bias (Upper)", "Coverage", "Coverage (Lower)", "Coverage (Upper)", "RV", "RVa"]
163139```
164140
165- ``` {python}
166- #| echo: false
167-
168- import numpy as np
169- import pandas as pd
170- from itables import init_notebook_mode, show, options
171-
172- init_notebook_mode(all_interactive=True)
173-
174- def highlight_range(s, level=0.95, dist=0.05, props=''):
175- color_grid = np.where((s >= level-dist) &
176- (s <= level+dist), props, '')
177- return color_grid
178-
179-
180- def color_coverage(df, level):
181- # color coverage column order is important
182- styled_df = df.apply(
183- highlight_range,
184- level=level,
185- dist=1.0,
186- props='color:black;background-color:red',
187- subset=["Coverage", "Coverage (Upper)"])
188- styled_df = styled_df.apply(
189- highlight_range,
190- level=level,
191- dist=0.1,
192- props='color:black;background-color:yellow',
193- subset=["Coverage", "Coverage (Upper)"])
194- styled_df = styled_df.apply(
195- highlight_range,
196- level=level,
197- dist=0.05,
198- props='color:white;background-color:darkgreen',
199- subset=["Coverage", "Coverage (Upper)"])
200-
201- # set all coverage values to bold
202- styled_df = styled_df.set_properties(
203- **{'font-weight': 'bold'},
204- subset=["Coverage", "Coverage (Upper)"])
205- return styled_df
206-
207-
208- def make_pretty(df, level, n_rep):
209- styled_df = df.style.hide(axis="index")
210- # Format only float columns
211- float_cols = df.select_dtypes(include=['float']).columns
212- styled_df = styled_df.format({col: "{:.3f}" for col in float_cols})
213-
214- # color coverage column order is important
215- styled_df = color_coverage(styled_df, level)
216- caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions"
217-
218- return show(styled_df, caption=caption, allow_html=True)
219- ```
220141
221142### Partialling out
222143
223144``` {python}
224145#| echo: false
225- score = "partialling out"
226- level = 0.95
227-
228- df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns]
229- df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True)
230- make_pretty(df_ate_95, level, n_rep)
146+ # score_po and level_95 are defined above
147+
148+ df_sens_po_95 = df_sensitivity[(df_sensitivity['level'] == level_95) & (df_sensitivity["score"] == score_po)][display_columns_sensitivity].copy()
149+ df_sens_po_95.rename(columns={"Learner g": "Learner l"}, inplace=True)
150+
151+ styled_sens_po_95 = create_styled_table(
152+ df_sens_po_95,
153+ level_95,
154+ n_rep_sensitivity,
155+ coverage_cols=["Coverage", "Coverage (Upper)"] # Highlight both
156+ )
157+ show(styled_sens_po_95, allow_html=True)
231158```
232159
233160``` {python}
234161#| echo: false
235- score = "partialling out"
236- level = 0.9
237-
238- df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns]
239- df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True)
240- make_pretty(df_ate_9, level, n_rep)
162+ # score_po and level_90 are defined above
163+
164+ df_sens_po_90 = df_sensitivity[(df_sensitivity['level'] == level_90) & (df_sensitivity["score"] == score_po)][display_columns_sensitivity].copy()
165+ df_sens_po_90.rename(columns={"Learner g": "Learner l"}, inplace=True)
166+
167+ styled_sens_po_90 = create_styled_table(
168+ df_sens_po_90,
169+ level_90,
170+ n_rep_sensitivity,
171+ coverage_cols=["Coverage", "Coverage (Upper)"]
172+ )
173+ show(styled_sens_po_90, allow_html=True)
241174```
242175
243176### IV-type
@@ -246,18 +179,30 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t
246179
247180``` {python}
248181#| echo: false
249- score = "IV-type"
250- level = 0.95
182+ # score_iv and level_95 are defined above
251183
252- df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns]
253- make_pretty(df_ate_95, level, n_rep)
184+ df_sens_iv_95 = df_sensitivity[(df_sensitivity['level'] == level_95) & (df_sensitivity["score"] == score_iv)][display_columns_sensitivity]
185+
186+ styled_sens_iv_95 = create_styled_table(
187+ df_sens_iv_95,
188+ level_95,
189+ n_rep_sensitivity,
190+ coverage_cols=["Coverage", "Coverage (Upper)"]
191+ )
192+ show(styled_sens_iv_95, allow_html=True)
254193```
255194
256195``` {python}
257196#| echo: false
258- score = "IV-type"
259- level = 0.9
197+ # score_iv and level_90 are defined above
198+
199+ df_sens_iv_90 = df_sensitivity[(df_sensitivity['level'] == level_90) & (df_sensitivity["score"] == score_iv)][display_columns_sensitivity]
260200
261- df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns]
262- make_pretty(df_ate_9, level, n_rep)
201+ styled_sens_iv_90 = create_styled_table(
202+ df_sens_iv_90,
203+ level_90,
204+ n_rep_sensitivity,
205+ coverage_cols=["Coverage", "Coverage (Upper)"]
206+ )
207+ show(styled_sens_iv_90, allow_html=True)
263208```
0 commit comments