Skip to content

Commit e3a4364

Browse files
committed
Modfiy task for fit AR model so that relevant output is also saved as an .tex file.
1 parent 474a67e commit e3a4364

File tree

1 file changed

+41
-21
lines changed

1 file changed

+41
-21
lines changed

src/lennart_epp/analysis/task_fit_ar_model.py

Lines changed: 41 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,50 @@
77
def task_evaluate_ar_models(
88
script=SRC / "analysis" / "evaluate_ar_model.py",
99
data=BLD / "data" / "cleaned_apple_data.pkl",
10-
produces=BLD / "models" / "ar_model_evaluation.pkl",
10+
produces=(
11+
BLD / "models" / "ar_model_evaluation.pkl",
12+
BLD / "models" / "top_models.tex",
13+
),
1114
max_p=15,
1215
criterion="aic",
1316
):
14-
"""Evaluate AR(p) models and save top models and metrics."""
1517
df = pd.read_pickle(data)
16-
1718
evaluation_results = evaluate_ar_models(df, max_p=max_p, criterion=criterion)
1819

19-
top_models_data = evaluation_results.get("top_models", [])
20-
metrics_data = evaluation_results.get("model_metrics", [])
21-
metadata_data = evaluation_results.get("metadata", {})
22-
23-
top_models_df = pd.DataFrame(top_models_data) if top_models_data else pd.DataFrame()
24-
metrics_df = pd.DataFrame(metrics_data) if metrics_data else pd.DataFrame()
25-
metadata_df = pd.DataFrame([metadata_data]) if metadata_data else pd.DataFrame()
26-
27-
results = {
28-
"top_models": top_models_df,
29-
"model_metrics": metrics_df,
30-
"metadata": metadata_df,
31-
}
32-
33-
produces.parent.mkdir(parents=True, exist_ok=True)
34-
pd.to_pickle(results, produces)
35-
36-
assert produces.exists(), f"❌ Failed to produce {produces}"
20+
produces[0].parent.mkdir(parents=True, exist_ok=True)
21+
pd.to_pickle(evaluation_results, produces[0])
22+
assert produces[0].exists(), f"❌ Failed to produce {produces[0]}"
23+
24+
top_models_df = pd.DataFrame(evaluation_results.get("top_models", []))
25+
26+
if not top_models_df.empty:
27+
latex_table = top_models_df.drop(
28+
columns=["coefficients", "integrated_coefficients"], errors="ignore"
29+
)
30+
31+
expected_columns = ["p", "aic", "bic", "p_value", "differenced"]
32+
latex_table = latex_table[
33+
[col for col in expected_columns if col in latex_table.columns]
34+
]
35+
36+
with produces[1].open("w", encoding="utf-8") as f:
37+
f.write("\\begin{table}[H]\n")
38+
f.write("\\centering\n")
39+
f.write("\\caption{Top AR Models}\n")
40+
f.write("\\label{tab:top_models}\n")
41+
f.write("\\begin{tabular}{|c|c|c|c|c|}\n")
42+
f.write("\\hline\n")
43+
f.write("p & AIC & BIC & p-value & Differenced \\\\\n")
44+
f.write("\\hline\n")
45+
46+
for _, row in latex_table.iterrows():
47+
f.write(
48+
f"{int(row['p'])} & {row['aic']:.3f} & {row['bic']:.3f} & "
49+
f"{row['p_value']:.5f} & {row['differenced']!s} \\\\\n"
50+
)
51+
52+
f.write("\\hline\n")
53+
f.write("\\end{tabular}\n")
54+
f.write("\\end{table}\n")
55+
56+
assert produces[1].exists(), f"❌ Failed to produce {produces[1]}"

0 commit comments

Comments
 (0)