Skip to content

Commit 106c288

Browse files
committed
update plr page highlighting
1 parent 3ca44c7 commit 106c288

File tree

1 file changed

+95
-150
lines changed

1 file changed

+95
-150
lines changed

doc/plm/plr.qmd

Lines changed: 95 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -10,54 +10,16 @@ jupyter: python3
1010
import numpy as np
1111
import pandas as pd
1212
from 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

Comments
 (0)