From caf520a2bc9fd39124634813be67c1509838661b Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 22 May 2025 17:21:28 +0200 Subject: [PATCH 001/142] add pre-commit hook --- .github/workflows/apo_sim.yml | 2 +- .github/workflows/iivm_sim.yml | 2 +- .github/workflows/irm_sim.yml | 2 +- .github/workflows/pliv_sim.yml | 2 +- .github/workflows/plr_sim.yml | 4 +- .github/workflows/quant_sim.yml | 2 +- .github/workflows/rdd_sim.yml | 2 +- .github/workflows/ssm_sim.yml | 2 +- .gitignore | 2 +- .pre-commit-config.yaml | 23 ++ doc/.gitignore | 2 +- doc/_quarto-dev.yml | 4 +- doc/_quarto.yml | 2 +- doc/did/did_cs.qmd | 5 +- doc/did/did_multi.qmd | 14 +- doc/did/did_pa.qmd | 5 +- doc/index.qmd | 6 +- doc/irm/apo.qmd | 6 +- doc/irm/irm.qmd | 2 +- doc/irm/irm_cate.qmd | 4 +- doc/irm/irm_gate.qmd | 4 +- doc/irm/qte.qmd | 8 +- doc/plm/pliv.qmd | 2 +- doc/plm/plr.qmd | 2 +- doc/plm/plr_cate.qmd | 4 +- doc/plm/plr_gate.qmd | 4 +- doc/rdd/rdd.qmd | 2 +- doc/requirements-doc.txt | 2 +- doc/ssm/ssm_mar.qmd | 2 +- monte-cover/src/montecover/base.py | 42 ++- .../src/montecover/did/did_pa_multi.py | 57 +++- monte-cover/src/montecover/plm/plr_ate.py | 21 +- requirements.txt | 3 +- scripts/did/did_cs_atte_coverage.py | 106 ++++--- scripts/did/did_pa_atte_coverage.py | 106 ++++--- scripts/did/did_pa_multi.py | 3 +- scripts/irm/cvar_coverage.py | 242 ++++++++++------ scripts/irm/iivm_late_coverage.py | 103 ++++--- scripts/irm/irm_apo_coverage.py | 262 +++++++++++------- scripts/irm/irm_ate_coverage.py | 101 ++++--- scripts/irm/irm_ate_sensitivity.py | 161 +++++++---- scripts/irm/irm_atte_coverage.py | 127 ++++++--- scripts/irm/irm_atte_sensitivity.py | 163 ++++++----- scripts/irm/irm_cate_coverage.py | 124 ++++++--- scripts/irm/irm_gate_coverage.py | 133 +++++---- scripts/irm/lpq_coverage.py | 257 ++++++++++------- scripts/irm/pq_coverage.py | 239 ++++++++++------ scripts/irm/ssm_mar_ate_coverage.py | 110 +++++--- scripts/irm/ssm_nonignorable_ate_coverage.py | 110 +++++--- scripts/plm/pliv_late_coverage.py | 128 ++++++--- scripts/plm/plr_ate.py | 3 +- scripts/plm/plr_ate_config.yml | 2 +- scripts/plm/plr_ate_coverage.py | 108 +++++--- scripts/plm/plr_ate_sensitivity.py | 209 +++++++++----- scripts/plm/plr_cate_coverage.py | 124 ++++++--- scripts/plm/plr_gate_coverage.py | 133 +++++---- scripts/rdd/rdd_fuzzy_coverage.py | 192 ++++++++----- scripts/rdd/rdd_sharp_coverage.py | 144 ++++++---- 58 files changed, 2323 insertions(+), 1313 deletions(-) create mode 100644 .pre-commit-config.yaml diff --git a/.github/workflows/apo_sim.yml b/.github/workflows/apo_sim.yml index 1cbdc3f..a86186c 100644 --- a/.github/workflows/apo_sim.yml +++ b/.github/workflows/apo_sim.yml @@ -86,4 +86,4 @@ jobs: git pull --rebase origin ${{ env.TARGET_BRANCH }} git push origin ${{ env.TARGET_BRANCH }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/iivm_sim.yml b/.github/workflows/iivm_sim.yml index 327962c..681070b 100644 --- a/.github/workflows/iivm_sim.yml +++ b/.github/workflows/iivm_sim.yml @@ -86,4 +86,4 @@ jobs: git pull --rebase origin ${{ env.TARGET_BRANCH }} git push origin ${{ env.TARGET_BRANCH }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/irm_sim.yml b/.github/workflows/irm_sim.yml index 63f5f55..dcd0d4c 100644 --- a/.github/workflows/irm_sim.yml +++ b/.github/workflows/irm_sim.yml @@ -91,4 +91,4 @@ jobs: git pull --rebase origin ${{ env.TARGET_BRANCH }} git push origin ${{ env.TARGET_BRANCH }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/pliv_sim.yml b/.github/workflows/pliv_sim.yml index 9c6921e..231d6ec 100644 --- a/.github/workflows/pliv_sim.yml +++ b/.github/workflows/pliv_sim.yml @@ -86,4 +86,4 @@ jobs: git pull --rebase origin ${{ env.TARGET_BRANCH }} git push origin ${{ env.TARGET_BRANCH }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/plr_sim.yml b/.github/workflows/plr_sim.yml index 973a5b4..9c0990d 100644 --- a/.github/workflows/plr_sim.yml +++ b/.github/workflows/plr_sim.yml @@ -54,7 +54,7 @@ jobs: uses: astral-sh/setup-uv@v5 with: version: "0.6.11" - + - name: Set up Python uses: actions/setup-python@v5 with: @@ -98,4 +98,4 @@ jobs: git pull --rebase origin ${{ env.TARGET_BRANCH }} git push origin ${{ env.TARGET_BRANCH }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/quant_sim.yml b/.github/workflows/quant_sim.yml index af1ef7f..a4d1ad5 100644 --- a/.github/workflows/quant_sim.yml +++ b/.github/workflows/quant_sim.yml @@ -88,4 +88,4 @@ jobs: git pull --rebase origin ${{ env.TARGET_BRANCH }} git push origin ${{ env.TARGET_BRANCH }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/rdd_sim.yml b/.github/workflows/rdd_sim.yml index 533a6c6..e79bee9 100644 --- a/.github/workflows/rdd_sim.yml +++ b/.github/workflows/rdd_sim.yml @@ -93,4 +93,4 @@ jobs: git pull --rebase origin ${{ env.TARGET_BRANCH }} git push origin ${{ env.TARGET_BRANCH }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ssm_sim.yml b/.github/workflows/ssm_sim.yml index e5a7474..ae59bca 100644 --- a/.github/workflows/ssm_sim.yml +++ b/.github/workflows/ssm_sim.yml @@ -87,4 +87,4 @@ jobs: git pull --rebase origin ${{ env.TARGET_BRANCH }} git push origin ${{ env.TARGET_BRANCH }} env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 628f882..24f7c5c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ __pycache__/ # Logs monte-cover/logs/ -*.log \ No newline at end of file +*.log diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..460677b --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,23 @@ +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + # File format checks + - id: check-yaml + - id: check-toml + # Code quality checks + - id: debug-statements + - id: check-added-large-files + # File formatting fixes + - id: mixed-line-ending + - id: trailing-whitespace + - id: end-of-file-fixer +- repo: https://github.com/psf/black + rev: 25.1.0 + hooks: + - id: black +- repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.11.7 + hooks: + - id: ruff + args: ["--fix", "--output-format=full"] diff --git a/doc/.gitignore b/doc/.gitignore index 67f9f12..47c274c 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,2 +1,2 @@ /.quarto/ -/_site/ \ No newline at end of file +/_site/ diff --git a/doc/_quarto-dev.yml b/doc/_quarto-dev.yml index 1cebe4e..11c7caf 100644 --- a/doc/_quarto-dev.yml +++ b/doc/_quarto-dev.yml @@ -5,7 +5,7 @@ project: metadata-files: - _website.yml -website: +website: drafts: - index.qmd # IRM @@ -27,4 +27,4 @@ website: - ssm/ssm_nonignorable.qmd # RDD - rdd/rdd.qmd - draft-mode: visible \ No newline at end of file + draft-mode: visible diff --git a/doc/_quarto.yml b/doc/_quarto.yml index 4d261c1..69fe054 100644 --- a/doc/_quarto.yml +++ b/doc/_quarto.yml @@ -3,4 +3,4 @@ project: output-dir: _site metadata-files: - - _website.yml \ No newline at end of file + - _website.yml diff --git a/doc/did/did_cs.qmd b/doc/did/did_cs.qmd index 71f156c..fd2a3df 100644 --- a/doc/did/did_cs.qmd +++ b/doc/did/did_cs.qmd @@ -87,7 +87,7 @@ n_rep = df["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage"] ``` -### Observational Score +### Observational Score ```{python} #| echo: false @@ -107,7 +107,7 @@ df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] make_pretty(df_ate_9, level, n_rep) ``` -### Experimental Score +### Experimental Score Remark that the only two valid DGPs are DGP $5$ and DGP $6$. All other DGPs are invalid due to non-experimental treatment assignment. @@ -128,4 +128,3 @@ level = 0.9 df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] make_pretty(df_ate_9, level, n_rep) ``` - diff --git a/doc/did/did_multi.qmd b/doc/did/did_multi.qmd index 0cfed2e..1ed80a0 100644 --- a/doc/did/did_multi.qmd +++ b/doc/did/did_multi.qmd @@ -68,7 +68,7 @@ The simulations are based on the the [make_did_CS2021](https://docs.doubleml.or - Type 4: Nonlinear outcome model and treatment assignment - Type 6: Randomized treatment assignment and nonlinear outcome model -The non-uniform results (coverage, ci length and bias) refer to averaged values over all $ATTs$ (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all $ATTs$ (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -93,7 +93,7 @@ n_rep = df["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` -### Observational Score +### Observational Score ```{python} #| echo: false @@ -140,7 +140,7 @@ make_pretty(df_ate_9, level, n_rep) These simulations test different types of aggregation, as described in [DiD User Guide](https://docs.doubleml.org/dev/guide/models.html#difference-in-differences-models-did). -The non-uniform results (coverage, ci length and bias) refer to averaged values over all $ATTs$ (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all $ATTs$ (point-wise confidende intervals). ### Group Effects @@ -156,7 +156,7 @@ n_rep = df["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` -#### Observational Score +#### Observational Score ```{python} #| echo: false @@ -212,7 +212,7 @@ n_rep = df["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` -#### Observational Score +#### Observational Score ```{python} #| echo: false @@ -268,7 +268,7 @@ n_rep = df["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` -#### Observational Score +#### Observational Score ```{python} #| echo: false @@ -309,4 +309,4 @@ level = 0.9 df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/did/did_pa.qmd b/doc/did/did_pa.qmd index 28119d1..c613bd2 100644 --- a/doc/did/did_pa.qmd +++ b/doc/did/did_pa.qmd @@ -87,7 +87,7 @@ n_rep = df["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage"] ``` -### Observational Score +### Observational Score ```{python} #| echo: false @@ -108,7 +108,7 @@ make_pretty(df_ate_9, level, n_rep) ``` -### Experimental Score +### Experimental Score Remark that the only two valid DGPs are DGP $5$ and DGP $6$. All other DGPs are invalid due to non-experimental treatment assignment. @@ -129,4 +129,3 @@ level = 0.9 df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] make_pretty(df_ate_9, level, n_rep) ``` - diff --git a/doc/index.qmd b/doc/index.qmd index 58f6121..3915d9a 100644 --- a/doc/index.qmd +++ b/doc/index.qmd @@ -11,7 +11,7 @@ You can find the code for the simulations in the [GitHub repository](https://git ## Coverage Simulations -Generally, the [DoubleML package](https://docs.doubleml.org/stable/index.html) solves a moment equation +Generally, the [DoubleML package](https://docs.doubleml.org/stable/index.html) solves a moment equation $$ \mathbb{E}[\psi(W,\theta_0,\eta_0)] = 0 @@ -25,7 +25,7 @@ $$ \text{Coverage} = \frac{1}{n_{\text{sim}}} \sum_{i=1}^{n_{\text{sim}}} \mathbb{1}(\hat{\theta}_{\text{lower},i} \leq \theta_0 \leq \hat{\theta}_{\text{upper},i}) $$ -for a nominal coverage level is $1-\alpha$. +for a nominal coverage level is $1-\alpha$. The corresponding coverage results are highlighted according to the following color scheme: * Green if the deviation to the nominal level is below $5\%$ @@ -249,5 +249,3 @@ fig.show() ::: ::: - - diff --git a/doc/irm/apo.qmd b/doc/irm/apo.qmd index 245d29e..6214313 100644 --- a/doc/irm/apo.qmd +++ b/doc/irm/apo.qmd @@ -110,7 +110,7 @@ make_pretty(df_ate_9, level, n_rep) The simulations are based on the the [make_irm_data_discrete_treatments](https://docs.doubleml.org/stable/api/api.html#datasets-module)-DGP with $500$ observations. Due to the linearity of the DGP, Lasso and Logit Regression are nearly optimal choices for the nuisance estimation. -The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -206,7 +206,7 @@ make_pretty(df_ate_9, level, n_rep) The simulations are based on the the [make_irm_data_discrete_treatments](https://docs.doubleml.org/stable/api/api.html#datasets-module)-DGP with $500$ observations. Due to the linearity of the DGP, Lasso and Logit Regression are nearly optimal choices for the nuisance estimation. -The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -246,4 +246,4 @@ make_pretty(df_ate_95, level, n_rep) level = 0.9 df_ate_9 = df[df['level'] == level][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/irm/irm.qmd b/doc/irm/irm.qmd index 0425f32..ce71d21 100644 --- a/doc/irm/irm.qmd +++ b/doc/irm/irm.qmd @@ -304,4 +304,4 @@ level = 0.9 df_ate_9 = df[(df['level'] == level)][display_columns] df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/irm/irm_cate.qmd b/doc/irm/irm_cate.qmd index 5ddece8..141c7b5 100644 --- a/doc/irm/irm_cate.qmd +++ b/doc/irm/irm_cate.qmd @@ -64,7 +64,7 @@ def make_pretty(df, level, n_rep): The simulations are based on the the [make_heterogeneous_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_heterogeneous_data.html)-DGP with $2000$ observations. The groups are defined based on the first covariate, analogously to the [CATE IRM Example](https://docs.doubleml.org/stable/examples/py_double_ml_cate.html), but rely on [LightGBM](https://lightgbm.readthedocs.io/en/latest/index.html) to estimate nuisance elements (due to time constraints). -The non-uniform results (coverage, ci length and bias) refer to averaged values over all groups (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all groups (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -104,4 +104,4 @@ make_pretty(df_ate_95, level, n_rep) level = 0.9 df_ate_9 = df[df['level'] == level][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/irm/irm_gate.qmd b/doc/irm/irm_gate.qmd index 1f23556..65320fe 100644 --- a/doc/irm/irm_gate.qmd +++ b/doc/irm/irm_gate.qmd @@ -64,7 +64,7 @@ def make_pretty(df, level, n_rep): The simulations are based on the the [make_heterogeneous_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_heterogeneous_data.html)-DGP with $500$ observations. The groups are defined based on the first covariate, analogously to the [GATE IRM Example](https://docs.doubleml.org/stable/examples/py_double_ml_gate.html), but rely on [LightGBM](https://lightgbm.readthedocs.io/en/latest/index.html) to estimate nuisance elements (due to time constraints). -The non-uniform results (coverage, ci length and bias) refer to averaged values over all groups (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all groups (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -103,4 +103,4 @@ make_pretty(df_ate_95, level, n_rep) level = 0.9 df_ate_9 = df[df['level'] == level][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/irm/qte.qmd b/doc/irm/qte.qmd index a7ec8f2..43dec1f 100644 --- a/doc/irm/qte.qmd +++ b/doc/irm/qte.qmd @@ -63,7 +63,7 @@ def make_pretty(df, level, n_rep): The results are based on a location-scale model as described the corresponding [Example](https://docs.doubleml.org/stable/examples/py_double_ml_pq.html) with $5000$ observations. -The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -264,7 +264,7 @@ def make_pretty(df, level, n_rep): The results are based on a location-scale model as described the corresponding [Example](https://docs.doubleml.org/stable/examples/py_double_ml_pq.html#Local-Potential-Quantiles-(LPQs)) with $10,000$ observations. -The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -465,7 +465,7 @@ def make_pretty(df, level, n_rep): The results are based on a location-scale model as described the corresponding [Example](https://docs.doubleml.org/stable/examples/py_double_ml_cvar.html) with $5,000$ observations. Remark that the process is not linear. -The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -610,4 +610,4 @@ make_pretty(df_ate_95, level, n_rep) level = 0.9 df_ate_9 = df[df['level'] == level][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/plm/pliv.qmd b/doc/plm/pliv.qmd index 424e043..c3a0384 100644 --- a/doc/plm/pliv.qmd +++ b/doc/plm/pliv.qmd @@ -129,4 +129,4 @@ level = 0.9 df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/plm/plr.qmd b/doc/plm/plr.qmd index 0a0dbcc..d65c376 100644 --- a/doc/plm/plr.qmd +++ b/doc/plm/plr.qmd @@ -260,4 +260,4 @@ level = 0.9 df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/plm/plr_cate.qmd b/doc/plm/plr_cate.qmd index 6efa289..a244f2d 100644 --- a/doc/plm/plr_cate.qmd +++ b/doc/plm/plr_cate.qmd @@ -64,7 +64,7 @@ def make_pretty(df, level, n_rep): The simulations are based on the the [make_heterogeneous_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_heterogeneous_data.html)-DGP with $2000$ observations. The groups are defined based on the first covariate, analogously to the [CATE PLR Example](https://docs.doubleml.org/stable/examples/py_double_ml_cate_plr.html), but rely on [LightGBM](https://lightgbm.readthedocs.io/en/latest/index.html) to estimate nuisance elements (due to time constraints). -The non-uniform results (coverage, ci length and bias) refer to averaged values over all groups (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all groups (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -105,4 +105,4 @@ level = 0.9 df_ate_9 = df[df['level'] == level][display_columns] df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/plm/plr_gate.qmd b/doc/plm/plr_gate.qmd index 855afa3..15e14f0 100644 --- a/doc/plm/plr_gate.qmd +++ b/doc/plm/plr_gate.qmd @@ -64,7 +64,7 @@ def make_pretty(df, level, n_rep): The simulations are based on the the [make_heterogeneous_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_heterogeneous_data.html)-DGP with $500$ observations. The groups are defined based on the first covariate, analogously to the [GATE PLR Example](https://docs.doubleml.org/stable/examples/py_double_ml_gate_plr.html), but rely on [LightGBM](https://lightgbm.readthedocs.io/en/latest/index.html) to estimate nuisance elements (due to time constraints). -The non-uniform results (coverage, ci length and bias) refer to averaged values over all groups (point-wise confidende intervals). +The non-uniform results (coverage, ci length and bias) refer to averaged values over all groups (point-wise confidende intervals). ::: {.callout-note title="Metadata" collapse="true"} @@ -105,4 +105,4 @@ level = 0.9 df_ate_9 = df[df['level'] == level][display_columns] df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/rdd/rdd.qmd b/doc/rdd/rdd.qmd index 71cd93c..8dcd30c 100644 --- a/doc/rdd/rdd.qmd +++ b/doc/rdd/rdd.qmd @@ -146,4 +146,4 @@ level = 0.9 df_ate_9 = df[(df['level'] == level)][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/doc/requirements-doc.txt b/doc/requirements-doc.txt index f6afd08..ed281b2 100644 --- a/doc/requirements-doc.txt +++ b/doc/requirements-doc.txt @@ -3,4 +3,4 @@ pandas itables nbformat nbclient -plotly \ No newline at end of file +plotly diff --git a/doc/ssm/ssm_mar.qmd b/doc/ssm/ssm_mar.qmd index 0d52537..0314d84 100644 --- a/doc/ssm/ssm_mar.qmd +++ b/doc/ssm/ssm_mar.qmd @@ -103,4 +103,4 @@ level = 0.9 df_ate_9 = df[(df['level'] == level)][display_columns] make_pretty(df_ate_9, level, n_rep) -``` \ No newline at end of file +``` diff --git a/monte-cover/src/montecover/base.py b/monte-cover/src/montecover/base.py index 957f0fe..e24cf23 100644 --- a/monte-cover/src/montecover/base.py +++ b/monte-cover/src/montecover/base.py @@ -107,7 +107,9 @@ def run_simulation(self, n_jobs=None): rep_end_time = time.time() rep_duration = rep_end_time - rep_start_time - self.logger.info(f"Repetition {i_rep+1} completed in {rep_duration:.2f}s") + self.logger.info( + f"Repetition {i_rep+1} completed in {rep_duration:.2f}s" + ) else: self.logger.info(f"Starting parallel execution with n_jobs={n_jobs}") @@ -138,7 +140,9 @@ def save_results(self, output_path: str = "results", file_prefix: str = ""): "Script": [self.__class__.__name__], "Date": [datetime.now().strftime("%Y-%m-%d %H:%M")], "Total Runtime (minutes)": [self.total_runtime / 60], - "Python Version": [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], "Config File": [self.config_file], } ) @@ -174,7 +178,9 @@ def _load_config(self, config_path: str) -> Dict[str, Any]: with open(config_path, "r") as file: config = yaml.safe_load(file) else: - raise ValueError(f"Unsupported config file format: {config_path}. Use .yaml or .yml") + raise ValueError( + f"Unsupported config file format: {config_path}. Use .yaml or .yml" + ) return config @@ -198,7 +204,9 @@ def _setup_logging(self, log_level: str, log_file: Optional[str]): # Console handler ch = logging.StreamHandler() ch.setLevel(level) - formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") + formatter = logging.Formatter( + "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + ) ch.setFormatter(formatter) self.logger.addHandler(ch) @@ -256,7 +264,9 @@ def _process_repetition(self, i_rep): dml_params = dict(zip(self.dml_parameters.keys(), dml_param_values)) i_param_comb += 1 - comb_results = self._process_parameter_combination(i_rep, i_param_comb, dgp_params, dml_params, dml_data) + comb_results = self._process_parameter_combination( + i_rep, i_param_comb, dgp_params, dml_params, dml_data + ) # Merge results for result_name, result_list in comb_results.items(): @@ -266,11 +276,14 @@ def _process_repetition(self, i_rep): return rep_results - def _process_parameter_combination(self, i_rep, i_param_comb, dgp_params, dml_params, dml_data): + def _process_parameter_combination( + self, i_rep, i_param_comb, dgp_params, dml_params, dml_data + ): """Process a single parameter combination.""" # Log parameter combination self.logger.debug( - f"Rep {i_rep+1}, Combo {i_param_comb}/{self.total_combinations}: " f"DGPs {dgp_params}, DML {dml_params}" + f"Rep {i_rep+1}, Combo {i_param_comb}/{self.total_combinations}: " + f"DGPs {dgp_params}, DML {dml_params}" ) param_start_time = time.time() @@ -279,7 +292,9 @@ def _process_parameter_combination(self, i_rep, i_param_comb, dgp_params, dml_pa # Log timing param_duration = time.time() - param_start_time - self.logger.debug(f"Parameter combination completed in {param_duration:.2f}s") + self.logger.debug( + f"Parameter combination completed in {param_duration:.2f}s" + ) # Process results if repetition_results is None: @@ -298,7 +313,8 @@ def _process_parameter_combination(self, i_rep, i_param_comb, dgp_params, dml_pa except Exception as e: self.logger.error( - f"Error: repetition {i_rep+1}, DGP parameters {dgp_params}, " f"DML parameters {dml_params}: {str(e)}" + f"Error: repetition {i_rep+1}, DGP parameters {dgp_params}, " + f"DML parameters {dml_params}: {str(e)}" ) self.logger.exception("Exception details:") return {} @@ -333,9 +349,13 @@ def _compute_coverage(thetas, oracle_thetas, confint, joint_confint=None): if joint_confint is not None: joint_lower_bound = joint_confint.iloc[:, 0] joint_upper_bound = joint_confint.iloc[:, 1] - joint_coverage_mark = (joint_lower_bound < oracle_thetas) & (oracle_thetas < joint_upper_bound) + joint_coverage_mark = (joint_lower_bound < oracle_thetas) & ( + oracle_thetas < joint_upper_bound + ) result_dict["Uniform Coverage"] = np.all(joint_coverage_mark) - result_dict["Uniform CI Length"] = np.mean(joint_upper_bound - joint_lower_bound) + result_dict["Uniform CI Length"] = np.mean( + joint_upper_bound - joint_lower_bound + ) return result_dict diff --git a/monte-cover/src/montecover/did/did_pa_multi.py b/monte-cover/src/montecover/did/did_pa_multi.py index 2c4e601..fa6aeb6 100644 --- a/monte-cover/src/montecover/did/did_pa_multi.py +++ b/monte-cover/src/montecover/did/did_pa_multi.py @@ -37,7 +37,9 @@ def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert "learners" in self.dml_parameters, "No learners specified in the config file" + assert ( + "learners" in self.dml_parameters + ), "No learners specified in the config file" for learner in self.dml_parameters["learners"]: assert "ml_g" in learner, "No ml_g specified in the config file" assert "ml_m" in learner, "No ml_m specified in the config file" @@ -46,7 +48,12 @@ def _process_config_parameters(self): if learner["ml_g"][0] == "Linear": learner["ml_g"] = ("Linear", LinearRegression()) elif learner["ml_g"][0] == "LGBM": - learner["ml_g"] = ("LGBM", LGBMRegressor(n_estimators=500, learning_rate=0.02, verbose=-1, n_jobs=1)) + learner["ml_g"] = ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.02, verbose=-1, n_jobs=1 + ), + ) else: raise ValueError(f"Unknown learner type: {learner['ml_g']}") @@ -54,7 +61,12 @@ def _process_config_parameters(self): if learner["ml_m"][0] == "Linear": learner["ml_m"] = ("Linear", LogisticRegression()) elif learner["ml_m"][0] == "LGBM": - learner["ml_m"] = ("LGBM", LGBMClassifier(n_estimators=500, learning_rate=0.02, verbose=-1, n_jobs=1)) + learner["ml_m"] = ( + "LGBM", + LGBMClassifier( + n_estimators=500, learning_rate=0.02, verbose=-1, n_jobs=1 + ), + ) else: raise ValueError(f"Unknown learner type: {learner['ml_m']}") @@ -64,21 +76,27 @@ def _calculate_oracle_values(self): self.oracle_values = dict() # Oracle values - df_oracle = make_did_CS2021(n_obs=int(1e6), dgp_type=1) # does not depend on the DGP type + df_oracle = make_did_CS2021( + n_obs=int(1e6), dgp_type=1 + ) # does not depend on the DGP type df_oracle["ite"] = df_oracle["y1"] - df_oracle["y0"] - self.oracle_values["detailed"] = df_oracle.groupby(["d", "t"])["ite"].mean().reset_index() + self.oracle_values["detailed"] = ( + df_oracle.groupby(["d", "t"])["ite"].mean().reset_index() + ) # Oracle group aggregation df_oracle_post_treatment = df_oracle[df_oracle["t"] >= df_oracle["d"]] - self.oracle_values["group"] = df_oracle_post_treatment.groupby("d")["ite"].mean() + self.oracle_values["group"] = df_oracle_post_treatment.groupby("d")[ + "ite" + ].mean() # Oracle time aggregation self.oracle_values["time"] = df_oracle_post_treatment.groupby("t")["ite"].mean() # Oracle eventstudy aggregation - df_oracle["e"] = pd.to_datetime(df_oracle["t"]).values.astype("datetime64[M]") - pd.to_datetime( - df_oracle["d"] - ).values.astype("datetime64[M]") + df_oracle["e"] = pd.to_datetime(df_oracle["t"]).values.astype( + "datetime64[M]" + ) - pd.to_datetime(df_oracle["d"]).values.astype("datetime64[M]") self.oracle_values["eventstudy"] = df_oracle.groupby("e")["ite"].mean()[1:] def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: @@ -106,7 +124,9 @@ def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: for i, (g, _, t) in enumerate(dml_model.gt_combinations): group_index = self.oracle_values["detailed"]["d"] == g time_index = self.oracle_values["detailed"]["t"] == t - oracle_thetas[i] = self.oracle_values["detailed"][group_index & time_index]["ite"].iloc[0] + oracle_thetas[i] = self.oracle_values["detailed"][group_index & time_index][ + "ite" + ].iloc[0] result = { "detailed": [], @@ -131,7 +151,9 @@ def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: thetas=agg_obj.aggregated_frameworks.thetas, oracle_thetas=self.oracle_values[aggregation_method].values, confint=agg_obj.aggregated_frameworks.confint(level=level), - joint_confint=agg_obj.aggregated_frameworks.confint(level=level, joint=True), + joint_confint=agg_obj.aggregated_frameworks.confint( + level=level, joint=True + ), ) # add parameters to the result @@ -154,7 +176,14 @@ def summarize_results(self): """Summarize the simulation results.""" self.logger.info("Summarizing simulation results") - groupby_cols = ["Learner g", "Learner m", "Score", "In-sample-norm.", "DGP", "level"] + groupby_cols = [ + "Learner g", + "Learner m", + "Score", + "In-sample-norm.", + "DGP", + "level", + ] aggregation_dict = { "Coverage": "mean", "CI Length": "mean", @@ -166,7 +195,9 @@ def summarize_results(self): result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + result_summary[result_name] = ( + result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + ) self.logger.debug(f"Summarized {result_name} results") return result_summary diff --git a/monte-cover/src/montecover/plm/plr_ate.py b/monte-cover/src/montecover/plm/plr_ate.py index ac7f1c3..c47dc3e 100644 --- a/monte-cover/src/montecover/plm/plr_ate.py +++ b/monte-cover/src/montecover/plm/plr_ate.py @@ -35,7 +35,9 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert "learners" in self.dml_parameters, "No learners specified in the config file" + assert ( + "learners" in self.dml_parameters + ), "No learners specified in the config file" for learner in self.dml_parameters["learners"]: assert "ml_g" in learner, "No ml_g specified in the config file" assert "ml_m" in learner, "No ml_m specified in the config file" @@ -49,9 +51,13 @@ def _convert_ml_string_to_object(self, ml_string): if ml_string == "Lasso": learner = LassoCV() elif ml_string == "Random Forest": - learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20) + learner = RandomForestRegressor( + n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20 + ) elif ml_string == "LGBM": - learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) + learner = LGBMRegressor( + n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1 + ) else: raise ValueError(f"Unknown learner type: {ml_string}") @@ -124,7 +130,9 @@ def summarize_results(self): # Aggregate results (possibly multiple result dfs) result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + result_summary[result_name] = ( + result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + ) self.logger.debug(f"Summarized {result_name} results") return result_summary @@ -132,7 +140,10 @@ def summarize_results(self): def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: """Generate data for the simulation.""" data = make_plr_CCDDHNR2018( - alpha=dgp_params["theta"], n_obs=dgp_params["n_obs"], dim_x=dgp_params["dim_x"], return_type="DataFrame" + alpha=dgp_params["theta"], + n_obs=dgp_params["n_obs"], + dim_x=dgp_params["dim_x"], + return_type="DataFrame", ) dml_data = dml.DoubleMLData(data, "y", "d") return dml_data diff --git a/requirements.txt b/requirements.txt index 2accaab..1f7cde5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,4 +5,5 @@ pandas scikit-learn lightgbm itables -ipykernel \ No newline at end of file +ipykernel +pre-commit>=4.2.0 diff --git a/scripts/did/did_cs_atte_coverage.py b/scripts/did/did_cs_atte_coverage.py index 9be682b..25c3e77 100644 --- a/scripts/did/did_cs_atte_coverage.py +++ b/scripts/did/did_cs_atte_coverage.py @@ -26,7 +26,9 @@ for dgp_type in dgp_types: datasets_dgp = [] for i in range(n_rep): - data = make_did_SZ2020(n_obs=n_obs, dgp_type=dgp_type, cross_sectional_data=True) + data = make_did_SZ2020( + n_obs=n_obs, dgp_type=dgp_type, cross_sectional_data=True + ) datasets_dgp.append(data) datasets.append(datasets_dgp) @@ -36,9 +38,13 @@ "DGP": dgp_types, "score": ["experimental", "observational"], "in sample normalization": [True, False], - "learner_g": [("LGBM", LGBMRegressor(verbose=-1)),], - "learner_m": [("LGBM", LGBMClassifier(verbose=-1)),], - "level": [0.95, 0.90] + "learner_g": [ + ("LGBM", LGBMRegressor(verbose=-1)), + ], + "learner_m": [ + ("LGBM", LGBMClassifier(verbose=-1)), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -61,17 +67,24 @@ # define the DoubleML data object obj_dml_data = datasets[i_dgp][i_rep] - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): for score in hyperparam_dict["score"]: - for in_sample_normalization in hyperparam_dict["in sample normalization"]: + for in_sample_normalization in hyperparam_dict[ + "in sample normalization" + ]: if score == "experimental": dml_DiD = dml.DoubleMLDIDCS( obj_dml_data=obj_dml_data, ml_g=ml_g, ml_m=None, score=score, - in_sample_normalization=in_sample_normalization) + in_sample_normalization=in_sample_normalization, + ) else: assert score == "observational" dml_DiD = dml.DoubleMLDIDCS( @@ -79,37 +92,50 @@ ml_g=ml_g, ml_m=ml_m, score=score, - in_sample_normalization=in_sample_normalization) + in_sample_normalization=in_sample_normalization, + ) dml_DiD.fit(n_jobs_cv=5) for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_DiD.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + coverage = (confint.iloc[0, 0] < theta) & ( + theta < confint.iloc[0, 1] + ) ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_DiD.coef[0] - theta), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Score": score, - "In-sample-norm.": in_sample_normalization, - "DGP": dgp_type, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "Score", "In-sample-norm.", "DGP", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(dml_DiD.coef[0] - theta), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Score": score, + "In-sample-norm.": in_sample_normalization, + "DGP": dgp_type, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby( + ["Learner g", "Learner m", "Score", "In-sample-norm.", "DGP", "level"] + ) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -119,13 +145,17 @@ script_name = "did_cs_atte_coverage.py" path = "results/did/did_cs_atte_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/did/did_pa_atte_coverage.py b/scripts/did/did_pa_atte_coverage.py index 144597a..eef92e7 100644 --- a/scripts/did/did_pa_atte_coverage.py +++ b/scripts/did/did_pa_atte_coverage.py @@ -26,7 +26,9 @@ for dgp_type in dgp_types: datasets_dgp = [] for i in range(n_rep): - data = make_did_SZ2020(n_obs=n_obs, dgp_type=dgp_type, cross_sectional_data=False) + data = make_did_SZ2020( + n_obs=n_obs, dgp_type=dgp_type, cross_sectional_data=False + ) datasets_dgp.append(data) datasets.append(datasets_dgp) @@ -36,9 +38,13 @@ "DGP": dgp_types, "score": ["experimental", "observational"], "in sample normalization": [True, False], - "learner_g": [("LGBM", LGBMRegressor(verbose=-1)),], - "learner_m": [("LGBM", LGBMClassifier(verbose=-1)),], - "level": [0.95, 0.90] + "learner_g": [ + ("LGBM", LGBMRegressor(verbose=-1)), + ], + "learner_m": [ + ("LGBM", LGBMClassifier(verbose=-1)), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -61,17 +67,24 @@ # define the DoubleML data object obj_dml_data = datasets[i_dgp][i_rep] - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): for score in hyperparam_dict["score"]: - for in_sample_normalization in hyperparam_dict["in sample normalization"]: + for in_sample_normalization in hyperparam_dict[ + "in sample normalization" + ]: if score == "experimental": dml_DiD = dml.DoubleMLDID( obj_dml_data=obj_dml_data, ml_g=ml_g, ml_m=None, score=score, - in_sample_normalization=in_sample_normalization) + in_sample_normalization=in_sample_normalization, + ) else: assert score == "observational" dml_DiD = dml.DoubleMLDID( @@ -79,36 +92,49 @@ ml_g=ml_g, ml_m=ml_m, score=score, - in_sample_normalization=in_sample_normalization) + in_sample_normalization=in_sample_normalization, + ) dml_DiD.fit(n_jobs_cv=5) for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_DiD.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + coverage = (confint.iloc[0, 0] < theta) & ( + theta < confint.iloc[0, 1] + ) ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_DiD.coef[0] - theta), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Score": score, - "In-sample-norm.": in_sample_normalization, - "DGP": dgp_type, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "Score", "In-sample-norm.", "DGP", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(dml_DiD.coef[0] - theta), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Score": score, + "In-sample-norm.": in_sample_normalization, + "DGP": dgp_type, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby( + ["Learner g", "Learner m", "Score", "In-sample-norm.", "DGP", "level"] + ) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -118,13 +144,17 @@ script_name = "did_pa_atte_coverage.py" path = "results/did/did_pa_atte_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/did/did_pa_multi.py b/scripts/did/did_pa_multi.py index f06a03e..5e8f0c3 100644 --- a/scripts/did/did_pa_multi.py +++ b/scripts/did/did_pa_multi.py @@ -1,11 +1,10 @@ - from montecover.did import DIDMultiCoverageSimulation # Create and run simulation with config file sim = DIDMultiCoverageSimulation( config_file="scripts/did/did_pa_multi_config.yml", log_level="DEBUG", - log_file="logs/did/did_pa_multi_sim.log" + log_file="logs/did/did_pa_multi_sim.log", ) sim.run_simulation() sim.save_results(output_path="results/did/", file_prefix="did_multi") diff --git a/scripts/irm/cvar_coverage.py b/scripts/irm/cvar_coverage.py index 4a166d9..10b4e71 100644 --- a/scripts/irm/cvar_coverage.py +++ b/scripts/irm/cvar_coverage.py @@ -13,7 +13,7 @@ # set up parallelization n_cores = multiprocessing.cpu_count() print(f"Number of Cores: {n_cores}") -cores_used = n_cores-1 +cores_used = n_cores - 1 # Number of repetitions n_rep = 100 @@ -27,33 +27,39 @@ # define loc-scale model def f_loc(D, X): - loc = 0.5*D + 2*D*X[:, 4] + 2.0*(X[:, 1] > 0.1) - 1.7*(X[:, 0] * X[:, 2] > 0) - 3*X[:, 3] + loc = ( + 0.5 * D + + 2 * D * X[:, 4] + + 2.0 * (X[:, 1] > 0.1) + - 1.7 * (X[:, 0] * X[:, 2] > 0) + - 3 * X[:, 3] + ) return loc def f_scale(D, X): - scale = np.sqrt(0.5*D + 0.3*D*X[:, 1] + 2) + scale = np.sqrt(0.5 * D + 0.3 * D * X[:, 1] + 2) return scale def dgp(n=200, p=5): X = np.random.uniform(-1, 1, size=[n, p]) - D = ((X[:, 1] - X[:, 3] + 1.5*(X[:, 0] > 0) + np.random.normal(size=n)) > 0)*1.0 + D = ((X[:, 1] - X[:, 3] + 1.5 * (X[:, 0] > 0) + np.random.normal(size=n)) > 0) * 1.0 epsilon = np.random.normal(size=n) - Y = f_loc(D, X) + f_scale(D, X)*epsilon + Y = f_loc(D, X) + f_scale(D, X) * epsilon return Y, X, D, epsilon # Estimate true and QTE with counterfactuals on large sample -n_true = int(10e+6) +n_true = int(10e6) _, X_true, _, epsilon_true = dgp(n=n_true, p=p) D1 = np.ones(n_true) D0 = np.zeros(n_true) -Y1 = f_loc(D1, X_true) + f_scale(D1, X_true)*epsilon_true -Y0 = f_loc(D0, X_true) + f_scale(D0, X_true)*epsilon_true +Y1 = f_loc(D1, X_true) + f_scale(D1, X_true) * epsilon_true +Y0 = f_loc(D0, X_true) + f_scale(D0, X_true) * epsilon_true Y1_quant = np.quantile(Y1, q=tau_vec) Y0_quant = np.quantile(Y0, q=tau_vec) @@ -61,9 +67,9 @@ def dgp(n=200, p=5): Y0_cvar = [Y0[Y0 >= quant].mean() for quant in Y0_quant] CVAR = np.array(Y1_cvar) - np.array(Y0_cvar) -print(f'Conditional Value at Risk Y(0): {Y0_cvar}') -print(f'Conditional Value at Risk Y(1): {Y1_cvar}') -print(f'Conditional Value at Risk Effect: {CVAR}') +print(f"Conditional Value at Risk Y(0): {Y0_cvar}") +print(f"Conditional Value at Risk Y(1): {Y1_cvar}") +print(f"Conditional Value at Risk Effect: {CVAR}") # to get the best possible comparison between different learners (and settings) we first simulate all datasets np.random.seed(42) @@ -75,11 +81,25 @@ def dgp(n=200, p=5): # set up hyperparameters hyperparam_dict = { - "learner_g": [("Linear", LinearRegression()), - ("LGBM", LGBMRegressor(n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1))], - "learner_m": [("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [ + ("Linear", LinearRegression()), + ( + "LGBM", + LGBMRegressor( + n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 + ), + ), + ], + "learner_m": [ + ("Logistic Regression", LogisticRegressionCV()), + ( + "LGBM", + LGBMClassifier( + n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -103,42 +123,59 @@ def dgp(n=200, p=5): # define the DoubleML data object obj_dml_data = datasets[i_rep] - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_qte = dml.DoubleMLQTE( obj_dml_data=obj_dml_data, ml_g=ml_g, ml_m=ml_m, score="CVaR", - quantiles=tau_vec + quantiles=tau_vec, ) dml_qte.fit(n_jobs_models=cores_used) effects = dml_qte.coef for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_qte.confint(level=level) - coverage = np.mean((confint.iloc[:, 0] < CVAR) & (CVAR < confint.iloc[:, 1])) + coverage = np.mean( + (confint.iloc[:, 0] < CVAR) & (CVAR < confint.iloc[:, 1]) + ) ci_length = np.mean(confint.iloc[:, 1] - confint.iloc[:, 0]) dml_qte.bootstrap(n_rep_boot=2000) confint_uniform = dml_qte.confint(level=level, joint=True) - coverage_uniform = all((confint_uniform.iloc[:, 0] < CVAR) & - (CVAR < confint_uniform.iloc[:, 1])) - ci_length_uniform = np.mean(confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0]) + coverage_uniform = all( + (confint_uniform.iloc[:, 0] < CVAR) + & (CVAR < confint_uniform.iloc[:, 1]) + ) + ci_length_uniform = np.mean( + confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0] + ) df_results_detailed_qte = pd.concat( - (df_results_detailed_qte, - pd.DataFrame({ - "Coverage": coverage, - "CI Length": ci_length, - "Bias": np.mean(abs(effects - CVAR)), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed_qte, + pd.DataFrame( + { + "Coverage": coverage, + "CI Length": ci_length, + "Bias": np.mean(abs(effects - CVAR)), + "Uniform Coverage": coverage_uniform, + "Uniform CI Length": ci_length_uniform, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) # evaluate each model coverage_0 = np.zeros(len(tau_vec)) @@ -156,10 +193,12 @@ def dgp(n=200, p=5): confint_0 = model_0.confint(level=level) confint_1 = model_1.confint(level=level) - coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_cvar[tau_idx]) & \ - (Y0_cvar[tau_idx] < confint_0.iloc[0, 1]) - coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_cvar[tau_idx]) & \ - (Y1_cvar[tau_idx] < confint_1.iloc[0, 1]) + coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_cvar[tau_idx]) & ( + Y0_cvar[tau_idx] < confint_0.iloc[0, 1] + ) + coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_cvar[tau_idx]) & ( + Y1_cvar[tau_idx] < confint_1.iloc[0, 1] + ) ci_length_0[tau_idx] = confint_0.iloc[0, 1] - confint_0.iloc[0, 0] ci_length_1[tau_idx] = confint_1.iloc[0, 1] - confint_1.iloc[0, 0] @@ -168,56 +207,75 @@ def dgp(n=200, p=5): bias_1[tau_idx] = abs(model_1.coef[0] - Y1_cvar[tau_idx]) df_results_detailed_pq0 = pd.concat( - (df_results_detailed_pq0, - pd.DataFrame({ - "Coverage": np.mean(coverage_0), - "CI Length": np.mean(ci_length_0), - "Bias": np.mean(bias_0), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed_pq0, + pd.DataFrame( + { + "Coverage": np.mean(coverage_0), + "CI Length": np.mean(ci_length_0), + "Bias": np.mean(bias_0), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) df_results_detailed_pq1 = pd.concat( - (df_results_detailed_pq1, - pd.DataFrame({ - "Coverage": np.mean(coverage_1), - "CI Length": np.mean(ci_length_1), - "Bias": np.mean(bias_1), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results_qte = df_results_detailed_qte.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed_pq1, + pd.DataFrame( + { + "Coverage": np.mean(coverage_1), + "CI Length": np.mean(ci_length_1), + "Bias": np.mean(bias_1), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results_qte = ( + df_results_detailed_qte.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results_qte) -df_results_pq0 = df_results_detailed_pq0.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() +df_results_pq0 = ( + df_results_detailed_pq0.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results_pq0) -df_results_pq1 = df_results_detailed_pq1.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() +df_results_pq1 = ( + df_results_detailed_pq1.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results_pq1) end_time = time.time() @@ -227,13 +285,17 @@ def dgp(n=200, p=5): script_name = "cvar_coverage.py" path = "results/irm/cvar_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results_qte.to_csv(f"{path}_qte.csv", index=False) diff --git a/scripts/irm/iivm_late_coverage.py b/scripts/irm/iivm_late_coverage.py index 05620e0..52a2fd9 100644 --- a/scripts/irm/iivm_late_coverage.py +++ b/scripts/irm/iivm_late_coverage.py @@ -24,18 +24,32 @@ np.random.seed(42) datasets = [] for i in range(n_rep): - data = make_iivm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, alpha_x=alpha_x, return_type='DataFrame') + data = make_iivm_data( + theta=theta, n_obs=n_obs, dim_x=dim_x, alpha_x=alpha_x, return_type="DataFrame" + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { - "learner_g": [("Lasso", LassoCV()), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "learner_m": [("Logistic Regression", LogisticRegressionCV()), - ("Random Forest", - RandomForestClassifier(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "learner_m": [ + ("Logistic Regression", LogisticRegressionCV()), + ( + "Random Forest", + RandomForestClassifier( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -55,10 +69,14 @@ break # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], 'y', 'd', z_cols='z') - - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d", z_cols="z") + + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_iivm = dml.DoubleMLIIVM( obj_dml_data=obj_dml_data, @@ -74,24 +92,31 @@ ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_iivm.coef[0] - theta), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], + "Bias": abs(dml_iivm.coef[0] - theta), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -101,13 +126,17 @@ script_name = "iivm_late_coverage.py" path = "results/irm/iivm_late_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/irm/irm_apo_coverage.py b/scripts/irm/irm_apo_coverage.py index 3f5f7ae..692e9e9 100644 --- a/scripts/irm/irm_apo_coverage.py +++ b/scripts/irm/irm_apo_coverage.py @@ -19,10 +19,12 @@ n_levels = 2 # generate the APOs true values -data_apo_large = make_irm_data_discrete_treatments(n_obs=int(1e+6), n_levels=n_levels, linear=True) -y0 = data_apo_large['oracle_values']['y0'] -ite = data_apo_large['oracle_values']['ite'] -d = data_apo_large['d'] +data_apo_large = make_irm_data_discrete_treatments( + n_obs=int(1e6), n_levels=n_levels, linear=True +) +y0 = data_apo_large["oracle_values"]["y0"] +ite = data_apo_large["oracle_values"]["ite"] +d = data_apo_large["d"] average_ites = np.full(n_levels + 1, np.nan) apos = np.full(n_levels + 1, np.nan) @@ -42,24 +44,25 @@ np.random.seed(42) datasets = [] for i in range(n_rep): - data_apo = make_irm_data_discrete_treatments(n_obs=n_obs, n_levels=n_levels, linear=True) + data_apo = make_irm_data_discrete_treatments( + n_obs=n_obs, n_levels=n_levels, linear=True + ) df_apo = pd.DataFrame( - np.column_stack((data_apo['y'], data_apo['d'], data_apo['x'])), - columns=['y', 'd'] + ['x' + str(i) for i in range(data_apo['x'].shape[1])] + np.column_stack((data_apo["y"], data_apo["d"], data_apo["x"])), + columns=["y", "d"] + ["x" + str(i) for i in range(data_apo["x"].shape[1])], ) datasets.append(df_apo) # set up hyperparameters hyperparam_dict = { - "learner_g": - [("Linear", LinearRegression()), - ("LGBM", LGBMRegressor(verbose=-1))], - "learner_m": - [("Logistic", LogisticRegression()), - ("LGBM", LGBMClassifier(verbose=-1))], + "learner_g": [("Linear", LinearRegression()), ("LGBM", LGBMRegressor(verbose=-1))], + "learner_m": [ + ("Logistic", LogisticRegression()), + ("LGBM", LGBMClassifier(verbose=-1)), + ], "treatment_levels": [0.0, 1.0, 2.0], "level": [0.95, 0.90], - "trimming_threshold": 0.01 + "trimming_threshold": 0.01, } # set up the results dataframe @@ -81,37 +84,53 @@ break # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], 'y', 'd') + obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d") - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): - for treatment_idx, treatment_level in enumerate(hyperparam_dict["treatment_levels"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): + for treatment_idx, treatment_level in enumerate( + hyperparam_dict["treatment_levels"] + ): dml_apo = dml.DoubleMLAPO( obj_dml_data=obj_dml_data, ml_g=ml_g, ml_m=ml_m, treatment_level=treatment_level, - trimming_threshold=hyperparam_dict["trimming_threshold"] + trimming_threshold=hyperparam_dict["trimming_threshold"], ) dml_apo.fit(n_jobs_cv=5) for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_apo.confint(level=level) - coverage = (confint.iloc[0, 0] < apos[treatment_idx]) & (apos[treatment_idx] < confint.iloc[0, 1]) + coverage = (confint.iloc[0, 0] < apos[treatment_idx]) & ( + apos[treatment_idx] < confint.iloc[0, 1] + ) ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed_apo = pd.concat( - (df_results_detailed_apo, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_apo.coef[0] - apos[treatment_idx]), - "Treatment Level": treatment_level, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed_apo, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(dml_apo.coef[0] - apos[treatment_idx]), + "Treatment Level": treatment_level, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) # calculate the APOs dml_apos = dml.DoubleMLAPOS( @@ -119,7 +138,7 @@ ml_g=ml_g, ml_m=ml_m, treatment_levels=hyperparam_dict["treatment_levels"], - trimming_threshold=hyperparam_dict["trimming_threshold"] + trimming_threshold=hyperparam_dict["trimming_threshold"], ) dml_apos.fit(n_jobs_cv=5) effects = dml_apos.coef @@ -129,80 +148,125 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_apos.confint(level=level) - coverage = np.mean((confint.iloc[:, 0] < apos) & (apos < confint.iloc[:, 1])) + coverage = np.mean( + (confint.iloc[:, 0] < apos) & (apos < confint.iloc[:, 1]) + ) ci_length = np.mean(confint.iloc[:, 1] - confint.iloc[:, 0]) dml_apos.bootstrap(n_rep_boot=2000) confint_uniform = dml_apos.confint(level=level, joint=True) - coverage_uniform = all((confint_uniform.iloc[:, 0] < apos) & (apos < confint_uniform.iloc[:, 1])) - ci_length_uniform = np.mean(confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0]) + coverage_uniform = all( + (confint_uniform.iloc[:, 0] < apos) + & (apos < confint_uniform.iloc[:, 1]) + ) + ci_length_uniform = np.mean( + confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0] + ) df_results_detailed_apos = pd.concat( - (df_results_detailed_apos, - pd.DataFrame({ - "Coverage": coverage, - "CI Length": ci_length, - "Bias": np.mean(abs(effects - apos)), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed_apos, + pd.DataFrame( + { + "Coverage": coverage, + "CI Length": ci_length, + "Bias": np.mean(abs(effects - apos)), + "Uniform Coverage": coverage_uniform, + "Uniform CI Length": ci_length_uniform, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) # calculate the ATEs confint_contrast = causal_contrast_model.confint(level=level) - coverage_contrast = np.mean((confint_contrast.iloc[:, 0] < ates) & (ates < confint_contrast.iloc[:, 1])) - ci_length_contrast = np.mean(confint_contrast.iloc[:, 1] - confint_contrast.iloc[:, 0]) + coverage_contrast = np.mean( + (confint_contrast.iloc[:, 0] < ates) + & (ates < confint_contrast.iloc[:, 1]) + ) + ci_length_contrast = np.mean( + confint_contrast.iloc[:, 1] - confint_contrast.iloc[:, 0] + ) causal_contrast_model.bootstrap(n_rep_boot=2000) - confint_contrast_uniform = causal_contrast_model.confint(level=level, joint=True) + confint_contrast_uniform = causal_contrast_model.confint( + level=level, joint=True + ) coverage_contrast_uniform = all( - (confint_contrast_uniform.iloc[:, 0] < ates) & (ates < confint_contrast_uniform.iloc[:, 1])) - ci_length_contrast_uniform = np.mean(confint_contrast_uniform.iloc[:, 1] - confint_contrast_uniform.iloc[:, 0]) + (confint_contrast_uniform.iloc[:, 0] < ates) + & (ates < confint_contrast_uniform.iloc[:, 1]) + ) + ci_length_contrast_uniform = np.mean( + confint_contrast_uniform.iloc[:, 1] + - confint_contrast_uniform.iloc[:, 0] + ) df_results_detailed_apos_constrast = pd.concat( - (df_results_detailed_apos_constrast, - pd.DataFrame({ - "Coverage": coverage_contrast, - "CI Length": ci_length_contrast, - "Bias": np.mean(abs(est_ates - ates)), - "Uniform Coverage": coverage_contrast_uniform, - "Uniform CI Length": ci_length_contrast_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results_apo = df_results_detailed_apo.groupby( - ["Learner g", "Learner m", "Treatment Level", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed_apos_constrast, + pd.DataFrame( + { + "Coverage": coverage_contrast, + "CI Length": ci_length_contrast, + "Bias": np.mean(abs(est_ates - ates)), + "Uniform Coverage": coverage_contrast_uniform, + "Uniform CI Length": ci_length_contrast_uniform, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results_apo = ( + df_results_detailed_apo.groupby( + ["Learner g", "Learner m", "Treatment Level", "level"] + ) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results_apo) -df_results_apos = df_results_detailed_apos.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() +df_results_apos = ( + df_results_detailed_apos.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results_apos) -df_results_apos_contrast = df_results_detailed_apos_constrast.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() +df_results_apos_contrast = ( + df_results_detailed_apos_constrast.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results_apos_contrast) end_time = time.time() @@ -212,13 +276,17 @@ script_name = "irm_apo_coverage.py" path = "results/irm/irm_apo_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results_apo.to_csv(f"{path}_apo.csv", index=False) diff --git a/scripts/irm/irm_ate_coverage.py b/scripts/irm/irm_ate_coverage.py index 82e7fa7..318bded 100644 --- a/scripts/irm/irm_ate_coverage.py +++ b/scripts/irm/irm_ate_coverage.py @@ -23,18 +23,30 @@ np.random.seed(42) datasets = [] for i in range(n_rep): - data = make_irm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, return_type='DataFrame') + data = make_irm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, return_type="DataFrame") datasets.append(data) # set up hyperparameters hyperparam_dict = { - "learner_g": [("Lasso", LassoCV()), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "learner_m": [("Logistic Regression", LogisticRegressionCV()), - ("Random Forest", - RandomForestClassifier(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "learner_m": [ + ("Logistic Regression", LogisticRegressionCV()), + ( + "Random Forest", + RandomForestClassifier( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -54,10 +66,14 @@ break # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], 'y', 'd') - - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d") + + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_irm = dml.DoubleMLIRM( obj_dml_data=obj_dml_data, @@ -72,24 +88,31 @@ ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_irm.coef[0] - theta), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], + "Bias": abs(dml_irm.coef[0] - theta), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -99,13 +122,17 @@ script_name = "irm_ate_coverage.py" path = "results/irm/irm_ate_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/irm/irm_ate_sensitivity.py b/scripts/irm/irm_ate_sensitivity.py index d29fa77..b53600c 100644 --- a/scripts/irm/irm_ate_sensitivity.py +++ b/scripts/irm/irm_ate_sensitivity.py @@ -30,12 +30,12 @@ # test inputs np.random.seed(42) -dgp_dict = make_confounded_irm_data(n_obs=int(1e+6), **dgp_pars) +dgp_dict = make_confounded_irm_data(n_obs=int(1e6), **dgp_pars) -oracle_dict = dgp_dict['oracle_values'] -rho = oracle_dict['rho_ate'] -cf_y = oracle_dict['cf_y'] -cf_d = oracle_dict['cf_d_ate'] +oracle_dict = dgp_dict["oracle_values"] +rho = oracle_dict["rho_ate"] +cf_y = oracle_dict["cf_y"] +cf_d = oracle_dict["cf_d_ate"] print(f"Confounding factor for Y: {cf_y}") print(f"Confounding factor for D: {cf_d}") @@ -50,11 +50,25 @@ # set up hyperparameters hyperparam_dict = { - "learner_g": [("Linear Reg.", LinearRegression()), - ("LGBM", LGBMRegressor(n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1))], - "learner_m": [("Logistic Regr.", LogisticRegression()), - ("LGBM", LGBMClassifier(n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1)),], - "level": [0.95, 0.90] + "learner_g": [ + ("Linear Reg.", LinearRegression()), + ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 + ), + ), + ], + "learner_m": [ + ("Logistic Regr.", LogisticRegression()), + ( + "LGBM", + LGBMClassifier( + n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -76,18 +90,25 @@ # define the DoubleML data object dgp_dict = datasets[i_rep] - x_cols = [f'X{i + 1}' for i in np.arange(dgp_dict['x'].shape[1])] - df = pd.DataFrame(np.column_stack((dgp_dict['x'], dgp_dict['y'], dgp_dict['d'])), columns=x_cols + ['y', 'd']) - obj_dml_data = dml.DoubleMLData(df, 'y', 'd') - - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + obj_dml_data = dml.DoubleMLData(df, "y", "d") + + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_irm = dml.DoubleMLIRM( obj_dml_data=obj_dml_data, ml_g=ml_g, ml_m=ml_m, - trimming_threshold=trimming_threshold + trimming_threshold=trimming_threshold, ) dml_irm.fit(n_jobs_cv=5) @@ -98,45 +119,59 @@ ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] # test sensitivity parameters - dml_irm.sensitivity_analysis(cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta) - cover_lower = theta >= dml_irm.sensitivity_params['ci']['lower'] - cover_upper = theta <= dml_irm.sensitivity_params['ci']['upper'] - rv = dml_irm.sensitivity_params['rv'] - rva = dml_irm.sensitivity_params['rva'] - bias_lower = abs(theta - dml_irm.sensitivity_params['theta']['lower']) - bias_upper = abs(theta - dml_irm.sensitivity_params['theta']['upper']) + dml_irm.sensitivity_analysis( + cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta + ) + cover_lower = theta >= dml_irm.sensitivity_params["ci"]["lower"] + cover_upper = theta <= dml_irm.sensitivity_params["ci"]["upper"] + rv = dml_irm.sensitivity_params["rv"] + rva = dml_irm.sensitivity_params["rva"] + bias_lower = abs(theta - dml_irm.sensitivity_params["theta"]["lower"]) + bias_upper = abs(theta - dml_irm.sensitivity_params["theta"]["upper"]) df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], + "Bias": abs(estimate - theta), + "Coverage (Lower)": cover_lower.astype(int), + "Coverage (Upper)": cover_upper.astype(int), + "RV": rv, + "RVa": rva, + "Bias (Lower)": bias_lower, + "Bias (Upper)": bias_upper, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -146,13 +181,17 @@ script_name = "irm_ate_sensitivity.py" path = "results/irm/irm_ate_sensitivity" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/irm/irm_atte_coverage.py b/scripts/irm/irm_atte_coverage.py index 8b84743..53d38bc 100644 --- a/scripts/irm/irm_atte_coverage.py +++ b/scripts/irm/irm_atte_coverage.py @@ -27,19 +27,33 @@ R2_d = 0.5 R2_y = 0.5 -v = np.random.uniform(size=[n_obs_atte, ]) -zeta = np.random.standard_normal(size=[n_obs_atte, ]) +v = np.random.uniform( + size=[ + n_obs_atte, + ] +) +zeta = np.random.standard_normal( + size=[ + n_obs_atte, + ] +) cov_mat = toeplitz([np.power(0.5, k) for k in range(dim_x)]) -x = np.random.multivariate_normal(np.zeros(dim_x), cov_mat, size=[n_obs_atte, ]) +x = np.random.multivariate_normal( + np.zeros(dim_x), + cov_mat, + size=[ + n_obs_atte, + ], +) beta = [1 / (k**2) for k in range(1, dim_x + 1)] b_sigma_b = np.dot(np.dot(cov_mat, beta), beta) -c_y = np.sqrt(R2_y/((1-R2_y) * b_sigma_b)) -c_d = np.sqrt(np.pi**2 / 3. * R2_d/((1-R2_d) * b_sigma_b)) +c_y = np.sqrt(R2_y / ((1 - R2_y) * b_sigma_b)) +c_d = np.sqrt(np.pi**2 / 3.0 * R2_d / ((1 - R2_d) * b_sigma_b)) xx = np.exp(np.dot(x, np.multiply(beta, c_d))) -d = 1. * ((xx/(1+xx)) > v) +d = 1.0 * ((xx / (1 + xx)) > v) y = d * theta + d * np.dot(x, np.multiply(beta, c_y)) + zeta y0 = zeta @@ -52,18 +66,30 @@ np.random.seed(42) datasets = [] for i in range(n_rep): - data = make_irm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, return_type='DataFrame') + data = make_irm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, return_type="DataFrame") datasets.append(data) # set up hyperparameters hyperparam_dict = { - "learner_g": [("Lasso", LassoCV()), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "learner_m": [("Logistic Regression", LogisticRegressionCV()), - ("Random Forest", - RandomForestClassifier(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "learner_m": [ + ("Logistic Regression", LogisticRegressionCV()), + ( + "Random Forest", + RandomForestClassifier( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -83,10 +109,14 @@ break # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], 'y', 'd') - - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d") + + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_irm = dml.DoubleMLIRM( obj_dml_data=obj_dml_data, @@ -102,24 +132,31 @@ ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_irm.coef[0] - ATTE), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], + "Bias": abs(dml_irm.coef[0] - ATTE), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() total_runtime = end_time - start_time @@ -128,13 +165,17 @@ script_name = "irm_atte_coverage.py" path = "results/irm/irm_atte_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/irm/irm_atte_sensitivity.py b/scripts/irm/irm_atte_sensitivity.py index aeda6b1..10b5f0d 100644 --- a/scripts/irm/irm_atte_sensitivity.py +++ b/scripts/irm/irm_atte_sensitivity.py @@ -30,12 +30,12 @@ # test inputs np.random.seed(42) -dgp_dict = make_confounded_irm_data(n_obs=int(1e+6), **dgp_pars) +dgp_dict = make_confounded_irm_data(n_obs=int(1e6), **dgp_pars) -oracle_dict = dgp_dict['oracle_values'] -rho = oracle_dict['rho_atte'] -cf_y = oracle_dict['cf_y'] -cf_d = oracle_dict['cf_d_atte'] +oracle_dict = dgp_dict["oracle_values"] +rho = oracle_dict["rho_atte"] +cf_y = oracle_dict["cf_y"] +cf_d = oracle_dict["cf_d_atte"] print(f"Confounding factor for Y: {cf_y}") print(f"Confounding factor for D: {cf_d}") @@ -50,11 +50,25 @@ # set up hyperparameters hyperparam_dict = { - "learner_g": [("Linear Reg.", LinearRegression()), - ("LGBM", LGBMRegressor(n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1))], - "learner_m": [("Logistic Regr.", LogisticRegression()), - ("LGBM", LGBMClassifier(n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1)),], - "level": [0.95, 0.90] + "learner_g": [ + ("Linear Reg.", LinearRegression()), + ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 + ), + ), + ], + "learner_m": [ + ("Logistic Regr.", LogisticRegression()), + ( + "LGBM", + LGBMClassifier( + n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -76,19 +90,26 @@ # define the DoubleML data object dgp_dict = datasets[i_rep] - x_cols = [f'X{i + 1}' for i in np.arange(dgp_dict['x'].shape[1])] - df = pd.DataFrame(np.column_stack((dgp_dict['x'], dgp_dict['y'], dgp_dict['d'])), columns=x_cols + ['y', 'd']) - obj_dml_data = dml.DoubleMLData(df, 'y', 'd') - - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + obj_dml_data = dml.DoubleMLData(df, "y", "d") + + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_irm = dml.DoubleMLIRM( obj_dml_data=obj_dml_data, - score='ATTE', + score="ATTE", ml_g=ml_g, ml_m=ml_m, - trimming_threshold=trimming_threshold + trimming_threshold=trimming_threshold, ) dml_irm.fit(n_jobs_cv=5) @@ -99,45 +120,59 @@ ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] # test sensitivity parameters - dml_irm.sensitivity_analysis(cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta) - cover_lower = theta >= dml_irm.sensitivity_params['ci']['lower'] - cover_upper = theta <= dml_irm.sensitivity_params['ci']['upper'] - rv = dml_irm.sensitivity_params['rv'] - rva = dml_irm.sensitivity_params['rva'] - bias_lower = abs(theta - dml_irm.sensitivity_params['theta']['lower']) - bias_upper = abs(theta - dml_irm.sensitivity_params['theta']['upper']) + dml_irm.sensitivity_analysis( + cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta + ) + cover_lower = theta >= dml_irm.sensitivity_params["ci"]["lower"] + cover_upper = theta <= dml_irm.sensitivity_params["ci"]["upper"] + rv = dml_irm.sensitivity_params["rv"] + rva = dml_irm.sensitivity_params["rva"] + bias_lower = abs(theta - dml_irm.sensitivity_params["theta"]["lower"]) + bias_upper = abs(theta - dml_irm.sensitivity_params["theta"]["upper"]) df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], + "Bias": abs(estimate - theta), + "Coverage (Lower)": cover_lower.astype(int), + "Coverage (Upper)": cover_upper.astype(int), + "RV": rv, + "RVa": rva, + "Bias (Lower)": bias_lower, + "Bias (Upper)": bias_upper, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results) end_time = time.time() total_runtime = end_time - start_time @@ -146,13 +181,17 @@ script_name = "irm_atte_sensitivity.py" path = "results/irm/irm_atte_sensitivity" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/irm/irm_cate_coverage.py b/scripts/irm/irm_cate_coverage.py index 9843de1..85e5dfc 100644 --- a/scripts/irm/irm_cate_coverage.py +++ b/scripts/irm/irm_cate_coverage.py @@ -25,16 +25,22 @@ np.random.seed(42) datasets = [] for i in range(n_rep): - data = make_heterogeneous_data(n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=True) + data = make_heterogeneous_data( + n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=True + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { - "learner_g": [("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1))], - "learner_m": [("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=200, learning_rate=0.05, verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), + ], + "learner_m": [ + ("Logistic Regression", LogisticRegressionCV()), + ("LGBM", LGBMClassifier(n_estimators=200, learning_rate=0.05, verbose=-1)), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -54,16 +60,20 @@ break # define the DoubleML data object - data = datasets[i_rep]['data'] + data = datasets[i_rep]["data"] design_matrix = patsy.dmatrix("bs(x, df=5, degree=2)", {"x": data["X_0"]}) spline_basis = pd.DataFrame(design_matrix) - true_effects = datasets[i_rep]['effects'] + true_effects = datasets[i_rep]["effects"] - obj_dml_data = dml.DoubleMLData(data, 'y', 'd') + obj_dml_data = dml.DoubleMLData(data, "y", "d") - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_irm = dml.DoubleMLIRM( obj_dml_data=obj_dml_data, @@ -76,35 +86,55 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = cate.confint(basis=spline_basis, level=level) effects = confint["effect"] - coverage = (confint.iloc[:, 0] < true_effects) & (true_effects < confint.iloc[:, 2]) + coverage = (confint.iloc[:, 0] < true_effects) & ( + true_effects < confint.iloc[:, 2] + ) ci_length = confint.iloc[:, 2] - confint.iloc[:, 0] - confint_uniform = cate.confint(basis=spline_basis, level=0.95, joint=True, n_rep_boot=2000) - coverage_uniform = all((confint_uniform.iloc[:, 0] < true_effects) & - (true_effects < confint_uniform.iloc[:, 2])) - ci_length_uniform = confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] + confint_uniform = cate.confint( + basis=spline_basis, level=0.95, joint=True, n_rep_boot=2000 + ) + coverage_uniform = all( + (confint_uniform.iloc[:, 0] < true_effects) + & (true_effects < confint_uniform.iloc[:, 2]) + ) + ci_length_uniform = ( + confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] + ) df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.mean(), - "CI Length": ci_length.mean(), - "Bias": abs(effects - true_effects).mean(), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform.mean(), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.mean(), + "CI Length": ci_length.mean(), + "Bias": abs(effects - true_effects).mean(), + "Uniform Coverage": coverage_uniform, + "Uniform CI Length": ci_length_uniform.mean(), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -114,13 +144,17 @@ script_name = "irm_cate_coverage.py" path = "results/irm/irm_cate_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/irm/irm_gate_coverage.py b/scripts/irm/irm_gate_coverage.py index aafd915..4588172 100644 --- a/scripts/irm/irm_gate_coverage.py +++ b/scripts/irm/irm_gate_coverage.py @@ -24,16 +24,22 @@ np.random.seed(42) datasets = [] for i in range(n_rep): - data = make_heterogeneous_data(n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=True) + data = make_heterogeneous_data( + n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=True + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { - "learner_g": [("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1))], - "learner_m": [("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=200, learning_rate=0.05, verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), + ], + "learner_m": [ + ("Logistic Regression", LogisticRegressionCV()), + ("LGBM", LGBMClassifier(n_estimators=200, learning_rate=0.05, verbose=-1)), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -53,20 +59,29 @@ break # define the DoubleML data object - data = datasets[i_rep]['data'] - ite = datasets[i_rep]['effects'] + data = datasets[i_rep]["data"] + ite = datasets[i_rep]["effects"] groups = pd.DataFrame( - np.column_stack((data['X_0'] <= 0.3, - (data['X_0'] > 0.3) & (data['X_0'] <= 0.7), - data['X_0'] > 0.7)), - columns=['Group 1', 'Group 2', 'Group 3']) + np.column_stack( + ( + data["X_0"] <= 0.3, + (data["X_0"] > 0.3) & (data["X_0"] <= 0.7), + data["X_0"] > 0.7, + ) + ), + columns=["Group 1", "Group 2", "Group 3"], + ) true_effects = [ite[groups[group]].mean() for group in groups.columns] - obj_dml_data = dml.DoubleMLData(data, 'y', 'd') + obj_dml_data = dml.DoubleMLData(data, "y", "d") - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_irm = dml.DoubleMLIRM( obj_dml_data=obj_dml_data, @@ -79,35 +94,53 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = gate.confint(level=level) effects = confint["effect"] - coverage = (confint.iloc[:, 0] < true_effects) & (true_effects < confint.iloc[:, 2]) + coverage = (confint.iloc[:, 0] < true_effects) & ( + true_effects < confint.iloc[:, 2] + ) ci_length = confint.iloc[:, 2] - confint.iloc[:, 0] confint_uniform = gate.confint(level=0.95, joint=True, n_rep_boot=2000) - coverage_uniform = all((confint_uniform.iloc[:, 0] < true_effects) & - (true_effects < confint_uniform.iloc[:, 2])) - ci_length_uniform = confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] + coverage_uniform = all( + (confint_uniform.iloc[:, 0] < true_effects) + & (true_effects < confint_uniform.iloc[:, 2]) + ) + ci_length_uniform = ( + confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] + ) df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.mean(), - "CI Length": ci_length.mean(), - "Bias": abs(effects - true_effects).mean(), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform.mean(), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.mean(), + "CI Length": ci_length.mean(), + "Bias": abs(effects - true_effects).mean(), + "Uniform Coverage": coverage_uniform, + "Uniform CI Length": ci_length_uniform.mean(), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -117,13 +150,17 @@ script_name = "irm_gate_coverage.py" path = "results/irm/irm_gate_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/irm/lpq_coverage.py b/scripts/irm/lpq_coverage.py index ab1152a..796053c 100644 --- a/scripts/irm/lpq_coverage.py +++ b/scripts/irm/lpq_coverage.py @@ -13,7 +13,7 @@ # set up parallelization n_cores = multiprocessing.cpu_count() print(f"Number of Cores: {n_cores}") -cores_used = n_cores-1 +cores_used = n_cores - 1 # Number of repetitions n_rep = 100 @@ -27,18 +27,25 @@ # define loc-scale model def f_loc(D, X, X_conf): - loc = 0.5*D + 2*D*X[:, 4] + 2.0*(X[:, 1] > 0.1) - 1.7*(X[:, 0] * X[:, 2] > 0) - 3*X[:, 3] - 2*X_conf[:, 0] + loc = ( + 0.5 * D + + 2 * D * X[:, 4] + + 2.0 * (X[:, 1] > 0.1) + - 1.7 * (X[:, 0] * X[:, 2] > 0) + - 3 * X[:, 3] + - 2 * X_conf[:, 0] + ) return loc def f_scale(D, X, X_conf): - scale = np.sqrt(0.5*D + 3*D*X[:, 0] + 0.4*X_conf[:, 0] + 2) + scale = np.sqrt(0.5 * D + 3 * D * X[:, 0] + 0.4 * X_conf[:, 0] + 2) return scale def generate_treatment(Z, X, X_conf): eta = np.random.normal(size=len(Z)) - d = ((0.5*Z - 0.3*X[:, 0] + 0.7*X_conf[:, 0] + eta) > 0)*1.0 + d = ((0.5 * Z - 0.3 * X[:, 0] + 0.7 * X_conf[:, 0] + eta) > 0) * 1.0 return d @@ -49,14 +56,14 @@ def dgp(n=200, p=5): D = generate_treatment(Z, X, X_conf) epsilon = np.random.normal(size=n) - Y = f_loc(D, X, X_conf) + f_scale(D, X, X_conf)*epsilon + Y = f_loc(D, X, X_conf) + f_scale(D, X, X_conf) * epsilon return Y, X, D, Z # Estimate true LPQ and LQTE with counterfactuals on large sample -n_true = int(10e+6) +n_true = int(10e6) X_true = np.random.uniform(0, 1, size=[n_true, p]) X_conf_true = np.random.uniform(-1, 1, size=[n_true, 1]) @@ -67,19 +74,25 @@ def dgp(n=200, p=5): epsilon_true = np.random.normal(size=n_true) compliers = (D1_true == 1) * (D0_true == 0) -print(f'Compliance probability: {str(compliers.mean())}') +print(f"Compliance probability: {str(compliers.mean())}") n_compliers = compliers.sum() -Y1 = f_loc(np.ones(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) +\ - f_scale(np.ones(n_compliers), X_true[compliers, :], X_conf_true[compliers, :])*epsilon_true[compliers] -Y0 = f_loc(np.zeros(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) +\ - f_scale(np.zeros(n_compliers), X_true[compliers, :], X_conf_true[compliers, :])*epsilon_true[compliers] +Y1 = ( + f_loc(np.ones(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) + + f_scale(np.ones(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) + * epsilon_true[compliers] +) +Y0 = ( + f_loc(np.zeros(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) + + f_scale(np.zeros(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) + * epsilon_true[compliers] +) Y0_quant = np.quantile(Y0, q=tau_vec) Y1_quant = np.quantile(Y1, q=tau_vec) -print(f'Local Potential Quantile Y(0): {Y0_quant}') -print(f'Local Potential Quantile Y(1): {Y1_quant}') +print(f"Local Potential Quantile Y(0): {Y0_quant}") +print(f"Local Potential Quantile Y(1): {Y1_quant}") LQTE = Y1_quant - Y0_quant -print(f'Local Quantile Treatment Effect: {LQTE}') +print(f"Local Quantile Treatment Effect: {LQTE}") # to get the best possible comparison between different learners (and settings) we first simulate all datasets @@ -92,11 +105,25 @@ def dgp(n=200, p=5): # set up hyperparameters hyperparam_dict = { - "learner_g": [("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1))], - "learner_m": [("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [ + ("Logistic Regression", LogisticRegressionCV()), + ( + "LGBM", + LGBMClassifier( + n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 + ), + ), + ], + "learner_m": [ + ("Logistic Regression", LogisticRegressionCV()), + ( + "LGBM", + LGBMClassifier( + n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -120,42 +147,59 @@ def dgp(n=200, p=5): # define the DoubleML data object obj_dml_data = datasets[i_rep] - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_qte = dml.DoubleMLQTE( obj_dml_data=obj_dml_data, ml_g=ml_g, ml_m=ml_m, - score='LPQ', - quantiles=tau_vec + score="LPQ", + quantiles=tau_vec, ) dml_qte.fit(n_jobs_models=cores_used) effects = dml_qte.coef for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_qte.confint(level=level) - coverage = np.mean((confint.iloc[:, 0] < LQTE) & (LQTE < confint.iloc[:, 1])) + coverage = np.mean( + (confint.iloc[:, 0] < LQTE) & (LQTE < confint.iloc[:, 1]) + ) ci_length = np.mean(confint.iloc[:, 1] - confint.iloc[:, 0]) dml_qte.bootstrap(n_rep_boot=2000) confint_uniform = dml_qte.confint(level=level, joint=True) - coverage_uniform = all((confint_uniform.iloc[:, 0] < LQTE) & - (LQTE < confint_uniform.iloc[:, 1])) - ci_length_uniform = np.mean(confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0]) + coverage_uniform = all( + (confint_uniform.iloc[:, 0] < LQTE) + & (LQTE < confint_uniform.iloc[:, 1]) + ) + ci_length_uniform = np.mean( + confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0] + ) df_results_detailed_qte = pd.concat( - (df_results_detailed_qte, - pd.DataFrame({ - "Coverage": coverage, - "CI Length": ci_length, - "Bias": np.mean(abs(effects - LQTE)), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed_qte, + pd.DataFrame( + { + "Coverage": coverage, + "CI Length": ci_length, + "Bias": np.mean(abs(effects - LQTE)), + "Uniform Coverage": coverage_uniform, + "Uniform CI Length": ci_length_uniform, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) # evaluate each model coverage_0 = np.zeros(len(tau_vec)) @@ -173,10 +217,12 @@ def dgp(n=200, p=5): confint_0 = model_0.confint(level=level) confint_1 = model_1.confint(level=level) - coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_quant[tau_idx]) & \ - (Y0_quant[tau_idx] < confint_0.iloc[0, 1]) - coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_quant[tau_idx]) & \ - (Y1_quant[tau_idx] < confint_1.iloc[0, 1]) + coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_quant[tau_idx]) & ( + Y0_quant[tau_idx] < confint_0.iloc[0, 1] + ) + coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_quant[tau_idx]) & ( + Y1_quant[tau_idx] < confint_1.iloc[0, 1] + ) ci_length_0[tau_idx] = confint_0.iloc[0, 1] - confint_0.iloc[0, 0] ci_length_1[tau_idx] = confint_1.iloc[0, 1] - confint_1.iloc[0, 0] @@ -185,56 +231,75 @@ def dgp(n=200, p=5): bias_1[tau_idx] = abs(model_1.coef[0] - Y1_quant[tau_idx]) df_results_detailed_pq0 = pd.concat( - (df_results_detailed_pq0, - pd.DataFrame({ - "Coverage": np.mean(coverage_0), - "CI Length": np.mean(ci_length_0), - "Bias": np.mean(bias_0), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed_pq0, + pd.DataFrame( + { + "Coverage": np.mean(coverage_0), + "CI Length": np.mean(ci_length_0), + "Bias": np.mean(bias_0), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) df_results_detailed_pq1 = pd.concat( - (df_results_detailed_pq1, - pd.DataFrame({ - "Coverage": np.mean(coverage_1), - "CI Length": np.mean(ci_length_1), - "Bias": np.mean(bias_1), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results_qte = df_results_detailed_qte.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed_pq1, + pd.DataFrame( + { + "Coverage": np.mean(coverage_1), + "CI Length": np.mean(ci_length_1), + "Bias": np.mean(bias_1), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results_qte = ( + df_results_detailed_qte.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results_qte) -df_results_pq0 = df_results_detailed_pq0.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() +df_results_pq0 = ( + df_results_detailed_pq0.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results_pq0) -df_results_pq1 = df_results_detailed_pq1.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() +df_results_pq1 = ( + df_results_detailed_pq1.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results_pq1) end_time = time.time() @@ -244,13 +309,17 @@ def dgp(n=200, p=5): script_name = "lpq_coverage.py" path = "results/irm/lpq_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results_qte.to_csv(f"{path}_lqte.csv", index=False) diff --git a/scripts/irm/pq_coverage.py b/scripts/irm/pq_coverage.py index 2a6a727..480bef9 100644 --- a/scripts/irm/pq_coverage.py +++ b/scripts/irm/pq_coverage.py @@ -13,7 +13,7 @@ # set up parallelization n_cores = multiprocessing.cpu_count() print(f"Number of Cores: {n_cores}") -cores_used = n_cores-1 +cores_used = n_cores - 1 # Number of repetitions n_rep = 100 @@ -27,33 +27,39 @@ # define loc-scale model def f_loc(D, X): - loc = 0.5*D + 2*D*X[:, 4] + 2.0*(X[:, 1] > 0.1) - 1.7*(X[:, 0] * X[:, 2] > 0) - 3*X[:, 3] + loc = ( + 0.5 * D + + 2 * D * X[:, 4] + + 2.0 * (X[:, 1] > 0.1) + - 1.7 * (X[:, 0] * X[:, 2] > 0) + - 3 * X[:, 3] + ) return loc def f_scale(D, X): - scale = np.sqrt(0.5*D + 0.3*D*X[:, 1] + 2) + scale = np.sqrt(0.5 * D + 0.3 * D * X[:, 1] + 2) return scale def dgp(n=200, p=5): X = np.random.uniform(-1, 1, size=[n, p]) - D = ((X[:, 1] - X[:, 3] + 1.5*(X[:, 0] > 0) + np.random.normal(size=n)) > 0)*1.0 + D = ((X[:, 1] - X[:, 3] + 1.5 * (X[:, 0] > 0) + np.random.normal(size=n)) > 0) * 1.0 epsilon = np.random.normal(size=n) - Y = f_loc(D, X) + f_scale(D, X)*epsilon + Y = f_loc(D, X) + f_scale(D, X) * epsilon return Y, X, D, epsilon # Estimate true PQ and QTE with counterfactuals on large sample -n_true = int(10e+6) +n_true = int(10e6) _, X_true, _, epsilon_true = dgp(n=n_true, p=p) D1 = np.ones(n_true) D0 = np.zeros(n_true) -Y1 = f_loc(D1, X_true) + f_scale(D1, X_true)*epsilon_true -Y0 = f_loc(D0, X_true) + f_scale(D0, X_true)*epsilon_true +Y1 = f_loc(D1, X_true) + f_scale(D1, X_true) * epsilon_true +Y0 = f_loc(D0, X_true) + f_scale(D0, X_true) * epsilon_true Y1_quant = np.quantile(Y1, q=tau_vec) Y0_quant = np.quantile(Y0, q=tau_vec) @@ -64,18 +70,31 @@ def dgp(n=200, p=5): np.random.seed(42) datasets = [] for i in range(n_rep): - Y, X, D, _ = dgp(n=n_obs, - p=p) + Y, X, D, _ = dgp(n=n_obs, p=p) data = dml.DoubleMLData.from_arrays(X, Y, D) datasets.append(data) # set up hyperparameters hyperparam_dict = { - "learner_g": [("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1))], - "learner_m": [("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [ + ("Logistic Regression", LogisticRegressionCV()), + ( + "LGBM", + LGBMClassifier( + n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 + ), + ), + ], + "learner_m": [ + ("Logistic Regression", LogisticRegressionCV()), + ( + "LGBM", + LGBMClassifier( + n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -99,42 +118,59 @@ def dgp(n=200, p=5): # define the DoubleML data object obj_dml_data = datasets[i_rep] - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_qte = dml.DoubleMLQTE( obj_dml_data=obj_dml_data, ml_g=ml_g, ml_m=ml_m, score="PQ", - quantiles=tau_vec + quantiles=tau_vec, ) dml_qte.fit(n_jobs_models=cores_used) effects = dml_qte.coef for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_qte.confint(level=level) - coverage = np.mean((confint.iloc[:, 0] < QTE) & (QTE < confint.iloc[:, 1])) + coverage = np.mean( + (confint.iloc[:, 0] < QTE) & (QTE < confint.iloc[:, 1]) + ) ci_length = np.mean(confint.iloc[:, 1] - confint.iloc[:, 0]) dml_qte.bootstrap(n_rep_boot=2000) confint_uniform = dml_qte.confint(level=level, joint=True) - coverage_uniform = all((confint_uniform.iloc[:, 0] < QTE) & - (QTE < confint_uniform.iloc[:, 1])) - ci_length_uniform = np.mean(confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0]) + coverage_uniform = all( + (confint_uniform.iloc[:, 0] < QTE) + & (QTE < confint_uniform.iloc[:, 1]) + ) + ci_length_uniform = np.mean( + confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0] + ) df_results_detailed_qte = pd.concat( - (df_results_detailed_qte, - pd.DataFrame({ - "Coverage": coverage, - "CI Length": ci_length, - "Bias": np.mean(abs(effects - QTE)), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed_qte, + pd.DataFrame( + { + "Coverage": coverage, + "CI Length": ci_length, + "Bias": np.mean(abs(effects - QTE)), + "Uniform Coverage": coverage_uniform, + "Uniform CI Length": ci_length_uniform, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) # evaluate each model coverage_0 = np.zeros(len(tau_vec)) @@ -152,10 +188,12 @@ def dgp(n=200, p=5): confint_0 = model_0.confint(level=level) confint_1 = model_1.confint(level=level) - coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_quant[tau_idx]) & \ - (Y0_quant[tau_idx] < confint_0.iloc[0, 1]) - coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_quant[tau_idx]) & \ - (Y1_quant[tau_idx] < confint_1.iloc[0, 1]) + coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_quant[tau_idx]) & ( + Y0_quant[tau_idx] < confint_0.iloc[0, 1] + ) + coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_quant[tau_idx]) & ( + Y1_quant[tau_idx] < confint_1.iloc[0, 1] + ) ci_length_0[tau_idx] = confint_0.iloc[0, 1] - confint_0.iloc[0, 0] ci_length_1[tau_idx] = confint_1.iloc[0, 1] - confint_1.iloc[0, 0] @@ -164,56 +202,75 @@ def dgp(n=200, p=5): bias_1[tau_idx] = abs(model_1.coef[0] - Y1_quant[tau_idx]) df_results_detailed_pq0 = pd.concat( - (df_results_detailed_pq0, - pd.DataFrame({ - "Coverage": np.mean(coverage_0), - "CI Length": np.mean(ci_length_0), - "Bias": np.mean(bias_0), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed_pq0, + pd.DataFrame( + { + "Coverage": np.mean(coverage_0), + "CI Length": np.mean(ci_length_0), + "Bias": np.mean(bias_0), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) df_results_detailed_pq1 = pd.concat( - (df_results_detailed_pq1, - pd.DataFrame({ - "Coverage": np.mean(coverage_1), - "CI Length": np.mean(ci_length_1), - "Bias": np.mean(bias_1), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results_qte = df_results_detailed_qte.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed_pq1, + pd.DataFrame( + { + "Coverage": np.mean(coverage_1), + "CI Length": np.mean(ci_length_1), + "Bias": np.mean(bias_1), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results_qte = ( + df_results_detailed_qte.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results_qte) -df_results_pq0 = df_results_detailed_pq0.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() +df_results_pq0 = ( + df_results_detailed_pq0.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results_pq0) -df_results_pq1 = df_results_detailed_pq1.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() +df_results_pq1 = ( + df_results_detailed_pq1.groupby(["Learner g", "Learner m", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results_pq1) end_time = time.time() @@ -223,13 +280,17 @@ def dgp(n=200, p=5): script_name = "pq_coverage.py" path = "results/irm/pq_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results_qte.to_csv(f"{path}_qte.csv", index=False) diff --git a/scripts/irm/ssm_mar_ate_coverage.py b/scripts/irm/ssm_mar_ate_coverage.py index 8aa0e56..ac073d2 100644 --- a/scripts/irm/ssm_mar_ate_coverage.py +++ b/scripts/irm/ssm_mar_ate_coverage.py @@ -25,22 +25,24 @@ datasets = [] for i in range(n_rep): - data = make_ssm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, mar=True, return_type='DataFrame') + data = make_ssm_data( + theta=theta, n_obs=n_obs, dim_x=dim_x, mar=True, return_type="DataFrame" + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { "score": ["missing-at-random"], - "learner_g": [("Lasso", LassoCV()), - ("LGBM", - LGBMRegressor(verbose=-1))], - "learner_m": [("Logistic", LogisticRegressionCV()), - ("LGBM", - LGBMClassifier(verbose=-1))], - "learner_pi": [("Logistic", LogisticRegressionCV()), - ("LGBM", - LGBMClassifier(verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [("Lasso", LassoCV()), ("LGBM", LGBMRegressor(verbose=-1))], + "learner_m": [ + ("Logistic", LogisticRegressionCV()), + ("LGBM", LGBMClassifier(verbose=-1)), + ], + "learner_pi": [ + ("Logistic", LogisticRegressionCV()), + ("LGBM", LGBMClassifier(verbose=-1)), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -60,12 +62,18 @@ break # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], 'y', 'd', s_col='s') + obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d", s_col="s") for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): - for learner_pi_idx, (learner_pi_name, ml_pi) in enumerate(hyperparam_dict["learner_pi"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): + for learner_pi_idx, (learner_pi_name, ml_pi) in enumerate( + hyperparam_dict["learner_pi"] + ): dml_ssm = dml.DoubleMLSSM( obj_dml_data=obj_dml_data, @@ -78,30 +86,42 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_ssm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + coverage = (confint.iloc[0, 0] < theta) & ( + theta < confint.iloc[0, 1] + ) ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_ssm.coef[0] - theta), - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Learner pi": learner_pi_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "Learner pi", "score", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(dml_ssm.coef[0] - theta), + "score": score, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Learner pi": learner_pi_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby( + ["Learner g", "Learner m", "Learner pi", "score", "level"] + ) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -111,13 +131,17 @@ script_name = "ssm_mar_ate_coverage.py" path = "results/irm/ssm_mar_ate_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/irm/ssm_nonignorable_ate_coverage.py b/scripts/irm/ssm_nonignorable_ate_coverage.py index ebbacfe..fa57b3e 100644 --- a/scripts/irm/ssm_nonignorable_ate_coverage.py +++ b/scripts/irm/ssm_nonignorable_ate_coverage.py @@ -25,22 +25,24 @@ datasets = [] for i in range(n_rep): - data = make_ssm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, mar=False, return_type='DataFrame') + data = make_ssm_data( + theta=theta, n_obs=n_obs, dim_x=dim_x, mar=False, return_type="DataFrame" + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { "score": ["nonignorable"], - "learner_g": [("Lasso", LassoCV()), - ("LGBM", - LGBMRegressor(verbose=-1))], - "learner_m": [("Logistic", LogisticRegressionCV()), - ("LGBM", - LGBMClassifier(verbose=-1))], - "learner_pi": [("Logistic", LogisticRegressionCV()), - ("LGBM", - LGBMClassifier(verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [("Lasso", LassoCV()), ("LGBM", LGBMRegressor(verbose=-1))], + "learner_m": [ + ("Logistic", LogisticRegressionCV()), + ("LGBM", LGBMClassifier(verbose=-1)), + ], + "learner_pi": [ + ("Logistic", LogisticRegressionCV()), + ("LGBM", LGBMClassifier(verbose=-1)), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -60,12 +62,18 @@ break # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], 'y', 'd', z_cols='z', s_col='s') + obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d", z_cols="z", s_col="s") for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): - for learner_pi_idx, (learner_pi_name, ml_pi) in enumerate(hyperparam_dict["learner_pi"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): + for learner_pi_idx, (learner_pi_name, ml_pi) in enumerate( + hyperparam_dict["learner_pi"] + ): dml_ssm = dml.DoubleMLSSM( obj_dml_data=obj_dml_data, @@ -78,30 +86,42 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_ssm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + coverage = (confint.iloc[0, 0] < theta) & ( + theta < confint.iloc[0, 1] + ) ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_ssm.coef[0] - theta), - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Learner pi": learner_pi_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "Learner pi", "score", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(dml_ssm.coef[0] - theta), + "score": score, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Learner pi": learner_pi_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby( + ["Learner g", "Learner m", "Learner pi", "score", "level"] + ) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -111,13 +131,17 @@ script_name = "ssm_nonignorable_ate_coverage.py" path = "results/irm/ssm_nonignorable_ate_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/plm/pliv_late_coverage.py b/scripts/plm/pliv_late_coverage.py index 6cc4329..ee25015 100644 --- a/scripts/plm/pliv_late_coverage.py +++ b/scripts/plm/pliv_late_coverage.py @@ -26,22 +26,42 @@ datasets = [] for i in range(n_rep): - data = make_pliv_CHS2015(alpha=theta, n_obs=n_obs, dim_x=dim_x, dim_z=dim_z, return_type='DataFrame') + data = make_pliv_CHS2015( + alpha=theta, n_obs=n_obs, dim_x=dim_x, dim_z=dim_z, return_type="DataFrame" + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { "score": ["partialling out", "IV-type"], - "learner_g": [("Lasso", LassoCV()), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "learner_m": [("Lasso", LassoCV()), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "learner_r": [("Lasso", LassoCV()), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "learner_m": [ + ("Lasso", LassoCV()), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "learner_r": [ + ("Lasso", LassoCV()), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -61,12 +81,18 @@ break # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], 'y', 'd', z_cols='Z1') + obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d", z_cols="Z1") for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): - for learner_r_idx, (learner_r_name, ml_r) in enumerate(hyperparam_dict["learner_r"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): + for learner_r_idx, (learner_r_name, ml_r) in enumerate( + hyperparam_dict["learner_r"] + ): if score == "IV-type": # Set machine learning methods for g & m dml_pliv = dml.DoubleMLPLIV( @@ -90,30 +116,42 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_pliv.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + coverage = (confint.iloc[0, 0] < theta) & ( + theta < confint.iloc[0, 1] + ) ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_pliv.coef[0] - theta), - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Learner r": learner_r_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "Learner r", "score", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(dml_pliv.coef[0] - theta), + "score": score, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Learner r": learner_r_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby( + ["Learner g", "Learner m", "Learner r", "score", "level"] + ) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -123,13 +161,17 @@ script_name = "pliv_late_coverage.py" path = "results/plm/pliv_late_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/plm/plr_ate.py b/scripts/plm/plr_ate.py index 09e2531..660779d 100644 --- a/scripts/plm/plr_ate.py +++ b/scripts/plm/plr_ate.py @@ -1,11 +1,10 @@ - from montecover.plm import PLRATECoverageSimulation # Create and run simulation with config file sim = PLRATECoverageSimulation( config_file="scripts/plm/plr_ate_config.yml", log_level="INFO", - log_file="logs/plm/plr_ate_sim.log" + log_file="logs/plm/plr_ate_sim.log", ) sim.run_simulation() sim.save_results(output_path="results/plm/", file_prefix="plr_ate") diff --git a/scripts/plm/plr_ate_config.yml b/scripts/plm/plr_ate_config.yml index e2067bc..f32bb8d 100644 --- a/scripts/plm/plr_ate_config.yml +++ b/scripts/plm/plr_ate_config.yml @@ -30,4 +30,4 @@ dml_parameters: score: ["partialling out", "IV-type"] confidence_parameters: - level: [0.95, 0.90] # Confidence levels \ No newline at end of file + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/plm/plr_ate_coverage.py b/scripts/plm/plr_ate_coverage.py index ab715d7..f0dec11 100644 --- a/scripts/plm/plr_ate_coverage.py +++ b/scripts/plm/plr_ate_coverage.py @@ -25,19 +25,33 @@ datasets = [] for i in range(n_rep): - data = make_plr_CCDDHNR2018(alpha=theta, n_obs=n_obs, dim_x=dim_x, return_type='DataFrame') + data = make_plr_CCDDHNR2018( + alpha=theta, n_obs=n_obs, dim_x=dim_x, return_type="DataFrame" + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { "score": ["partialling out", "IV-type"], - "learner_g": [("Lasso", LassoCV()), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "learner_m": [("Lasso", LassoCV()), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "learner_m": [ + ("Lasso", LassoCV()), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -57,11 +71,15 @@ break # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], 'y', 'd') + obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d") for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): if score == "IV-type": # Set machine learning methods for g & m dml_plr = dml.DoubleMLPLR( @@ -83,29 +101,39 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = dml_plr.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + coverage = (confint.iloc[0, 0] < theta) & ( + theta < confint.iloc[0, 1] + ) ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_plr.coef[0] - theta), - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "score", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(dml_plr.coef[0] - theta), + "score": score, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "score", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -115,13 +143,17 @@ script_name = "plr_ate_coverage.py" path = "results/plm/plr_ate_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/plm/plr_ate_sensitivity.py b/scripts/plm/plr_ate_sensitivity.py index 34e73dc..7557435 100644 --- a/scripts/plm/plr_ate_sensitivity.py +++ b/scripts/plm/plr_ate_sensitivity.py @@ -25,22 +25,31 @@ np.random.seed(42) # test inputs -dgp_dict = make_confounded_plr_data(n_obs=int(1e+6), cf_y=cf_y, cf_d=cf_d) -oracle_dict = dgp_dict['oracle_values'] - -cf_y_test = np.mean(np.square(oracle_dict['g_long'] - oracle_dict['g_short'])) / \ - np.mean(np.square(dgp_dict['y'] - oracle_dict['g_short'])) -print(f'Input cf_y:{cf_y} \nCalculated cf_y: {round(cf_y_test, 5)}') - -rr_long = (dgp_dict['d'] - oracle_dict['m_long']) / np.mean(np.square(dgp_dict['d'] - oracle_dict['m_long'])) -rr_short = (dgp_dict['d'] - oracle_dict['m_short']) / np.mean(np.square(dgp_dict['d'] - oracle_dict['m_short'])) -C2_D = (np.mean(np.square(rr_long)) - np.mean(np.square(rr_short))) / np.mean(np.square(rr_short)) +dgp_dict = make_confounded_plr_data(n_obs=int(1e6), cf_y=cf_y, cf_d=cf_d) +oracle_dict = dgp_dict["oracle_values"] + +cf_y_test = np.mean( + np.square(oracle_dict["g_long"] - oracle_dict["g_short"]) +) / np.mean(np.square(dgp_dict["y"] - oracle_dict["g_short"])) +print(f"Input cf_y:{cf_y} \nCalculated cf_y: {round(cf_y_test, 5)}") + +rr_long = (dgp_dict["d"] - oracle_dict["m_long"]) / np.mean( + np.square(dgp_dict["d"] - oracle_dict["m_long"]) +) +rr_short = (dgp_dict["d"] - oracle_dict["m_short"]) / np.mean( + np.square(dgp_dict["d"] - oracle_dict["m_short"]) +) +C2_D = (np.mean(np.square(rr_long)) - np.mean(np.square(rr_short))) / np.mean( + np.square(rr_short) +) cf_d_test = C2_D / (1 + C2_D) -print(f'Input cf_d:{cf_d}\nCalculated cf_d: {round(cf_d_test, 5)}') +print(f"Input cf_d:{cf_d}\nCalculated cf_d: {round(cf_d_test, 5)}") # compute the value for rho -rho = np.corrcoef((oracle_dict['g_long'] - oracle_dict['g_short']), (rr_long - rr_short))[0, 1] -print(f'Correlation rho: {round(rho, 5)}') +rho = np.corrcoef( + (oracle_dict["g_long"] - oracle_dict["g_short"]), (rr_long - rr_short) +)[0, 1] +print(f"Correlation rho: {round(rho, 5)}") datasets = [] for i in range(n_rep): @@ -50,13 +59,35 @@ # set up hyperparameters hyperparam_dict = { "score": ["partialling out", "IV-type"], - "learner_g": [("LGBM", LGBMRegressor(n_estimators=500, learning_rate=0.05, min_child_samples=5, verbose=-1)), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "learner_m": [("LGBM", LGBMRegressor(n_estimators=500, learning_rate=0.05, min_child_samples=2, verbose=-1)), - ("Random Forest", - RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2))], - "level": [0.95, 0.90] + "learner_g": [ + ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.05, min_child_samples=5, verbose=-1 + ), + ), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "learner_m": [ + ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.05, min_child_samples=2, verbose=-1 + ), + ), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -77,13 +108,20 @@ # define the DoubleML data object dgp_dict = datasets[i_rep] - x_cols = [f'X{i + 1}' for i in np.arange(dgp_dict['x'].shape[1])] - df = pd.DataFrame(np.column_stack((dgp_dict['x'], dgp_dict['y'], dgp_dict['d'])), columns=x_cols + ['y', 'd']) - obj_dml_data = dml.DoubleMLData(df, 'y', 'd') + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + obj_dml_data = dml.DoubleMLData(df, "y", "d") for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): if score == "IV-type": # Set machine learning methods for g & m dml_plr = dml.DoubleMLPLR( @@ -107,50 +145,75 @@ estimate = dml_plr.coef[0] confint = dml_plr.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + coverage = (confint.iloc[0, 0] < theta) & ( + theta < confint.iloc[0, 1] + ) ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] # test sensitivity parameters - dml_plr.sensitivity_analysis(cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta) - cover_lower = theta >= dml_plr.sensitivity_params['ci']['lower'] - cover_upper = theta <= dml_plr.sensitivity_params['ci']['upper'] - rv = dml_plr.sensitivity_params['rv'] - rva = dml_plr.sensitivity_params['rva'] - bias_lower = abs(theta - dml_plr.sensitivity_params['theta']['lower']) - bias_upper = abs(theta - dml_plr.sensitivity_params['theta']['upper']) + dml_plr.sensitivity_analysis( + cf_y=cf_y, + cf_d=cf_d, + rho=rho, + level=level, + null_hypothesis=theta, + ) + cover_lower = theta >= dml_plr.sensitivity_params["ci"]["lower"] + cover_upper = theta <= dml_plr.sensitivity_params["ci"]["upper"] + rv = dml_plr.sensitivity_params["rv"] + rva = dml_plr.sensitivity_params["rva"] + bias_lower = abs( + theta - dml_plr.sensitivity_params["theta"]["lower"] + ) + bias_upper = abs( + theta - dml_plr.sensitivity_params["theta"]["upper"] + ) df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "score", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(estimate - theta), + "Coverage (Lower)": cover_lower.astype(int), + "Coverage (Upper)": cover_upper.astype(int), + "RV": rv, + "RVa": rva, + "Bias (Lower)": bias_lower, + "Bias (Upper)": bias_upper, + "score": score, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "score", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -160,13 +223,17 @@ script_name = "plr_ate_sensitivity.py" path = "results/plm/plr_ate_sensitivity" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/plm/plr_cate_coverage.py b/scripts/plm/plr_cate_coverage.py index 5fee83d..0009040 100644 --- a/scripts/plm/plr_cate_coverage.py +++ b/scripts/plm/plr_cate_coverage.py @@ -25,16 +25,22 @@ np.random.seed(42) datasets = [] for i in range(n_rep): - data = make_heterogeneous_data(n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=False) + data = make_heterogeneous_data( + n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=False + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { - "learner_g": [("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1))], - "learner_m": [("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), + ], + "learner_m": [ + ("Lasso", LassoCV()), + ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -54,16 +60,20 @@ break # define the DoubleML data object - data = datasets[i_rep]['data'] + data = datasets[i_rep]["data"] design_matrix = patsy.dmatrix("bs(x, df=5, degree=2)", {"x": data["X_0"]}) spline_basis = pd.DataFrame(design_matrix) - true_effects = datasets[i_rep]['effects'] + true_effects = datasets[i_rep]["effects"] - obj_dml_data = dml.DoubleMLData(data, 'y', 'd') + obj_dml_data = dml.DoubleMLData(data, "y", "d") - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_plr = dml.DoubleMLPLR( obj_dml_data=obj_dml_data, @@ -76,35 +86,55 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = cate.confint(basis=spline_basis, level=level) effects = confint["effect"] - coverage = (confint.iloc[:, 0] < true_effects) & (true_effects < confint.iloc[:, 2]) + coverage = (confint.iloc[:, 0] < true_effects) & ( + true_effects < confint.iloc[:, 2] + ) ci_length = confint.iloc[:, 2] - confint.iloc[:, 0] - confint_uniform = cate.confint(basis=spline_basis, level=0.95, joint=True, n_rep_boot=2000) - coverage_uniform = all((confint_uniform.iloc[:, 0] < true_effects) & - (true_effects < confint_uniform.iloc[:, 2])) - ci_length_uniform = confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] + confint_uniform = cate.confint( + basis=spline_basis, level=0.95, joint=True, n_rep_boot=2000 + ) + coverage_uniform = all( + (confint_uniform.iloc[:, 0] < true_effects) + & (true_effects < confint_uniform.iloc[:, 2]) + ) + ci_length_uniform = ( + confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] + ) df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.mean(), - "CI Length": ci_length.mean(), - "Bias": abs(effects - true_effects).mean(), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform.mean(), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.mean(), + "CI Length": ci_length.mean(), + "Bias": abs(effects - true_effects).mean(), + "Uniform Coverage": coverage_uniform, + "Uniform CI Length": ci_length_uniform.mean(), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -114,13 +144,17 @@ script_name = "plr_cate_coverage.py" path = "results/plm/plr_cate_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/plm/plr_gate_coverage.py b/scripts/plm/plr_gate_coverage.py index 7c99669..6709ccd 100644 --- a/scripts/plm/plr_gate_coverage.py +++ b/scripts/plm/plr_gate_coverage.py @@ -24,16 +24,22 @@ np.random.seed(42) datasets = [] for i in range(n_rep): - data = make_heterogeneous_data(n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=False) + data = make_heterogeneous_data( + n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=False + ) datasets.append(data) # set up hyperparameters hyperparam_dict = { - "learner_g": [("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1))], - "learner_m": [("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1))], - "level": [0.95, 0.90] + "learner_g": [ + ("Lasso", LassoCV()), + ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), + ], + "learner_m": [ + ("Lasso", LassoCV()), + ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), + ], + "level": [0.95, 0.90], } # set up the results dataframe @@ -53,20 +59,29 @@ break # define the DoubleML data object - data = datasets[i_rep]['data'] - ite = datasets[i_rep]['effects'] + data = datasets[i_rep]["data"] + ite = datasets[i_rep]["effects"] groups = pd.DataFrame( - np.column_stack((data['X_0'] <= 0.3, - (data['X_0'] > 0.3) & (data['X_0'] <= 0.7), - data['X_0'] > 0.7)), - columns=['Group 1', 'Group 2', 'Group 3']) + np.column_stack( + ( + data["X_0"] <= 0.3, + (data["X_0"] > 0.3) & (data["X_0"] <= 0.7), + data["X_0"] > 0.7, + ) + ), + columns=["Group 1", "Group 2", "Group 3"], + ) true_effects = [ite[groups[group]].mean() for group in groups.columns] - obj_dml_data = dml.DoubleMLData(data, 'y', 'd') + obj_dml_data = dml.DoubleMLData(data, "y", "d") - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): # Set machine learning methods for g & m dml_plr = dml.DoubleMLPLR( obj_dml_data=obj_dml_data, @@ -79,35 +94,53 @@ for level_idx, level in enumerate(hyperparam_dict["level"]): confint = gate.confint(level=level) effects = confint["effect"] - coverage = (confint.iloc[:, 0] < true_effects) & (true_effects < confint.iloc[:, 2]) + coverage = (confint.iloc[:, 0] < true_effects) & ( + true_effects < confint.iloc[:, 2] + ) ci_length = confint.iloc[:, 2] - confint.iloc[:, 0] confint_uniform = gate.confint(level=0.95, joint=True, n_rep_boot=2000) - coverage_uniform = all((confint_uniform.iloc[:, 0] < true_effects) & - (true_effects < confint_uniform.iloc[:, 2])) - ci_length_uniform = confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] + coverage_uniform = all( + (confint_uniform.iloc[:, 0] < true_effects) + & (true_effects < confint_uniform.iloc[:, 2]) + ) + ci_length_uniform = ( + confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] + ) df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.mean(), - "CI Length": ci_length.mean(), - "Bias": abs(effects - true_effects).mean(), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform.mean(), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.mean(), + "CI Length": ci_length.mean(), + "Bias": abs(effects - true_effects).mean(), + "Uniform Coverage": coverage_uniform, + "Uniform CI Length": ci_length_uniform.mean(), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -117,13 +150,17 @@ script_name = "plr_gate_coverage.py" path = "results/plm/plr_gate_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/rdd/rdd_fuzzy_coverage.py b/scripts/rdd/rdd_fuzzy_coverage.py index f9773fa..20b49ff 100644 --- a/scripts/rdd/rdd_fuzzy_coverage.py +++ b/scripts/rdd/rdd_fuzzy_coverage.py @@ -38,25 +38,56 @@ "fs_specification": ["cutoff", "cutoff and score", "interacted cutoff and score"], "learner_g": [ ("Linear", LinearRegression()), - ("LGBM", LGBMRegressor(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1)), + ( + "LGBM", + LGBMRegressor(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1), + ), ("Global linear", GlobalRegressor(LinearRegression())), - ("Stacked", StackingRegressor( - estimators=[ - ('lr', LinearRegression()), - ('lgbm', LGBMRegressor(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1)), - ('glr', GlobalRegressor(LinearRegression()))], - final_estimator=Ridge()))], + ( + "Stacked", + StackingRegressor( + estimators=[ + ("lr", LinearRegression()), + ( + "lgbm", + LGBMRegressor( + n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1 + ), + ), + ("glr", GlobalRegressor(LinearRegression())), + ], + final_estimator=Ridge(), + ), + ), + ], "learner_m": [ ("Linear", LogisticRegression()), - ("LGBM", LGBMClassifier(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1)), + ( + "LGBM", + LGBMClassifier( + n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1 + ), + ), ("Global linear", GlobalClassifier(LogisticRegression())), - ("Stacked", StackingClassifier( - estimators=[ - ('lr', LogisticRegression()), - ('lgbm', LGBMClassifier(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1)), - ('glr', GlobalClassifier(LogisticRegression()))], - final_estimator=LogisticRegression()))], - "level": [0.95, 0.90]} + ( + "Stacked", + StackingClassifier( + estimators=[ + ("lr", LogisticRegression()), + ( + "lgbm", + LGBMClassifier( + n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1 + ), + ), + ("glr", GlobalClassifier(LogisticRegression())), + ], + final_estimator=LogisticRegression(), + ), + ), + ], + "level": [0.95, 0.90], +} # set up the results dataframe df_results_detailed = pd.DataFrame() @@ -77,10 +108,14 @@ data = datasets[i_rep] # get oracle value score = data["score"] - complier_mask = (((data["D"] == 0) & (data["score"] < cutoff)) | ((data["D"] == 1) & (data["score"] > cutoff))) - - ite = data["oracle_values"]['Y1'] - data["oracle_values"]['Y0'] - kernel_reg = KernelReg(endog=ite[complier_mask], exog=score[complier_mask], var_type='c', reg_type='ll') + complier_mask = ((data["D"] == 0) & (data["score"] < cutoff)) | ( + (data["D"] == 1) & (data["score"] > cutoff) + ) + + ite = data["oracle_values"]["Y1"] - data["oracle_values"]["Y0"] + kernel_reg = KernelReg( + endog=ite[complier_mask], exog=score[complier_mask], var_type="c", reg_type="ll" + ) effect_at_cutoff, _ = kernel_reg.fit(np.array([cutoff])) oracle_effect = effect_at_cutoff[0] @@ -90,7 +125,7 @@ # baseline for level_idx, level in enumerate(hyperparam_dict["level"]): - res = rdrobust(y=Y, x=score, fuzzy=D, covs=Z, c=cutoff, level=level*100) + res = rdrobust(y=Y, x=score, fuzzy=D, covs=Z, c=cutoff, level=level * 100) coef = res.coef.loc["Robust", "Coeff"] ci_lower = res.ci.loc["Robust", "CI Lower"] ci_upper = res.ci.loc["Robust", "CI Upper"] @@ -99,25 +134,38 @@ ci_length = ci_upper - ci_lower df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": ci_length, - "Bias": abs(coef - oracle_effect), - "Learner g": "linear", - "Learner m": "linear", - "Method": "rdrobust", - "fs specification": "cutoff", - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": ci_length, + "Bias": abs(coef - oracle_effect), + "Learner g": "linear", + "Learner m": "linear", + "Method": "rdrobust", + "fs specification": "cutoff", + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) # define the DoubleML data object obj_dml_data = dml.DoubleMLData.from_arrays(y=Y, d=D, x=Z, s=score) - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for learner_m_idx, (learner_m_name, ml_m) in enumerate(hyperparam_dict["learner_m"]): - for fs_specification_idx, fs_specification in enumerate(hyperparam_dict["fs_specification"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): + for fs_specification_idx, fs_specification in enumerate( + hyperparam_dict["fs_specification"] + ): rdflex_model = RDFlex( obj_dml_data, ml_g=ml_g, @@ -126,35 +174,47 @@ n_rep=1, cutoff=cutoff, fuzzy=True, - fs_specification=fs_specification) + fs_specification=fs_specification, + ) rdflex_model.fit(n_iterations=2) for level_idx, level in enumerate(hyperparam_dict["level"]): confint = rdflex_model.confint(level=level) - coverage = (confint.iloc[2, 0] < oracle_effect) & (oracle_effect < confint.iloc[2, 1]) + coverage = (confint.iloc[2, 0] < oracle_effect) & ( + oracle_effect < confint.iloc[2, 1] + ) ci_length = confint.iloc[2, 1] - confint.iloc[2, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": ci_length, - "Bias": abs(rdflex_model.coef[2] - oracle_effect), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Method": "rdflex", - "fs specification": fs_specification, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Method", "fs specification", "Learner g", "Learner m", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": ci_length, + "Bias": abs(rdflex_model.coef[2] - oracle_effect), + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Method": "rdflex", + "fs specification": fs_specification, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby( + ["Method", "fs specification", "Learner g", "Learner m", "level"] + ) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -164,13 +224,17 @@ script_name = "rdd_fuzzy_coverage.py" path = "results/rdd/rdd_fuzzy_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) diff --git a/scripts/rdd/rdd_sharp_coverage.py b/scripts/rdd/rdd_sharp_coverage.py index bff96f9..1f33a5e 100644 --- a/scripts/rdd/rdd_sharp_coverage.py +++ b/scripts/rdd/rdd_sharp_coverage.py @@ -38,15 +38,30 @@ "fs_specification": ["cutoff", "cutoff and score", "interacted cutoff and score"], "learner_g": [ ("Linear", LinearRegression()), - ("LGBM", LGBMRegressor(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1)), + ( + "LGBM", + LGBMRegressor(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1), + ), ("Global linear", GlobalRegressor(LinearRegression())), - ("Stacked", StackingRegressor( - estimators=[ - ('lr', LinearRegression()), - ('lgbm', LGBMRegressor(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1)), - ('glr', GlobalRegressor(LinearRegression()))], - final_estimator=Ridge()))], - "level": [0.95, 0.90]} + ( + "Stacked", + StackingRegressor( + estimators=[ + ("lr", LinearRegression()), + ( + "lgbm", + LGBMRegressor( + n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1 + ), + ), + ("glr", GlobalRegressor(LinearRegression())), + ], + final_estimator=Ridge(), + ), + ), + ], + "level": [0.95, 0.90], +} # set up the results dataframe df_results_detailed = pd.DataFrame() @@ -67,9 +82,9 @@ data = datasets[i_rep] # get oracle value score = data["score"] - ite = data["oracle_values"]['Y1'] - data["oracle_values"]['Y0'] + ite = data["oracle_values"]["Y1"] - data["oracle_values"]["Y0"] - kernel_reg = KernelReg(endog=ite, exog=score, var_type='c', reg_type='ll') + kernel_reg = KernelReg(endog=ite, exog=score, var_type="c", reg_type="ll") effect_at_cutoff, _ = kernel_reg.fit(np.array([cutoff])) oracle_effect = effect_at_cutoff[0] @@ -79,7 +94,7 @@ # baseline for level_idx, level in enumerate(hyperparam_dict["level"]): - res = rdrobust(y=Y, x=score, covs=Z, c=cutoff, level=level*100) + res = rdrobust(y=Y, x=score, covs=Z, c=cutoff, level=level * 100) coef = res.coef.loc["Robust", "Coeff"] ci_lower = res.ci.loc["Robust", "CI Lower"] ci_upper = res.ci.loc["Robust", "CI Upper"] @@ -88,23 +103,34 @@ ci_length = ci_upper - ci_lower df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": ci_length, - "Bias": abs(coef - oracle_effect), - "Learner g": "linear", - "Method": "rdrobust", - "fs specification": "cutoff", - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": ci_length, + "Bias": abs(coef - oracle_effect), + "Learner g": "linear", + "Method": "rdrobust", + "fs specification": "cutoff", + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) # define the DoubleML data object obj_dml_data = dml.DoubleMLData.from_arrays(y=Y, d=D, x=Z, s=score) - for learner_g_idx, (learner_g_name, ml_g) in enumerate(hyperparam_dict["learner_g"]): - for fs_specification_idx, fs_specification in enumerate(hyperparam_dict["fs_specification"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for fs_specification_idx, fs_specification in enumerate( + hyperparam_dict["fs_specification"] + ): rdflex_model = RDFlex( obj_dml_data, ml_g=ml_g, @@ -112,34 +138,44 @@ n_rep=1, cutoff=cutoff, fuzzy=False, - fs_specification=fs_specification) + fs_specification=fs_specification, + ) rdflex_model.fit(n_iterations=2) for level_idx, level in enumerate(hyperparam_dict["level"]): confint = rdflex_model.confint(level=level) - coverage = (confint.iloc[2, 0] < oracle_effect) & (oracle_effect < confint.iloc[2, 1]) + coverage = (confint.iloc[2, 0] < oracle_effect) & ( + oracle_effect < confint.iloc[2, 1] + ) ci_length = confint.iloc[2, 1] - confint.iloc[2, 0] df_results_detailed = pd.concat( - (df_results_detailed, - pd.DataFrame({ - "Coverage": coverage.astype(int), - "CI Length": ci_length, - "Bias": abs(rdflex_model.coef[2] - oracle_effect), - "Learner g": learner_g_name, - "Method": "rdflex", - "fs specification": fs_specification, - "level": level, - "repetition": i_rep}, index=[0])), - ignore_index=True) - -df_results = df_results_detailed.groupby( - ["Method", "fs specification", "Learner g", "level"]).agg( - {"Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "repetition": "count"} - ).reset_index() + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": ci_length, + "Bias": abs(rdflex_model.coef[2] - oracle_effect), + "Learner g": learner_g_name, + "Method": "rdflex", + "fs specification": fs_specification, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Method", "fs specification", "Learner g", "level"]) + .agg( + {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} + ) + .reset_index() +) print(df_results) end_time = time.time() @@ -149,13 +185,17 @@ script_name = "rdd_sharp_coverage.py" path = "results/rdd/rdd_sharp_coverage" -metadata = pd.DataFrame({ - 'DoubleML Version': [dml.__version__], - 'Script': [script_name], - 'Date': [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - 'Total Runtime (seconds)': [total_runtime], - 'Python Version': [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], -}) +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) print(metadata) df_results.to_csv(f"{path}.csv", index=False) From 29e480f284197de59e666bc6224306ea907f79d7 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Fri, 23 May 2025 13:26:55 +0200 Subject: [PATCH 002/142] exclude results from yaml check --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 460677b..73b4dc1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,6 +4,7 @@ repos: hooks: # File format checks - id: check-yaml + exclude: ^results/ - id: check-toml # Code quality checks - id: debug-statements From 3ca44c7c6c0125c64acdbc2253076a36fbd55729 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 09:48:54 +0200 Subject: [PATCH 003/142] add highligh utils --- doc/utils/style_tables.py | 143 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 doc/utils/style_tables.py diff --git a/doc/utils/style_tables.py b/doc/utils/style_tables.py new file mode 100644 index 0000000..3f5750c --- /dev/null +++ b/doc/utils/style_tables.py @@ -0,0 +1,143 @@ +import numpy as np +import pandas as pd +from pandas.io.formats.style import Styler + + +# Define highlighting tiers as a list of dictionaries or tuples +# Each element defines: dist, props. Applied in order (later rules can override). +# Order: from least specific (largest dist) to most specific (smallest dist) +# or ensure the _apply_highlight_range logic correctly handles overlaps if props are different. +# Current logic: more specific (smaller dist) rules are applied last and override. +HIGHLIGHT_TIERS = [ + {"dist": 1.0, "props": "color:black;background-color:red;"}, + {"dist": 0.1, "props": "color:black;background-color:yellow;"}, + {"dist": 0.05, "props": "color:white;background-color:darkgreen;"}, +] + + +def _apply_highlight_range( + s_col: pd.Series, level: float, dist: float, props: str +) -> np.ndarray: + """ + Helper function for Styler.apply. Applies CSS properties based on a numeric range. + Returns an array of CSS strings. + """ + s_numeric = pd.to_numeric( + s_col, errors="coerce" + ) # Convert to numeric, non-convertibles become NaN + # Apply style ONLY if value is WITHIN the current dist from level + # This means for tiered styling, the order of applying styles in the calling function matters. + # If a value falls into multiple dist categories, the LAST applied style for that dist will win. + condition = (s_numeric >= level - dist) & (s_numeric <= level + dist) + return np.where(condition, props, "") + + +def color_coverage_columns( + styler: Styler, level: float, coverage_cols: list[str] = ["Coverage"] +) -> Styler: + """ + Applies tiered highlighting to specified coverage columns of a Styler object. + The order of application matters: more specific (narrower dist) rules are applied last to override. + """ + if not isinstance(styler, Styler): + raise TypeError("Expected a pandas Styler object.") + + # Ensure coverage_cols is a list + if isinstance(coverage_cols, str): + coverage_cols = [coverage_cols] + + # Filter for columns that actually exist in the DataFrame being styled + valid_coverage_cols = [col for col in coverage_cols if col in styler.data.columns] + + if not valid_coverage_cols: + return styler # No valid columns to style + + # Apply highlighting rules from the defined tiers + # The order in HIGHLIGHT_TIERS is important if props are meant to override. + # Pandas Styler.apply applies styles sequentially. If a cell matches multiple + # conditions from different .apply calls, the styles from later calls typically override + # or merge with earlier ones, depending on the CSS properties. + # For background-color, later calls will override. + current_styler = styler + for tier in HIGHLIGHT_TIERS: + current_styler = current_styler.apply( + _apply_highlight_range, + level=level, + dist=tier["dist"], + props=tier["props"], + subset=valid_coverage_cols, + ) + + # Set font to bold for the coverage columns + current_styler = current_styler.set_properties( + **{"font-weight": "bold"}, subset=valid_coverage_cols + ) + return current_styler + + +def create_styled_table( + df: pd.DataFrame, + level: float, + n_rep: int, # Or Union[int, str] if "N/A" is possible + caption_prefix: str = "Coverage", + coverage_cols: list[str] = ["Coverage"], + float_precision: str = "{:.3f}", +) -> Styler: + """ + Creates a styled pandas DataFrame (Styler object) for display. + - Hides the DataFrame index. + - Formats float columns to a specified precision. + - Applies conditional highlighting to coverage columns. + - Sets a descriptive caption. + """ + if not isinstance(df, pd.DataFrame): + return pd.DataFrame({"Error": ["Input is not a DataFrame."]}).style.hide( + axis="index" + ) + + if df.empty: + empty_df_cols = df.columns if df.columns.tolist() else ["Info"] + message_val = ( + ["No data to display."] + if not df.columns.tolist() + else [None] * len(empty_df_cols) + ) + return ( + pd.DataFrame( + ( + dict(zip(empty_df_cols, [[v] for v in message_val])) + if not df.columns.tolist() + else [] + ), + columns=empty_df_cols, + ) + .style.hide(axis="index") + .set_caption("No data to display.") + ) + + # Prepare float formatting dictionary + float_cols = df.select_dtypes(include=["float"]).columns + format_dict = {col: float_precision for col in float_cols if col in df.columns} + + # Create and set the caption text + level_percent = level * 100 + if abs(level_percent - round(level_percent)) < 1e-9: + level_display = f"{int(round(level_percent))}" + else: + level_display = f"{level_percent:.1f}" + + n_rep_display = str(n_rep) # Ensure n_rep is a string for the caption + + caption_text = f"{caption_prefix} for {level_display}%-Confidence Interval over {n_rep_display} Repetitions" + + # Chain Styler methods + styled_df = ( + df.style.hide(axis="index") + .format( + format_dict if format_dict else None + ) # Pass None if no float cols to format + .pipe(color_coverage_columns, level=level, coverage_cols=coverage_cols) + .set_caption(caption_text) + ) + + return styled_df From 106c288554d5167c8818db1e6277636d65023798 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 10:11:13 +0200 Subject: [PATCH 004/142] update plr page highlighting --- doc/plm/plr.qmd | 245 +++++++++++++++++++----------------------------- 1 file changed, 95 insertions(+), 150 deletions(-) diff --git a/doc/plm/plr.qmd b/doc/plm/plr.qmd index 31300f5..226716a 100644 --- a/doc/plm/plr.qmd +++ b/doc/plm/plr.qmd @@ -10,54 +10,16 @@ jupyter: python3 import numpy as np import pandas as pd from itables import init_notebook_mode, show, options +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import create_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## ATE Coverage @@ -79,34 +41,41 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/plm/plr_ate_coverage.csv", index_col=None) +df_coverage = pd.read_csv("../../results/plm/plr_ate_coverage.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +if "repetition" in df_coverage.columns and df_coverage["repetition"].nunique() == 1: + n_rep_coverage = df_coverage["repetition"].unique()[0] +elif "n_rep" in df_coverage.columns and df_coverage["n_rep"].nunique() == 1: + n_rep_coverage = df_coverage["n_rep"].unique()[0] +else: + n_rep_coverage = "N/A" # Fallback if n_rep cannot be determined -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +display_columns_coverage = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] ``` ### Partialling out ```{python} # | echo: false -score = "partialling out" -level = 0.95 +score_po = "partialling out" +level_95 = 0.95 -df_ate_95 = df[(df["level"] == level) & (df["score"] == score)][display_columns] -df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_95, level, n_rep) +df_po_95 = df_coverage[(df_coverage["level"] == level_95) & (df_coverage["score"] == score_po)][display_columns_coverage].copy() +df_po_95.rename(columns={"Learner g": "Learner l"}, inplace=True) + +styled_table_po_95 = create_styled_table(df_po_95, level_95, n_rep_coverage, coverage_cols=["Coverage"]) +show(styled_table_po_95, allow_html=True) ``` ```{python} #| echo: false -score = "partialling out" -level = 0.9 +level_90 = 0.9 + +df_po_90 = df_coverage[(df_coverage['level'] == level_90) & (df_coverage["score"] == score_po)][display_columns_coverage].copy() +df_po_90.rename(columns={"Learner g": "Learner l"}, inplace=True) -df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_9, level, n_rep) +styled_table_po_90 = create_styled_table(df_po_90, level_90, n_rep_coverage, coverage_cols=["Coverage"]) +show(styled_table_po_90, allow_html=True) ``` ### 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 ```{python} #| echo: false -score = "IV-type" -level = 0.95 +score_iv = "IV-type" +# level_95 is already defined + +df_iv_95 = df_coverage[(df_coverage['level'] == level_95) & (df_coverage["score"] == score_iv)][display_columns_coverage] -df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +styled_table_iv_95 = create_styled_table(df_iv_95, level_95, n_rep_coverage, coverage_cols=["Coverage"]) +show(styled_table_iv_95, allow_html=True) ``` ```{python} #| echo: false -score = "IV-type" -level = 0.9 +# level_90 is already defined -df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +df_iv_90 = df_coverage[(df_coverage['level'] == level_90) & (df_coverage["score"] == score_iv)][display_columns_coverage] + +styled_table_iv_90 = create_styled_table(df_iv_90, level_90, n_rep_coverage, coverage_cols=["Coverage"]) +show(styled_table_iv_90, allow_html=True) ``` ## ATE Sensitivity @@ -142,9 +114,9 @@ Further, the corresponding confidence intervals are one-sided (since the directi ```{python} #| echo: false -metadata_file = '../../results/plm/plr_ate_sensitivity_metadata.csv' -metadata_df = pd.read_csv(metadata_file) -print(metadata_df.T.to_string(header=False)) +metadata_file_sens = '../../results/plm/plr_ate_sensitivity_metadata.csv' +metadata_df_sens = pd.read_csv(metadata_file_sens) +print(metadata_df_sens.T.to_string(header=False)) ``` ::: @@ -153,91 +125,52 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/plm/plr_ate_sensitivity.csv", index_col=None) +df_sensitivity = pd.read_csv("../../results/plm/plr_ate_sensitivity.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +if "repetition" in df_sensitivity.columns and df_sensitivity["repetition"].nunique() == 1: + n_rep_sensitivity = df_sensitivity["repetition"].unique()[0] +elif "n_rep" in df_sensitivity.columns and df_sensitivity["n_rep"].nunique() == 1: + n_rep_sensitivity = df_sensitivity["n_rep"].unique()[0] +else: + n_rep_sensitivity = "N/A" -display_columns = [ +display_columns_sensitivity = [ "Learner g", "Learner m", "Bias", "Bias (Lower)", "Bias (Upper)", "Coverage", "Coverage (Lower)", "Coverage (Upper)", "RV", "RVa"] ``` -```{python} -#| echo: false - -import numpy as np -import pandas as pd -from itables import init_notebook_mode, show, options - -init_notebook_mode(all_interactive=True) - -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Coverage (Upper)"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Coverage (Upper)"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Coverage (Upper)"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Coverage (Upper)"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) -``` ### Partialling out ```{python} #| echo: false -score = "partialling out" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_95, level, n_rep) +# score_po and level_95 are defined above + +df_sens_po_95 = df_sensitivity[(df_sensitivity['level'] == level_95) & (df_sensitivity["score"] == score_po)][display_columns_sensitivity].copy() +df_sens_po_95.rename(columns={"Learner g": "Learner l"}, inplace=True) + +styled_sens_po_95 = create_styled_table( + df_sens_po_95, + level_95, + n_rep_sensitivity, + coverage_cols=["Coverage", "Coverage (Upper)"] # Highlight both +) +show(styled_sens_po_95, allow_html=True) ``` ```{python} #| echo: false -score = "partialling out" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_9, level, n_rep) +# score_po and level_90 are defined above + +df_sens_po_90 = df_sensitivity[(df_sensitivity['level'] == level_90) & (df_sensitivity["score"] == score_po)][display_columns_sensitivity].copy() +df_sens_po_90.rename(columns={"Learner g": "Learner l"}, inplace=True) + +styled_sens_po_90 = create_styled_table( + df_sens_po_90, + level_90, + n_rep_sensitivity, + coverage_cols=["Coverage", "Coverage (Upper)"] +) +show(styled_sens_po_90, allow_html=True) ``` ### 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 ```{python} #| echo: false -score = "IV-type" -level = 0.95 +# score_iv and level_95 are defined above -df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +df_sens_iv_95 = df_sensitivity[(df_sensitivity['level'] == level_95) & (df_sensitivity["score"] == score_iv)][display_columns_sensitivity] + +styled_sens_iv_95 = create_styled_table( + df_sens_iv_95, + level_95, + n_rep_sensitivity, + coverage_cols=["Coverage", "Coverage (Upper)"] +) +show(styled_sens_iv_95, allow_html=True) ``` ```{python} #| echo: false -score = "IV-type" -level = 0.9 +# score_iv and level_90 are defined above + +df_sens_iv_90 = df_sensitivity[(df_sensitivity['level'] == level_90) & (df_sensitivity["score"] == score_iv)][display_columns_sensitivity] -df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +styled_sens_iv_90 = create_styled_table( + df_sens_iv_90, + level_90, + n_rep_sensitivity, + coverage_cols=["Coverage", "Coverage (Upper)"] +) +show(styled_sens_iv_90, allow_html=True) ``` From ad0b2970c20c7ba8ffe115ff9d67df834903df83 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 12:24:35 +0200 Subject: [PATCH 005/142] extend utils for tables --- doc/utils/style_tables.py | 116 +++++++++++++++++++++++++++++++++----- 1 file changed, 102 insertions(+), 14 deletions(-) diff --git a/doc/utils/style_tables.py b/doc/utils/style_tables.py index 3f5750c..5d73466 100644 --- a/doc/utils/style_tables.py +++ b/doc/utils/style_tables.py @@ -1,6 +1,8 @@ import numpy as np import pandas as pd from pandas.io.formats.style import Styler +from typing import Union, Optional, List, Any +from itables import show # Define highlighting tiers as a list of dictionaries or tuples @@ -78,9 +80,9 @@ def color_coverage_columns( def create_styled_table( df: pd.DataFrame, level: float, - n_rep: int, # Or Union[int, str] if "N/A" is possible + n_rep: Union[int, str], caption_prefix: str = "Coverage", - coverage_cols: list[str] = ["Coverage"], + coverage_cols: List[str] = ["Coverage"], float_precision: str = "{:.3f}", ) -> Styler: """ @@ -102,21 +104,18 @@ def create_styled_table( if not df.columns.tolist() else [None] * len(empty_df_cols) ) - return ( - pd.DataFrame( - ( - dict(zip(empty_df_cols, [[v] for v in message_val])) - if not df.columns.tolist() - else [] - ), - columns=empty_df_cols, - ) - .style.hide(axis="index") - .set_caption("No data to display.") + df_to_style = pd.DataFrame( + ( + dict(zip(empty_df_cols, [[v] for v in message_val])) + if not df.columns.tolist() + else {} # Pass empty dict for empty DataFrame with columns + ), + columns=empty_df_cols, ) + return df_to_style.style.hide(axis="index").set_caption("No data to display.") # Prepare float formatting dictionary - float_cols = df.select_dtypes(include=["float"]).columns + float_cols = df.select_dtypes(include=["float", "float64", "float32"]).columns format_dict = {col: float_precision for col in float_cols if col in df.columns} # Create and set the caption text @@ -141,3 +140,92 @@ def create_styled_table( ) return styled_df + + +def generate_and_show_styled_table( + main_df: pd.DataFrame, + filters: dict[str, Any], + display_cols: List[str], + n_rep: Union[int, str], + level_col: str = "level", + rename_map: Optional[dict[str, str]] = None, + caption_prefix: str = "Coverage", + coverage_highlight_cols: List[str] = ["Coverage"], + float_precision: str = "{:.3f}", +): + """ + Filters a DataFrame based on a dictionary of conditions, + creates a styled table, and displays it. + """ + if main_df.empty: + print("Warning: Input DataFrame is empty.") + # Optionally, show an empty table or a message + empty_styled_df = ( + pd.DataFrame(columns=display_cols) + .style.hide(axis="index") + .set_caption("No data available (input empty).") + ) + show(empty_styled_df, allow_html=True) + return + + # Build filter condition + current_df = main_df + filter_conditions = [] + filter_description_parts = [] + + for col, value in filters.items(): + if col not in current_df.columns: + print( + f"Warning: Filter column '{col}' not found in DataFrame. Skipping this filter." + ) + continue + current_df = current_df[current_df[col] == value] + filter_conditions.append(f"{col} == {value}") + filter_description_parts.append(f"{col}='{value}'") + + filter_description = " & ".join(filter_description_parts) + + if current_df.empty: + level_val = filters.get(level_col, "N/A") + level_percent_display = ( + f"{level_val*100}%" if isinstance(level_val, (int, float)) else level_val + ) + caption_msg = f"No data after filtering for {filter_description} at {level_percent_display} level." + print(f"Warning: {caption_msg}") + empty_styled_df = ( + pd.DataFrame(columns=display_cols) + .style.hide(axis="index") + .set_caption(caption_msg) + ) + show(empty_styled_df, allow_html=True) + return + + df_filtered = current_df[ + display_cols + ].copy() # Select display columns after filtering + + if rename_map: + df_filtered.rename(columns=rename_map, inplace=True) + + # Determine the level for styling from the filters, if present + styling_level = filters.get(level_col) + if styling_level is None or not isinstance(styling_level, (float, int)): + print( + f"Warning: '{level_col}' not found in filters or is not numeric. Cannot determine styling level for highlighting." + ) + # Fallback or raise error, for now, we'll proceed without level-specific caption part if it's missing + # Or you could try to infer it if there's only one unique level in the filtered data + if level_col in df_filtered.columns and df_filtered[level_col].nunique() == 1: + styling_level = df_filtered[level_col].iloc[0] + else: # Default to a common value or skip styling that depends on 'level' + styling_level = 0.95 # Default, or handle error + + styled_table = create_styled_table( + df_filtered, + styling_level, # Use the level from filters for styling + n_rep, + caption_prefix=caption_prefix, + coverage_cols=coverage_highlight_cols, + float_precision=float_precision, + ) + show(styled_table, allow_html=True) From d7a54448510c61edf0c5412ff70b759a02179087 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 12:57:21 +0200 Subject: [PATCH 006/142] update plm websites --- doc/plm/pliv.qmd | 120 +++++++++++++++++---------------------- doc/plm/plr.qmd | 132 ++++++++++++++++++++++--------------------- doc/plm/plr_cate.qmd | 96 ++++++++++++------------------- doc/plm/plr_gate.qmd | 95 ++++++++++++------------------- 4 files changed, 191 insertions(+), 252 deletions(-) diff --git a/doc/plm/pliv.qmd b/doc/plm/pliv.qmd index 6c4d2a9..65d87f2 100644 --- a/doc/plm/pliv.qmd +++ b/doc/plm/pliv.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## LATE Coverage @@ -79,34 +41,46 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/plm/pliv_late_coverage.csv", index_col=None) +df_coverage_pliv = pd.read_csv("../../results/plm/pliv_late_coverage.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +if "repetition" in df_coverage_pliv.columns and df_coverage_pliv["repetition"].nunique() == 1: + n_rep_pliv = df_coverage_pliv["repetition"].unique()[0] +elif "n_rep" in df_coverage_pliv.columns and df_coverage_pliv["n_rep"].nunique() == 1: + n_rep_pliv = df_coverage_pliv["n_rep"].unique()[0] +else: + n_rep_pliv = "N/A" -display_columns = ["Learner g", "Learner m", "Learner r", "Bias", "CI Length", "Coverage"] +display_columns_pliv = ["Learner g", "Learner m", "Learner r", "Bias", "CI Length", "Coverage"] ``` ### Partialling out ```{python} #| echo: false -score = "partialling out" -level = 0.95 -df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_coverage_pliv, + filters={"level": 0.95, "score": "partialling out"}, + display_cols=display_columns_pliv, + n_rep=n_rep_pliv, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -score = "partialling out" -level = 0.9 -df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_coverage_pliv, + filters={"level": 0.90, "score": "partialling out"}, + display_cols=display_columns_pliv, + n_rep=n_rep_pliv, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage"] +) ``` ### IV-type @@ -115,18 +89,26 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t ```{python} #| echo: false -score = "IV-type" -level = 0.95 -df_ate_95 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_coverage_pliv, + filters={"level": 0.95, "score": "IV-type"}, + display_cols=display_columns_pliv, + n_rep=n_rep_pliv, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -score = "IV-type" -level = 0.9 -df_ate_9 = df[(df['level'] == level) & (df["score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_coverage_pliv, + filters={"level": 0.9, "score": "IV-type"}, + display_cols=display_columns_pliv, + n_rep=n_rep_pliv, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` diff --git a/doc/plm/plr.qmd b/doc/plm/plr.qmd index 226716a..a5ba041 100644 --- a/doc/plm/plr.qmd +++ b/doc/plm/plr.qmd @@ -9,7 +9,7 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode import os import sys @@ -17,7 +17,7 @@ doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) if doc_dir not in sys.path: sys.path.append(doc_dir) -from utils.style_tables import create_styled_table +from utils.style_tables import generate_and_show_styled_table init_notebook_mode(all_interactive=True) ``` @@ -57,25 +57,30 @@ display_columns_coverage = ["Learner g", "Learner m", "Bias", "CI Length", "Cove ```{python} # | echo: false -score_po = "partialling out" -level_95 = 0.95 -df_po_95 = df_coverage[(df_coverage["level"] == level_95) & (df_coverage["score"] == score_po)][display_columns_coverage].copy() -df_po_95.rename(columns={"Learner g": "Learner l"}, inplace=True) - -styled_table_po_95 = create_styled_table(df_po_95, level_95, n_rep_coverage, coverage_cols=["Coverage"]) -show(styled_table_po_95, allow_html=True) +generate_and_show_styled_table( + main_df=df_coverage, + filters={"level": 0.95, "score": "partialling out"}, + display_cols=display_columns_coverage, + n_rep=n_rep_coverage, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level_90 = 0.9 -df_po_90 = df_coverage[(df_coverage['level'] == level_90) & (df_coverage["score"] == score_po)][display_columns_coverage].copy() -df_po_90.rename(columns={"Learner g": "Learner l"}, inplace=True) - -styled_table_po_90 = create_styled_table(df_po_90, level_90, n_rep_coverage, coverage_cols=["Coverage"]) -show(styled_table_po_90, allow_html=True) +generate_and_show_styled_table( + main_df=df_coverage, + filters={"level": 0.9, "score": "partialling out"}, + display_cols=display_columns_coverage, + n_rep=n_rep_coverage, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage"] +) ``` ### IV-type @@ -84,23 +89,28 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t ```{python} #| echo: false -score_iv = "IV-type" -# level_95 is already defined -df_iv_95 = df_coverage[(df_coverage['level'] == level_95) & (df_coverage["score"] == score_iv)][display_columns_coverage] - -styled_table_iv_95 = create_styled_table(df_iv_95, level_95, n_rep_coverage, coverage_cols=["Coverage"]) -show(styled_table_iv_95, allow_html=True) +generate_and_show_styled_table( + main_df=df_coverage, + filters={"level": 0.95, "score": "IV-type"}, + display_cols=display_columns_coverage, + n_rep=n_rep_coverage, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -# level_90 is already defined - -df_iv_90 = df_coverage[(df_coverage['level'] == level_90) & (df_coverage["score"] == score_iv)][display_columns_coverage] -styled_table_iv_90 = create_styled_table(df_iv_90, level_90, n_rep_coverage, coverage_cols=["Coverage"]) -show(styled_table_iv_90, allow_html=True) +generate_and_show_styled_table( + main_df=df_coverage, + filters={"level": 0.9, "score": "IV-type"}, + display_cols=display_columns_coverage, + n_rep=n_rep_coverage, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ## ATE Sensitivity @@ -143,34 +153,30 @@ display_columns_sensitivity = [ ```{python} #| echo: false -# score_po and level_95 are defined above - -df_sens_po_95 = df_sensitivity[(df_sensitivity['level'] == level_95) & (df_sensitivity["score"] == score_po)][display_columns_sensitivity].copy() -df_sens_po_95.rename(columns={"Learner g": "Learner l"}, inplace=True) -styled_sens_po_95 = create_styled_table( - df_sens_po_95, - level_95, - n_rep_sensitivity, - coverage_cols=["Coverage", "Coverage (Upper)"] # Highlight both +generate_and_show_styled_table( + main_df=df_sensitivity, + filters={"level": 0.95, "score": "partialling out"}, + display_cols=display_columns_sensitivity, + n_rep=n_rep_sensitivity, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Coverage (Upper)"] ) -show(styled_sens_po_95, allow_html=True) ``` ```{python} #| echo: false -# score_po and level_90 are defined above - -df_sens_po_90 = df_sensitivity[(df_sensitivity['level'] == level_90) & (df_sensitivity["score"] == score_po)][display_columns_sensitivity].copy() -df_sens_po_90.rename(columns={"Learner g": "Learner l"}, inplace=True) - -styled_sens_po_90 = create_styled_table( - df_sens_po_90, - level_90, - n_rep_sensitivity, - coverage_cols=["Coverage", "Coverage (Upper)"] +#| +generate_and_show_styled_table( + main_df=df_sensitivity, + filters={"level": 0.9, "score": "partialling out"}, + display_cols=display_columns_sensitivity, + n_rep=n_rep_sensitivity, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Coverage (Upper)"] ) -show(styled_sens_po_90, allow_html=True) ``` ### IV-type @@ -179,30 +185,26 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t ```{python} #| echo: false -# score_iv and level_95 are defined above - -df_sens_iv_95 = df_sensitivity[(df_sensitivity['level'] == level_95) & (df_sensitivity["score"] == score_iv)][display_columns_sensitivity] -styled_sens_iv_95 = create_styled_table( - df_sens_iv_95, - level_95, - n_rep_sensitivity, - coverage_cols=["Coverage", "Coverage (Upper)"] +generate_and_show_styled_table( + main_df=df_sensitivity, + filters={"level": 0.95, "score": "IV-type"}, + display_cols=display_columns_sensitivity, + n_rep=n_rep_sensitivity, + level_col="level", + coverage_highlight_cols=["Coverage", "Coverage (Upper)"] ) -show(styled_sens_iv_95, allow_html=True) ``` ```{python} #| echo: false -# score_iv and level_90 are defined above - -df_sens_iv_90 = df_sensitivity[(df_sensitivity['level'] == level_90) & (df_sensitivity["score"] == score_iv)][display_columns_sensitivity] -styled_sens_iv_90 = create_styled_table( - df_sens_iv_90, - level_90, - n_rep_sensitivity, - coverage_cols=["Coverage", "Coverage (Upper)"] +generate_and_show_styled_table( + main_df=df_sensitivity, + filters={"level": 0.9, "score": "IV-type"}, + display_cols=display_columns_sensitivity, + n_rep=n_rep_sensitivity, + level_col="level", + coverage_highlight_cols=["Coverage", "Coverage (Upper)"] ) -show(styled_sens_iv_90, allow_html=True) ``` diff --git a/doc/plm/plr_cate.qmd b/doc/plm/plr_cate.qmd index 57be897..f62fbaf 100644 --- a/doc/plm/plr_cate.qmd +++ b/doc/plm/plr_cate.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## CATE Coverage @@ -81,28 +43,44 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/plm/plr_cate_coverage.csv", index_col=None) +df_cate = pd.read_csv("../../results/plm/plr_cate_coverage.csv", index_col=None) # Renamed to df_cate + +# Your existing logic for n_rep is fine, just using the new df_cate name +if "repetition" in df_cate.columns and df_cate["repetition"].nunique() == 1: + n_rep_cate = df_cate["repetition"].unique()[0] +elif "n_rep" in df_cate.columns and df_cate["n_rep"].nunique() == 1: + n_rep_cate = df_cate["n_rep"].unique()[0] +else: + n_rep_cate = "N/A" -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +display_columns_cate = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_cate, + filters={"level": 0.95}, + display_cols=display_columns_cate, + n_rep=n_rep_cate, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_cate, + filters={"level": 0.9}, + display_cols=display_columns_cate, + n_rep=n_rep_cate, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` diff --git a/doc/plm/plr_gate.qmd b/doc/plm/plr_gate.qmd index 8f5490d..0f0c105 100644 --- a/doc/plm/plr_gate.qmd +++ b/doc/plm/plr_gate.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## GATE Coverage @@ -81,28 +43,43 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/plm/plr_gate_coverage.csv", index_col=None) +df_gate = pd.read_csv("../../results/plm/plr_gate_coverage.csv", index_col=None) # Renamed to df_gate for clarity + +if "repetition" in df_gate.columns and df_gate["repetition"].nunique() == 1: + n_rep_gate = df_gate["repetition"].unique()[0] +elif "n_rep" in df_gate.columns and df_gate["n_rep"].nunique() == 1: # Check for n_rep as well + n_rep_gate = df_gate["n_rep"].unique()[0] +else: + n_rep_gate = "N/A" # Fallback if n_rep cannot be determined -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +display_columns_gate = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_gate, + filters={"level": 0.95}, + display_cols=display_columns_gate, + n_rep=n_rep_gate, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_gate, + filters={"level": 0.9}, + display_cols=display_columns_gate, + n_rep=n_rep_gate, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` From 0d6a61d2ff7aa23ce2a868f100db01bd9c641b21 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 13:20:38 +0200 Subject: [PATCH 007/142] add site-url --- doc/_quarto-dev.yml | 1 + doc/_website.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/_quarto-dev.yml b/doc/_quarto-dev.yml index 11c7caf..94b8c12 100644 --- a/doc/_quarto-dev.yml +++ b/doc/_quarto-dev.yml @@ -6,6 +6,7 @@ metadata-files: - _website.yml website: + site-url: https://docs.doubleml.org/doubleml-coverage/dev/ drafts: - index.qmd # IRM diff --git a/doc/_website.yml b/doc/_website.yml index 4beb151..d6c79d3 100644 --- a/doc/_website.yml +++ b/doc/_website.yml @@ -1,6 +1,7 @@ website: title: "DoubleML Coverage" favicon: _static/favicon.ico + site-url: https://docs.doubleml.org/doubleml-coverage/ search: location: sidebar sidebar: From 70d2f7aad631402c867556422d66d0929e02d6e4 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 13:55:06 +0200 Subject: [PATCH 008/142] update ssm qmd files --- doc/ssm/ssm_mar.qmd | 81 +++++++++++------------------------- doc/ssm/ssm_nonignorable.qmd | 80 +++++++++++------------------------ 2 files changed, 50 insertions(+), 111 deletions(-) diff --git a/doc/ssm/ssm_mar.qmd b/doc/ssm/ssm_mar.qmd index 1ffa222..65a1871 100644 --- a/doc/ssm/ssm_mar.qmd +++ b/doc/ssm/ssm_mar.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## ATE Coverage @@ -90,17 +52,24 @@ display_columns = ["Learner g", "Learner m", "Learner pi", "Bias", "CI Length", ```{python} #| echo: false -level = 0.95 - -df_ate_95 = df[(df['level'] == level)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -score = "partialling out" -level = 0.9 - -df_ate_9 = df[(df['level'] == level)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` diff --git a/doc/ssm/ssm_nonignorable.qmd b/doc/ssm/ssm_nonignorable.qmd index 3afb9b9..f0a807d 100644 --- a/doc/ssm/ssm_nonignorable.qmd +++ b/doc/ssm/ssm_nonignorable.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## ATE Coverage @@ -90,16 +52,24 @@ display_columns = ["Learner g", "Learner m", "Learner pi", "Bias", "CI Length", ```{python} #| echo: false -level = 0.95 - -df_ate_95 = df[(df['level'] == level)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 - -df_ate_9 = df[(df['level'] == level)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` From 8e46589792c587d4272479007420056240bd6509 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 14:20:26 +0200 Subject: [PATCH 009/142] update rdd qmd files --- doc/rdd/rdd.qmd | 120 ++++++++++++++++++++---------------------------- 1 file changed, 49 insertions(+), 71 deletions(-) diff --git a/doc/rdd/rdd.qmd b/doc/rdd/rdd.qmd index 7e083f5..4a74fb7 100644 --- a/doc/rdd/rdd.qmd +++ b/doc/rdd/rdd.qmd @@ -10,55 +10,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## Sharp Design @@ -80,28 +42,36 @@ print(metadata_df.T.to_string(header=False)) # | echo: false # set up data and rename columns -df = pd.read_csv("../../results/rdd/rdd_sharp_coverage.csv", index_col=None) +df_sharp = pd.read_csv("../../results/rdd/rdd_sharp_coverage.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_sharp["repetition"].nunique() == 1 +n_rep_sharp = df_sharp["repetition"].unique()[0] -display_columns = ["Method", "Learner g", "fs specification", "Bias", "CI Length", "Coverage"] +display_columns_sharp = ["Method", "Learner g", "fs specification", "Bias", "CI Length", "Coverage"] ``` ```{python} #| echo: false -level = 0.95 - -df_ate_95 = df[(df['level'] == level)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_sharp, + filters={"level": 0.95}, + display_cols=display_columns_sharp, + n_rep=n_rep_sharp, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 - -df_ate_9 = df[(df['level'] == level)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_sharp, + filters={"level": 0.9}, + display_cols=display_columns_sharp, + n_rep=n_rep_sharp, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` @@ -124,26 +94,34 @@ print(metadata_df.T.to_string(header=False)) # | echo: false # set up data and rename columns -df = pd.read_csv("../../results/rdd/rdd_fuzzy_coverage.csv", index_col=None) +df_fuzzy = pd.read_csv("../../results/rdd/rdd_fuzzy_coverage.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_fuzzy["repetition"].nunique() == 1 +n_rep_fuzzy = df_fuzzy["repetition"].unique()[0] -display_columns = ["Method", "Learner g", "Learner m", "fs specification", "Bias", "CI Length", "Coverage"] +display_columns_fuzzy = ["Method", "Learner g", "Learner m", "fs specification", "Bias", "CI Length", "Coverage"] ``` ```{python} #| echo: false -level = 0.95 - -df_ate_95 = df[(df['level'] == level)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_fuzzy, + filters={"level": 0.95}, + display_cols=display_columns_fuzzy, + n_rep=n_rep_fuzzy, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 - -df_ate_9 = df[(df['level'] == level)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_fuzzy, + filters={"level": 0.9}, + display_cols=display_columns_fuzzy, + n_rep=n_rep_fuzzy, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` From f0827bf7930ac74bb6461dc2eb19a6ecc43b6751 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 14:32:47 +0200 Subject: [PATCH 010/142] update did qmd files --- doc/did/did_cs.qmd | 107 ++++++---------- doc/did/did_multi.qmd | 282 ++++++++++++++++++++++-------------------- doc/did/did_pa.qmd | 104 ++++++---------- 3 files changed, 228 insertions(+), 265 deletions(-) diff --git a/doc/did/did_cs.qmd b/doc/did/did_cs.qmd index 90055cc..eab72ec 100644 --- a/doc/did/did_cs.qmd +++ b/doc/did/did_cs.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## ATTE Coverage @@ -91,20 +53,27 @@ display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", " ```{python} #| echo: false -score = "observational" -level = 0.95 -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -score = "observational" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ### Experimental Score @@ -113,18 +82,24 @@ Remark that the only two valid DGPs are DGP $5$ and DGP $6$. All other DGPs are ```{python} #| echo: false -score = "experimental" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -score = "experimental" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` diff --git a/doc/did/did_multi.qmd b/doc/did/did_multi.qmd index fc5131e..2751420 100644 --- a/doc/did/did_multi.qmd +++ b/doc/did/did_multi.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## ATTE Coverage @@ -97,20 +59,26 @@ display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", " ```{python} #| echo: false -score = "observational" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -score = "observational" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` @@ -120,20 +88,26 @@ The results are only valid for the DGP 6, as the experimental score assumes a ra ```{python} #| echo: false -score = "experimental" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -score = "experimental" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ## Aggregated Effects @@ -148,10 +122,10 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values #| echo: false # set up data -df = pd.read_csv("../../results/did/did_multi_group.csv", index_col=None) +df_group = pd.read_csv("../../results/did/did_multi_group.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_group["repetition"].nunique() == 1 +n_rep_group = df_group["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` @@ -160,20 +134,26 @@ display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", " ```{python} #| echo: false -score = "observational" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_group, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_group, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -score = "observational" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_group, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_group, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` #### Experimental Score @@ -182,20 +162,26 @@ The results are only valid for the DGP 6, as the experimental score assumes a ra ```{python} #| echo: false -score = "experimental" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_group, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_group, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -score = "experimental" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_group, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_group, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ### Time Effects @@ -204,10 +190,10 @@ make_pretty(df_ate_9, level, n_rep) #| echo: false # set up data -df = pd.read_csv("../../results/did/did_multi_time.csv", index_col=None) +df_time = pd.read_csv("../../results/did/did_multi_time.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_time["repetition"].nunique() == 1 +n_rep_time = df_time["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` @@ -216,20 +202,26 @@ display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", " ```{python} #| echo: false -score = "observational" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_time, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_time, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -score = "observational" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_time, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_time, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` #### Experimental Score @@ -238,20 +230,26 @@ The results are only valid for the DGP 6, as the experimental score assumes a ra ```{python} #| echo: false -score = "experimental" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_time, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_time, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -score = "experimental" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_time, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_time, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ### Event Study Aggregation @@ -260,10 +258,10 @@ make_pretty(df_ate_9, level, n_rep) #| echo: false # set up data -df = pd.read_csv("../../results/did/did_multi_eventstudy.csv", index_col=None) +df_es = pd.read_csv("../../results/did/did_multi_eventstudy.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_es["repetition"].nunique() == 1 +n_rep_es = df_es["repetition"].unique()[0] display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` @@ -272,20 +270,26 @@ display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", " ```{python} #| echo: false -score = "observational" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_es, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_es, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -score = "observational" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_es, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_es, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` #### Experimental Score @@ -295,18 +299,24 @@ The results are only valid for the DGP 6, as the experimental score assumes a ra ```{python} #| echo: false -score = "experimental" -level = 0.95 - -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_es, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_es, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -score = "experimental" -level = 0.9 - -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_es, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_es, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` diff --git a/doc/did/did_pa.qmd b/doc/did/did_pa.qmd index 7435731..94f16ed 100644 --- a/doc/did/did_pa.qmd +++ b/doc/did/did_pa.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## ATTE Coverage @@ -91,20 +53,28 @@ display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", " ```{python} #| echo: false -score = "observational" -level = 0.95 -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -score = "observational" -level = 0.9 -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` @@ -114,18 +84,26 @@ Remark that the only two valid DGPs are DGP $5$ and DGP $6$. All other DGPs are ```{python} #| echo: false -score = "experimental" -level = 0.95 -df_ate_95 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -score = "experimental" -level = 0.9 -df_ate_9 = df[(df['level'] == level) & (df["Score"] == score)][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` From ffd55cc2390908f637002becc70e2bfae5feeb6b Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 26 May 2025 16:08:50 +0200 Subject: [PATCH 011/142] update irm qmd files --- doc/_quarto-dev.yml | 1 + doc/_website.yml | 1 + doc/irm/apo.qmd | 202 ++++++--------- doc/irm/iivm.qmd | 78 ++---- doc/irm/irm.qmd | 256 ++++++++----------- doc/irm/irm_cate.qmd | 78 ++---- doc/irm/irm_gate.qmd | 78 ++---- doc/irm/qte.qmd | 573 +++++++++++++++---------------------------- 8 files changed, 444 insertions(+), 823 deletions(-) diff --git a/doc/_quarto-dev.yml b/doc/_quarto-dev.yml index 94b8c12..5c3587a 100644 --- a/doc/_quarto-dev.yml +++ b/doc/_quarto-dev.yml @@ -15,6 +15,7 @@ website: - irm/irm_cate.qmd - irm/apo.qmd - irm/qte.qmd + - irm/iivm.qmd # PLM - plm/plr.qmd - plm/plr_gate.qmd diff --git a/doc/_website.yml b/doc/_website.yml index d6c79d3..e400e91 100644 --- a/doc/_website.yml +++ b/doc/_website.yml @@ -18,6 +18,7 @@ website: - irm/irm_cate.qmd - irm/apo.qmd - irm/qte.qmd + - irm/iivm.qmd - text: "PLM" menu: - plm/plr.qmd diff --git a/doc/irm/apo.qmd b/doc/irm/apo.qmd index 9e1787a..3b8607a 100644 --- a/doc/irm/apo.qmd +++ b/doc/irm/apo.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## APO Pointwise Coverage @@ -78,31 +40,41 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/irm_apo_coverage_apo.csv", index_col=None) +# set up data +df_apo = pd.read_csv("../../results/irm/irm_apo_coverage_apo.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_apo["repetition"].nunique() == 1 +n_rep_apo = df_apo["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Treatment Level", "Bias", "CI Length", "Coverage"] +display_columns_apo = ["Learner g", "Learner m", "Treatment Level", "Bias", "CI Length", "Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_apo, + filters={"level": 0.95}, + display_cols=display_columns_apo, + n_rep=n_rep_apo, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_apo, + filters={"level": 0.9}, + display_cols=display_columns_apo, + n_rep=n_rep_apo, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` @@ -126,80 +98,40 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) -``` - -```{python} -#| echo: false - -# set up data and rename columns -df = pd.read_csv("../../results/irm/irm_apo_coverage_apos.csv", index_col=None) +# set up data +df_apos = pd.read_csv("../../results/irm/irm_apo_coverage_apos.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_apos["repetition"].nunique() == 1 +n_rep_apos = df_apos["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +display_columns_apos = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_apos, + filters={"level": 0.95}, + display_cols=display_columns_apos, + n_rep=n_rep_apos, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_apos, + filters={"level": 0.9}, + display_cols=display_columns_apos, + n_rep=n_rep_apos, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ## Causal Contrast Coverage @@ -222,28 +154,38 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/irm_apo_coverage_apos_contrast.csv", index_col=None) +# set up data +df_contrast = pd.read_csv("../../results/irm/irm_apo_coverage_apos_contrast.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_contrast["repetition"].nunique() == 1 +n_rep_contrast = df_contrast["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +display_columns_contrast = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_contrast, + filters={"level": 0.95}, + display_cols=display_columns_contrast, + n_rep=n_rep_contrast, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_contrast, + filters={"level": 0.9}, + display_cols=display_columns_contrast, + n_rep=n_rep_contrast, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` diff --git a/doc/irm/iivm.qmd b/doc/irm/iivm.qmd index c74277b..00f4184 100644 --- a/doc/irm/iivm.qmd +++ b/doc/irm/iivm.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## LATE Coverage @@ -91,16 +53,26 @@ display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` diff --git a/doc/irm/irm.qmd b/doc/irm/irm.qmd index a62fff5..01fae21 100644 --- a/doc/irm/irm.qmd +++ b/doc/irm/irm.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## ATE Coverage @@ -78,31 +40,41 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/irm_ate_coverage.csv", index_col=None) +# set up data +df_ate_cov = pd.read_csv("../../results/irm/irm_ate_coverage.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_ate_cov["repetition"].nunique() == 1 +n_rep_ate_cov = df_ate_cov["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +display_columns_ate_cov = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_ate_cov, + filters={"level": 0.95}, + display_cols=display_columns_ate_cov, + n_rep=n_rep_ate_cov, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_ate_cov, + filters={"level": 0.9}, + display_cols=display_columns_ate_cov, + n_rep=n_rep_ate_cov, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` @@ -124,31 +96,41 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/irm_atte_coverage.csv", index_col=None) +# set up data +df_atte_cov = pd.read_csv("../../results/irm/irm_atte_coverage.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_atte_cov["repetition"].nunique() == 1 +n_rep_atte_cov = df_atte_cov["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +display_columns_atte_cov = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_atte_95 = df[df['level'] == level][display_columns] -make_pretty(df_atte_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_atte_cov, + filters={"level": 0.95}, + display_cols=display_columns_atte_cov, + n_rep=n_rep_atte_cov, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_atte_9 = df[df['level'] == level][display_columns] -make_pretty(df_atte_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_atte_cov, + filters={"level": 0.9}, + display_cols=display_columns_atte_cov, + n_rep=n_rep_atte_cov, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ## Sensitivity @@ -158,62 +140,6 @@ The simulations are based on the the ADD-DGP with $10,000$ observations. As the The confounding is set such that both sensitivity parameters are approximately $cf_y=cf_d=0.1$, such that the robustness value $RV$ should be approximately $10\%$. Further, the corresponding confidence intervals are one-sided (since the direction of the bias is unkown), such that only one side should approximate the corresponding coverage level (here only the lower coverage is relevant since the bias is positive). Remark that for the coverage level the value of $\rho$ has to be correctly specified, such that the coverage level will be generally (significantly) larger than the nominal level under the conservative choice of $|\rho|=1$. -```{python} -#| echo: false - -import numpy as np -import pandas as pd -from itables import init_notebook_mode, show, options - -init_notebook_mode(all_interactive=True) - -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Coverage (Lower)"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Coverage (Lower)"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Coverage (Lower)"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Coverage (Lower)"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) -``` - ### ATE ::: {.callout-note title="Metadata" collapse="true"} @@ -231,33 +157,41 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/irm/irm_ate_sensitivity.csv", index_col=None) +df_ate_sens = pd.read_csv("../../results/irm/irm_ate_sensitivity.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_ate_sens["repetition"].nunique() == 1 +n_rep_ate_sens = df_ate_sens["repetition"].unique()[0] -display_columns = [ +display_columns_ate_sens = [ "Learner g", "Learner m", "Bias", "Bias (Lower)", "Bias (Upper)", "Coverage", "Coverage (Lower)", "Coverage (Upper)", "RV", "RVa"] +rename_map_sens = {"Learner g": "Learner l"} +coverage_highlight_cols_sens = ["Coverage", "Coverage (Lower)"] ``` ```{python} #| echo: false -score = "partialling out" -level = 0.95 - -df_ate_95 = df[(df['level'] == level)][display_columns] -df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_ate_sens, + filters={"level": 0.95}, + display_cols=display_columns_ate_sens, + n_rep=n_rep_ate_sens, + level_col="level", + rename_map=rename_map_sens, + coverage_highlight_cols=coverage_highlight_cols_sens +) ``` ```{python} #| echo: false -score = "partialling out" -level = 0.9 - -df_ate_9 = df[(df['level'] == level)][display_columns] -df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_ate_sens, + filters={"level": 0.9}, + display_cols=display_columns_ate_sens, + n_rep=n_rep_ate_sens, + level_col="level", + rename_map=rename_map_sens, + coverage_highlight_cols=coverage_highlight_cols_sens +) ``` ### ATTE @@ -276,32 +210,38 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/irm_atte_sensitivity.csv", index_col=None) +# set up data +df_atte_sens = pd.read_csv("../../results/irm/irm_atte_sensitivity.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_atte_sens["repetition"].nunique() == 1 +n_rep_atte_sens = df_atte_sens["repetition"].unique()[0] -display_columns = [ +display_columns_atte_sens = [ "Learner g", "Learner m", "Bias", "Bias (Lower)", "Bias (Upper)", "Coverage", "Coverage (Lower)", "Coverage (Upper)", "RV", "RVa"] ``` ```{python} #| echo: false -score = "partialling out" -level = 0.95 - -df_ate_95 = df[(df['level'] == level)][display_columns] -df_ate_95.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_atte_sens, + filters={"level": 0.95}, + display_cols=display_columns_atte_sens, + n_rep=n_rep_atte_sens, + level_col="level", + rename_map=rename_map_sens, + coverage_highlight_cols=coverage_highlight_cols_sens +) ``` ```{python} #| echo: false -score = "partialling out" -level = 0.9 - -df_ate_9 = df[(df['level'] == level)][display_columns] -df_ate_9.rename(columns={"Learner g": "Learner l"}, inplace=True) -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_atte_sens, + filters={"level": 0.9}, + display_cols=display_columns_atte_sens, + n_rep=n_rep_atte_sens, + level_col="level", + rename_map=rename_map_sens, + coverage_highlight_cols=coverage_highlight_cols_sens +) ``` diff --git a/doc/irm/irm_cate.qmd b/doc/irm/irm_cate.qmd index e9c4c49..52b5abb 100644 --- a/doc/irm/irm_cate.qmd +++ b/doc/irm/irm_cate.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## CATE Coverage @@ -93,15 +55,25 @@ display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "U ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` diff --git a/doc/irm/irm_gate.qmd b/doc/irm/irm_gate.qmd index d4e6f36..c552771 100644 --- a/doc/irm/irm_gate.qmd +++ b/doc/irm/irm_gate.qmd @@ -9,55 +9,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## GATE Coverage @@ -92,15 +54,25 @@ display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "U ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` diff --git a/doc/irm/qte.qmd b/doc/irm/qte.qmd index 1974942..afce285 100644 --- a/doc/irm/qte.qmd +++ b/doc/irm/qte.qmd @@ -8,55 +8,17 @@ jupyter: python3 import numpy as np import pandas as pd -from itables import init_notebook_mode, show, options +from itables import init_notebook_mode +import os +import sys -init_notebook_mode(all_interactive=True) +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) +init_notebook_mode(all_interactive=True) ``` ## QTE @@ -79,105 +41,82 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/pq_coverage_qte.csv", index_col=None) +# set up data +df_qte = pd.read_csv("../../results/irm/pq_coverage_qte.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_qte["repetition"].nunique() == 1 +n_rep_qte = df_qte["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +display_columns_qte = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_qte, + filters={"level": 0.95}, + display_cols=display_columns_qte, + n_rep=n_rep_qte, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_qte, + filters={"level": 0.9}, + display_cols=display_columns_qte, + n_rep=n_rep_qte, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ## Potential Quantiles -```{python} -#| echo: false - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) -``` ### Y(0) - Quantile ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/pq_coverage_pq0.csv", index_col=None) +# set up data +df_pq0 = pd.read_csv("../../results/irm/pq_coverage_pq0.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_pq0["repetition"].nunique() == 1 +n_rep_pq0 = df_pq0["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +display_columns_pq = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_pq0, + filters={"level": 0.95}, + display_cols=display_columns_pq, + n_rep=n_rep_pq0, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_pq0, + filters={"level": 0.9}, + display_cols=display_columns_pq, + n_rep=n_rep_pq0, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ### Y(1) - Quantile @@ -186,82 +125,42 @@ make_pretty(df_ate_9, level, n_rep) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/irm/pq_coverage_pq1.csv", index_col=None) +df_pq1 = pd.read_csv("../../results/irm/pq_coverage_pq1.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_pq1["repetition"].nunique() == 1 +n_rep_pq1 = df_pq1["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +# display_columns_pq is the same as for Y(0) ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_pq1, + filters={"level": 0.95}, + display_cols=display_columns_pq, + n_rep=n_rep_pq1, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_pq1, + filters={"level": 0.9}, + display_cols=display_columns_pq, + n_rep=n_rep_pq1, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ## LQTE -```{python} -#| echo: false - -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) -``` - The results are based on a location-scale model as described the corresponding [Example](https://docs.doubleml.org/stable/examples/py_double_ml_pq.html#Local-Potential-Quantiles-(LPQs)) with $10,000$ observations. The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). @@ -280,105 +179,81 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/lpq_coverage_lqte.csv", index_col=None) +# set up data +df_lqte = pd.read_csv("../../results/irm/lpq_coverage_lqte.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_lqte["repetition"].nunique() == 1 +n_rep_lqte = df_lqte["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +display_columns_lqte = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_lqte, + filters={"level": 0.95}, + display_cols=display_columns_lqte, + n_rep=n_rep_lqte, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_lqte, + filters={"level": 0.9}, + display_cols=display_columns_lqte, + n_rep=n_rep_lqte, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ## Local Potential Quantiles -```{python} -#| echo: false - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) -``` - ### Local Y(0) - Quantile ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/lpq_coverage_lpq0.csv", index_col=None) +# set up data +df_lpq0 = pd.read_csv("../../results/irm/lpq_coverage_lpq0.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_lpq0["repetition"].nunique() == 1 +n_rep_lpq0 = df_lpq0["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +display_columns_lpq = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_lpq0, + filters={"level": 0.95}, + display_cols=display_columns_lpq, + n_rep=n_rep_lpq0, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_lpq0, + filters={"level": 0.9}, + display_cols=display_columns_lpq, + n_rep=n_rep_lpq0, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ### Local Y(1) - Quantile @@ -386,83 +261,43 @@ make_pretty(df_ate_9, level, n_rep) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/lpq_coverage_lpq1.csv", index_col=None) +# set up data +df_lpq1 = pd.read_csv("../../results/irm/lpq_coverage_lpq1.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_lpq1["repetition"].nunique() == 1 +n_rep_lpq1 = df_lpq1["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +# display_columns_lpq is the same as for Local Y(0) ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_lpq1, + filters={"level": 0.95}, + display_cols=display_columns_lpq, + n_rep=n_rep_lpq1, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_lpq1, + filters={"level": 0.9}, + display_cols=display_columns_lpq, + n_rep=n_rep_lpq1, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ## CVaR Effects -```{python} -#| echo: false - -def highlight_range(s, level=0.95, dist=0.05, props=''): - color_grid = np.where((s >= level-dist) & - (s <= level+dist), props, '') - return color_grid - - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage", "Uniform Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage", "Uniform Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage", "Uniform Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) -``` - The results are based on a location-scale model as described the corresponding [Example](https://docs.doubleml.org/stable/examples/py_double_ml_cvar.html) with $5,000$ observations. Remark that the process is not linear. The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). @@ -481,105 +316,81 @@ print(metadata_df.T.to_string(header=False)) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/cvar_coverage_qte.csv", index_col=None) +# set up data +df_cvar_qte = pd.read_csv("../../results/irm/cvar_coverage_qte.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_cvar_qte["repetition"].nunique() == 1 +n_rep_cvar_qte = df_cvar_qte["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +display_columns_cvar_qte = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_cvar_qte, + filters={"level": 0.95}, + display_cols=display_columns_cvar_qte, + n_rep=n_rep_cvar_qte, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_cvar_qte, + filters={"level": 0.9}, + display_cols=display_columns_cvar_qte, + n_rep=n_rep_cvar_qte, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) ``` ## CVaR Potential Quantiles -```{python} -#| echo: false - -def color_coverage(df, level): - # color coverage column order is important - styled_df = df.apply( - highlight_range, - level=level, - dist=1.0, - props='color:black;background-color:red', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.1, - props='color:black;background-color:yellow', - subset=["Coverage"]) - styled_df = styled_df.apply( - highlight_range, - level=level, - dist=0.05, - props='color:white;background-color:darkgreen', - subset=["Coverage"]) - - # set all coverage values to bold - styled_df = styled_df.set_properties( - **{'font-weight': 'bold'}, - subset=["Coverage"]) - return styled_df - - -def make_pretty(df, level, n_rep): - styled_df = df.style.hide(axis="index") - # Format only float columns - float_cols = df.select_dtypes(include=['float']).columns - styled_df = styled_df.format({col: "{:.3f}" for col in float_cols}) - - # color coverage column order is important - styled_df = color_coverage(styled_df, level) - caption = f"Coverage for {level*100}%-Confidence Interval over {n_rep} Repetitions" - - return show(styled_df, caption=caption, allow_html=True) -``` - ### CVaR Y(0) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/cvar_coverage_pq0.csv", index_col=None) +# set up data +df_cvar_pq0 = pd.read_csv("../../results/irm/cvar_coverage_pq0.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_cvar_pq0["repetition"].nunique() == 1 +n_rep_cvar_pq0 = df_cvar_pq0["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +display_columns_cvar_pq = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_cvar_pq0, + filters={"level": 0.95}, + display_cols=display_columns_cvar_pq, + n_rep=n_rep_cvar_pq0, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_cvar_pq0, + filters={"level": 0.9}, + display_cols=display_columns_cvar_pq, + n_rep=n_rep_cvar_pq0, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ### CVaR Y(1) @@ -587,27 +398,37 @@ make_pretty(df_ate_9, level, n_rep) ```{python} #| echo: false -# set up data and rename columns -df = pd.read_csv("../../results/irm/cvar_coverage_pq1.csv", index_col=None) +# set up data +df_cvar_pq1 = pd.read_csv("../../results/irm/cvar_coverage_pq1.csv", index_col=None) -assert df["repetition"].nunique() == 1 -n_rep = df["repetition"].unique()[0] +assert df_cvar_pq1["repetition"].nunique() == 1 +n_rep_cvar_pq1 = df_cvar_pq1["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +# display_columns_cvar_pq is the same as for CVaR Y(0) ``` ```{python} #| echo: false -level = 0.95 -df_ate_95 = df[df['level'] == level][display_columns] -make_pretty(df_ate_95, level, n_rep) +generate_and_show_styled_table( + main_df=df_cvar_pq1, + filters={"level": 0.95}, + display_cols=display_columns_cvar_pq, + n_rep=n_rep_cvar_pq1, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` ```{python} #| echo: false -level = 0.9 -df_ate_9 = df[df['level'] == level][display_columns] -make_pretty(df_ate_9, level, n_rep) +generate_and_show_styled_table( + main_df=df_cvar_pq1, + filters={"level": 0.9}, + display_cols=display_columns_cvar_pq, + n_rep=n_rep_cvar_pq1, + level_col="level", + coverage_highlight_cols=["Coverage"] +) ``` From 08b289dc417a052e25f76763e70bc399b909c4bc Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 07:45:37 +0200 Subject: [PATCH 012/142] add pre-commit to monte-cover --- monte-cover/pyproject.toml | 1 + monte-cover/uv.lock | 1057 +++++++++++++++++++----------------- 2 files changed, 568 insertions(+), 490 deletions(-) diff --git a/monte-cover/pyproject.toml b/monte-cover/pyproject.toml index 357e36c..9869e3e 100644 --- a/monte-cover/pyproject.toml +++ b/monte-cover/pyproject.toml @@ -19,6 +19,7 @@ dependencies = [ "pyyaml>=6.0.2", "ruff>=0.11.0", "scikit-learn>=1.5.2", + "pre-commit>=4.2.0", ] [project.scripts] diff --git a/monte-cover/uv.lock b/monte-cover/uv.lock index 57e1dd3..215c455 100644 --- a/monte-cover/uv.lock +++ b/monte-cover/uv.lock @@ -1,23 +1,23 @@ version = 1 -revision = 1 +revision = 2 requires-python = ">=3.12" [[package]] name = "appnope" version = "0.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, ] [[package]] name = "asttokens" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, ] [[package]] @@ -31,17 +31,17 @@ dependencies = [ { name = "pathspec" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449 } +sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449, upload-time = "2025-01-29T04:15:40.373Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988 }, - { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985 }, - { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816 }, - { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860 }, - { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673 }, - { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190 }, - { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926 }, - { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613 }, - { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646 }, + { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988, upload-time = "2025-01-29T05:37:16.707Z" }, + { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985, upload-time = "2025-01-29T05:37:18.273Z" }, + { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816, upload-time = "2025-01-29T04:18:33.823Z" }, + { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860, upload-time = "2025-01-29T04:19:12.944Z" }, + { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673, upload-time = "2025-01-29T05:37:20.574Z" }, + { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190, upload-time = "2025-01-29T05:37:22.106Z" }, + { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926, upload-time = "2025-01-29T04:18:58.564Z" }, + { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613, upload-time = "2025-01-29T04:19:27.63Z" }, + { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" }, ] [[package]] @@ -51,30 +51,39 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, +] + +[[package]] +name = "cfgv" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" }, ] [[package]] @@ -84,18 +93,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] @@ -105,9 +114,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload-time = "2024-03-12T16:53:41.133Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload-time = "2024-03-12T16:53:39.226Z" }, ] [[package]] @@ -117,73 +126,82 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494 }, - { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444 }, - { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628 }, - { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271 }, - { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906 }, - { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622 }, - { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699 }, - { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395 }, - { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354 }, - { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971 }, - { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, - { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, - { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, - { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, - { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, - { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, - { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, - { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, - { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, - { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, - { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, - { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, - { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, - { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, - { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, - { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, - { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, - { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, - { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, - { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, +sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753, upload-time = "2024-11-12T11:00:59.118Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494, upload-time = "2024-11-12T10:54:23.6Z" }, + { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444, upload-time = "2024-11-12T10:54:28.267Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628, upload-time = "2024-11-12T10:54:33.418Z" }, + { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271, upload-time = "2024-11-12T10:54:38.816Z" }, + { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906, upload-time = "2024-11-12T10:54:44.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622, upload-time = "2024-11-12T10:54:48.788Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699, upload-time = "2024-11-12T10:55:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395, upload-time = "2024-11-12T10:55:20.547Z" }, + { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354, upload-time = "2024-11-12T10:55:24.377Z" }, + { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971, upload-time = "2024-11-12T10:55:27.971Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548, upload-time = "2024-11-12T10:55:32.228Z" }, + { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576, upload-time = "2024-11-12T10:55:36.246Z" }, + { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635, upload-time = "2024-11-12T10:55:41.904Z" }, + { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925, upload-time = "2024-11-12T10:55:47.206Z" }, + { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000, upload-time = "2024-11-12T10:55:52.264Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689, upload-time = "2024-11-12T10:55:57.858Z" }, + { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413, upload-time = "2024-11-12T10:56:13.328Z" }, + { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530, upload-time = "2024-11-12T10:56:30.07Z" }, + { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315, upload-time = "2024-11-12T10:57:42.804Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987, upload-time = "2024-11-12T10:57:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001, upload-time = "2024-11-12T10:56:34.483Z" }, + { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553, upload-time = "2024-11-12T10:56:39.167Z" }, + { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386, upload-time = "2024-11-12T10:56:44.594Z" }, + { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806, upload-time = "2024-11-12T10:56:49.565Z" }, + { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108, upload-time = "2024-11-12T10:56:55.013Z" }, + { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291, upload-time = "2024-11-12T10:56:59.897Z" }, + { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752, upload-time = "2024-11-12T10:57:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403, upload-time = "2024-11-12T10:57:31.326Z" }, + { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117, upload-time = "2024-11-12T10:57:34.735Z" }, + { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668, upload-time = "2024-11-12T10:57:39.061Z" }, ] [[package]] name = "cycler" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, ] [[package]] name = "debugpy" version = "1.8.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/d4/f35f539e11c9344652f362c22413ec5078f677ac71229dc9b4f6f85ccaa3/debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce", size = 1641193 } +sdist = { url = "https://files.pythonhosted.org/packages/51/d4/f35f539e11c9344652f362c22413ec5078f677ac71229dc9b4f6f85ccaa3/debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce", size = 1641193, upload-time = "2025-03-05T01:02:22.807Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/ad/dff929b6b5403feaab0af0e5bb460fd723f9c62538b718a9af819b8fff20/debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1", size = 2501004 }, - { url = "https://files.pythonhosted.org/packages/d6/4f/b7d42e6679f0bb525888c278b0c0d2b6dff26ed42795230bb46eaae4f9b3/debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522", size = 4222346 }, - { url = "https://files.pythonhosted.org/packages/ec/18/d9b3e88e85d41f68f77235112adc31012a784e45a3fcdbb039777d570a0f/debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f", size = 5226639 }, - { url = "https://files.pythonhosted.org/packages/c9/f7/0df18a4f530ed3cc06f0060f548efe9e3316102101e311739d906f5650be/debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea", size = 5268735 }, - { url = "https://files.pythonhosted.org/packages/b1/db/ae7cd645c1826aae557cebccbc448f0cc9a818d364efb88f8d80e7a03f41/debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503", size = 2485416 }, - { url = "https://files.pythonhosted.org/packages/ec/ed/db4b10ff3b5bb30fe41d9e86444a08bb6448e4d8265e7768450b8408dd36/debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb", size = 4218784 }, - { url = "https://files.pythonhosted.org/packages/82/82/ed81852a8d94086f51664d032d83c7f87cd2b087c6ea70dabec7c1ba813d/debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02", size = 5226270 }, - { url = "https://files.pythonhosted.org/packages/15/63/aa92fb341a78ec40f1c414ec7a7885c2ee17032eee00d12cee0cdc502af4/debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8", size = 5268621 }, - { url = "https://files.pythonhosted.org/packages/37/4f/0b65410a08b6452bfd3f7ed6f3610f1a31fb127f46836e82d31797065dcb/debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f", size = 5229306 }, + { url = "https://files.pythonhosted.org/packages/79/ad/dff929b6b5403feaab0af0e5bb460fd723f9c62538b718a9af819b8fff20/debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1", size = 2501004, upload-time = "2025-03-05T01:02:42.602Z" }, + { url = "https://files.pythonhosted.org/packages/d6/4f/b7d42e6679f0bb525888c278b0c0d2b6dff26ed42795230bb46eaae4f9b3/debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522", size = 4222346, upload-time = "2025-03-05T01:02:44.803Z" }, + { url = "https://files.pythonhosted.org/packages/ec/18/d9b3e88e85d41f68f77235112adc31012a784e45a3fcdbb039777d570a0f/debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f", size = 5226639, upload-time = "2025-03-05T01:02:47.144Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f7/0df18a4f530ed3cc06f0060f548efe9e3316102101e311739d906f5650be/debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea", size = 5268735, upload-time = "2025-03-05T01:02:48.92Z" }, + { url = "https://files.pythonhosted.org/packages/b1/db/ae7cd645c1826aae557cebccbc448f0cc9a818d364efb88f8d80e7a03f41/debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503", size = 2485416, upload-time = "2025-03-05T01:02:50.558Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ed/db4b10ff3b5bb30fe41d9e86444a08bb6448e4d8265e7768450b8408dd36/debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb", size = 4218784, upload-time = "2025-03-05T01:02:53.535Z" }, + { url = "https://files.pythonhosted.org/packages/82/82/ed81852a8d94086f51664d032d83c7f87cd2b087c6ea70dabec7c1ba813d/debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02", size = 5226270, upload-time = "2025-03-05T01:02:56.241Z" }, + { url = "https://files.pythonhosted.org/packages/15/63/aa92fb341a78ec40f1c414ec7a7885c2ee17032eee00d12cee0cdc502af4/debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8", size = 5268621, upload-time = "2025-03-05T01:02:57.845Z" }, + { url = "https://files.pythonhosted.org/packages/37/4f/0b65410a08b6452bfd3f7ed6f3610f1a31fb127f46836e82d31797065dcb/debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f", size = 5229306, upload-time = "2025-03-05T01:03:16.51Z" }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, +] + +[[package]] +name = "distlib" +version = "0.3.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload-time = "2024-10-09T18:35:47.551Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload-time = "2024-10-09T18:35:44.272Z" }, ] [[package]] @@ -200,9 +218,9 @@ dependencies = [ { name = "scipy" }, { name = "statsmodels" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/48/c4/5798ab5c520868d31c625df3600e942612dea707a8da613a1a4341d47f1f/doubleml-0.9.3.tar.gz", hash = "sha256:a1f6337a5700856a3ab77af0b44449741d0fcb188b03ce7d15c0c0d0db0aca29", size = 226094 } +sdist = { url = "https://files.pythonhosted.org/packages/48/c4/5798ab5c520868d31c625df3600e942612dea707a8da613a1a4341d47f1f/doubleml-0.9.3.tar.gz", hash = "sha256:a1f6337a5700856a3ab77af0b44449741d0fcb188b03ce7d15c0c0d0db0aca29", size = 226094, upload-time = "2025-01-09T14:57:18.159Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/97/89/59665f3e7f1a2d99d6fd0babf61b2560c96686fe1fc17f8201f0a0c0baa0/DoubleML-0.9.3-py3-none-any.whl", hash = "sha256:c2ef19d8355babaf03392ae705353f309a684f4a8191cf8e2a7fed74db419808", size = 342917 }, + { url = "https://files.pythonhosted.org/packages/97/89/59665f3e7f1a2d99d6fd0babf61b2560c96686fe1fc17f8201f0a0c0baa0/DoubleML-0.9.3-py3-none-any.whl", hash = "sha256:c2ef19d8355babaf03392ae705353f309a684f4a8191cf8e2a7fed74db419808", size = 342917, upload-time = "2025-01-09T14:57:15.014Z" }, ] [package.optional-dependencies] @@ -214,34 +232,52 @@ rdd = [ name = "executing" version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, +] + +[[package]] +name = "filelock" +version = "3.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload-time = "2025-03-14T07:11:40.47Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" }, ] [[package]] name = "fonttools" version = "4.56.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/8c/9ffa2a555af0e5e5d0e2ed7fdd8c9bef474ed676995bb4c57c9cd0014248/fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4", size = 3462892 } +sdist = { url = "https://files.pythonhosted.org/packages/1c/8c/9ffa2a555af0e5e5d0e2ed7fdd8c9bef474ed676995bb4c57c9cd0014248/fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4", size = 3462892, upload-time = "2025-02-07T13:46:29.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/32/71cfd6877999576a11824a7fe7bc0bb57c5c72b1f4536fa56a3e39552643/fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9", size = 2747757, upload-time = "2025-02-07T13:44:28.021Z" }, + { url = "https://files.pythonhosted.org/packages/15/52/d9f716b072c5061a0b915dd4c387f74bef44c68c069e2195c753905bd9b7/fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f", size = 2279007, upload-time = "2025-02-07T13:44:31.325Z" }, + { url = "https://files.pythonhosted.org/packages/d1/97/f1b3a8afa9a0d814a092a25cd42f59ccb98a0bb7a295e6e02fc9ba744214/fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2", size = 4783991, upload-time = "2025-02-07T13:44:34.888Z" }, + { url = "https://files.pythonhosted.org/packages/95/70/2a781bedc1c45a0c61d29c56425609b22ed7f971da5d7e5df2679488741b/fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563", size = 4855109, upload-time = "2025-02-07T13:44:40.702Z" }, + { url = "https://files.pythonhosted.org/packages/0c/02/a2597858e61a5e3fb6a14d5f6be9e6eb4eaf090da56ad70cedcbdd201685/fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a", size = 4762496, upload-time = "2025-02-07T13:44:45.929Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/aaf00100d6078fdc73f7352b44589804af9dc12b182a2540b16002152ba4/fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28", size = 4990094, upload-time = "2025-02-07T13:44:49.004Z" }, + { url = "https://files.pythonhosted.org/packages/bf/dc/3ff1db522460db60cf3adaf1b64e0c72b43406717d139786d3fa1eb20709/fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c", size = 2142888, upload-time = "2025-02-07T13:44:54.127Z" }, + { url = "https://files.pythonhosted.org/packages/6f/e3/5a181a85777f7809076e51f7422e0dc77eb04676c40ec8bf6a49d390d1ff/fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba", size = 2189734, upload-time = "2025-02-07T13:44:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/a5/55/f06b48d48e0b4ec3a3489efafe9bd4d81b6e0802ac51026e3ee4634e89ba/fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692", size = 2735127, upload-time = "2025-02-07T13:44:59.966Z" }, + { url = "https://files.pythonhosted.org/packages/59/db/d2c7c9b6dd5cbd46f183e650a47403ffb88fca17484eb7c4b1cd88f9e513/fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0", size = 2272519, upload-time = "2025-02-07T13:45:03.891Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a2/da62d779c34a0e0c06415f02eab7fa3466de5d46df459c0275a255cefc65/fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1", size = 4762423, upload-time = "2025-02-07T13:45:07.034Z" }, + { url = "https://files.pythonhosted.org/packages/be/6a/fd4018e0448c8a5e12138906411282c5eab51a598493f080a9f0960e658f/fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea", size = 4834442, upload-time = "2025-02-07T13:45:10.6Z" }, + { url = "https://files.pythonhosted.org/packages/6d/63/fa1dec8efb35bc11ef9c39b2d74754b45d48a3ccb2cf78c0109c0af639e8/fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3", size = 4742800, upload-time = "2025-02-07T13:45:14.096Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f4/963247ae8c73ccc4cf2929e7162f595c81dbe17997d1d0ea77da24a217c9/fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278", size = 4963746, upload-time = "2025-02-07T13:45:17.479Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e0/46f9600c39c644b54e4420f941f75fa200d9288c9ae171e5d80918b8cbb9/fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f", size = 2140927, upload-time = "2025-02-07T13:45:21.084Z" }, + { url = "https://files.pythonhosted.org/packages/27/6d/3edda54f98a550a0473f032d8050315fbc8f1b76a0d9f3879b72ebb2cdd6/fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6", size = 2186709, upload-time = "2025-02-07T13:45:23.719Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ff/44934a031ce5a39125415eb405b9efb76fe7f9586b75291d66ae5cbfc4e6/fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14", size = 1089800, upload-time = "2025-02-07T13:46:26.415Z" }, +] + +[[package]] +name = "identify" +version = "2.6.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254, upload-time = "2025-05-23T20:37:53.3Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/32/71cfd6877999576a11824a7fe7bc0bb57c5c72b1f4536fa56a3e39552643/fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9", size = 2747757 }, - { url = "https://files.pythonhosted.org/packages/15/52/d9f716b072c5061a0b915dd4c387f74bef44c68c069e2195c753905bd9b7/fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f", size = 2279007 }, - { url = "https://files.pythonhosted.org/packages/d1/97/f1b3a8afa9a0d814a092a25cd42f59ccb98a0bb7a295e6e02fc9ba744214/fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2", size = 4783991 }, - { url = "https://files.pythonhosted.org/packages/95/70/2a781bedc1c45a0c61d29c56425609b22ed7f971da5d7e5df2679488741b/fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563", size = 4855109 }, - { url = "https://files.pythonhosted.org/packages/0c/02/a2597858e61a5e3fb6a14d5f6be9e6eb4eaf090da56ad70cedcbdd201685/fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a", size = 4762496 }, - { url = "https://files.pythonhosted.org/packages/f2/00/aaf00100d6078fdc73f7352b44589804af9dc12b182a2540b16002152ba4/fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28", size = 4990094 }, - { url = "https://files.pythonhosted.org/packages/bf/dc/3ff1db522460db60cf3adaf1b64e0c72b43406717d139786d3fa1eb20709/fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c", size = 2142888 }, - { url = "https://files.pythonhosted.org/packages/6f/e3/5a181a85777f7809076e51f7422e0dc77eb04676c40ec8bf6a49d390d1ff/fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba", size = 2189734 }, - { url = "https://files.pythonhosted.org/packages/a5/55/f06b48d48e0b4ec3a3489efafe9bd4d81b6e0802ac51026e3ee4634e89ba/fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692", size = 2735127 }, - { url = "https://files.pythonhosted.org/packages/59/db/d2c7c9b6dd5cbd46f183e650a47403ffb88fca17484eb7c4b1cd88f9e513/fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0", size = 2272519 }, - { url = "https://files.pythonhosted.org/packages/4d/a2/da62d779c34a0e0c06415f02eab7fa3466de5d46df459c0275a255cefc65/fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1", size = 4762423 }, - { url = "https://files.pythonhosted.org/packages/be/6a/fd4018e0448c8a5e12138906411282c5eab51a598493f080a9f0960e658f/fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea", size = 4834442 }, - { url = "https://files.pythonhosted.org/packages/6d/63/fa1dec8efb35bc11ef9c39b2d74754b45d48a3ccb2cf78c0109c0af639e8/fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3", size = 4742800 }, - { url = "https://files.pythonhosted.org/packages/dd/f4/963247ae8c73ccc4cf2929e7162f595c81dbe17997d1d0ea77da24a217c9/fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278", size = 4963746 }, - { url = "https://files.pythonhosted.org/packages/ea/e0/46f9600c39c644b54e4420f941f75fa200d9288c9ae171e5d80918b8cbb9/fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f", size = 2140927 }, - { url = "https://files.pythonhosted.org/packages/27/6d/3edda54f98a550a0473f032d8050315fbc8f1b76a0d9f3879b72ebb2cdd6/fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6", size = 2186709 }, - { url = "https://files.pythonhosted.org/packages/bf/ff/44934a031ce5a39125415eb405b9efb76fe7f9586b75291d66ae5cbfc4e6/fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14", size = 1089800 }, + { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145, upload-time = "2025-05-23T20:37:51.495Z" }, ] [[package]] @@ -263,9 +299,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367, upload-time = "2024-07-01T14:07:22.543Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173, upload-time = "2024-07-01T14:07:19.603Z" }, ] [[package]] @@ -284,9 +320,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/ce/012a0f40ca58a966f87a6e894d6828e2817657cbdf522b02a5d3a87d92ce/ipython-9.0.2.tar.gz", hash = "sha256:ec7b479e3e5656bf4f58c652c120494df1820f4f28f522fb7ca09e213c2aab52", size = 4366102 } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ce/012a0f40ca58a966f87a6e894d6828e2817657cbdf522b02a5d3a87d92ce/ipython-9.0.2.tar.gz", hash = "sha256:ec7b479e3e5656bf4f58c652c120494df1820f4f28f522fb7ca09e213c2aab52", size = 4366102, upload-time = "2025-03-08T15:04:52.885Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/3a/917cb9e72f4e1a4ea13c862533205ae1319bd664119189ee5cc9e4e95ebf/ipython-9.0.2-py3-none-any.whl", hash = "sha256:143ef3ea6fb1e1bffb4c74b114051de653ffb7737a3f7ab1670e657ca6ae8c44", size = 600524 }, + { url = "https://files.pythonhosted.org/packages/20/3a/917cb9e72f4e1a4ea13c862533205ae1319bd664119189ee5cc9e4e95ebf/ipython-9.0.2-py3-none-any.whl", hash = "sha256:143ef3ea6fb1e1bffb4c74b114051de653ffb7737a3f7ab1670e657ca6ae8c44", size = 600524, upload-time = "2025-03-08T15:04:50.667Z" }, ] [[package]] @@ -296,9 +332,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, ] [[package]] @@ -310,9 +346,9 @@ dependencies = [ { name = "numpy" }, { name = "pandas" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/18/359fc46f2874290843a4ba2c089d0109874cd2d73863d0e69fd54a5e9532/itables-2.2.5.tar.gz", hash = "sha256:838ed4783da0b6481b9062c362b8a331aa56f48d6c90e0f6dc76a0488a316049", size = 2436699 } +sdist = { url = "https://files.pythonhosted.org/packages/07/18/359fc46f2874290843a4ba2c089d0109874cd2d73863d0e69fd54a5e9532/itables-2.2.5.tar.gz", hash = "sha256:838ed4783da0b6481b9062c362b8a331aa56f48d6c90e0f6dc76a0488a316049", size = 2436699, upload-time = "2025-02-24T08:51:03.011Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/dd/8976761076632f492f0d25502e348f41f343423d36270dc32f323b9155bc/itables-2.2.5-py3-none-any.whl", hash = "sha256:d0d33ce427c6c84d4063998650323eb65ccddb47a5505ef1ad3f563580dc101d", size = 1407043 }, + { url = "https://files.pythonhosted.org/packages/aa/dd/8976761076632f492f0d25502e348f41f343423d36270dc32f323b9155bc/itables-2.2.5-py3-none-any.whl", hash = "sha256:d0d33ce427c6c84d4063998650323eb65ccddb47a5505ef1ad3f563580dc101d", size = 1407043, upload-time = "2025-02-24T08:50:59.745Z" }, ] [[package]] @@ -322,18 +358,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, ] [[package]] name = "joblib" version = "1.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } +sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621, upload-time = "2024-05-02T12:15:05.765Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, + { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817, upload-time = "2024-05-02T12:15:00.765Z" }, ] [[package]] @@ -347,9 +383,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, ] [[package]] @@ -361,60 +397,60 @@ dependencies = [ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629 } +sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629, upload-time = "2024-03-12T12:37:35.652Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 }, + { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965, upload-time = "2024-03-12T12:37:32.36Z" }, ] [[package]] name = "kiwisolver" version = "1.4.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 }, - { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 }, - { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 }, - { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 }, - { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 }, - { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 }, - { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 }, - { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 }, - { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 }, - { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 }, - { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 }, - { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 }, - { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 }, - { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 }, - { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 }, - { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, - { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, - { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, - { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, - { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, - { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, - { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, - { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, - { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, - { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, - { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, - { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, - { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, - { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, - { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, - { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, - { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, - { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, - { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, - { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, - { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, - { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, - { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, - { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, - { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, - { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, - { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, - { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, +sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538, upload-time = "2024-12-24T18:30:51.519Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152, upload-time = "2024-12-24T18:29:16.85Z" }, + { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555, upload-time = "2024-12-24T18:29:19.146Z" }, + { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067, upload-time = "2024-12-24T18:29:20.096Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443, upload-time = "2024-12-24T18:29:22.843Z" }, + { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728, upload-time = "2024-12-24T18:29:24.463Z" }, + { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388, upload-time = "2024-12-24T18:29:25.776Z" }, + { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849, upload-time = "2024-12-24T18:29:27.202Z" }, + { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533, upload-time = "2024-12-24T18:29:28.638Z" }, + { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898, upload-time = "2024-12-24T18:29:30.368Z" }, + { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605, upload-time = "2024-12-24T18:29:33.151Z" }, + { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801, upload-time = "2024-12-24T18:29:34.584Z" }, + { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077, upload-time = "2024-12-24T18:29:36.138Z" }, + { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410, upload-time = "2024-12-24T18:29:39.991Z" }, + { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853, upload-time = "2024-12-24T18:29:42.006Z" }, + { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424, upload-time = "2024-12-24T18:29:44.38Z" }, + { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156, upload-time = "2024-12-24T18:29:45.368Z" }, + { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555, upload-time = "2024-12-24T18:29:46.37Z" }, + { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071, upload-time = "2024-12-24T18:29:47.333Z" }, + { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053, upload-time = "2024-12-24T18:29:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278, upload-time = "2024-12-24T18:29:51.164Z" }, + { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139, upload-time = "2024-12-24T18:29:52.594Z" }, + { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517, upload-time = "2024-12-24T18:29:53.941Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952, upload-time = "2024-12-24T18:29:56.523Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132, upload-time = "2024-12-24T18:29:57.989Z" }, + { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997, upload-time = "2024-12-24T18:29:59.393Z" }, + { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060, upload-time = "2024-12-24T18:30:01.338Z" }, + { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471, upload-time = "2024-12-24T18:30:04.574Z" }, + { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793, upload-time = "2024-12-24T18:30:06.25Z" }, + { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855, upload-time = "2024-12-24T18:30:07.535Z" }, + { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430, upload-time = "2024-12-24T18:30:08.504Z" }, + { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294, upload-time = "2024-12-24T18:30:09.508Z" }, + { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736, upload-time = "2024-12-24T18:30:11.039Z" }, + { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194, upload-time = "2024-12-24T18:30:14.886Z" }, + { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942, upload-time = "2024-12-24T18:30:18.927Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341, upload-time = "2024-12-24T18:30:22.102Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455, upload-time = "2024-12-24T18:30:24.947Z" }, + { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138, upload-time = "2024-12-24T18:30:26.286Z" }, + { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857, upload-time = "2024-12-24T18:30:28.86Z" }, + { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129, upload-time = "2024-12-24T18:30:30.34Z" }, + { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538, upload-time = "2024-12-24T18:30:33.334Z" }, + { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661, upload-time = "2024-12-24T18:30:34.939Z" }, + { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710, upload-time = "2024-12-24T18:30:37.281Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213, upload-time = "2024-12-24T18:30:40.019Z" }, ] [[package]] @@ -425,13 +461,13 @@ dependencies = [ { name = "numpy" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/68/0b/a2e9f5c5da7ef047cc60cef37f86185088845e8433e54d2e7ed439cce8a3/lightgbm-4.6.0.tar.gz", hash = "sha256:cb1c59720eb569389c0ba74d14f52351b573af489f230032a1c9f314f8bab7fe", size = 1703705 } +sdist = { url = "https://files.pythonhosted.org/packages/68/0b/a2e9f5c5da7ef047cc60cef37f86185088845e8433e54d2e7ed439cce8a3/lightgbm-4.6.0.tar.gz", hash = "sha256:cb1c59720eb569389c0ba74d14f52351b573af489f230032a1c9f314f8bab7fe", size = 1703705, upload-time = "2025-02-15T04:03:03.111Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/75/cffc9962cca296bc5536896b7e65b4a7cdeb8db208e71b9c0133c08f8f7e/lightgbm-4.6.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:b7a393de8a334d5c8e490df91270f0763f83f959574d504c7ccb9eee4aef70ed", size = 2010151 }, - { url = "https://files.pythonhosted.org/packages/21/1b/550ee378512b78847930f5d74228ca1fdba2a7fbdeaac9aeccc085b0e257/lightgbm-4.6.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:2dafd98d4e02b844ceb0b61450a660681076b1ea6c7adb8c566dfd66832aafad", size = 1592172 }, - { url = "https://files.pythonhosted.org/packages/64/41/4fbde2c3d29e25ee7c41d87df2f2e5eda65b431ee154d4d462c31041846c/lightgbm-4.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4d68712bbd2b57a0b14390cbf9376c1d5ed773fa2e71e099cac588703b590336", size = 3454567 }, - { url = "https://files.pythonhosted.org/packages/42/86/dabda8fbcb1b00bcfb0003c3776e8ade1aa7b413dff0a2c08f457dace22f/lightgbm-4.6.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:cb19b5afea55b5b61cbb2131095f50538bd608a00655f23ad5d25ae3e3bf1c8d", size = 3569831 }, - { url = "https://files.pythonhosted.org/packages/5e/23/f8b28ca248bb629b9e08f877dd2965d1994e1674a03d67cd10c5246da248/lightgbm-4.6.0-py3-none-win_amd64.whl", hash = "sha256:37089ee95664b6550a7189d887dbf098e3eadab03537e411f52c63c121e3ba4b", size = 1451509 }, + { url = "https://files.pythonhosted.org/packages/f2/75/cffc9962cca296bc5536896b7e65b4a7cdeb8db208e71b9c0133c08f8f7e/lightgbm-4.6.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:b7a393de8a334d5c8e490df91270f0763f83f959574d504c7ccb9eee4aef70ed", size = 2010151, upload-time = "2025-02-15T04:02:50.961Z" }, + { url = "https://files.pythonhosted.org/packages/21/1b/550ee378512b78847930f5d74228ca1fdba2a7fbdeaac9aeccc085b0e257/lightgbm-4.6.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:2dafd98d4e02b844ceb0b61450a660681076b1ea6c7adb8c566dfd66832aafad", size = 1592172, upload-time = "2025-02-15T04:02:53.937Z" }, + { url = "https://files.pythonhosted.org/packages/64/41/4fbde2c3d29e25ee7c41d87df2f2e5eda65b431ee154d4d462c31041846c/lightgbm-4.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4d68712bbd2b57a0b14390cbf9376c1d5ed773fa2e71e099cac588703b590336", size = 3454567, upload-time = "2025-02-15T04:02:56.443Z" }, + { url = "https://files.pythonhosted.org/packages/42/86/dabda8fbcb1b00bcfb0003c3776e8ade1aa7b413dff0a2c08f457dace22f/lightgbm-4.6.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:cb19b5afea55b5b61cbb2131095f50538bd608a00655f23ad5d25ae3e3bf1c8d", size = 3569831, upload-time = "2025-02-15T04:02:58.925Z" }, + { url = "https://files.pythonhosted.org/packages/5e/23/f8b28ca248bb629b9e08f877dd2965d1994e1674a03d67cd10c5246da248/lightgbm-4.6.0-py3-none-win_amd64.whl", hash = "sha256:37089ee95664b6550a7189d887dbf098e3eadab03537e411f52c63c121e3ba4b", size = 1451509, upload-time = "2025-02-15T04:03:01.515Z" }, ] [[package]] @@ -449,26 +485,26 @@ dependencies = [ { name = "pyparsing" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/1d/5e0dc3b59c034e43de16f94deb68f4ad8a96b3ea00f4b37c160b7474928e/matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107", size = 8175488 }, - { url = "https://files.pythonhosted.org/packages/7a/81/dae7e14042e74da658c3336ab9799128e09a1ee03964f2d89630b5d12106/matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be", size = 8046264 }, - { url = "https://files.pythonhosted.org/packages/21/c4/22516775dcde10fc9c9571d155f90710761b028fc44f660508106c363c97/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6", size = 8452048 }, - { url = "https://files.pythonhosted.org/packages/63/23/c0615001f67ce7c96b3051d856baedc0c818a2ed84570b9bf9bde200f85d/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d", size = 8597111 }, - { url = "https://files.pythonhosted.org/packages/ca/c0/a07939a82aed77770514348f4568177d7dadab9787ebc618a616fe3d665e/matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea", size = 9402771 }, - { url = "https://files.pythonhosted.org/packages/a6/b6/a9405484fb40746fdc6ae4502b16a9d6e53282ba5baaf9ebe2da579f68c4/matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c", size = 8063742 }, - { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112 }, - { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931 }, - { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422 }, - { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819 }, - { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782 }, - { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812 }, - { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021 }, - { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782 }, - { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901 }, - { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864 }, - { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487 }, - { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832 }, +sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335, upload-time = "2025-02-27T19:19:51.038Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/1d/5e0dc3b59c034e43de16f94deb68f4ad8a96b3ea00f4b37c160b7474928e/matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107", size = 8175488, upload-time = "2025-02-27T19:18:51.436Z" }, + { url = "https://files.pythonhosted.org/packages/7a/81/dae7e14042e74da658c3336ab9799128e09a1ee03964f2d89630b5d12106/matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be", size = 8046264, upload-time = "2025-02-27T19:18:54.344Z" }, + { url = "https://files.pythonhosted.org/packages/21/c4/22516775dcde10fc9c9571d155f90710761b028fc44f660508106c363c97/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6", size = 8452048, upload-time = "2025-02-27T19:18:56.536Z" }, + { url = "https://files.pythonhosted.org/packages/63/23/c0615001f67ce7c96b3051d856baedc0c818a2ed84570b9bf9bde200f85d/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d", size = 8597111, upload-time = "2025-02-27T19:18:59.439Z" }, + { url = "https://files.pythonhosted.org/packages/ca/c0/a07939a82aed77770514348f4568177d7dadab9787ebc618a616fe3d665e/matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea", size = 9402771, upload-time = "2025-02-27T19:19:01.944Z" }, + { url = "https://files.pythonhosted.org/packages/a6/b6/a9405484fb40746fdc6ae4502b16a9d6e53282ba5baaf9ebe2da579f68c4/matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c", size = 8063742, upload-time = "2025-02-27T19:19:04.632Z" }, + { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112, upload-time = "2025-02-27T19:19:07.59Z" }, + { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931, upload-time = "2025-02-27T19:19:10.515Z" }, + { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422, upload-time = "2025-02-27T19:19:12.738Z" }, + { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819, upload-time = "2025-02-27T19:19:15.306Z" }, + { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782, upload-time = "2025-02-27T19:19:17.841Z" }, + { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812, upload-time = "2025-02-27T19:19:20.888Z" }, + { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021, upload-time = "2025-02-27T19:19:23.412Z" }, + { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782, upload-time = "2025-02-27T19:19:28.33Z" }, + { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901, upload-time = "2025-02-27T19:19:31.536Z" }, + { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864, upload-time = "2025-02-27T19:19:34.233Z" }, + { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487, upload-time = "2025-02-27T19:19:36.924Z" }, + { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832, upload-time = "2025-02-27T19:19:39.431Z" }, ] [[package]] @@ -478,9 +514,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, ] [[package]] @@ -493,9 +529,9 @@ dependencies = [ { name = "scipy" }, { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/c3/9f83c374314b2b42e7aec65f3bf87046415ab265f209fa8a04eb6da822ee/mizani-0.13.1.tar.gz", hash = "sha256:e3247ea12c746c8104767d7e42a2d16473173c7bc314f298d8294a58f4653353", size = 765181 } +sdist = { url = "https://files.pythonhosted.org/packages/91/c3/9f83c374314b2b42e7aec65f3bf87046415ab265f209fa8a04eb6da822ee/mizani-0.13.1.tar.gz", hash = "sha256:e3247ea12c746c8104767d7e42a2d16473173c7bc314f298d8294a58f4653353", size = 765181, upload-time = "2024-12-10T16:33:37.468Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/85/16e17e75831ec01808c5f07e578f1552df87a4f5c827caa8be28f97b4c19/mizani-0.13.1-py3-none-any.whl", hash = "sha256:7da0dcacd43fbcc01c279ea06a76f1f064ae90dbb387c4a985ba24a92d3c7d7a", size = 127896 }, + { url = "https://files.pythonhosted.org/packages/29/85/16e17e75831ec01808c5f07e578f1552df87a4f5c827caa8be28f97b4c19/mizani-0.13.1-py3-none-any.whl", hash = "sha256:7da0dcacd43fbcc01c279ea06a76f1f064ae90dbb387c4a985ba24a92d3c7d7a", size = 127896, upload-time = "2024-12-10T16:33:35.763Z" }, ] [[package]] @@ -511,6 +547,7 @@ dependencies = [ { name = "lightgbm" }, { name = "numpy" }, { name = "pandas" }, + { name = "pre-commit" }, { name = "pyyaml" }, { name = "ruff" }, { name = "scikit-learn" }, @@ -526,6 +563,7 @@ requires-dist = [ { name = "lightgbm", specifier = ">=4.6.0" }, { name = "numpy", specifier = ">=2.2.4" }, { name = "pandas", specifier = ">=2.2.3" }, + { name = "pre-commit", specifier = ">=4.2.0" }, { name = "pyyaml", specifier = ">=6.0.2" }, { name = "ruff", specifier = ">=0.11.0" }, { name = "scikit-learn", specifier = ">=1.5.2" }, @@ -535,74 +573,83 @@ requires-dist = [ name = "mypy-extensions" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 } +sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433, upload-time = "2023-02-04T12:11:27.157Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 }, + { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695, upload-time = "2023-02-04T12:11:25.002Z" }, ] [[package]] name = "narwhals" version = "1.31.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/fa/c2b6a4d5dbc4af15aa58c86920d5275a9c65142318179b246685069f57da/narwhals-1.31.0.tar.gz", hash = "sha256:333472e2562343dfdd27407ec9b5114a07c81d0416794e4ac6b703dd925c6a1a", size = 253463 } +sdist = { url = "https://files.pythonhosted.org/packages/36/fa/c2b6a4d5dbc4af15aa58c86920d5275a9c65142318179b246685069f57da/narwhals-1.31.0.tar.gz", hash = "sha256:333472e2562343dfdd27407ec9b5114a07c81d0416794e4ac6b703dd925c6a1a", size = 253463, upload-time = "2025-03-17T15:26:26.065Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/c0/fb39bd876ea2fd9509343d643690cd2f9715e6a77271e7c7b26f1eea70c1/narwhals-1.31.0-py3-none-any.whl", hash = "sha256:2a7b79bb5f511055c4c0142121fc0d4171ea171458e12d44dbd9c8fc6488e997", size = 313124 }, + { url = "https://files.pythonhosted.org/packages/f9/c0/fb39bd876ea2fd9509343d643690cd2f9715e6a77271e7c7b26f1eea70c1/narwhals-1.31.0-py3-none-any.whl", hash = "sha256:2a7b79bb5f511055c4c0142121fc0d4171ea171458e12d44dbd9c8fc6488e997", size = 313124, upload-time = "2025-03-17T15:26:23.87Z" }, ] [[package]] name = "nest-asyncio" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + +[[package]] +name = "nodeenv" +version = "1.9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, ] [[package]] name = "numpy" version = "2.2.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/30/182db21d4f2a95904cec1a6f779479ea1ac07c0647f064dea454ec650c42/numpy-2.2.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", size = 20947156 }, - { url = "https://files.pythonhosted.org/packages/24/6d/9483566acfbda6c62c6bc74b6e981c777229d2af93c8eb2469b26ac1b7bc/numpy-2.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", size = 14133092 }, - { url = "https://files.pythonhosted.org/packages/27/f6/dba8a258acbf9d2bed2525cdcbb9493ef9bae5199d7a9cb92ee7e9b2aea6/numpy-2.2.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", size = 5163515 }, - { url = "https://files.pythonhosted.org/packages/62/30/82116199d1c249446723c68f2c9da40d7f062551036f50b8c4caa42ae252/numpy-2.2.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", size = 6696558 }, - { url = "https://files.pythonhosted.org/packages/0e/b2/54122b3c6df5df3e87582b2e9430f1bdb63af4023c739ba300164c9ae503/numpy-2.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", size = 14084742 }, - { url = "https://files.pythonhosted.org/packages/02/e2/e2cbb8d634151aab9528ef7b8bab52ee4ab10e076509285602c2a3a686e0/numpy-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", size = 16134051 }, - { url = "https://files.pythonhosted.org/packages/8e/21/efd47800e4affc993e8be50c1b768de038363dd88865920439ef7b422c60/numpy-2.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", size = 15578972 }, - { url = "https://files.pythonhosted.org/packages/04/1e/f8bb88f6157045dd5d9b27ccf433d016981032690969aa5c19e332b138c0/numpy-2.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", size = 17898106 }, - { url = "https://files.pythonhosted.org/packages/2b/93/df59a5a3897c1f036ae8ff845e45f4081bb06943039ae28a3c1c7c780f22/numpy-2.2.4-cp312-cp312-win32.whl", hash = "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", size = 6311190 }, - { url = "https://files.pythonhosted.org/packages/46/69/8c4f928741c2a8efa255fdc7e9097527c6dc4e4df147e3cadc5d9357ce85/numpy-2.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", size = 12644305 }, - { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623 }, - { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681 }, - { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759 }, - { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092 }, - { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422 }, - { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202 }, - { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131 }, - { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270 }, - { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141 }, - { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885 }, - { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829 }, - { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419 }, - { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414 }, - { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379 }, - { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725 }, - { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638 }, - { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717 }, - { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998 }, - { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896 }, - { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119 }, +sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701, upload-time = "2025-03-16T18:27:00.648Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/30/182db21d4f2a95904cec1a6f779479ea1ac07c0647f064dea454ec650c42/numpy-2.2.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", size = 20947156, upload-time = "2025-03-16T18:09:51.975Z" }, + { url = "https://files.pythonhosted.org/packages/24/6d/9483566acfbda6c62c6bc74b6e981c777229d2af93c8eb2469b26ac1b7bc/numpy-2.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", size = 14133092, upload-time = "2025-03-16T18:10:16.329Z" }, + { url = "https://files.pythonhosted.org/packages/27/f6/dba8a258acbf9d2bed2525cdcbb9493ef9bae5199d7a9cb92ee7e9b2aea6/numpy-2.2.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", size = 5163515, upload-time = "2025-03-16T18:10:26.19Z" }, + { url = "https://files.pythonhosted.org/packages/62/30/82116199d1c249446723c68f2c9da40d7f062551036f50b8c4caa42ae252/numpy-2.2.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", size = 6696558, upload-time = "2025-03-16T18:10:38.996Z" }, + { url = "https://files.pythonhosted.org/packages/0e/b2/54122b3c6df5df3e87582b2e9430f1bdb63af4023c739ba300164c9ae503/numpy-2.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", size = 14084742, upload-time = "2025-03-16T18:11:02.76Z" }, + { url = "https://files.pythonhosted.org/packages/02/e2/e2cbb8d634151aab9528ef7b8bab52ee4ab10e076509285602c2a3a686e0/numpy-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", size = 16134051, upload-time = "2025-03-16T18:11:32.767Z" }, + { url = "https://files.pythonhosted.org/packages/8e/21/efd47800e4affc993e8be50c1b768de038363dd88865920439ef7b422c60/numpy-2.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", size = 15578972, upload-time = "2025-03-16T18:11:59.877Z" }, + { url = "https://files.pythonhosted.org/packages/04/1e/f8bb88f6157045dd5d9b27ccf433d016981032690969aa5c19e332b138c0/numpy-2.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", size = 17898106, upload-time = "2025-03-16T18:12:31.487Z" }, + { url = "https://files.pythonhosted.org/packages/2b/93/df59a5a3897c1f036ae8ff845e45f4081bb06943039ae28a3c1c7c780f22/numpy-2.2.4-cp312-cp312-win32.whl", hash = "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", size = 6311190, upload-time = "2025-03-16T18:12:44.46Z" }, + { url = "https://files.pythonhosted.org/packages/46/69/8c4f928741c2a8efa255fdc7e9097527c6dc4e4df147e3cadc5d9357ce85/numpy-2.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", size = 12644305, upload-time = "2025-03-16T18:13:06.864Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623, upload-time = "2025-03-16T18:13:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681, upload-time = "2025-03-16T18:14:08.031Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759, upload-time = "2025-03-16T18:14:18.613Z" }, + { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092, upload-time = "2025-03-16T18:14:31.386Z" }, + { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422, upload-time = "2025-03-16T18:14:54.83Z" }, + { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202, upload-time = "2025-03-16T18:15:22.035Z" }, + { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131, upload-time = "2025-03-16T18:15:48.546Z" }, + { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270, upload-time = "2025-03-16T18:16:20.274Z" }, + { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141, upload-time = "2025-03-16T18:20:15.297Z" }, + { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885, upload-time = "2025-03-16T18:20:36.982Z" }, + { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829, upload-time = "2025-03-16T18:16:56.191Z" }, + { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419, upload-time = "2025-03-16T18:17:22.811Z" }, + { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414, upload-time = "2025-03-16T18:17:34.066Z" }, + { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379, upload-time = "2025-03-16T18:17:47.466Z" }, + { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725, upload-time = "2025-03-16T18:18:11.904Z" }, + { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638, upload-time = "2025-03-16T18:18:40.749Z" }, + { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717, upload-time = "2025-03-16T18:19:04.512Z" }, + { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998, upload-time = "2025-03-16T18:19:32.52Z" }, + { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896, upload-time = "2025-03-16T18:19:43.55Z" }, + { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119, upload-time = "2025-03-16T18:20:03.94Z" }, ] [[package]] name = "packaging" version = "24.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, ] [[package]] @@ -615,46 +662,46 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, - { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, - { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, - { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, - { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, - { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, - { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, - { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, - { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, - { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, - { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, - { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, - { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, - { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, - { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, - { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, - { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, - { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, - { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, - { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213, upload-time = "2024-09-20T13:10:04.827Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893, upload-time = "2024-09-20T13:09:09.655Z" }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475, upload-time = "2024-09-20T13:09:14.718Z" }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645, upload-time = "2024-09-20T19:02:03.88Z" }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445, upload-time = "2024-09-20T13:09:17.621Z" }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235, upload-time = "2024-09-20T19:02:07.094Z" }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756, upload-time = "2024-09-20T13:09:20.474Z" }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248, upload-time = "2024-09-20T13:09:23.137Z" }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643, upload-time = "2024-09-20T13:09:25.522Z" }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573, upload-time = "2024-09-20T13:09:28.012Z" }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085, upload-time = "2024-09-20T19:02:10.451Z" }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809, upload-time = "2024-09-20T13:09:30.814Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316, upload-time = "2024-09-20T19:02:13.825Z" }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055, upload-time = "2024-09-20T13:09:33.462Z" }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175, upload-time = "2024-09-20T13:09:35.871Z" }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650, upload-time = "2024-09-20T13:09:38.685Z" }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177, upload-time = "2024-09-20T13:09:41.141Z" }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526, upload-time = "2024-09-20T19:02:16.905Z" }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013, upload-time = "2024-09-20T13:09:44.39Z" }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620, upload-time = "2024-09-20T19:02:20.639Z" }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436, upload-time = "2024-09-20T13:09:48.112Z" }, ] [[package]] name = "parso" version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload-time = "2024-04-05T09:43:55.897Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload-time = "2024-04-05T09:43:53.299Z" }, ] [[package]] name = "pathspec" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, ] [[package]] @@ -664,9 +711,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/81/74f6a65b848ffd16c18f920620ce999fe45fe27f01ab3911260ce4ed85e4/patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4", size = 396010 } +sdist = { url = "https://files.pythonhosted.org/packages/d1/81/74f6a65b848ffd16c18f920620ce999fe45fe27f01ab3911260ce4ed85e4/patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4", size = 396010, upload-time = "2024-11-12T14:10:54.642Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c", size = 232923 }, + { url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c", size = 232923, upload-time = "2024-11-12T14:10:52.85Z" }, ] [[package]] @@ -676,56 +723,56 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, ] [[package]] name = "pillow" version = "11.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818 }, - { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662 }, - { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317 }, - { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999 }, - { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819 }, - { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081 }, - { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513 }, - { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298 }, - { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630 }, - { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369 }, - { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240 }, - { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 }, - { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 }, - { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 }, - { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 }, - { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 }, - { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 }, - { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 }, - { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 }, - { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 }, - { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 }, - { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 }, - { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 }, - { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 }, - { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 }, - { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 }, - { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 }, - { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 }, - { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 }, - { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715, upload-time = "2025-01-02T08:13:58.407Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818, upload-time = "2025-01-02T08:11:22.518Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662, upload-time = "2025-01-02T08:11:25.19Z" }, + { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317, upload-time = "2025-01-02T08:11:30.371Z" }, + { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999, upload-time = "2025-01-02T08:11:33.499Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819, upload-time = "2025-01-02T08:11:37.304Z" }, + { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081, upload-time = "2025-01-02T08:11:39.598Z" }, + { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513, upload-time = "2025-01-02T08:11:43.083Z" }, + { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298, upload-time = "2025-01-02T08:11:46.626Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630, upload-time = "2025-01-02T08:11:49.401Z" }, + { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369, upload-time = "2025-01-02T08:11:52.02Z" }, + { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240, upload-time = "2025-01-02T08:11:56.193Z" }, + { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640, upload-time = "2025-01-02T08:11:58.329Z" }, + { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437, upload-time = "2025-01-02T08:12:01.797Z" }, + { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605, upload-time = "2025-01-02T08:12:05.224Z" }, + { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173, upload-time = "2025-01-02T08:12:08.281Z" }, + { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145, upload-time = "2025-01-02T08:12:11.411Z" }, + { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340, upload-time = "2025-01-02T08:12:15.29Z" }, + { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906, upload-time = "2025-01-02T08:12:17.485Z" }, + { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759, upload-time = "2025-01-02T08:12:20.382Z" }, + { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657, upload-time = "2025-01-02T08:12:23.922Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304, upload-time = "2025-01-02T08:12:28.069Z" }, + { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117, upload-time = "2025-01-02T08:12:30.064Z" }, + { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060, upload-time = "2025-01-02T08:12:32.362Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192, upload-time = "2025-01-02T08:12:34.361Z" }, + { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805, upload-time = "2025-01-02T08:12:36.99Z" }, + { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623, upload-time = "2025-01-02T08:12:41.912Z" }, + { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191, upload-time = "2025-01-02T08:12:45.186Z" }, + { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494, upload-time = "2025-01-02T08:12:47.098Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595, upload-time = "2025-01-02T08:12:50.47Z" }, + { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651, upload-time = "2025-01-02T08:12:53.356Z" }, ] [[package]] name = "platformdirs" version = "4.3.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } +sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302, upload-time = "2024-09-17T19:06:50.688Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, + { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439, upload-time = "2024-09-17T19:06:49.212Z" }, ] [[package]] @@ -736,9 +783,9 @@ dependencies = [ { name = "narwhals" }, { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/cc/e41b5f697ae403f0b50e47b7af2e36642a193085f553bf7cc1169362873a/plotly-6.0.1.tar.gz", hash = "sha256:dd8400229872b6e3c964b099be699f8d00c489a974f2cfccfad5e8240873366b", size = 8094643 } +sdist = { url = "https://files.pythonhosted.org/packages/c7/cc/e41b5f697ae403f0b50e47b7af2e36642a193085f553bf7cc1169362873a/plotly-6.0.1.tar.gz", hash = "sha256:dd8400229872b6e3c964b099be699f8d00c489a974f2cfccfad5e8240873366b", size = 8094643, upload-time = "2025-03-17T15:02:23.994Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl", hash = "sha256:4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768", size = 14805757 }, + { url = "https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl", hash = "sha256:4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768", size = 14805757, upload-time = "2025-03-17T15:02:18.73Z" }, ] [[package]] @@ -753,9 +800,25 @@ dependencies = [ { name = "scipy" }, { name = "statsmodels" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5d/0e/618bfa724ad19418c83eb22cdc4332dc69bb67f47094bd013ffe15e188d2/plotnine-0.14.5.tar.gz", hash = "sha256:9e75969e8e10d8d770a4be36d10e075cc10b88ca6fcc99e36ada53436fb5653f", size = 6424617 } +sdist = { url = "https://files.pythonhosted.org/packages/5d/0e/618bfa724ad19418c83eb22cdc4332dc69bb67f47094bd013ffe15e188d2/plotnine-0.14.5.tar.gz", hash = "sha256:9e75969e8e10d8d770a4be36d10e075cc10b88ca6fcc99e36ada53436fb5653f", size = 6424617, upload-time = "2025-01-02T11:06:07.338Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/c5/7cfda7ba9fa02243367fbfb4880b6de8039266f22c47c2dbbd39b6adc46f/plotnine-0.14.5-py3-none-any.whl", hash = "sha256:4a8bc4360732dd69a0263def4abab285ed8f0f4386186f1e44c642f2cea79b88", size = 1301197 }, + { url = "https://files.pythonhosted.org/packages/4d/c5/7cfda7ba9fa02243367fbfb4880b6de8039266f22c47c2dbbd39b6adc46f/plotnine-0.14.5-py3-none-any.whl", hash = "sha256:4a8bc4360732dd69a0263def4abab285ed8f0f4386186f1e44c642f2cea79b88", size = 1301197, upload-time = "2025-01-02T11:06:03.686Z" }, +] + +[[package]] +name = "pre-commit" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload-time = "2025-03-18T21:35:20.987Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload-time = "2025-03-18T21:35:19.343Z" }, ] [[package]] @@ -765,69 +828,69 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087 } +sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087, upload-time = "2025-01-20T15:55:35.072Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816 }, + { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816, upload-time = "2025-01-20T15:55:29.98Z" }, ] [[package]] name = "psutil" version = "7.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, ] [[package]] name = "ptyprocess" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, ] [[package]] name = "pure-eval" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, ] [[package]] name = "pycparser" version = "2.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, ] [[package]] name = "pygments" version = "2.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" }, ] [[package]] name = "pyparsing" version = "3.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/1a/3544f4f299a47911c2ab3710f534e52fea62a633c96806995da5d25be4b2/pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a", size = 1067694 } +sdist = { url = "https://files.pythonhosted.org/packages/8b/1a/3544f4f299a47911c2ab3710f534e52fea62a633c96806995da5d25be4b2/pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a", size = 1067694, upload-time = "2024-12-31T20:59:46.157Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 }, + { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716, upload-time = "2024-12-31T20:59:42.738Z" }, ] [[package]] @@ -837,18 +900,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, ] [[package]] name = "pytz" version = "2025.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5f/57/df1c9157c8d5a05117e455d66fd7cf6dbc46974f832b1058ed4856785d8a/pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e", size = 319617 } +sdist = { url = "https://files.pythonhosted.org/packages/5f/57/df1c9157c8d5a05117e455d66fd7cf6dbc46974f832b1058ed4856785d8a/pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e", size = 319617, upload-time = "2025-01-31T01:54:48.615Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", size = 507930 }, + { url = "https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", size = 507930, upload-time = "2025-01-31T01:54:45.634Z" }, ] [[package]] @@ -856,38 +919,38 @@ name = "pywin32" version = "310" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239 }, - { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839 }, - { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470 }, - { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 }, - { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 }, - { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 }, + { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239, upload-time = "2025-03-17T00:55:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839, upload-time = "2025-03-17T00:56:00.8Z" }, + { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470, upload-time = "2025-03-17T00:56:02.601Z" }, + { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384, upload-time = "2025-03-17T00:56:04.383Z" }, + { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039, upload-time = "2025-03-17T00:56:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152, upload-time = "2025-03-17T00:56:07.819Z" }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, ] [[package]] @@ -897,38 +960,38 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/ed/c3876f3b3e8beba336214ce44e1efa1792dd537027cef24192ac2b077d7c/pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3", size = 276733 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/03/7170c3814bb9106c1bca67700c731aaf1cd990fd2f0097c754acb600330e/pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea", size = 1348354 }, - { url = "https://files.pythonhosted.org/packages/74/f3/908b17f9111cdc764aef1de3d36026a2984c46ed90c3c2c85f28b66142f0/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7", size = 671056 }, - { url = "https://files.pythonhosted.org/packages/02/ad/afcb8484b65ceacd1609f709c2caeed31bd6c49261a7507cd5c175cc105f/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d", size = 908597 }, - { url = "https://files.pythonhosted.org/packages/a1/b5/4eeeae0aaaa6ef0c74cfa8b2273b53382bd858df6d99485f2fc8211e7002/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00", size = 865260 }, - { url = "https://files.pythonhosted.org/packages/74/6a/63db856e93e3a3c3dc98a1de28a902cf1b21c7b0d3856cd5931d7cfd30af/pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695", size = 859916 }, - { url = "https://files.pythonhosted.org/packages/e1/ce/d522c9b46ee3746d4b98c81969c568c2c6296e931a65f2c87104b645654c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52", size = 1201368 }, - { url = "https://files.pythonhosted.org/packages/5a/56/29dcd3647a39e933eb489fda261a1e2700a59d4a9432889a85166e15651c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac", size = 1512663 }, - { url = "https://files.pythonhosted.org/packages/6b/36/7c570698127a43398ed1b1832dada59496e633115016addbce5eda9938a6/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66", size = 1411693 }, - { url = "https://files.pythonhosted.org/packages/de/54/51d39bef85a7cdbca36227f7defdbfcdc5011b8361a3bfc0e8df431f5a5d/pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37", size = 581244 }, - { url = "https://files.pythonhosted.org/packages/f2/6a/9512b11a1d0c5648534f03d5ab0c3222f55dc9c192029c1cb00a0ca044e2/pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495", size = 643559 }, - { url = "https://files.pythonhosted.org/packages/27/9f/faf5c9cf91b61eeb82a5e919d024d3ac28a795c92cce817be264ccd757d3/pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d", size = 557664 }, - { url = "https://files.pythonhosted.org/packages/37/16/97b8c5107bfccb39120e611671a452c9ff6e8626fb3f8d4c15afd652b6ae/pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd", size = 1345691 }, - { url = "https://files.pythonhosted.org/packages/a5/61/d5572d95040c0bb5b31eed5b23f3f0f992d94e4e0de0cea62e3c7f3a85c1/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597", size = 670622 }, - { url = "https://files.pythonhosted.org/packages/1c/0c/f0235d27388aacf4ed8bcc1d574f6f2f629da0a20610faa0a8e9d363c2b0/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4", size = 908683 }, - { url = "https://files.pythonhosted.org/packages/cb/52/664828f9586c396b857eec088d208230463e3dc991a24df6adbad98fbaa3/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9", size = 865212 }, - { url = "https://files.pythonhosted.org/packages/2b/14/213b2967030b7d7aecc32dd453830f98799b3cbf2b10a40232e9f22a6520/pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558", size = 860068 }, - { url = "https://files.pythonhosted.org/packages/aa/e5/ff50c8fade69d1c0469652832c626d1910668697642c10cb0e1b6183ef9a/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64", size = 1201303 }, - { url = "https://files.pythonhosted.org/packages/9a/e2/fff5e483be95ccc11a05781323e001e63ec15daec1d0f6f08de72ca534db/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53", size = 1512892 }, - { url = "https://files.pythonhosted.org/packages/21/75/cc44d276e43136e5692e487c3c019f816e11ed445261e434217c28cc98c4/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36", size = 1411736 }, - { url = "https://files.pythonhosted.org/packages/ee/1c/d070cbc9a7961fe772641c51bb3798d88cb1f8e20ca718407363462624cf/pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14", size = 581214 }, - { url = "https://files.pythonhosted.org/packages/38/d3/91082f1151ff5b54e0bed40eb1a26f418530ab07ecaec4dbb83e3d9fa9a9/pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca", size = 643412 }, - { url = "https://files.pythonhosted.org/packages/e0/cf/dabe68dfdf3e67bea6152eeec4b251cf899ee5b853cfb5c97e4719f9e6e9/pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce", size = 557444 }, - { url = "https://files.pythonhosted.org/packages/c0/56/e7576ac71c1566da4f4ec586351462a2bb202143fb074bf56df8fe85dcc3/pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464", size = 1340288 }, - { url = "https://files.pythonhosted.org/packages/f1/ab/0bca97e94d420b5908968bc479e51c3686a9f80d8893450eefcd673b1b1d/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825", size = 662462 }, - { url = "https://files.pythonhosted.org/packages/ee/be/99e89b55863808da322ac3ab52d8e135dcf2241094aaa468bfe2923d5194/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52", size = 896464 }, - { url = "https://files.pythonhosted.org/packages/38/d4/a4be06a313c8d6a5fe1d92975db30aca85f502e867fca392532e06a28c3c/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557", size = 853432 }, - { url = "https://files.pythonhosted.org/packages/12/e6/e608b4c34106bbf5b3b382662ea90a43b2e23df0aa9c1f0fd4e21168d523/pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046", size = 845884 }, - { url = "https://files.pythonhosted.org/packages/c3/a9/d5e6355308ba529d9cd3576ee8bb3b2e2b726571748f515fbb8559401f5b/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981", size = 1191454 }, - { url = "https://files.pythonhosted.org/packages/6a/9a/a21dc6c73ac242e425709c1e0049368d8f5db5de7c1102a45f93f5c492b3/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3", size = 1500397 }, - { url = "https://files.pythonhosted.org/packages/87/88/0236056156da0278c9ca2e2562463643597808b5bbd6c34009ba217e7e92/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f", size = 1398401 }, +sdist = { url = "https://files.pythonhosted.org/packages/3a/ed/c3876f3b3e8beba336214ce44e1efa1792dd537027cef24192ac2b077d7c/pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3", size = 276733, upload-time = "2025-03-12T08:04:30.804Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/03/7170c3814bb9106c1bca67700c731aaf1cd990fd2f0097c754acb600330e/pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea", size = 1348354, upload-time = "2025-03-12T08:02:32.699Z" }, + { url = "https://files.pythonhosted.org/packages/74/f3/908b17f9111cdc764aef1de3d36026a2984c46ed90c3c2c85f28b66142f0/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7", size = 671056, upload-time = "2025-03-12T08:02:34.086Z" }, + { url = "https://files.pythonhosted.org/packages/02/ad/afcb8484b65ceacd1609f709c2caeed31bd6c49261a7507cd5c175cc105f/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d", size = 908597, upload-time = "2025-03-12T08:02:35.536Z" }, + { url = "https://files.pythonhosted.org/packages/a1/b5/4eeeae0aaaa6ef0c74cfa8b2273b53382bd858df6d99485f2fc8211e7002/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00", size = 865260, upload-time = "2025-03-12T08:02:37.562Z" }, + { url = "https://files.pythonhosted.org/packages/74/6a/63db856e93e3a3c3dc98a1de28a902cf1b21c7b0d3856cd5931d7cfd30af/pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695", size = 859916, upload-time = "2025-03-12T08:02:38.954Z" }, + { url = "https://files.pythonhosted.org/packages/e1/ce/d522c9b46ee3746d4b98c81969c568c2c6296e931a65f2c87104b645654c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52", size = 1201368, upload-time = "2025-03-12T08:02:40.774Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/29dcd3647a39e933eb489fda261a1e2700a59d4a9432889a85166e15651c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac", size = 1512663, upload-time = "2025-03-12T08:02:42.2Z" }, + { url = "https://files.pythonhosted.org/packages/6b/36/7c570698127a43398ed1b1832dada59496e633115016addbce5eda9938a6/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66", size = 1411693, upload-time = "2025-03-12T08:02:43.583Z" }, + { url = "https://files.pythonhosted.org/packages/de/54/51d39bef85a7cdbca36227f7defdbfcdc5011b8361a3bfc0e8df431f5a5d/pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37", size = 581244, upload-time = "2025-03-12T08:02:45.072Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/9512b11a1d0c5648534f03d5ab0c3222f55dc9c192029c1cb00a0ca044e2/pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495", size = 643559, upload-time = "2025-03-12T08:02:46.485Z" }, + { url = "https://files.pythonhosted.org/packages/27/9f/faf5c9cf91b61eeb82a5e919d024d3ac28a795c92cce817be264ccd757d3/pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d", size = 557664, upload-time = "2025-03-12T08:02:47.896Z" }, + { url = "https://files.pythonhosted.org/packages/37/16/97b8c5107bfccb39120e611671a452c9ff6e8626fb3f8d4c15afd652b6ae/pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd", size = 1345691, upload-time = "2025-03-12T08:02:49.508Z" }, + { url = "https://files.pythonhosted.org/packages/a5/61/d5572d95040c0bb5b31eed5b23f3f0f992d94e4e0de0cea62e3c7f3a85c1/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597", size = 670622, upload-time = "2025-03-12T08:02:51.112Z" }, + { url = "https://files.pythonhosted.org/packages/1c/0c/f0235d27388aacf4ed8bcc1d574f6f2f629da0a20610faa0a8e9d363c2b0/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4", size = 908683, upload-time = "2025-03-12T08:02:52.659Z" }, + { url = "https://files.pythonhosted.org/packages/cb/52/664828f9586c396b857eec088d208230463e3dc991a24df6adbad98fbaa3/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9", size = 865212, upload-time = "2025-03-12T08:02:54.187Z" }, + { url = "https://files.pythonhosted.org/packages/2b/14/213b2967030b7d7aecc32dd453830f98799b3cbf2b10a40232e9f22a6520/pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558", size = 860068, upload-time = "2025-03-12T08:02:55.609Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e5/ff50c8fade69d1c0469652832c626d1910668697642c10cb0e1b6183ef9a/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64", size = 1201303, upload-time = "2025-03-12T08:02:57.073Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e2/fff5e483be95ccc11a05781323e001e63ec15daec1d0f6f08de72ca534db/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53", size = 1512892, upload-time = "2025-03-12T08:02:58.68Z" }, + { url = "https://files.pythonhosted.org/packages/21/75/cc44d276e43136e5692e487c3c019f816e11ed445261e434217c28cc98c4/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36", size = 1411736, upload-time = "2025-03-12T08:03:00.202Z" }, + { url = "https://files.pythonhosted.org/packages/ee/1c/d070cbc9a7961fe772641c51bb3798d88cb1f8e20ca718407363462624cf/pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14", size = 581214, upload-time = "2025-03-12T08:03:02.412Z" }, + { url = "https://files.pythonhosted.org/packages/38/d3/91082f1151ff5b54e0bed40eb1a26f418530ab07ecaec4dbb83e3d9fa9a9/pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca", size = 643412, upload-time = "2025-03-12T08:03:04.007Z" }, + { url = "https://files.pythonhosted.org/packages/e0/cf/dabe68dfdf3e67bea6152eeec4b251cf899ee5b853cfb5c97e4719f9e6e9/pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce", size = 557444, upload-time = "2025-03-12T08:03:05.53Z" }, + { url = "https://files.pythonhosted.org/packages/c0/56/e7576ac71c1566da4f4ec586351462a2bb202143fb074bf56df8fe85dcc3/pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464", size = 1340288, upload-time = "2025-03-12T08:03:07.638Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ab/0bca97e94d420b5908968bc479e51c3686a9f80d8893450eefcd673b1b1d/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825", size = 662462, upload-time = "2025-03-12T08:03:10.039Z" }, + { url = "https://files.pythonhosted.org/packages/ee/be/99e89b55863808da322ac3ab52d8e135dcf2241094aaa468bfe2923d5194/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52", size = 896464, upload-time = "2025-03-12T08:03:11.51Z" }, + { url = "https://files.pythonhosted.org/packages/38/d4/a4be06a313c8d6a5fe1d92975db30aca85f502e867fca392532e06a28c3c/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557", size = 853432, upload-time = "2025-03-12T08:03:12.948Z" }, + { url = "https://files.pythonhosted.org/packages/12/e6/e608b4c34106bbf5b3b382662ea90a43b2e23df0aa9c1f0fd4e21168d523/pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046", size = 845884, upload-time = "2025-03-12T08:03:14.429Z" }, + { url = "https://files.pythonhosted.org/packages/c3/a9/d5e6355308ba529d9cd3576ee8bb3b2e2b726571748f515fbb8559401f5b/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981", size = 1191454, upload-time = "2025-03-12T08:03:16.348Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9a/a21dc6c73ac242e425709c1e0049368d8f5db5de7c1102a45f93f5c492b3/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3", size = 1500397, upload-time = "2025-03-12T08:03:17.918Z" }, + { url = "https://files.pythonhosted.org/packages/87/88/0236056156da0278c9ca2e2562463643597808b5bbd6c34009ba217e7e92/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f", size = 1398401, upload-time = "2025-03-12T08:03:19.493Z" }, ] [[package]] @@ -943,34 +1006,34 @@ dependencies = [ { name = "scikit-learn" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/8a/e8ae926da333a82d597c874a59f888838616651de6bc815d9d78c2f76c64/rdrobust-1.3.0.tar.gz", hash = "sha256:994528ca6c7351b2ef8a1f9f57a524d8caa9d40f5f40f8a16c6533bd53109d53", size = 29187 } +sdist = { url = "https://files.pythonhosted.org/packages/40/8a/e8ae926da333a82d597c874a59f888838616651de6bc815d9d78c2f76c64/rdrobust-1.3.0.tar.gz", hash = "sha256:994528ca6c7351b2ef8a1f9f57a524d8caa9d40f5f40f8a16c6533bd53109d53", size = 29187, upload-time = "2024-09-14T15:23:56.396Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/d6/c2faba19eea47e62c9cb07abd9a4ef735d43d1f85ba562eb549b7540af12/rdrobust-1.3.0-py3-none-any.whl", hash = "sha256:611ae2c07dc4e7969596800987953747c7dd9a68c0536c86cb1c53af90b9a2de", size = 30285 }, + { url = "https://files.pythonhosted.org/packages/90/d6/c2faba19eea47e62c9cb07abd9a4ef735d43d1f85ba562eb549b7540af12/rdrobust-1.3.0-py3-none-any.whl", hash = "sha256:611ae2c07dc4e7969596800987953747c7dd9a68c0536c86cb1c53af90b9a2de", size = 30285, upload-time = "2024-09-14T15:23:55.245Z" }, ] [[package]] name = "ruff" version = "0.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/77/2b/7ca27e854d92df5e681e6527dc0f9254c9dc06c8408317893cf96c851cdd/ruff-0.11.0.tar.gz", hash = "sha256:e55c620690a4a7ee6f1cccb256ec2157dc597d109400ae75bbf944fc9d6462e2", size = 3799407 } +sdist = { url = "https://files.pythonhosted.org/packages/77/2b/7ca27e854d92df5e681e6527dc0f9254c9dc06c8408317893cf96c851cdd/ruff-0.11.0.tar.gz", hash = "sha256:e55c620690a4a7ee6f1cccb256ec2157dc597d109400ae75bbf944fc9d6462e2", size = 3799407, upload-time = "2025-03-14T13:52:36.539Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/40/3d0340a9e5edc77d37852c0cd98c5985a5a8081fc3befaeb2ae90aaafd2b/ruff-0.11.0-py3-none-linux_armv6l.whl", hash = "sha256:dc67e32bc3b29557513eb7eeabb23efdb25753684b913bebb8a0c62495095acb", size = 10098158 }, - { url = "https://files.pythonhosted.org/packages/ec/a9/d8f5abb3b87b973b007649ac7bf63665a05b2ae2b2af39217b09f52abbbf/ruff-0.11.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38c23fd9bdec4eb437b4c1e3595905a0a8edfccd63a790f818b28c78fe345639", size = 10879071 }, - { url = "https://files.pythonhosted.org/packages/ab/62/aaa198614c6211677913ec480415c5e6509586d7b796356cec73a2f8a3e6/ruff-0.11.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7c8661b0be91a38bd56db593e9331beaf9064a79028adee2d5f392674bbc5e88", size = 10247944 }, - { url = "https://files.pythonhosted.org/packages/9f/52/59e0a9f2cf1ce5e6cbe336b6dd0144725c8ea3b97cac60688f4e7880bf13/ruff-0.11.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6c0e8d3d2db7e9f6efd884f44b8dc542d5b6b590fc4bb334fdbc624d93a29a2", size = 10421725 }, - { url = "https://files.pythonhosted.org/packages/a6/c3/dcd71acc6dff72ce66d13f4be5bca1dbed4db678dff2f0f6f307b04e5c02/ruff-0.11.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c3156d3f4b42e57247275a0a7e15a851c165a4fc89c5e8fa30ea6da4f7407b8", size = 9954435 }, - { url = "https://files.pythonhosted.org/packages/a6/9a/342d336c7c52dbd136dee97d4c7797e66c3f92df804f8f3b30da59b92e9c/ruff-0.11.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:490b1e147c1260545f6d041c4092483e3f6d8eba81dc2875eaebcf9140b53905", size = 11492664 }, - { url = "https://files.pythonhosted.org/packages/84/35/6e7defd2d7ca95cc385ac1bd9f7f2e4a61b9cc35d60a263aebc8e590c462/ruff-0.11.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1bc09a7419e09662983b1312f6fa5dab829d6ab5d11f18c3760be7ca521c9329", size = 12207856 }, - { url = "https://files.pythonhosted.org/packages/22/78/da669c8731bacf40001c880ada6d31bcfb81f89cc996230c3b80d319993e/ruff-0.11.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcfa478daf61ac8002214eb2ca5f3e9365048506a9d52b11bea3ecea822bb844", size = 11645156 }, - { url = "https://files.pythonhosted.org/packages/ee/47/e27d17d83530a208f4a9ab2e94f758574a04c51e492aa58f91a3ed7cbbcb/ruff-0.11.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fbb2aed66fe742a6a3a0075ed467a459b7cedc5ae01008340075909d819df1e", size = 13884167 }, - { url = "https://files.pythonhosted.org/packages/9f/5e/42ffbb0a5d4b07bbc642b7d58357b4e19a0f4774275ca6ca7d1f7b5452cd/ruff-0.11.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92c0c1ff014351c0b0cdfdb1e35fa83b780f1e065667167bb9502d47ca41e6db", size = 11348311 }, - { url = "https://files.pythonhosted.org/packages/c8/51/dc3ce0c5ce1a586727a3444a32f98b83ba99599bb1ebca29d9302886e87f/ruff-0.11.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e4fd5ff5de5f83e0458a138e8a869c7c5e907541aec32b707f57cf9a5e124445", size = 10305039 }, - { url = "https://files.pythonhosted.org/packages/60/e0/475f0c2f26280f46f2d6d1df1ba96b3399e0234cf368cc4c88e6ad10dcd9/ruff-0.11.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:96bc89a5c5fd21a04939773f9e0e276308be0935de06845110f43fd5c2e4ead7", size = 9937939 }, - { url = "https://files.pythonhosted.org/packages/e2/d3/3e61b7fd3e9cdd1e5b8c7ac188bec12975c824e51c5cd3d64caf81b0331e/ruff-0.11.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a9352b9d767889ec5df1483f94870564e8102d4d7e99da52ebf564b882cdc2c7", size = 10923259 }, - { url = "https://files.pythonhosted.org/packages/30/32/cd74149ebb40b62ddd14bd2d1842149aeb7f74191fb0f49bd45c76909ff2/ruff-0.11.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:049a191969a10897fe052ef9cc7491b3ef6de79acd7790af7d7897b7a9bfbcb6", size = 11406212 }, - { url = "https://files.pythonhosted.org/packages/00/ef/033022a6b104be32e899b00de704d7c6d1723a54d4c9e09d147368f14b62/ruff-0.11.0-py3-none-win32.whl", hash = "sha256:3191e9116b6b5bbe187447656f0c8526f0d36b6fd89ad78ccaad6bdc2fad7df2", size = 10310905 }, - { url = "https://files.pythonhosted.org/packages/ed/8a/163f2e78c37757d035bd56cd60c8d96312904ca4a6deeab8442d7b3cbf89/ruff-0.11.0-py3-none-win_amd64.whl", hash = "sha256:c58bfa00e740ca0a6c43d41fb004cd22d165302f360aaa56f7126d544db31a21", size = 11411730 }, - { url = "https://files.pythonhosted.org/packages/4e/f7/096f6efabe69b49d7ca61052fc70289c05d8d35735c137ef5ba5ef423662/ruff-0.11.0-py3-none-win_arm64.whl", hash = "sha256:868364fc23f5aa122b00c6f794211e85f7e78f5dffdf7c590ab90b8c4e69b657", size = 10538956 }, + { url = "https://files.pythonhosted.org/packages/48/40/3d0340a9e5edc77d37852c0cd98c5985a5a8081fc3befaeb2ae90aaafd2b/ruff-0.11.0-py3-none-linux_armv6l.whl", hash = "sha256:dc67e32bc3b29557513eb7eeabb23efdb25753684b913bebb8a0c62495095acb", size = 10098158, upload-time = "2025-03-14T13:51:55.69Z" }, + { url = "https://files.pythonhosted.org/packages/ec/a9/d8f5abb3b87b973b007649ac7bf63665a05b2ae2b2af39217b09f52abbbf/ruff-0.11.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38c23fd9bdec4eb437b4c1e3595905a0a8edfccd63a790f818b28c78fe345639", size = 10879071, upload-time = "2025-03-14T13:51:58.989Z" }, + { url = "https://files.pythonhosted.org/packages/ab/62/aaa198614c6211677913ec480415c5e6509586d7b796356cec73a2f8a3e6/ruff-0.11.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7c8661b0be91a38bd56db593e9331beaf9064a79028adee2d5f392674bbc5e88", size = 10247944, upload-time = "2025-03-14T13:52:02.318Z" }, + { url = "https://files.pythonhosted.org/packages/9f/52/59e0a9f2cf1ce5e6cbe336b6dd0144725c8ea3b97cac60688f4e7880bf13/ruff-0.11.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6c0e8d3d2db7e9f6efd884f44b8dc542d5b6b590fc4bb334fdbc624d93a29a2", size = 10421725, upload-time = "2025-03-14T13:52:04.303Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c3/dcd71acc6dff72ce66d13f4be5bca1dbed4db678dff2f0f6f307b04e5c02/ruff-0.11.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c3156d3f4b42e57247275a0a7e15a851c165a4fc89c5e8fa30ea6da4f7407b8", size = 9954435, upload-time = "2025-03-14T13:52:06.602Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9a/342d336c7c52dbd136dee97d4c7797e66c3f92df804f8f3b30da59b92e9c/ruff-0.11.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:490b1e147c1260545f6d041c4092483e3f6d8eba81dc2875eaebcf9140b53905", size = 11492664, upload-time = "2025-03-14T13:52:08.613Z" }, + { url = "https://files.pythonhosted.org/packages/84/35/6e7defd2d7ca95cc385ac1bd9f7f2e4a61b9cc35d60a263aebc8e590c462/ruff-0.11.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1bc09a7419e09662983b1312f6fa5dab829d6ab5d11f18c3760be7ca521c9329", size = 12207856, upload-time = "2025-03-14T13:52:11.019Z" }, + { url = "https://files.pythonhosted.org/packages/22/78/da669c8731bacf40001c880ada6d31bcfb81f89cc996230c3b80d319993e/ruff-0.11.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcfa478daf61ac8002214eb2ca5f3e9365048506a9d52b11bea3ecea822bb844", size = 11645156, upload-time = "2025-03-14T13:52:13.383Z" }, + { url = "https://files.pythonhosted.org/packages/ee/47/e27d17d83530a208f4a9ab2e94f758574a04c51e492aa58f91a3ed7cbbcb/ruff-0.11.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fbb2aed66fe742a6a3a0075ed467a459b7cedc5ae01008340075909d819df1e", size = 13884167, upload-time = "2025-03-14T13:52:15.528Z" }, + { url = "https://files.pythonhosted.org/packages/9f/5e/42ffbb0a5d4b07bbc642b7d58357b4e19a0f4774275ca6ca7d1f7b5452cd/ruff-0.11.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92c0c1ff014351c0b0cdfdb1e35fa83b780f1e065667167bb9502d47ca41e6db", size = 11348311, upload-time = "2025-03-14T13:52:18.088Z" }, + { url = "https://files.pythonhosted.org/packages/c8/51/dc3ce0c5ce1a586727a3444a32f98b83ba99599bb1ebca29d9302886e87f/ruff-0.11.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e4fd5ff5de5f83e0458a138e8a869c7c5e907541aec32b707f57cf9a5e124445", size = 10305039, upload-time = "2025-03-14T13:52:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/60/e0/475f0c2f26280f46f2d6d1df1ba96b3399e0234cf368cc4c88e6ad10dcd9/ruff-0.11.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:96bc89a5c5fd21a04939773f9e0e276308be0935de06845110f43fd5c2e4ead7", size = 9937939, upload-time = "2025-03-14T13:52:22.798Z" }, + { url = "https://files.pythonhosted.org/packages/e2/d3/3e61b7fd3e9cdd1e5b8c7ac188bec12975c824e51c5cd3d64caf81b0331e/ruff-0.11.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a9352b9d767889ec5df1483f94870564e8102d4d7e99da52ebf564b882cdc2c7", size = 10923259, upload-time = "2025-03-14T13:52:24.89Z" }, + { url = "https://files.pythonhosted.org/packages/30/32/cd74149ebb40b62ddd14bd2d1842149aeb7f74191fb0f49bd45c76909ff2/ruff-0.11.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:049a191969a10897fe052ef9cc7491b3ef6de79acd7790af7d7897b7a9bfbcb6", size = 11406212, upload-time = "2025-03-14T13:52:27.493Z" }, + { url = "https://files.pythonhosted.org/packages/00/ef/033022a6b104be32e899b00de704d7c6d1723a54d4c9e09d147368f14b62/ruff-0.11.0-py3-none-win32.whl", hash = "sha256:3191e9116b6b5bbe187447656f0c8526f0d36b6fd89ad78ccaad6bdc2fad7df2", size = 10310905, upload-time = "2025-03-14T13:52:30.46Z" }, + { url = "https://files.pythonhosted.org/packages/ed/8a/163f2e78c37757d035bd56cd60c8d96312904ca4a6deeab8442d7b3cbf89/ruff-0.11.0-py3-none-win_amd64.whl", hash = "sha256:c58bfa00e740ca0a6c43d41fb004cd22d165302f360aaa56f7126d544db31a21", size = 11411730, upload-time = "2025-03-14T13:52:32.508Z" }, + { url = "https://files.pythonhosted.org/packages/4e/f7/096f6efabe69b49d7ca61052fc70289c05d8d35735c137ef5ba5ef423662/ruff-0.11.0-py3-none-win_arm64.whl", hash = "sha256:868364fc23f5aa122b00c6f794211e85f7e78f5dffdf7c590ab90b8c4e69b657", size = 10538956, upload-time = "2025-03-14T13:52:34.491Z" }, ] [[package]] @@ -983,18 +1046,18 @@ dependencies = [ { name = "scipy" }, { name = "threadpoolctl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size = 7001680 } +sdist = { url = "https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size = 7001680, upload-time = "2024-09-11T15:50:10.957Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/db/b485c1ac54ff3bd9e7e6b39d3cc6609c4c76a65f52ab0a7b22b6c3ab0e9d/scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a", size = 12110344 }, - { url = "https://files.pythonhosted.org/packages/54/1a/7deb52fa23aebb855431ad659b3c6a2e1709ece582cb3a63d66905e735fe/scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1", size = 11033502 }, - { url = "https://files.pythonhosted.org/packages/a1/32/4a7a205b14c11225609b75b28402c196e4396ac754dab6a81971b811781c/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd", size = 12085794 }, - { url = "https://files.pythonhosted.org/packages/c6/29/044048c5e911373827c0e1d3051321b9183b2a4f8d4e2f11c08fcff83f13/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6", size = 12945797 }, - { url = "https://files.pythonhosted.org/packages/aa/ce/c0b912f2f31aeb1b756a6ba56bcd84dd1f8a148470526a48515a3f4d48cd/scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1", size = 10985467 }, - { url = "https://files.pythonhosted.org/packages/a4/50/8891028437858cc510e13578fe7046574a60c2aaaa92b02d64aac5b1b412/scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5", size = 12025584 }, - { url = "https://files.pythonhosted.org/packages/d2/79/17feef8a1c14149436083bec0e61d7befb4812e272d5b20f9d79ea3e9ab1/scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908", size = 10959795 }, - { url = "https://files.pythonhosted.org/packages/b1/c8/f08313f9e2e656bd0905930ae8bf99a573ea21c34666a813b749c338202f/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3", size = 12077302 }, - { url = "https://files.pythonhosted.org/packages/a7/48/fbfb4dc72bed0fe31fe045fb30e924909ad03f717c36694351612973b1a9/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12", size = 13002811 }, - { url = "https://files.pythonhosted.org/packages/a5/e7/0c869f9e60d225a77af90d2aefa7a4a4c0e745b149325d1450f0f0ce5399/scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f", size = 10951354 }, + { url = "https://files.pythonhosted.org/packages/a4/db/b485c1ac54ff3bd9e7e6b39d3cc6609c4c76a65f52ab0a7b22b6c3ab0e9d/scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a", size = 12110344, upload-time = "2024-09-11T15:49:46.253Z" }, + { url = "https://files.pythonhosted.org/packages/54/1a/7deb52fa23aebb855431ad659b3c6a2e1709ece582cb3a63d66905e735fe/scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1", size = 11033502, upload-time = "2024-09-11T15:49:48.656Z" }, + { url = "https://files.pythonhosted.org/packages/a1/32/4a7a205b14c11225609b75b28402c196e4396ac754dab6a81971b811781c/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd", size = 12085794, upload-time = "2024-09-11T15:49:51.388Z" }, + { url = "https://files.pythonhosted.org/packages/c6/29/044048c5e911373827c0e1d3051321b9183b2a4f8d4e2f11c08fcff83f13/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6", size = 12945797, upload-time = "2024-09-11T15:49:53.579Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ce/c0b912f2f31aeb1b756a6ba56bcd84dd1f8a148470526a48515a3f4d48cd/scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1", size = 10985467, upload-time = "2024-09-11T15:49:56.446Z" }, + { url = "https://files.pythonhosted.org/packages/a4/50/8891028437858cc510e13578fe7046574a60c2aaaa92b02d64aac5b1b412/scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5", size = 12025584, upload-time = "2024-10-02T18:35:29.369Z" }, + { url = "https://files.pythonhosted.org/packages/d2/79/17feef8a1c14149436083bec0e61d7befb4812e272d5b20f9d79ea3e9ab1/scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908", size = 10959795, upload-time = "2024-10-02T18:35:34.22Z" }, + { url = "https://files.pythonhosted.org/packages/b1/c8/f08313f9e2e656bd0905930ae8bf99a573ea21c34666a813b749c338202f/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3", size = 12077302, upload-time = "2024-10-02T18:35:38.911Z" }, + { url = "https://files.pythonhosted.org/packages/a7/48/fbfb4dc72bed0fe31fe045fb30e924909ad03f717c36694351612973b1a9/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12", size = 13002811, upload-time = "2024-10-02T18:35:43.28Z" }, + { url = "https://files.pythonhosted.org/packages/a5/e7/0c869f9e60d225a77af90d2aefa7a4a4c0e745b149325d1450f0f0ce5399/scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f", size = 10951354, upload-time = "2024-10-02T18:35:47.954Z" }, ] [[package]] @@ -1004,44 +1067,44 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/5d/3c78815cbab499610f26b5bae6aed33e227225a9fa5290008a733a64f6fc/scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd", size = 38756184 }, - { url = "https://files.pythonhosted.org/packages/37/20/3d04eb066b471b6e171827548b9ddb3c21c6bbea72a4d84fc5989933910b/scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301", size = 30163558 }, - { url = "https://files.pythonhosted.org/packages/a4/98/e5c964526c929ef1f795d4c343b2ff98634ad2051bd2bbadfef9e772e413/scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93", size = 22437211 }, - { url = "https://files.pythonhosted.org/packages/1d/cd/1dc7371e29195ecbf5222f9afeedb210e0a75057d8afbd942aa6cf8c8eca/scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20", size = 25232260 }, - { url = "https://files.pythonhosted.org/packages/f0/24/1a181a9e5050090e0b5138c5f496fee33293c342b788d02586bc410c6477/scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e", size = 35198095 }, - { url = "https://files.pythonhosted.org/packages/c0/53/eaada1a414c026673eb983f8b4a55fe5eb172725d33d62c1b21f63ff6ca4/scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8", size = 37297371 }, - { url = "https://files.pythonhosted.org/packages/e9/06/0449b744892ed22b7e7b9a1994a866e64895363572677a316a9042af1fe5/scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11", size = 36872390 }, - { url = "https://files.pythonhosted.org/packages/6a/6f/a8ac3cfd9505ec695c1bc35edc034d13afbd2fc1882a7c6b473e280397bb/scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53", size = 39700276 }, - { url = "https://files.pythonhosted.org/packages/f5/6f/e6e5aff77ea2a48dd96808bb51d7450875af154ee7cbe72188afb0b37929/scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded", size = 40942317 }, - { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587 }, - { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266 }, - { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768 }, - { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719 }, - { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195 }, - { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404 }, - { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011 }, - { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406 }, - { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243 }, - { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286 }, - { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634 }, - { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179 }, - { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412 }, - { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867 }, - { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009 }, - { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159 }, - { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566 }, - { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 }, +sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316, upload-time = "2025-02-17T00:42:24.791Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/5d/3c78815cbab499610f26b5bae6aed33e227225a9fa5290008a733a64f6fc/scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd", size = 38756184, upload-time = "2025-02-17T00:31:50.623Z" }, + { url = "https://files.pythonhosted.org/packages/37/20/3d04eb066b471b6e171827548b9ddb3c21c6bbea72a4d84fc5989933910b/scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301", size = 30163558, upload-time = "2025-02-17T00:31:56.721Z" }, + { url = "https://files.pythonhosted.org/packages/a4/98/e5c964526c929ef1f795d4c343b2ff98634ad2051bd2bbadfef9e772e413/scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93", size = 22437211, upload-time = "2025-02-17T00:32:03.042Z" }, + { url = "https://files.pythonhosted.org/packages/1d/cd/1dc7371e29195ecbf5222f9afeedb210e0a75057d8afbd942aa6cf8c8eca/scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20", size = 25232260, upload-time = "2025-02-17T00:32:07.847Z" }, + { url = "https://files.pythonhosted.org/packages/f0/24/1a181a9e5050090e0b5138c5f496fee33293c342b788d02586bc410c6477/scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e", size = 35198095, upload-time = "2025-02-17T00:32:14.565Z" }, + { url = "https://files.pythonhosted.org/packages/c0/53/eaada1a414c026673eb983f8b4a55fe5eb172725d33d62c1b21f63ff6ca4/scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8", size = 37297371, upload-time = "2025-02-17T00:32:21.411Z" }, + { url = "https://files.pythonhosted.org/packages/e9/06/0449b744892ed22b7e7b9a1994a866e64895363572677a316a9042af1fe5/scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11", size = 36872390, upload-time = "2025-02-17T00:32:29.421Z" }, + { url = "https://files.pythonhosted.org/packages/6a/6f/a8ac3cfd9505ec695c1bc35edc034d13afbd2fc1882a7c6b473e280397bb/scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53", size = 39700276, upload-time = "2025-02-17T00:32:37.431Z" }, + { url = "https://files.pythonhosted.org/packages/f5/6f/e6e5aff77ea2a48dd96808bb51d7450875af154ee7cbe72188afb0b37929/scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded", size = 40942317, upload-time = "2025-02-17T00:32:45.47Z" }, + { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587, upload-time = "2025-02-17T00:32:53.196Z" }, + { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266, upload-time = "2025-02-17T00:32:59.318Z" }, + { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768, upload-time = "2025-02-17T00:33:04.091Z" }, + { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719, upload-time = "2025-02-17T00:33:08.909Z" }, + { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195, upload-time = "2025-02-17T00:33:15.352Z" }, + { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404, upload-time = "2025-02-17T00:33:22.21Z" }, + { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011, upload-time = "2025-02-17T00:33:29.446Z" }, + { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406, upload-time = "2025-02-17T00:33:39.019Z" }, + { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243, upload-time = "2025-02-17T00:34:51.024Z" }, + { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286, upload-time = "2025-02-17T00:33:47.62Z" }, + { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634, upload-time = "2025-02-17T00:33:54.131Z" }, + { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179, upload-time = "2025-02-17T00:33:59.948Z" }, + { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412, upload-time = "2025-02-17T00:34:06.328Z" }, + { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867, upload-time = "2025-02-17T00:34:12.928Z" }, + { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009, upload-time = "2025-02-17T00:34:19.55Z" }, + { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159, upload-time = "2025-02-17T00:34:26.724Z" }, + { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566, upload-time = "2025-02-17T00:34:34.512Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705, upload-time = "2025-02-17T00:34:43.619Z" }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] [[package]] @@ -1053,9 +1116,9 @@ dependencies = [ { name = "executing" }, { name = "pure-eval" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, ] [[package]] @@ -1069,72 +1132,86 @@ dependencies = [ { name = "patsy" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1f/3b/963a015dd8ea17e10c7b0e2f14d7c4daec903baf60a017e756b57953a4bf/statsmodels-0.14.4.tar.gz", hash = "sha256:5d69e0f39060dc72c067f9bb6e8033b6dccdb0bae101d76a7ef0bcc94e898b67", size = 20354802 } +sdist = { url = "https://files.pythonhosted.org/packages/1f/3b/963a015dd8ea17e10c7b0e2f14d7c4daec903baf60a017e756b57953a4bf/statsmodels-0.14.4.tar.gz", hash = "sha256:5d69e0f39060dc72c067f9bb6e8033b6dccdb0bae101d76a7ef0bcc94e898b67", size = 20354802, upload-time = "2024-10-03T16:15:36.273Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/99/654fd41a9024643ee70b239e5ebc987bf98ce9fc2693bd550bee58136564/statsmodels-0.14.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5221dba7424cf4f2561b22e9081de85f5bb871228581124a0d1b572708545199", size = 10220508 }, - { url = "https://files.pythonhosted.org/packages/67/d8/ac30cf4cf97adaa48548be57e7cf02e894f31b45fd55bf9213358d9781c9/statsmodels-0.14.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:17672b30c6b98afe2b095591e32d1d66d4372f2651428e433f16a3667f19eabb", size = 9912317 }, - { url = "https://files.pythonhosted.org/packages/e0/77/2440d551eaf27f9c1d3650e13b3821a35ad5b21d3a19f62fb302af9203e8/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab5e6312213b8cfb9dca93dd46a0f4dccb856541f91d3306227c3d92f7659245", size = 10301662 }, - { url = "https://files.pythonhosted.org/packages/fa/e1/60a652f18996a40a7410aeb7eb476c18da8a39792c7effe67f06883e9852/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bbb150620b53133d6cd1c5d14c28a4f85701e6c781d9b689b53681effaa655f", size = 10741763 }, - { url = "https://files.pythonhosted.org/packages/81/0c/2453eec3ac25e300847d9ed97f41156de145e507391ecb5ac989e111e525/statsmodels-0.14.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb695c2025d122a101c2aca66d2b78813c321b60d3a7c86bb8ec4467bb53b0f9", size = 10879534 }, - { url = "https://files.pythonhosted.org/packages/59/9a/e466a1b887a1441141e52dbcc98152f013d85076576da6eed2357f2016ae/statsmodels-0.14.4-cp312-cp312-win_amd64.whl", hash = "sha256:7f7917a51766b4e074da283c507a25048ad29a18e527207883d73535e0dc6184", size = 9823866 }, - { url = "https://files.pythonhosted.org/packages/31/f8/2662e6a101315ad336f75168fa9bac71f913ebcb92a6be84031d84a0f21f/statsmodels-0.14.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5a24f5d2c22852d807d2b42daf3a61740820b28d8381daaf59dcb7055bf1a79", size = 10186886 }, - { url = "https://files.pythonhosted.org/packages/fa/c0/ee6e8ed35fc1ca9c7538c592f4974547bf72274bc98db1ae4a6e87481a83/statsmodels-0.14.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df4f7864606fa843d7e7c0e6af288f034a2160dba14e6ccc09020a3cf67cb092", size = 9880066 }, - { url = "https://files.pythonhosted.org/packages/d1/97/3380ca6d8fd66cfb3d12941e472642f26e781a311c355a4e97aab2ed0216/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91341cbde9e8bea5fb419a76e09114e221567d03f34ca26e6d67ae2c27d8fe3c", size = 10283521 }, - { url = "https://files.pythonhosted.org/packages/fe/2a/55c5b5c5e5124a202ea3fe0bcdbdeceaf91b4ec6164b8434acb9dd97409c/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1322286a7bfdde2790bf72d29698a1b76c20b8423a55bdcd0d457969d0041f72", size = 10723228 }, - { url = "https://files.pythonhosted.org/packages/4f/76/67747e49dc758daae06f33aad8247b718cd7d224f091d2cd552681215bb2/statsmodels-0.14.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e31b95ac603415887c9f0d344cb523889cf779bc52d68e27e2d23c358958fec7", size = 10859503 }, - { url = "https://files.pythonhosted.org/packages/1d/eb/cb8b01f5edf8f135eb3d0553d159db113a35b2948d0e51eeb735e7ae09ea/statsmodels-0.14.4-cp313-cp313-win_amd64.whl", hash = "sha256:81030108d27aecc7995cac05aa280cf8c6025f6a6119894eef648997936c2dd0", size = 9817574 }, + { url = "https://files.pythonhosted.org/packages/f5/99/654fd41a9024643ee70b239e5ebc987bf98ce9fc2693bd550bee58136564/statsmodels-0.14.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5221dba7424cf4f2561b22e9081de85f5bb871228581124a0d1b572708545199", size = 10220508, upload-time = "2024-10-03T17:10:31.183Z" }, + { url = "https://files.pythonhosted.org/packages/67/d8/ac30cf4cf97adaa48548be57e7cf02e894f31b45fd55bf9213358d9781c9/statsmodels-0.14.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:17672b30c6b98afe2b095591e32d1d66d4372f2651428e433f16a3667f19eabb", size = 9912317, upload-time = "2024-10-03T16:22:29.504Z" }, + { url = "https://files.pythonhosted.org/packages/e0/77/2440d551eaf27f9c1d3650e13b3821a35ad5b21d3a19f62fb302af9203e8/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab5e6312213b8cfb9dca93dd46a0f4dccb856541f91d3306227c3d92f7659245", size = 10301662, upload-time = "2024-10-03T17:13:04.537Z" }, + { url = "https://files.pythonhosted.org/packages/fa/e1/60a652f18996a40a7410aeb7eb476c18da8a39792c7effe67f06883e9852/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bbb150620b53133d6cd1c5d14c28a4f85701e6c781d9b689b53681effaa655f", size = 10741763, upload-time = "2024-10-03T17:13:17.594Z" }, + { url = "https://files.pythonhosted.org/packages/81/0c/2453eec3ac25e300847d9ed97f41156de145e507391ecb5ac989e111e525/statsmodels-0.14.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb695c2025d122a101c2aca66d2b78813c321b60d3a7c86bb8ec4467bb53b0f9", size = 10879534, upload-time = "2024-10-03T17:13:31.19Z" }, + { url = "https://files.pythonhosted.org/packages/59/9a/e466a1b887a1441141e52dbcc98152f013d85076576da6eed2357f2016ae/statsmodels-0.14.4-cp312-cp312-win_amd64.whl", hash = "sha256:7f7917a51766b4e074da283c507a25048ad29a18e527207883d73535e0dc6184", size = 9823866, upload-time = "2024-10-03T16:14:23.828Z" }, + { url = "https://files.pythonhosted.org/packages/31/f8/2662e6a101315ad336f75168fa9bac71f913ebcb92a6be84031d84a0f21f/statsmodels-0.14.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5a24f5d2c22852d807d2b42daf3a61740820b28d8381daaf59dcb7055bf1a79", size = 10186886, upload-time = "2024-10-03T17:10:44.074Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c0/ee6e8ed35fc1ca9c7538c592f4974547bf72274bc98db1ae4a6e87481a83/statsmodels-0.14.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df4f7864606fa843d7e7c0e6af288f034a2160dba14e6ccc09020a3cf67cb092", size = 9880066, upload-time = "2024-10-03T17:10:56.972Z" }, + { url = "https://files.pythonhosted.org/packages/d1/97/3380ca6d8fd66cfb3d12941e472642f26e781a311c355a4e97aab2ed0216/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91341cbde9e8bea5fb419a76e09114e221567d03f34ca26e6d67ae2c27d8fe3c", size = 10283521, upload-time = "2024-10-03T17:14:06.216Z" }, + { url = "https://files.pythonhosted.org/packages/fe/2a/55c5b5c5e5124a202ea3fe0bcdbdeceaf91b4ec6164b8434acb9dd97409c/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1322286a7bfdde2790bf72d29698a1b76c20b8423a55bdcd0d457969d0041f72", size = 10723228, upload-time = "2024-10-03T17:14:19.587Z" }, + { url = "https://files.pythonhosted.org/packages/4f/76/67747e49dc758daae06f33aad8247b718cd7d224f091d2cd552681215bb2/statsmodels-0.14.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e31b95ac603415887c9f0d344cb523889cf779bc52d68e27e2d23c358958fec7", size = 10859503, upload-time = "2024-10-03T17:14:32.798Z" }, + { url = "https://files.pythonhosted.org/packages/1d/eb/cb8b01f5edf8f135eb3d0553d159db113a35b2948d0e51eeb735e7ae09ea/statsmodels-0.14.4-cp313-cp313-win_amd64.whl", hash = "sha256:81030108d27aecc7995cac05aa280cf8c6025f6a6119894eef648997936c2dd0", size = 9817574, upload-time = "2024-10-03T16:14:37.461Z" }, ] [[package]] name = "threadpoolctl" version = "3.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, ] [[package]] name = "tornado" version = "6.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 } +sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135, upload-time = "2024-11-22T03:06:38.036Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 }, - { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 }, - { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 }, - { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 }, - { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 }, - { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 }, - { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 }, - { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 }, - { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 }, - { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, + { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299, upload-time = "2024-11-22T03:06:20.162Z" }, + { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253, upload-time = "2024-11-22T03:06:22.39Z" }, + { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602, upload-time = "2024-11-22T03:06:24.214Z" }, + { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972, upload-time = "2024-11-22T03:06:25.559Z" }, + { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173, upload-time = "2024-11-22T03:06:27.584Z" }, + { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892, upload-time = "2024-11-22T03:06:28.933Z" }, + { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334, upload-time = "2024-11-22T03:06:30.428Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261, upload-time = "2024-11-22T03:06:32.458Z" }, + { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463, upload-time = "2024-11-22T03:06:34.71Z" }, + { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907, upload-time = "2024-11-22T03:06:36.71Z" }, ] [[package]] name = "traitlets" version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, ] [[package]] name = "tzdata" version = "2025.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/0f/fa4723f22942480be4ca9527bbde8d43f6c3f2fe8412f00e7f5f6746bc8b/tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", size = 194950 } +sdist = { url = "https://files.pythonhosted.org/packages/43/0f/fa4723f22942480be4ca9527bbde8d43f6c3f2fe8412f00e7f5f6746bc8b/tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", size = 194950, upload-time = "2025-01-21T19:49:38.686Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639", size = 346762, upload-time = "2025-01-21T19:49:37.187Z" }, +] + +[[package]] +name = "virtualenv" +version = "20.31.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload-time = "2025-05-08T17:58:23.811Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639", size = 346762 }, + { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload-time = "2025-05-08T17:58:21.15Z" }, ] [[package]] name = "wcwidth" version = "0.2.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, ] From dcf9f2156c9368fb58dd618e0319d4d5a263c4d4 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 07:46:27 +0200 Subject: [PATCH 013/142] formatting --- doc/plm/plr.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/plm/plr.qmd b/doc/plm/plr.qmd index a5ba041..0c75a05 100644 --- a/doc/plm/plr.qmd +++ b/doc/plm/plr.qmd @@ -167,7 +167,7 @@ generate_and_show_styled_table( ```{python} #| echo: false -#| +#| generate_and_show_styled_table( main_df=df_sensitivity, filters={"level": 0.9, "score": "partialling out"}, From c74a6954c50b44ba8f31a0a1c8c987c429fc0086 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 13:19:09 +0200 Subject: [PATCH 014/142] add class for PLIV simulation --- monte-cover/src/montecover/plm/__init__.py | 6 +- monte-cover/src/montecover/plm/pliv_late.py | 143 ++++++++++++++++++++ monte-cover/src/montecover/plm/plr_ate.py | 21 +-- 3 files changed, 153 insertions(+), 17 deletions(-) create mode 100644 monte-cover/src/montecover/plm/pliv_late.py diff --git a/monte-cover/src/montecover/plm/__init__.py b/monte-cover/src/montecover/plm/__init__.py index f861d2b..6e48f62 100644 --- a/monte-cover/src/montecover/plm/__init__.py +++ b/monte-cover/src/montecover/plm/__init__.py @@ -1,5 +1,9 @@ """Monte Carlo coverage simulations for PLM.""" +from montecover.plm.pliv_late import PLIVLATECoverageSimulation from montecover.plm.plr_ate import PLRATECoverageSimulation -__all__ = ["PLRATECoverageSimulation"] +__all__ = [ + "PLRATECoverageSimulation", + "PLIVLATECoverageSimulation", +] diff --git a/monte-cover/src/montecover/plm/pliv_late.py b/monte-cover/src/montecover/plm/pliv_late.py new file mode 100644 index 0000000..2170119 --- /dev/null +++ b/monte-cover/src/montecover/plm/pliv_late.py @@ -0,0 +1,143 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +from doubleml.datasets import make_pliv_CHS2015 +from lightgbm import LGBMRegressor +from sklearn.ensemble import RandomForestRegressor +from sklearn.linear_model import LassoCV + +from montecover.base import BaseSimulation + + +class PLIVLATECoverageSimulation(BaseSimulation): + """Simulation class for PLIV LATE coverage.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m", "ml_r"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + # Convert ml strings to actual objects + learner[ml] = self._convert_ml_string_to_object(learner[ml][0]) + + def _convert_ml_string_to_object(self, ml_string): + """Convert a string to a machine learning object.""" + if ml_string == "Lasso": + learner = LassoCV() + elif ml_string == "Random Forest": + learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20) + elif ml_string == "LGBM": + learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) + else: + raise ValueError(f"Unknown learner type: {ml_string}") + + return (ml_string, learner) + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + self.oracle_values = dict() + self.oracle_values["theta"] = self.dgp_parameters["theta"] + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_g_name, ml_g = dml_params["learners"]["ml_g"] + learner_m_name, ml_m = dml_params["learners"]["ml_m"] + learner_r_name, ml_r = dml_params["learners"]["ml_r"] + score = dml_params["score"] + + # Model + dml_model = dml.DoubleMLPLIV( + obj_dml_data=dml_data, + ml_l=ml_g, + ml_m=ml_m, + ml_g=ml_g if score == "IV-type" else None, + ml_r=ml_r, + score=score, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["theta"], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Learner r": learner_r_name, + "Score": score, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "Score", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_pliv_CHS2015( + alpha=dgp_params["theta"], + n_obs=dgp_params["n_obs"], + dim_x=dgp_params["dim_x"], + dim_z=dgp_params["dim_z"], + return_type="DataFrame", + ) + dml_data = dml.DoubleMLData(data, "y", "d", z_cols="Z1") + return dml_data diff --git a/monte-cover/src/montecover/plm/plr_ate.py b/monte-cover/src/montecover/plm/plr_ate.py index c47dc3e..5ec5c1d 100644 --- a/monte-cover/src/montecover/plm/plr_ate.py +++ b/monte-cover/src/montecover/plm/plr_ate.py @@ -10,7 +10,7 @@ class PLRATECoverageSimulation(BaseSimulation): - """Simulation study for coverage properties of DoubleMLPLR for ATE estimation.""" + """Simulation class for coverage properties of DoubleMLPLR for ATE estimation.""" def __init__( self, @@ -26,18 +26,13 @@ def __init__( log_file=log_file, ) - # Additional results storage for aggregated results - self.results_aggregated = [] - # Calculate oracle values self._calculate_oracle_values() def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert ( - "learners" in self.dml_parameters - ), "No learners specified in the config file" + assert "learners" in self.dml_parameters, "No learners specified in the config file" for learner in self.dml_parameters["learners"]: assert "ml_g" in learner, "No ml_g specified in the config file" assert "ml_m" in learner, "No ml_m specified in the config file" @@ -51,13 +46,9 @@ def _convert_ml_string_to_object(self, ml_string): if ml_string == "Lasso": learner = LassoCV() elif ml_string == "Random Forest": - learner = RandomForestRegressor( - n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20 - ) + learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20) elif ml_string == "LGBM": - learner = LGBMRegressor( - n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1 - ) + learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) else: raise ValueError(f"Unknown learner type: {ml_string}") @@ -130,9 +121,7 @@ def summarize_results(self): # Aggregate results (possibly multiple result dfs) result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = ( - result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() - ) + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() self.logger.debug(f"Summarized {result_name} results") return result_summary From 172d0e400848456203b350612dfdce3aac9602f1 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 13:19:39 +0200 Subject: [PATCH 015/142] add pliv sim and config --- scripts/plm/pliv_late.py | 13 +++++++++ scripts/plm/pliv_late_config.yml | 46 ++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 scripts/plm/pliv_late.py create mode 100644 scripts/plm/pliv_late_config.yml diff --git a/scripts/plm/pliv_late.py b/scripts/plm/pliv_late.py new file mode 100644 index 0000000..f8b957d --- /dev/null +++ b/scripts/plm/pliv_late.py @@ -0,0 +1,13 @@ +from montecover.plm import PLIVLATECoverageSimulation + +# Create and run simulation with config file +sim = PLIVLATECoverageSimulation( + config_file="scripts/plm/pliv_late_config.yml", + log_level="INFO", + log_file="logs/plm/pliv_late_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/plm/", file_prefix="pliv_late") + +# Save config file for reproducibility +sim.save_config("results/plm/pliv_late_config.yml") diff --git a/scripts/plm/pliv_late_config.yml b/scripts/plm/pliv_late_config.yml new file mode 100644 index 0000000..95b9418 --- /dev/null +++ b/scripts/plm/pliv_late_config.yml @@ -0,0 +1,46 @@ +# Simulation parameters for PLR ATE Coverage + +simulation_parameters: + repetitions: 100 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [0.5] # Treatment effect + n_obs: [500] # Sample size + dim_x: [20] # Number of covariates + dim_z: [1] # Number of instruments + +dml_parameters: + # ML methods for ml_g and ml_m + learners: + - ml_g: ["Lasso"] + ml_m: ["Lasso"] + ml_r: ["Lasso"] + - ml_g: ["Random Forest"] + ml_m: ["Random Forest"] + ml_r: ["Random Forest"] + - ml_g: ["Lasso"] + ml_m: ["Random Forest"] + ml_r: ["Random Forest"] + - ml_g: ["Random Forest"] + ml_m: ["Lasso"] + ml_r: ["Random Forest"] + - ml_g: ["Random Forest"] + ml_m: ["Random Forest"] + ml_r: ["Lasso"] + - ml_g: ["Lasso"] + ml_m: ["Lasso"] + ml_r: ["Random Forest"] + - ml_g: ["Random Forest"] + ml_m: ["Lasso"] + ml_r: ["Lasso"] + - ml_g: ["Lasso"] + ml_m: ["Random Forest"] + ml_r: ["Lasso"] + + score: ["partialling out", "IV-type"] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From dee9a5abc8edecfa4bd4d5b22c9cd2e7867e6029 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 14:47:06 +0200 Subject: [PATCH 016/142] fix PLIV sim --- doc/plm/pliv.qmd | 8 ++++---- monte-cover/src/montecover/plm/pliv_late.py | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/plm/pliv.qmd b/doc/plm/pliv.qmd index 65d87f2..04f2dcd 100644 --- a/doc/plm/pliv.qmd +++ b/doc/plm/pliv.qmd @@ -60,7 +60,7 @@ display_columns_pliv = ["Learner g", "Learner m", "Learner r", "Bias", "CI Lengt generate_and_show_styled_table( main_df=df_coverage_pliv, - filters={"level": 0.95, "score": "partialling out"}, + filters={"level": 0.95, "Score": "partialling out"}, display_cols=display_columns_pliv, n_rep=n_rep_pliv, level_col="level", @@ -74,7 +74,7 @@ generate_and_show_styled_table( generate_and_show_styled_table( main_df=df_coverage_pliv, - filters={"level": 0.90, "score": "partialling out"}, + filters={"level": 0.90, "Score": "partialling out"}, display_cols=display_columns_pliv, n_rep=n_rep_pliv, level_col="level", @@ -92,7 +92,7 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t generate_and_show_styled_table( main_df=df_coverage_pliv, - filters={"level": 0.95, "score": "IV-type"}, + filters={"level": 0.95, "Score": "IV-type"}, display_cols=display_columns_pliv, n_rep=n_rep_pliv, level_col="level", @@ -105,7 +105,7 @@ generate_and_show_styled_table( generate_and_show_styled_table( main_df=df_coverage_pliv, - filters={"level": 0.9, "score": "IV-type"}, + filters={"level": 0.9, "Score": "IV-type"}, display_cols=display_columns_pliv, n_rep=n_rep_pliv, level_col="level", diff --git a/monte-cover/src/montecover/plm/pliv_late.py b/monte-cover/src/montecover/plm/pliv_late.py index 2170119..2eff4a3 100644 --- a/monte-cover/src/montecover/plm/pliv_late.py +++ b/monte-cover/src/montecover/plm/pliv_late.py @@ -47,7 +47,7 @@ def _convert_ml_string_to_object(self, ml_string): if ml_string == "Lasso": learner = LassoCV() elif ml_string == "Random Forest": - learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20) + learner = RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2) elif ml_string == "LGBM": learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) else: @@ -114,7 +114,7 @@ def summarize_results(self): self.logger.info("Summarizing simulation results") # Group by parameter combinations - groupby_cols = ["Learner g", "Learner m", "Score", "level"] + groupby_cols = ["Learner g", "Learner m", "Learner r", "Score", "level"] aggregation_dict = { "Coverage": "mean", "CI Length": "mean", From 79e34e8b9c1997721158515bd17731c17530eef2 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 17:00:29 +0200 Subject: [PATCH 017/142] add plr_gate class --- monte-cover/src/montecover/plm/__init__.py | 2 + monte-cover/src/montecover/plm/plr_gate.py | 175 +++++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 monte-cover/src/montecover/plm/plr_gate.py diff --git a/monte-cover/src/montecover/plm/__init__.py b/monte-cover/src/montecover/plm/__init__.py index 6e48f62..a717507 100644 --- a/monte-cover/src/montecover/plm/__init__.py +++ b/monte-cover/src/montecover/plm/__init__.py @@ -2,8 +2,10 @@ from montecover.plm.pliv_late import PLIVLATECoverageSimulation from montecover.plm.plr_ate import PLRATECoverageSimulation +from montecover.plm.plr_gate import PLRGATECoverageSimulation __all__ = [ "PLRATECoverageSimulation", "PLIVLATECoverageSimulation", + "PLRGATECoverageSimulation", ] diff --git a/monte-cover/src/montecover/plm/plr_gate.py b/monte-cover/src/montecover/plm/plr_gate.py new file mode 100644 index 0000000..bb18063 --- /dev/null +++ b/monte-cover/src/montecover/plm/plr_gate.py @@ -0,0 +1,175 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import pandas as pd +import numpy as np +from doubleml.datasets import make_heterogeneous_data +from lightgbm import LGBMRegressor +from sklearn.ensemble import RandomForestRegressor +from sklearn.linear_model import LassoCV + +from montecover.base import BaseSimulation + + +class PLRGATECoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLPLR for GATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + for learner in self.dml_parameters["learners"]: + assert "ml_g" in learner, "No ml_g specified in the config file" + assert "ml_m" in learner, "No ml_m specified in the config file" + + # Convert ml_g strings to actual objects + learner["ml_g"] = self._convert_ml_string_to_object(learner["ml_g"][0]) + learner["ml_m"] = self._convert_ml_string_to_object(learner["ml_m"][0]) + + def _convert_ml_string_to_object(self, ml_string): + """Convert a string to a machine learning object.""" + if ml_string == "Lasso": + learner = LassoCV() + elif ml_string == "Random Forest": + learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=2) + elif ml_string == "LGBM": + learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) + else: + raise ValueError(f"Unknown learner type: {ml_string}") + + return (ml_string, learner) + + def _generate_groups(self, data): + """Generate groups for the simulation.""" + groups = pd.DataFrame( + np.column_stack( + ( + data["X_0"] <= 0.3, + (data["X_0"] > 0.3) & (data["X_0"] <= 0.7), + data["X_0"] > 0.7, + ) + ), + columns=["Group 1", "Group 2", "Group 3"], + ) + return groups + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + # Oracle values + data_oracle = make_heterogeneous_data( + n_obs=int(1e6), + p=self.dgp_parameters["p"][0], + support_size=self.dgp_parameters["support_size"][0], + n_x=self.dgp_parameters["n_x"][0], + binary_treatment=False, + ) + + self.logger.info("Calculating oracle values") + groups = self._generate_groups(data_oracle["data"]) + true_effects = [data_oracle["effects"][groups[group]].mean() for group in groups.columns] + + self.oracle_values = dict() + self.oracle_values["gates"] = true_effects + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_g_name, ml_g = dml_params["learners"]["ml_g"] + learner_m_name, ml_m = dml_params["learners"]["ml_m"] + score = dml_params["score"] + + # Model + dml_model = dml.DoubleMLPLR( + obj_dml_data=dml_data, + ml_l=ml_g, + ml_m=ml_m, + ml_g=ml_g if score == "IV-type" else None, + score=score, + ) + dml_model.fit() + + # gate + groups = self._generate_groups(dml_data.data) + gate_model = dml_model.gate(groups=groups) + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + confint = gate_model.confint(level=level) + effects = confint["effect"] + uniform_confint = gate_model.confint(level=0.95, joint=True, n_rep_boot=2000) + level_result["coverage"] = self._compute_coverage( + thetas=effects, + oracle_thetas=self.oracle_values["gates"], + confint=confint.iloc[:, [0, 2]], + joint_confint=uniform_confint.iloc[:, [0, 2]], + ) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Score": score, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "Score", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_heterogeneous_data( + n_obs=dgp_params["n_obs"], + p=dgp_params["p"], + support_size=dgp_params["support_size"], + n_x=dgp_params["n_x"], + binary_treatment=False, + ) + dml_data = dml.DoubleMLData(data["data"], "y", "d") + return dml_data From fbe3b83ac2549e157af4281a793d6789de00a9c7 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 17:01:06 +0200 Subject: [PATCH 018/142] add plr_gate scripts --- scripts/plm/plr_gate.py | 13 ++++++++++++ scripts/plm/plr_gate_config.yml | 35 +++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 scripts/plm/plr_gate.py create mode 100644 scripts/plm/plr_gate_config.yml diff --git a/scripts/plm/plr_gate.py b/scripts/plm/plr_gate.py new file mode 100644 index 0000000..75d133f --- /dev/null +++ b/scripts/plm/plr_gate.py @@ -0,0 +1,13 @@ +from montecover.plm import PLRGATECoverageSimulation + +# Create and run simulation with config file +sim = PLRGATECoverageSimulation( + config_file="scripts/plm/plr_gate_config.yml", + log_level="INFO", + log_file="logs/plm/plr_gate_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/plm/", file_prefix="plr_gate") + +# Save config file for reproducibility +sim.save_config("results/plm/plr_gate_config.yml") diff --git a/scripts/plm/plr_gate_config.yml b/scripts/plm/plr_gate_config.yml new file mode 100644 index 0000000..17e8c93 --- /dev/null +++ b/scripts/plm/plr_gate_config.yml @@ -0,0 +1,35 @@ +# Simulation parameters for PLR ATE Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [500] # Sample size + p: [10] # Number of covariates + support_size: [5] # Number of non-zero coefficients + n_x: [1] + + +dml_parameters: + # ML methods for ml_g and ml_m + learners: + - ml_g: ["Lasso"] + ml_m: ["Lasso"] + - ml_g: ["Random Forest"] + ml_m: ["Random Forest"] + - ml_g: ["Lasso"] + ml_m: ["Random Forest"] + - ml_g: ["Random Forest"] + ml_m: ["Lasso"] + - ml_g: ["LGBM"] + ml_m: ["LGBM"] + - ml_g: ["LGBM"] + ml_m: ["Lasso"] + + score: ["partialling out", "IV-type"] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From 6eb3f881b1d0a1df29b68d8a3e192ddf3630fa48 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 17:01:21 +0200 Subject: [PATCH 019/142] update plr_gate qmd --- doc/plm/plr_gate.qmd | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/doc/plm/plr_gate.qmd b/doc/plm/plr_gate.qmd index 0f0c105..6857ab7 100644 --- a/doc/plm/plr_gate.qmd +++ b/doc/plm/plr_gate.qmd @@ -56,12 +56,14 @@ else: display_columns_gate = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` +### Partialling out + ```{python} #| echo: false generate_and_show_styled_table( main_df=df_gate, - filters={"level": 0.95}, + filters={"level": 0.95, "Score": "partialling out"}, display_cols=display_columns_gate, n_rep=n_rep_gate, level_col="level", @@ -75,7 +77,7 @@ generate_and_show_styled_table( generate_and_show_styled_table( main_df=df_gate, - filters={"level": 0.9}, + filters={"level": 0.9, "Score": "partialling out"}, display_cols=display_columns_gate, n_rep=n_rep_gate, level_col="level", @@ -83,3 +85,33 @@ generate_and_show_styled_table( coverage_highlight_cols=["Coverage", "Uniform Coverage"] ) ``` + +### IV-type + +```{python} +#| echo: false + +generate_and_show_styled_table( + main_df=df_gate, + filters={"level": 0.95, "Score": "IV-type"}, + display_cols=display_columns_gate, + n_rep=n_rep_gate, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false + +generate_and_show_styled_table( + main_df=df_gate, + filters={"level": 0.9, "Score": "IV-type"}, + display_cols=display_columns_gate, + n_rep=n_rep_gate, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` \ No newline at end of file From beec4e7af95a234f3879e4bf006372109e5f2945 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 27 May 2025 17:09:44 +0200 Subject: [PATCH 020/142] update plr gate results --- results/plm/plr_gate_config.yml | 388 ++++++++++++++++++++++++++++++ results/plm/plr_gate_coverage.csv | 34 ++- results/plm/plr_gate_metadata.csv | 2 + 3 files changed, 415 insertions(+), 9 deletions(-) create mode 100644 results/plm/plr_gate_config.yml create mode 100644 results/plm/plr_gate_metadata.csv diff --git a/results/plm/plr_gate_config.yml b/results/plm/plr_gate_config.yml new file mode 100644 index 0000000..d988265 --- /dev/null +++ b/results/plm/plr_gate_config.yml @@ -0,0 +1,388 @@ +confidence_parameters: + level: + - 0.95 + - 0.9 +dgp_parameters: + n_obs: + - 500 + n_x: + - 1 + p: + - 10 + support_size: + - 5 +dml_parameters: + learners: + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: &id001 !!python/tuple + - criterion + - max_depth + - min_samples_split + - min_samples_leaf + - min_weight_fraction_leaf + - max_features + - max_leaf_nodes + - min_impurity_decrease + - random_state + - ccp_alpha + - monotonic_cst + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + ml_m: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + - ml_g: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + score: + - partialling out + - IV-type +simulation_parameters: + max_runtime: 19800 + n_jobs: -2 + random_seed: 42 + repetitions: 1000 diff --git a/results/plm/plr_gate_coverage.csv b/results/plm/plr_gate_coverage.csv index de92fa2..6b2255d 100644 --- a/results/plm/plr_gate_coverage.csv +++ b/results/plm/plr_gate_coverage.csv @@ -1,9 +1,25 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.694,0.42514371296714487,0.1552302674837282,0.953,0.9991019141230857,1000 -LGBM,LGBM,0.95,0.775,0.5065899798109038,0.1552302674837282,0.955,0.9994456036482492,1000 -LGBM,Lasso,0.9,0.8586666666666666,0.6309690380685457,0.1706803130476304,1.0,1.4834269690149875,1000 -LGBM,Lasso,0.95,0.9153333333333333,0.7518459817401837,0.1706803130476304,0.998,1.4857363367985323,1000 -Lasso,LGBM,0.9,0.033333333333333326,0.5039828586868691,0.6915874651279188,0.009,1.1844079148312503,1000 -Lasso,LGBM,0.95,0.056666666666666664,0.6005326161954867,0.6915874651279188,0.013,1.1844261861006267,1000 -Lasso,Lasso,0.9,0.9116666666666666,0.3672698862053673,0.08452872727745843,0.999,0.861811460445299,1000 -Lasso,Lasso,0.95,0.9576666666666667,0.43762906180458633,0.08452872727745843,1.0,0.8638737943195437,1000 +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM,LGBM,IV-type,0.9,0.7913333333333333,0.34087019015713244,0.10955365259161864,0.984,0.8024111896303185,1000 +LGBM,LGBM,IV-type,0.95,0.8666666666666666,0.4061718837253168,0.10955365259161864,0.986,0.8021358516058951,1000 +LGBM,LGBM,partialling out,0.9,0.733,0.41199254921037415,0.1412366447574056,0.976,0.969336707290682,1000 +LGBM,LGBM,partialling out,0.95,0.8146666666666667,0.49091940165384834,0.1412366447574056,0.979,0.9670432579194853,1000 +LGBM,Lasso,IV-type,0.9,0.8743333333333334,0.35934038817776554,0.09337368161834425,0.995,0.8445474458877711,1000 +LGBM,Lasso,IV-type,0.95,0.9356666666666666,0.42818048212860316,0.09337368161834425,0.995,0.8434599972250386,1000 +LGBM,Lasso,partialling out,0.9,0.8463333333333334,0.5552110089974697,0.1532082984330501,0.998,1.3118736080937614,1000 +LGBM,Lasso,partialling out,0.95,0.9053333333333333,0.6615747222882156,0.1532082984330501,0.996,1.3086219841863547,1000 +Lasso,Lasso,IV-type,0.9,0.8936666666666666,0.3563210711330694,0.0883132202205594,0.998,0.8375773423599656,1000 +Lasso,Lasso,IV-type,0.95,0.944,0.4245827439660409,0.0883132202205594,0.998,0.8389714933825461,1000 +Lasso,Lasso,partialling out,0.9,0.8916666666666666,0.36779082542346053,0.09228530255512166,0.999,0.8607482851866739,1000 +Lasso,Lasso,partialling out,0.95,0.944,0.4382497991692171,0.09228530255512166,0.999,0.8648102492763181,1000 +Lasso,Random Forest,IV-type,0.9,0.8923333333333334,0.3549776833767524,0.08879950167844942,0.998,0.8332032784130605,1000 +Lasso,Random Forest,IV-type,0.95,0.9426666666666667,0.42298199872250614,0.08879950167844942,0.999,0.8323824489187096,1000 +Lasso,Random Forest,partialling out,0.9,0.7343333333333334,0.4036193152513892,0.13656662200734915,0.993,0.9476058107144939,1000 +Lasso,Random Forest,partialling out,0.95,0.8216666666666667,0.480942078003382,0.13656662200734915,0.992,0.9514873421828395,1000 +Random Forest,Lasso,IV-type,0.9,0.875,0.347078729389649,0.09097126345936613,0.996,0.8160886798754291,1000 +Random Forest,Lasso,IV-type,0.95,0.9276666666666666,0.41356981451560193,0.09097126345936613,0.995,0.8160923905909828,1000 +Random Forest,Lasso,partialling out,0.9,0.8603333333333334,0.4129163782356481,0.1102747613884337,0.995,0.9701530221434742,1000 +Random Forest,Lasso,partialling out,0.95,0.921,0.4920202118340013,0.1102747613884337,0.996,0.9666885122358938,1000 +Random Forest,Random Forest,IV-type,0.9,0.8683333333333334,0.344414723727709,0.09021405187831832,0.993,0.8096356132792374,1000 +Random Forest,Random Forest,IV-type,0.95,0.9313333333333333,0.41039545597909777,0.09021405187831832,0.995,0.8088254975336233,1000 +Random Forest,Random Forest,partialling out,0.9,0.869,0.36859916852570823,0.09499263192691354,0.997,0.865589788143947,1000 +Random Forest,Random Forest,partialling out,0.95,0.926,0.4392129993844807,0.09499263192691354,0.995,0.8653642165581639,1000 diff --git a/results/plm/plr_gate_metadata.csv b/results/plm/plr_gate_metadata.csv new file mode 100644 index 0000000..f369a73 --- /dev/null +++ b/results/plm/plr_gate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.dev0,PLRGATECoverageSimulation,2025-05-27 17:07,19.04006079832713,3.12.9,scripts/plm/plr_gate_config.yml From 3c7fbbdf9ed0743858afbae229fac73687d24410 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 06:34:56 +0200 Subject: [PATCH 021/142] fix format --- doc/plm/plr_gate.qmd | 2 +- monte-cover/src/montecover/plm/plr_gate.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/plm/plr_gate.qmd b/doc/plm/plr_gate.qmd index 6857ab7..e381fa9 100644 --- a/doc/plm/plr_gate.qmd +++ b/doc/plm/plr_gate.qmd @@ -114,4 +114,4 @@ generate_and_show_styled_table( rename_map={"Learner g": "Learner l"}, coverage_highlight_cols=["Coverage", "Uniform Coverage"] ) -``` \ No newline at end of file +``` diff --git a/monte-cover/src/montecover/plm/plr_gate.py b/monte-cover/src/montecover/plm/plr_gate.py index bb18063..af73d4f 100644 --- a/monte-cover/src/montecover/plm/plr_gate.py +++ b/monte-cover/src/montecover/plm/plr_gate.py @@ -1,8 +1,8 @@ from typing import Any, Dict, Optional import doubleml as dml -import pandas as pd import numpy as np +import pandas as pd from doubleml.datasets import make_heterogeneous_data from lightgbm import LGBMRegressor from sklearn.ensemble import RandomForestRegressor From f25c945a85731ed28afb1beb6c04c7aeb313c859 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 06:35:14 +0200 Subject: [PATCH 022/142] fix format --- monte-cover/src/montecover/plm/pliv_late.py | 16 ++++++++++---- monte-cover/src/montecover/plm/plr_ate.py | 16 ++++++++++---- monte-cover/src/montecover/plm/plr_gate.py | 24 +++++++++++++++------ 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/monte-cover/src/montecover/plm/pliv_late.py b/monte-cover/src/montecover/plm/pliv_late.py index 2eff4a3..c1e8f9e 100644 --- a/monte-cover/src/montecover/plm/pliv_late.py +++ b/monte-cover/src/montecover/plm/pliv_late.py @@ -32,7 +32,9 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert "learners" in self.dml_parameters, "No learners specified in the config file" + assert ( + "learners" in self.dml_parameters + ), "No learners specified in the config file" required_learners = ["ml_g", "ml_m", "ml_r"] for learner in self.dml_parameters["learners"]: @@ -47,9 +49,13 @@ def _convert_ml_string_to_object(self, ml_string): if ml_string == "Lasso": learner = LassoCV() elif ml_string == "Random Forest": - learner = RandomForestRegressor(n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2) + learner = RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ) elif ml_string == "LGBM": - learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) + learner = LGBMRegressor( + n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1 + ) else: raise ValueError(f"Unknown learner type: {ml_string}") @@ -125,7 +131,9 @@ def summarize_results(self): # Aggregate results (possibly multiple result dfs) result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + result_summary[result_name] = ( + result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + ) self.logger.debug(f"Summarized {result_name} results") return result_summary diff --git a/monte-cover/src/montecover/plm/plr_ate.py b/monte-cover/src/montecover/plm/plr_ate.py index 5ec5c1d..cfd9630 100644 --- a/monte-cover/src/montecover/plm/plr_ate.py +++ b/monte-cover/src/montecover/plm/plr_ate.py @@ -32,7 +32,9 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert "learners" in self.dml_parameters, "No learners specified in the config file" + assert ( + "learners" in self.dml_parameters + ), "No learners specified in the config file" for learner in self.dml_parameters["learners"]: assert "ml_g" in learner, "No ml_g specified in the config file" assert "ml_m" in learner, "No ml_m specified in the config file" @@ -46,9 +48,13 @@ def _convert_ml_string_to_object(self, ml_string): if ml_string == "Lasso": learner = LassoCV() elif ml_string == "Random Forest": - learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20) + learner = RandomForestRegressor( + n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20 + ) elif ml_string == "LGBM": - learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) + learner = LGBMRegressor( + n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1 + ) else: raise ValueError(f"Unknown learner type: {ml_string}") @@ -121,7 +127,9 @@ def summarize_results(self): # Aggregate results (possibly multiple result dfs) result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + result_summary[result_name] = ( + result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + ) self.logger.debug(f"Summarized {result_name} results") return result_summary diff --git a/monte-cover/src/montecover/plm/plr_gate.py b/monte-cover/src/montecover/plm/plr_gate.py index af73d4f..89aedac 100644 --- a/monte-cover/src/montecover/plm/plr_gate.py +++ b/monte-cover/src/montecover/plm/plr_gate.py @@ -34,7 +34,9 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert "learners" in self.dml_parameters, "No learners specified in the config file" + assert ( + "learners" in self.dml_parameters + ), "No learners specified in the config file" for learner in self.dml_parameters["learners"]: assert "ml_g" in learner, "No ml_g specified in the config file" assert "ml_m" in learner, "No ml_m specified in the config file" @@ -48,9 +50,13 @@ def _convert_ml_string_to_object(self, ml_string): if ml_string == "Lasso": learner = LassoCV() elif ml_string == "Random Forest": - learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=2) + learner = RandomForestRegressor( + n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=2 + ) elif ml_string == "LGBM": - learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) + learner = LGBMRegressor( + n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1 + ) else: raise ValueError(f"Unknown learner type: {ml_string}") @@ -83,7 +89,9 @@ def _calculate_oracle_values(self): self.logger.info("Calculating oracle values") groups = self._generate_groups(data_oracle["data"]) - true_effects = [data_oracle["effects"][groups[group]].mean() for group in groups.columns] + true_effects = [ + data_oracle["effects"][groups[group]].mean() for group in groups.columns + ] self.oracle_values = dict() self.oracle_values["gates"] = true_effects @@ -116,7 +124,9 @@ def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: level_result = dict() confint = gate_model.confint(level=level) effects = confint["effect"] - uniform_confint = gate_model.confint(level=0.95, joint=True, n_rep_boot=2000) + uniform_confint = gate_model.confint( + level=0.95, joint=True, n_rep_boot=2000 + ) level_result["coverage"] = self._compute_coverage( thetas=effects, oracle_thetas=self.oracle_values["gates"], @@ -157,7 +167,9 @@ def summarize_results(self): # Aggregate results (possibly multiple result dfs) result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + result_summary[result_name] = ( + result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + ) self.logger.debug(f"Summarized {result_name} results") return result_summary From 5081d0784428705fd6d4270fb3b79807019beaa4 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 07:01:49 +0200 Subject: [PATCH 023/142] add plr cate class to montecover --- monte-cover/src/montecover/plm/__init__.py | 2 + monte-cover/src/montecover/plm/plr_cate.py | 175 +++++++++++++++++++++ monte-cover/src/montecover/plm/plr_gate.py | 26 +-- 3 files changed, 184 insertions(+), 19 deletions(-) create mode 100644 monte-cover/src/montecover/plm/plr_cate.py diff --git a/monte-cover/src/montecover/plm/__init__.py b/monte-cover/src/montecover/plm/__init__.py index a717507..68d2291 100644 --- a/monte-cover/src/montecover/plm/__init__.py +++ b/monte-cover/src/montecover/plm/__init__.py @@ -2,10 +2,12 @@ from montecover.plm.pliv_late import PLIVLATECoverageSimulation from montecover.plm.plr_ate import PLRATECoverageSimulation +from montecover.plm.plr_cate import PLRCATECoverageSimulation from montecover.plm.plr_gate import PLRGATECoverageSimulation __all__ = [ "PLRATECoverageSimulation", "PLIVLATECoverageSimulation", "PLRGATECoverageSimulation", + "PLRCATECoverageSimulation", ] diff --git a/monte-cover/src/montecover/plm/plr_cate.py b/monte-cover/src/montecover/plm/plr_cate.py new file mode 100644 index 0000000..90ac0d3 --- /dev/null +++ b/monte-cover/src/montecover/plm/plr_cate.py @@ -0,0 +1,175 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +import patsy +from doubleml.datasets import make_heterogeneous_data +from lightgbm import LGBMRegressor +from sklearn.ensemble import RandomForestRegressor +from sklearn.linear_model import LassoCV, LinearRegression + +from montecover.base import BaseSimulation + + +class PLRCATECoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLPLR for CATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + for learner in self.dml_parameters["learners"]: + assert "ml_g" in learner, "No ml_g specified in the config file" + assert "ml_m" in learner, "No ml_m specified in the config file" + + # Convert ml_g strings to actual objects + learner["ml_g"] = self._convert_ml_string_to_object(learner["ml_g"][0]) + learner["ml_m"] = self._convert_ml_string_to_object(learner["ml_m"][0]) + + def _convert_ml_string_to_object(self, ml_string): + """Convert a string to a machine learning object.""" + if ml_string == "Lasso": + learner = LassoCV() + elif ml_string == "Random Forest": + learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=2) + elif ml_string == "LGBM": + learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) + else: + raise ValueError(f"Unknown learner type: {ml_string}") + + return (ml_string, learner) + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + # Oracle values + data_oracle = make_heterogeneous_data( + n_obs=int(1e6), + p=self.dgp_parameters["p"][0], + support_size=self.dgp_parameters["support_size"][0], + n_x=self.dgp_parameters["n_x"][0], + binary_treatment=False, + ) + + self.logger.info("Calculating oracle values") + + design_matrix_oracle = patsy.dmatrix("bs(x, df=5, degree=2)", {"x": data_oracle["data"]["X_0"]}) + spline_basis_oracle = pd.DataFrame(design_matrix_oracle) + oracle_model = LinearRegression() + oracle_model.fit(spline_basis_oracle, data_oracle["effects"]) + + # evaluate on grid + grid = {"x": np.linspace(0.1, 0.9, 100)} + spline_grid_oracle = pd.DataFrame(patsy.build_design_matrices([design_matrix_oracle.design_info], grid)[0]) + oracle_cates = oracle_model.predict(spline_grid_oracle) + + self.oracle_values = dict() + self.oracle_values["cates"] = oracle_cates + self.oracle_values["grid"] = grid + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_g_name, ml_g = dml_params["learners"]["ml_g"] + learner_m_name, ml_m = dml_params["learners"]["ml_m"] + score = dml_params["score"] + + # Model + dml_model = dml.DoubleMLPLR( + obj_dml_data=dml_data, + ml_l=ml_g, + ml_m=ml_m, + ml_g=ml_g if score == "IV-type" else None, + score=score, + ) + dml_model.fit() + + # cate + design_matrix = patsy.dmatrix("bs(x, df=5, degree=2)", {"x": dml_data.data["X_0"]}) + spline_basis = pd.DataFrame(design_matrix) + cate_model = dml_model.cate(basis=spline_basis) + + # evaluation spline basis + spline_grid = pd.DataFrame(patsy.build_design_matrices([design_matrix.design_info], self.oracle_values["grid"])[0]) + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + confint = cate_model.confint(basis=spline_grid, level=level) + effects = confint["effect"] + uniform_confint = cate_model.confint(basis=spline_grid, level=0.95, joint=True, n_rep_boot=2000) + level_result["coverage"] = self._compute_coverage( + thetas=effects, + oracle_thetas=self.oracle_values["cates"], + confint=confint.iloc[:, [0, 2]], + joint_confint=uniform_confint.iloc[:, [0, 2]], + ) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Score": score, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "Score", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_heterogeneous_data( + n_obs=dgp_params["n_obs"], + p=dgp_params["p"], + support_size=dgp_params["support_size"], + n_x=dgp_params["n_x"], + binary_treatment=False, + ) + dml_data = dml.DoubleMLData(data["data"], "y", "d") + return dml_data diff --git a/monte-cover/src/montecover/plm/plr_gate.py b/monte-cover/src/montecover/plm/plr_gate.py index 89aedac..2f2bfd5 100644 --- a/monte-cover/src/montecover/plm/plr_gate.py +++ b/monte-cover/src/montecover/plm/plr_gate.py @@ -34,9 +34,7 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert ( - "learners" in self.dml_parameters - ), "No learners specified in the config file" + assert "learners" in self.dml_parameters, "No learners specified in the config file" for learner in self.dml_parameters["learners"]: assert "ml_g" in learner, "No ml_g specified in the config file" assert "ml_m" in learner, "No ml_m specified in the config file" @@ -50,13 +48,9 @@ def _convert_ml_string_to_object(self, ml_string): if ml_string == "Lasso": learner = LassoCV() elif ml_string == "Random Forest": - learner = RandomForestRegressor( - n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=2 - ) + learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=2) elif ml_string == "LGBM": - learner = LGBMRegressor( - n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1 - ) + learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) else: raise ValueError(f"Unknown learner type: {ml_string}") @@ -89,12 +83,10 @@ def _calculate_oracle_values(self): self.logger.info("Calculating oracle values") groups = self._generate_groups(data_oracle["data"]) - true_effects = [ - data_oracle["effects"][groups[group]].mean() for group in groups.columns - ] + oracle_gates = [data_oracle["effects"][groups[group]].mean() for group in groups.columns] self.oracle_values = dict() - self.oracle_values["gates"] = true_effects + self.oracle_values["gates"] = oracle_gates def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: """Run a single repetition with the given parameters.""" @@ -124,9 +116,7 @@ def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: level_result = dict() confint = gate_model.confint(level=level) effects = confint["effect"] - uniform_confint = gate_model.confint( - level=0.95, joint=True, n_rep_boot=2000 - ) + uniform_confint = gate_model.confint(level=0.95, joint=True, n_rep_boot=2000) level_result["coverage"] = self._compute_coverage( thetas=effects, oracle_thetas=self.oracle_values["gates"], @@ -167,9 +157,7 @@ def summarize_results(self): # Aggregate results (possibly multiple result dfs) result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = ( - result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() - ) + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() self.logger.debug(f"Summarized {result_name} results") return result_summary From 36b199a66e258134a163b1b1536b0812b8efcada Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 07:02:39 +0200 Subject: [PATCH 024/142] add scripts to run cate simulation --- scripts/plm/pliv_late_config.yml | 2 +- scripts/plm/plr_cate.py | 13 ++++++++++++ scripts/plm/plr_cate_config.yml | 35 ++++++++++++++++++++++++++++++++ scripts/plm/plr_gate_config.yml | 3 +-- 4 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 scripts/plm/plr_cate.py create mode 100644 scripts/plm/plr_cate_config.yml diff --git a/scripts/plm/pliv_late_config.yml b/scripts/plm/pliv_late_config.yml index 95b9418..40df7c2 100644 --- a/scripts/plm/pliv_late_config.yml +++ b/scripts/plm/pliv_late_config.yml @@ -1,7 +1,7 @@ # Simulation parameters for PLR ATE Coverage simulation_parameters: - repetitions: 100 + repetitions: 1000 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 diff --git a/scripts/plm/plr_cate.py b/scripts/plm/plr_cate.py new file mode 100644 index 0000000..f9f1f14 --- /dev/null +++ b/scripts/plm/plr_cate.py @@ -0,0 +1,13 @@ +from montecover.plm import PLRCATECoverageSimulation + +# Create and run simulation with config file +sim = PLRCATECoverageSimulation( + config_file="scripts/plm/plr_cate_config.yml", + log_level="INFO", + log_file="logs/plm/plr_cate_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/plm/", file_prefix="plr_cate") + +# Save config file for reproducibility +sim.save_config("results/plm/plr_cate_config.yml") diff --git a/scripts/plm/plr_cate_config.yml b/scripts/plm/plr_cate_config.yml new file mode 100644 index 0000000..ca60d7d --- /dev/null +++ b/scripts/plm/plr_cate_config.yml @@ -0,0 +1,35 @@ +# Simulation parameters for PLR CATE Coverage + +simulation_parameters: + repetitions: 10 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [500] # Sample size + p: [10] # Number of covariates + support_size: [5] # Number of non-zero coefficients + n_x: [1] + + +dml_parameters: + # ML methods for ml_g and ml_m + learners: + - ml_g: ["Lasso"] + ml_m: ["Lasso"] + - ml_g: ["Random Forest"] + ml_m: ["Random Forest"] + - ml_g: ["Lasso"] + ml_m: ["Random Forest"] + - ml_g: ["Random Forest"] + ml_m: ["Lasso"] + - ml_g: ["LGBM"] + ml_m: ["LGBM"] + - ml_g: ["LGBM"] + ml_m: ["Lasso"] + + score: ["partialling out", "IV-type"] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/plm/plr_gate_config.yml b/scripts/plm/plr_gate_config.yml index 17e8c93..9c23466 100644 --- a/scripts/plm/plr_gate_config.yml +++ b/scripts/plm/plr_gate_config.yml @@ -1,4 +1,4 @@ -# Simulation parameters for PLR ATE Coverage +# Simulation parameters for PLR GATE Coverage simulation_parameters: repetitions: 1000 @@ -12,7 +12,6 @@ dgp_parameters: support_size: [5] # Number of non-zero coefficients n_x: [1] - dml_parameters: # ML methods for ml_g and ml_m learners: From 1146677e0b1476cfeae3445eb7fda582356d1ede Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 08:32:24 +0200 Subject: [PATCH 025/142] update cate qmd file --- doc/plm/plr_cate.qmd | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/doc/plm/plr_cate.qmd b/doc/plm/plr_cate.qmd index f62fbaf..ece025e 100644 --- a/doc/plm/plr_cate.qmd +++ b/doc/plm/plr_cate.qmd @@ -57,12 +57,28 @@ else: display_columns_cate = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] ``` +### Partialling out + +```{python} +#| echo: false + +generate_and_show_styled_table( + main_df=df_cate, + filters={"level": 0.95, "Score": "partialling out"}, + display_cols=display_columns_cate, + n_rep=n_rep_cate, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + ```{python} #| echo: false generate_and_show_styled_table( main_df=df_cate, - filters={"level": 0.95}, + filters={"level": 0.9, "Score": "partialling out"}, display_cols=display_columns_cate, n_rep=n_rep_cate, level_col="level", @@ -71,12 +87,15 @@ generate_and_show_styled_table( ) ``` + +### IV-type + ```{python} #| echo: false generate_and_show_styled_table( main_df=df_cate, - filters={"level": 0.9}, + filters={"level": 0.95, "Score": "IV-type"}, display_cols=display_columns_cate, n_rep=n_rep_cate, level_col="level", @@ -84,3 +103,17 @@ generate_and_show_styled_table( coverage_highlight_cols=["Coverage", "Uniform Coverage"] ) ``` + +```{python} +#| echo: false + +generate_and_show_styled_table( + main_df=df_cate, + filters={"level": 0.9, "Score": "IV-type"}, + display_cols=display_columns_cate, + n_rep=n_rep_cate, + level_col="level", + rename_map={"Learner g": "Learner l"}, + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` \ No newline at end of file From e6cc6253c787aac4a103f1855ae031c5bbcfe307 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 08:33:04 +0200 Subject: [PATCH 026/142] run pliv sim --- results/plm/pliv_late_config.yml | 718 +++++++++++++++++++++++++++++ results/plm/pliv_late_coverage.csv | 66 +-- results/plm/pliv_late_metadata.csv | 2 + 3 files changed, 753 insertions(+), 33 deletions(-) create mode 100644 results/plm/pliv_late_config.yml create mode 100644 results/plm/pliv_late_metadata.csv diff --git a/results/plm/pliv_late_config.yml b/results/plm/pliv_late_config.yml new file mode 100644 index 0000000..c701676 --- /dev/null +++ b/results/plm/pliv_late_config.yml @@ -0,0 +1,718 @@ +confidence_parameters: + level: + - 0.95 + - 0.9 +dgp_parameters: + dim_x: + - 20 + dim_z: + - 1 + n_obs: + - 500 + theta: + - 0.5 +dml_parameters: + learners: + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_r: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: &id001 !!python/tuple + - criterion + - max_depth + - min_samples_split + - min_samples_leaf + - min_weight_fraction_leaf + - max_features + - max_leaf_nodes + - min_impurity_decrease + - random_state + - ccp_alpha + - monotonic_cst + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_r: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_r: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_r: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_r: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_r: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_r: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 20 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 100 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_r: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + score: + - partialling out + - IV-type +simulation_parameters: + max_runtime: 19800 + n_jobs: -2 + random_seed: 42 + repetitions: 1000 diff --git a/results/plm/pliv_late_coverage.csv b/results/plm/pliv_late_coverage.csv index 2050685..a88c46d 100644 --- a/results/plm/pliv_late_coverage.csv +++ b/results/plm/pliv_late_coverage.csv @@ -1,33 +1,33 @@ -Learner g,Learner m,Learner r,score,level,Coverage,CI Length,Bias,repetition -Lasso,Lasso,Lasso,IV-type,0.9,0.806,0.23181691237656843,0.071516051616331,1000 -Lasso,Lasso,Lasso,IV-type,0.95,0.873,0.2762268884116072,0.071516051616331,1000 -Lasso,Lasso,Lasso,partialling out,0.9,0.899,0.2994589442321557,0.07151348023026591,1000 -Lasso,Lasso,Lasso,partialling out,0.95,0.947,0.35682734069852273,0.07151348023026591,1000 -Lasso,Lasso,Random Forest,IV-type,0.9,0.809,0.23192657104746503,0.07186817392341269,1000 -Lasso,Lasso,Random Forest,IV-type,0.95,0.864,0.27635755477731183,0.07186817392341269,1000 -Lasso,Lasso,Random Forest,partialling out,0.9,0.899,0.3069995989366334,0.07382308081474215,1000 -Lasso,Lasso,Random Forest,partialling out,0.95,0.947,0.36581258497707936,0.07382308081474215,1000 -Lasso,Random Forest,Lasso,IV-type,0.9,0.827,0.2641841657851808,0.0774047144241511,1000 -Lasso,Random Forest,Lasso,IV-type,0.95,0.901,0.3147948496696171,0.0774047144241511,1000 -Lasso,Random Forest,Lasso,partialling out,0.9,0.901,0.31707874099555505,0.07724285844476118,1000 -Lasso,Random Forest,Lasso,partialling out,0.95,0.953,0.37782262350382784,0.07724285844476118,1000 -Lasso,Random Forest,Random Forest,IV-type,0.9,0.838,0.2649779671547556,0.07652770804553702,1000 -Lasso,Random Forest,Random Forest,IV-type,0.95,0.908,0.3157407223416607,0.07652770804553702,1000 -Lasso,Random Forest,Random Forest,partialling out,0.9,0.874,0.3008906023582805,0.08181190413005493,1000 -Lasso,Random Forest,Random Forest,partialling out,0.95,0.942,0.35853326657508794,0.08181190413005493,1000 -Random Forest,Lasso,Lasso,IV-type,0.9,0.792,0.24230370043873264,0.07631671962244177,1000 -Random Forest,Lasso,Lasso,IV-type,0.95,0.872,0.28872266711104083,0.07631671962244177,1000 -Random Forest,Lasso,Lasso,partialling out,0.9,0.898,0.3308843211589107,0.08053193469589409,1000 -Random Forest,Lasso,Lasso,partialling out,0.95,0.956,0.39427298690546814,0.08053193469589409,1000 -Random Forest,Lasso,Random Forest,IV-type,0.9,0.801,0.24168635877812236,0.07483257666340414,1000 -Random Forest,Lasso,Random Forest,IV-type,0.95,0.877,0.2879870591510822,0.07483257666340414,1000 -Random Forest,Lasso,Random Forest,partialling out,0.9,0.912,0.31921209806412515,0.07628803083364795,1000 -Random Forest,Lasso,Random Forest,partialling out,0.95,0.959,0.38036467524147144,0.07628803083364795,1000 -Random Forest,Random Forest,Lasso,IV-type,0.9,0.822,0.2782151587448532,0.08043790541094972,1000 -Random Forest,Random Forest,Lasso,IV-type,0.95,0.888,0.331513808984715,0.08043790541094972,1000 -Random Forest,Random Forest,Lasso,partialling out,0.9,0.782,0.35119060752265596,0.10740217708024272,1000 -Random Forest,Random Forest,Lasso,partialling out,0.95,0.859,0.4184694195123385,0.10740217708024272,1000 -Random Forest,Random Forest,Random Forest,IV-type,0.9,0.826,0.27438186022140504,0.08018818357971656,1000 -Random Forest,Random Forest,Random Forest,IV-type,0.95,0.889,0.32694615206689337,0.08018818357971656,1000 -Random Forest,Random Forest,Random Forest,partialling out,0.9,0.863,0.3038242308513539,0.07846342744816766,1000 -Random Forest,Random Forest,Random Forest,partialling out,0.95,0.926,0.3620289005307371,0.07846342744816766,1000 +Learner g,Learner m,Learner r,Score,level,Coverage,CI Length,Bias,repetition +Lasso,Lasso,Lasso,IV-type,0.9,0.77,0.2311670246722693,0.07351137803097982,1000 +Lasso,Lasso,Lasso,IV-type,0.95,0.853,0.2754524994486315,0.07351137803097982,1000 +Lasso,Lasso,Lasso,partialling out,0.9,0.882,0.29873840617005004,0.07352898443923109,1000 +Lasso,Lasso,Lasso,partialling out,0.95,0.936,0.3559687666417936,0.07352898443923109,1000 +Lasso,Lasso,Random Forest,IV-type,0.9,0.777,0.23104564062515098,0.07292686591867557,1000 +Lasso,Lasso,Random Forest,IV-type,0.95,0.846,0.27530786143540564,0.07292686591867557,1000 +Lasso,Lasso,Random Forest,partialling out,0.9,0.875,0.30560561442708173,0.0754105177262708,1000 +Lasso,Lasso,Random Forest,partialling out,0.95,0.93,0.36415154998347216,0.0754105177262708,1000 +Lasso,Random Forest,Lasso,IV-type,0.9,0.822,0.26337832028825253,0.07879147116049506,1000 +Lasso,Random Forest,Lasso,IV-type,0.95,0.885,0.3138346255346524,0.07879147116049506,1000 +Lasso,Random Forest,Lasso,partialling out,0.9,0.891,0.316241872167824,0.07999092574770732,1000 +Lasso,Random Forest,Lasso,partialling out,0.95,0.933,0.3768254327901611,0.07999092574770732,1000 +Lasso,Random Forest,Random Forest,IV-type,0.9,0.824,0.2646018830744012,0.07786123070241949,1000 +Lasso,Random Forest,Random Forest,IV-type,0.95,0.893,0.315292590519731,0.07786123070241949,1000 +Lasso,Random Forest,Random Forest,partialling out,0.9,0.876,0.30059448125206695,0.08076615513006948,1000 +Lasso,Random Forest,Random Forest,partialling out,0.95,0.928,0.358180416513702,0.08076615513006948,1000 +Random Forest,Lasso,Lasso,IV-type,0.9,0.782,0.24089307789954117,0.07711265155797907,1000 +Random Forest,Lasso,Lasso,IV-type,0.95,0.863,0.2870418066823109,0.07711265155797907,1000 +Random Forest,Lasso,Lasso,partialling out,0.9,0.895,0.33019788438737024,0.08083652454735182,1000 +Random Forest,Lasso,Lasso,partialling out,0.95,0.943,0.3934550470427116,0.08083652454735182,1000 +Random Forest,Lasso,Random Forest,IV-type,0.9,0.78,0.24137668899853607,0.07696667082860091,1000 +Random Forest,Lasso,Random Forest,IV-type,0.95,0.856,0.28761806484961694,0.07696667082860091,1000 +Random Forest,Lasso,Random Forest,partialling out,0.9,0.887,0.31720465918002544,0.07868619249395503,1000 +Random Forest,Lasso,Random Forest,partialling out,0.95,0.941,0.3779726642749438,0.07868619249395503,1000 +Random Forest,Random Forest,Lasso,IV-type,0.9,0.808,0.276723535376228,0.08329949900345505,1000 +Random Forest,Random Forest,Lasso,IV-type,0.95,0.875,0.32973643011458303,0.08329949900345505,1000 +Random Forest,Random Forest,Lasso,partialling out,0.9,0.777,0.3500959987873081,0.10966539595371148,1000 +Random Forest,Random Forest,Lasso,partialling out,0.95,0.847,0.41716511275622853,0.10966539595371148,1000 +Random Forest,Random Forest,Random Forest,IV-type,0.9,0.815,0.2748458977378696,0.08114552106062414,1000 +Random Forest,Random Forest,Random Forest,IV-type,0.95,0.871,0.32749908687206,0.08114552106062414,1000 +Random Forest,Random Forest,Random Forest,partialling out,0.9,0.858,0.3033050825261931,0.08095253102426896,1000 +Random Forest,Random Forest,Random Forest,partialling out,0.95,0.915,0.36141029714665657,0.08095253102426896,1000 diff --git a/results/plm/pliv_late_metadata.csv b/results/plm/pliv_late_metadata.csv new file mode 100644 index 0000000..c55eeb8 --- /dev/null +++ b/results/plm/pliv_late_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.9.3,PLIVLATECoverageSimulation,2025-05-28 07:39,35.943938295046486,3.12.9,scripts/plm/pliv_late_config.yml From 334ff69a18c60dc81ba8ef50f74b8941a9d8ba83 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 08:33:11 +0200 Subject: [PATCH 027/142] run plr cate sim --- results/plm/plr_cate_config.yml | 388 ++++++++++++++++++++++++++++++ results/plm/plr_cate_coverage.csv | 34 ++- results/plm/plr_cate_metadata.csv | 2 + scripts/plm/plr_cate_config.yml | 2 +- 4 files changed, 416 insertions(+), 10 deletions(-) create mode 100644 results/plm/plr_cate_config.yml create mode 100644 results/plm/plr_cate_metadata.csv diff --git a/results/plm/plr_cate_config.yml b/results/plm/plr_cate_config.yml new file mode 100644 index 0000000..d988265 --- /dev/null +++ b/results/plm/plr_cate_config.yml @@ -0,0 +1,388 @@ +confidence_parameters: + level: + - 0.95 + - 0.9 +dgp_parameters: + n_obs: + - 500 + n_x: + - 1 + p: + - 10 + support_size: + - 5 +dml_parameters: + learners: + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: &id001 !!python/tuple + - criterion + - max_depth + - min_samples_split + - min_samples_leaf + - min_weight_fraction_leaf + - max_features + - max_leaf_nodes + - min_impurity_decrease + - random_state + - ccp_alpha + - monotonic_cst + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + ml_m: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + - ml_g: !!python/tuple + - Random Forest + - !!python/object:sklearn.ensemble._forest.RandomForestRegressor + _sklearn_version: 1.5.2 + bootstrap: true + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor + _sklearn_version: 1.5.2 + ccp_alpha: 0.0 + class_weight: null + criterion: squared_error + max_depth: null + max_features: null + max_leaf_nodes: null + min_impurity_decrease: 0.0 + min_samples_leaf: 1 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + random_state: null + splitter: best + estimator_params: *id001 + max_depth: 5 + max_features: 10 + max_leaf_nodes: null + max_samples: null + min_impurity_decrease: 0.0 + min_samples_leaf: 2 + min_samples_split: 2 + min_weight_fraction_leaf: 0.0 + monotonic_cst: null + n_estimators: 200 + n_jobs: null + oob_score: false + random_state: null + verbose: 0 + warm_start: false + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + - ml_g: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + ml_m: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + - ml_g: !!python/tuple + - LGBM + - !!python/object:lightgbm.sklearn.LGBMRegressor + _Booster: null + _best_iteration: -1 + _best_score: {} + _class_map: null + _class_weight: null + _classes: null + _evals_result: {} + _n_classes: -1 + _n_features: -1 + _n_features_in: -1 + _objective: null + _other_params: + verbose: -1 + boosting_type: gbdt + class_weight: null + colsample_bytree: 1.0 + importance_type: split + learning_rate: 0.01 + max_depth: -1 + min_child_samples: 20 + min_child_weight: 0.001 + min_split_gain: 0.0 + n_estimators: 500 + n_jobs: 1 + num_leaves: 31 + objective: null + random_state: null + reg_alpha: 0.0 + reg_lambda: 0.0 + subsample: 1.0 + subsample_for_bin: 200000 + subsample_freq: 0 + verbose: -1 + ml_m: !!python/tuple + - Lasso + - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV + _sklearn_version: 1.5.2 + alphas: null + copy_X: true + cv: null + eps: 0.001 + fit_intercept: true + max_iter: 1000 + n_alphas: 100 + n_jobs: null + positive: false + precompute: auto + random_state: null + selection: cyclic + tol: 0.0001 + verbose: false + score: + - partialling out + - IV-type +simulation_parameters: + max_runtime: 19800 + n_jobs: -2 + random_seed: 42 + repetitions: 1000 diff --git a/results/plm/plr_cate_coverage.csv b/results/plm/plr_cate_coverage.csv index 7ac96f5..c680064 100644 --- a/results/plm/plr_cate_coverage.csv +++ b/results/plm/plr_cate_coverage.csv @@ -1,9 +1,25 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.548837,0.24645987587973475,0.11702632069330975,0.838,0.6259964209606882,1000 -LGBM,LGBM,0.95,0.6519645000000001,0.29367505560587087,0.11702632069330975,0.831,0.6258576065111882,1000 -LGBM,Lasso,0.9,0.8638669999999999,0.33911313826395484,0.09124937236613799,0.996,0.8623254691407899,1000 -LGBM,Lasso,0.95,0.9212285,0.40407822726059023,0.09124937236613799,0.995,0.8610181300321831,1000 -Lasso,LGBM,0.9,0.0416435,0.3017482613643098,0.4961073439476889,0.0,0.7663971451030848,1000 -Lasso,LGBM,0.95,0.053314,0.359555230314165,0.4961073439476889,0.0,0.7663491956301145,1000 -Lasso,Lasso,0.9,0.891967,0.20515299517628052,0.050477626432069274,0.999,0.520241144704702,1000 -Lasso,Lasso,0.95,0.944044,0.24445487141081157,0.050477626432069274,0.998,0.5231019747390456,1000 +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM,LGBM,IV-type,0.9,0.82067,0.3480458660370899,0.10323087380216943,0.977,0.875262542113541,1000 +LGBM,LGBM,IV-type,0.95,0.89175,0.41472222891044763,0.10323087380216943,0.983,0.8743760032152794,1000 +LGBM,LGBM,partialling out,0.9,0.74924,0.45501765367949726,0.1561157579023202,0.974,1.1411615621374567,1000 +LGBM,LGBM,partialling out,0.95,0.8330700000000001,0.5421869757460459,0.1561157579023202,0.983,1.1472728814827193,1000 +LGBM,Lasso,IV-type,0.9,0.88225,0.36549541297084914,0.09199824425988169,0.997,0.9219589426057265,1000 +LGBM,Lasso,IV-type,0.95,0.93223,0.43551464653127614,0.09199824425988169,0.997,0.9186939466891947,1000 +LGBM,Lasso,partialling out,0.9,0.85111,0.6446559853424424,0.17612250701674348,0.99,1.62087577457141,1000 +LGBM,Lasso,partialling out,0.95,0.91225,0.7681549853351447,0.17612250701674348,0.989,1.6242424203893664,1000 +Lasso,Lasso,IV-type,0.9,0.88906,0.36205036797328316,0.08843630787984691,1.0,0.9108837341579921,1000 +Lasso,Lasso,IV-type,0.95,0.93988,0.4314096222241203,0.08843630787984691,0.996,0.9061325373084409,1000 +Lasso,Lasso,partialling out,0.9,0.88793,0.3773997029778743,0.09300684328946347,0.997,0.948374081382946,1000 +Lasso,Lasso,partialling out,0.95,0.93798,0.4496994829768948,0.09300684328946347,0.997,0.9529022667813315,1000 +Lasso,Random Forest,IV-type,0.9,0.89116,0.3591188383661412,0.08807017223492676,0.996,0.9031782149507243,1000 +Lasso,Random Forest,IV-type,0.95,0.9410700000000001,0.4279164892453154,0.08807017223492676,0.997,0.9029142372777073,1000 +Lasso,Random Forest,partialling out,0.9,0.77049,0.43201602915906673,0.14144817831483167,0.985,1.08875890710365,1000 +Lasso,Random Forest,partialling out,0.95,0.8559500000000001,0.5147788496324103,0.14144817831483167,0.987,1.0843847856728872,1000 +Random Forest,Lasso,IV-type,0.9,0.87576,0.34751733535976115,0.0886897386333643,0.996,0.8745686690953299,1000 +Random Forest,Lasso,IV-type,0.95,0.93031,0.41409244576420573,0.0886897386333643,0.995,0.8733571197353698,1000 +Random Forest,Lasso,partialling out,0.9,0.86897,0.44402322385123977,0.11698781037612511,0.996,1.1173200423596061,1000 +Random Forest,Lasso,partialling out,0.95,0.92803,0.5290863045733317,0.11698781037612511,0.997,1.1171431096930422,1000 +Random Forest,Random Forest,IV-type,0.9,0.87924,0.3435059623808316,0.08632814627418449,0.995,0.8679115609348612,1000 +Random Forest,Random Forest,IV-type,0.95,0.93233,0.4093126000451489,0.08632814627418449,0.995,0.8651443116799056,1000 +Random Forest,Random Forest,partialling out,0.9,0.8770399999999999,0.3833881326033233,0.09756911569117849,0.997,0.9628844750559203,1000 +Random Forest,Random Forest,partialling out,0.95,0.93259,0.45683513699346895,0.09756911569117849,0.997,0.9670687030845722,1000 diff --git a/results/plm/plr_cate_metadata.csv b/results/plm/plr_cate_metadata.csv new file mode 100644 index 0000000..4f9538e --- /dev/null +++ b/results/plm/plr_cate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.9.3,PLRCATECoverageSimulation,2025-05-28 08:04,18.608062847455344,3.12.9,scripts/plm/plr_cate_config.yml diff --git a/scripts/plm/plr_cate_config.yml b/scripts/plm/plr_cate_config.yml index ca60d7d..3280415 100644 --- a/scripts/plm/plr_cate_config.yml +++ b/scripts/plm/plr_cate_config.yml @@ -1,7 +1,7 @@ # Simulation parameters for PLR CATE Coverage simulation_parameters: - repetitions: 10 + repetitions: 1000 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 From 83ab5b68a374b6a1ba831686aa8799c250f3923b Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 09:33:43 +0200 Subject: [PATCH 028/142] add utils to convert config to learner --- monte-cover/src/montecover/utils.py | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 monte-cover/src/montecover/utils.py diff --git a/monte-cover/src/montecover/utils.py b/monte-cover/src/montecover/utils.py new file mode 100644 index 0000000..b73dee4 --- /dev/null +++ b/monte-cover/src/montecover/utils.py @@ -0,0 +1,49 @@ +from typing import Any, Callable, Dict, Tuple + +from lightgbm import LGBMClassifier, LGBMRegressor +from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor +from sklearn.linear_model import LassoCV, LinearRegression, LogisticRegression + +LearnerInstantiator = Callable[[Dict[str, Any]], Any] +# Map learner abbreviations to their instantiation logic +LEARNER_REGISTRY: Dict[str, LearnerInstantiator] = { + "LassoCV": lambda params: LassoCV(**params), + "RF Regr.": lambda params: RandomForestRegressor(**params), + "RF Clas.": lambda params: RandomForestClassifier(**params), + "LGBM Regr.": lambda params: LGBMRegressor(**{**{"verbose": -1, "n_jobs": 1}, **params}), + "LGBM Clas.": lambda params: LGBMClassifier(**{**{"verbose": -1, "n_jobs": 1}, **params}), + "Linear": lambda params: LinearRegression(**params), + "Logistic": lambda params: LogisticRegression(**params), +} + + +def create_learner_from_config(learner_config: Dict[str, Any]) -> Tuple[str, Any]: + """ + Instantiates a machine learning model based on a configuration dictionary. + The 'name' in learner_config should use the defined abbreviations. + + Args: + learner_config: A dictionary containing 'name' (str) for the learner + (e.g., "LassoCV", "RF Regr.", "RF Clas.", "LGBM Regr.", + "LGBM Clas.", "Linear", "Logostic") + and optionally 'params' (dict) for its hyperparameters. + + Returns: + A tuple containing the learner's abbreviated name (str) and the instantiated learner object. + + Raises: + ValueError: If the learner name in the config is unknown. + """ + learner_name_abbr = learner_config["name"] + params = learner_config.get("params", {}) + + if learner_name_abbr not in LEARNER_REGISTRY: + raise ValueError( + f"Unknown learner name abbreviation in config: {learner_name_abbr}. " + f"Available learners are: {', '.join(LEARNER_REGISTRY.keys())}" + ) + + instantiator = LEARNER_REGISTRY[learner_name_abbr] + learner = instantiator(params) + + return (learner_name_abbr, learner) From faeb75e459862934a71689ee0e2e96d7871b5f5c Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 09:34:36 +0200 Subject: [PATCH 029/142] update plr ate simulation --- doc/plm/plr.qmd | 8 ++-- monte-cover/src/montecover/plm/plr_ate.py | 44 +++++----------------- scripts/plm/plr_ate_config.yml | 46 ++++++++++++++++------- 3 files changed, 47 insertions(+), 51 deletions(-) diff --git a/doc/plm/plr.qmd b/doc/plm/plr.qmd index 0c75a05..94cc46d 100644 --- a/doc/plm/plr.qmd +++ b/doc/plm/plr.qmd @@ -60,7 +60,7 @@ display_columns_coverage = ["Learner g", "Learner m", "Bias", "CI Length", "Cove generate_and_show_styled_table( main_df=df_coverage, - filters={"level": 0.95, "score": "partialling out"}, + filters={"level": 0.95, "Score": "partialling out"}, display_cols=display_columns_coverage, n_rep=n_rep_coverage, level_col="level", @@ -74,7 +74,7 @@ generate_and_show_styled_table( generate_and_show_styled_table( main_df=df_coverage, - filters={"level": 0.9, "score": "partialling out"}, + filters={"level": 0.9, "Score": "partialling out"}, display_cols=display_columns_coverage, n_rep=n_rep_coverage, level_col="level", @@ -92,7 +92,7 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t generate_and_show_styled_table( main_df=df_coverage, - filters={"level": 0.95, "score": "IV-type"}, + filters={"level": 0.95, "Score": "IV-type"}, display_cols=display_columns_coverage, n_rep=n_rep_coverage, level_col="level", @@ -105,7 +105,7 @@ generate_and_show_styled_table( generate_and_show_styled_table( main_df=df_coverage, - filters={"level": 0.9, "score": "IV-type"}, + filters={"level": 0.9, "Score": "IV-type"}, display_cols=display_columns_coverage, n_rep=n_rep_coverage, level_col="level", diff --git a/monte-cover/src/montecover/plm/plr_ate.py b/monte-cover/src/montecover/plm/plr_ate.py index cfd9630..358aaf1 100644 --- a/monte-cover/src/montecover/plm/plr_ate.py +++ b/monte-cover/src/montecover/plm/plr_ate.py @@ -2,11 +2,9 @@ import doubleml as dml from doubleml.datasets import make_plr_CCDDHNR2018 -from lightgbm import LGBMRegressor -from sklearn.ensemble import RandomForestRegressor -from sklearn.linear_model import LassoCV from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config class PLRATECoverageSimulation(BaseSimulation): @@ -32,33 +30,12 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert ( - "learners" in self.dml_parameters - ), "No learners specified in the config file" - for learner in self.dml_parameters["learners"]: - assert "ml_g" in learner, "No ml_g specified in the config file" - assert "ml_m" in learner, "No ml_m specified in the config file" - - # Convert ml_g strings to actual objects - learner["ml_g"] = self._convert_ml_string_to_object(learner["ml_g"][0]) - learner["ml_m"] = self._convert_ml_string_to_object(learner["ml_m"][0]) - - def _convert_ml_string_to_object(self, ml_string): - """Convert a string to a machine learning object.""" - if ml_string == "Lasso": - learner = LassoCV() - elif ml_string == "Random Forest": - learner = RandomForestRegressor( - n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=20 - ) - elif ml_string == "LGBM": - learner = LGBMRegressor( - n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1 - ) - else: - raise ValueError(f"Unknown learner type: {ml_string}") + assert "learners" in self.dml_parameters, "No learners specified in the config file" - return (ml_string, learner) + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for key in required_learners: + assert key in learner, f"No {key} specified in the config file" def _calculate_oracle_values(self): """Calculate oracle values for the simulation.""" @@ -70,8 +47,9 @@ def _calculate_oracle_values(self): def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: """Run a single repetition with the given parameters.""" # Extract parameters - learner_g_name, ml_g = dml_params["learners"]["ml_g"] - learner_m_name, ml_m = dml_params["learners"]["ml_m"] + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) score = dml_params["score"] # Model @@ -127,9 +105,7 @@ def summarize_results(self): # Aggregate results (possibly multiple result dfs) result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = ( - result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() - ) + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() self.logger.debug(f"Summarized {result_name} results") return result_summary diff --git a/scripts/plm/plr_ate_config.yml b/scripts/plm/plr_ate_config.yml index f32bb8d..9d4a1ef 100644 --- a/scripts/plm/plr_ate_config.yml +++ b/scripts/plm/plr_ate_config.yml @@ -11,21 +11,41 @@ dgp_parameters: n_obs: [500] # Sample size dim_x: [20] # Number of covariates +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + rf: &rf + name: "RF Regr." + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 20 + + lgbm: &lgbm + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + dml_parameters: - # ML methods for ml_g and ml_m learners: - - ml_g: ["Lasso"] - ml_m: ["Lasso"] - - ml_g: ["Random Forest"] - ml_m: ["Random Forest"] - - ml_g: ["Lasso"] - ml_m: ["Random Forest"] - - ml_g: ["Random Forest"] - ml_m: ["Lasso"] - - ml_g: ["LGBM"] - ml_m: ["LGBM"] - - ml_g: ["LGBM"] - ml_m: ["Lasso"] + - ml_g: *lasso + ml_m: *lasso + - ml_g: *rf + ml_m: *rf + - ml_g: *lasso + ml_m: *rf + - ml_g: *rf + ml_m: *lasso + - ml_g: *lgbm + ml_m: *lgbm + - ml_g: *lgbm + ml_m: *lasso + - ml_g: *lasso + ml_m: *lgbm score: ["partialling out", "IV-type"] From 595a4d3deb73000cd43d38c942c073def580b237 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 09:39:57 +0200 Subject: [PATCH 030/142] update pliv late simulation --- monte-cover/src/montecover/plm/pliv_late.py | 40 +++---------- monte-cover/src/montecover/plm/plr_ate.py | 4 +- scripts/plm/pliv_late_config.yml | 63 +++++++++++++-------- 3 files changed, 48 insertions(+), 59 deletions(-) diff --git a/monte-cover/src/montecover/plm/pliv_late.py b/monte-cover/src/montecover/plm/pliv_late.py index c1e8f9e..862772a 100644 --- a/monte-cover/src/montecover/plm/pliv_late.py +++ b/monte-cover/src/montecover/plm/pliv_late.py @@ -2,11 +2,9 @@ import doubleml as dml from doubleml.datasets import make_pliv_CHS2015 -from lightgbm import LGBMRegressor -from sklearn.ensemble import RandomForestRegressor -from sklearn.linear_model import LassoCV from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config class PLIVLATECoverageSimulation(BaseSimulation): @@ -32,35 +30,13 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - assert ( - "learners" in self.dml_parameters - ), "No learners specified in the config file" + assert "learners" in self.dml_parameters, "No learners specified in the config file" required_learners = ["ml_g", "ml_m", "ml_r"] for learner in self.dml_parameters["learners"]: for ml in required_learners: assert ml in learner, f"No {ml} specified in the config file" - # Convert ml strings to actual objects - learner[ml] = self._convert_ml_string_to_object(learner[ml][0]) - - def _convert_ml_string_to_object(self, ml_string): - """Convert a string to a machine learning object.""" - if ml_string == "Lasso": - learner = LassoCV() - elif ml_string == "Random Forest": - learner = RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ) - elif ml_string == "LGBM": - learner = LGBMRegressor( - n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1 - ) - else: - raise ValueError(f"Unknown learner type: {ml_string}") - - return (ml_string, learner) - def _calculate_oracle_values(self): """Calculate oracle values for the simulation.""" self.logger.info("Calculating oracle values") @@ -70,10 +46,12 @@ def _calculate_oracle_values(self): def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: """Run a single repetition with the given parameters.""" + # Extract parameters - learner_g_name, ml_g = dml_params["learners"]["ml_g"] - learner_m_name, ml_m = dml_params["learners"]["ml_m"] - learner_r_name, ml_r = dml_params["learners"]["ml_r"] + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + learner_r_name, ml_r = create_learner_from_config(learner_config["ml_r"]) score = dml_params["score"] # Model @@ -131,9 +109,7 @@ def summarize_results(self): # Aggregate results (possibly multiple result dfs) result_summary = dict() for result_name, result_df in self.results.items(): - result_summary[result_name] = ( - result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() - ) + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() self.logger.debug(f"Summarized {result_name} results") return result_summary diff --git a/monte-cover/src/montecover/plm/plr_ate.py b/monte-cover/src/montecover/plm/plr_ate.py index 358aaf1..cdd3376 100644 --- a/monte-cover/src/montecover/plm/plr_ate.py +++ b/monte-cover/src/montecover/plm/plr_ate.py @@ -34,8 +34,8 @@ def _process_config_parameters(self): required_learners = ["ml_g", "ml_m"] for learner in self.dml_parameters["learners"]: - for key in required_learners: - assert key in learner, f"No {key} specified in the config file" + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" def _calculate_oracle_values(self): """Calculate oracle values for the simulation.""" diff --git a/scripts/plm/pliv_late_config.yml b/scripts/plm/pliv_late_config.yml index 40df7c2..937851a 100644 --- a/scripts/plm/pliv_late_config.yml +++ b/scripts/plm/pliv_late_config.yml @@ -1,7 +1,7 @@ # Simulation parameters for PLR ATE Coverage simulation_parameters: - repetitions: 1000 + repetitions: 10 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 @@ -12,33 +12,46 @@ dgp_parameters: dim_x: [20] # Number of covariates dim_z: [1] # Number of instruments +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + rf: &rf + name: "RF Regr." + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 20 + dml_parameters: # ML methods for ml_g and ml_m learners: - - ml_g: ["Lasso"] - ml_m: ["Lasso"] - ml_r: ["Lasso"] - - ml_g: ["Random Forest"] - ml_m: ["Random Forest"] - ml_r: ["Random Forest"] - - ml_g: ["Lasso"] - ml_m: ["Random Forest"] - ml_r: ["Random Forest"] - - ml_g: ["Random Forest"] - ml_m: ["Lasso"] - ml_r: ["Random Forest"] - - ml_g: ["Random Forest"] - ml_m: ["Random Forest"] - ml_r: ["Lasso"] - - ml_g: ["Lasso"] - ml_m: ["Lasso"] - ml_r: ["Random Forest"] - - ml_g: ["Random Forest"] - ml_m: ["Lasso"] - ml_r: ["Lasso"] - - ml_g: ["Lasso"] - ml_m: ["Random Forest"] - ml_r: ["Lasso"] + - ml_g: *lasso + ml_m: *lasso + ml_r: *lasso + - ml_g: *rf + ml_m: *rf + ml_r: *rf + - ml_g: *lasso + ml_m: *rf + ml_r: *rf + - ml_g: *rf + ml_m: *lasso + ml_r: *rf + - ml_g: *rf + ml_m: *rf + ml_r: *lasso + - ml_g: *lasso + ml_m: *lasso + ml_r: *rf + - ml_g: *rf + ml_m: *lasso + ml_r: *lasso + - ml_g: *lasso + ml_m: *rf + ml_r: *lasso score: ["partialling out", "IV-type"] From 1bc680655d82a6a8edb5a44b56b83da7661b14c6 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 09:40:19 +0200 Subject: [PATCH 031/142] update pliv late config --- scripts/plm/pliv_late_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/plm/pliv_late_config.yml b/scripts/plm/pliv_late_config.yml index 937851a..6da5fb0 100644 --- a/scripts/plm/pliv_late_config.yml +++ b/scripts/plm/pliv_late_config.yml @@ -1,7 +1,7 @@ # Simulation parameters for PLR ATE Coverage simulation_parameters: - repetitions: 10 + repetitions: 1000 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 From 7c8757cf1f4db043e91c2bf1fcb344a5aef4ec45 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 09:58:21 +0200 Subject: [PATCH 032/142] update plr gate simulation class --- monte-cover/src/montecover/plm/plr_gate.py | 32 ++++----------- scripts/plm/plr_gate_config.yml | 46 ++++++++++++++++------ 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/monte-cover/src/montecover/plm/plr_gate.py b/monte-cover/src/montecover/plm/plr_gate.py index 2f2bfd5..b46ec67 100644 --- a/monte-cover/src/montecover/plm/plr_gate.py +++ b/monte-cover/src/montecover/plm/plr_gate.py @@ -4,11 +4,9 @@ import numpy as np import pandas as pd from doubleml.datasets import make_heterogeneous_data -from lightgbm import LGBMRegressor -from sklearn.ensemble import RandomForestRegressor -from sklearn.linear_model import LassoCV from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config class PLRGATECoverageSimulation(BaseSimulation): @@ -35,26 +33,11 @@ def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] for learner in self.dml_parameters["learners"]: - assert "ml_g" in learner, "No ml_g specified in the config file" - assert "ml_m" in learner, "No ml_m specified in the config file" - - # Convert ml_g strings to actual objects - learner["ml_g"] = self._convert_ml_string_to_object(learner["ml_g"][0]) - learner["ml_m"] = self._convert_ml_string_to_object(learner["ml_m"][0]) - - def _convert_ml_string_to_object(self, ml_string): - """Convert a string to a machine learning object.""" - if ml_string == "Lasso": - learner = LassoCV() - elif ml_string == "Random Forest": - learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=2) - elif ml_string == "LGBM": - learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) - else: - raise ValueError(f"Unknown learner type: {ml_string}") - - return (ml_string, learner) + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" def _generate_groups(self, data): """Generate groups for the simulation.""" @@ -91,8 +74,9 @@ def _calculate_oracle_values(self): def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: """Run a single repetition with the given parameters.""" # Extract parameters - learner_g_name, ml_g = dml_params["learners"]["ml_g"] - learner_m_name, ml_m = dml_params["learners"]["ml_m"] + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) score = dml_params["score"] # Model diff --git a/scripts/plm/plr_gate_config.yml b/scripts/plm/plr_gate_config.yml index 9c23466..81eaee4 100644 --- a/scripts/plm/plr_gate_config.yml +++ b/scripts/plm/plr_gate_config.yml @@ -12,21 +12,41 @@ dgp_parameters: support_size: [5] # Number of non-zero coefficients n_x: [1] +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + rf: &rf + name: "RF Regr." + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 2 + + lgbm: &lgbm + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + dml_parameters: - # ML methods for ml_g and ml_m learners: - - ml_g: ["Lasso"] - ml_m: ["Lasso"] - - ml_g: ["Random Forest"] - ml_m: ["Random Forest"] - - ml_g: ["Lasso"] - ml_m: ["Random Forest"] - - ml_g: ["Random Forest"] - ml_m: ["Lasso"] - - ml_g: ["LGBM"] - ml_m: ["LGBM"] - - ml_g: ["LGBM"] - ml_m: ["Lasso"] + - ml_g: *lasso + ml_m: *lasso + - ml_g: *rf + ml_m: *rf + - ml_g: *lasso + ml_m: *rf + - ml_g: *rf + ml_m: *lasso + - ml_g: *lgbm + ml_m: *lgbm + - ml_g: *lgbm + ml_m: *lasso + - ml_g: *lasso + ml_m: *lgbm score: ["partialling out", "IV-type"] From 0a82959f1a26cfaffadd2ad78cf553fc4b2056d7 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 10:01:49 +0200 Subject: [PATCH 033/142] update plr cate class --- monte-cover/src/montecover/plm/plr_cate.py | 33 +++++----------- scripts/plm/plr_cate_config.yml | 45 +++++++++++++++------- 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/monte-cover/src/montecover/plm/plr_cate.py b/monte-cover/src/montecover/plm/plr_cate.py index 90ac0d3..71d47a3 100644 --- a/monte-cover/src/montecover/plm/plr_cate.py +++ b/monte-cover/src/montecover/plm/plr_cate.py @@ -5,11 +5,10 @@ import pandas as pd import patsy from doubleml.datasets import make_heterogeneous_data -from lightgbm import LGBMRegressor -from sklearn.ensemble import RandomForestRegressor -from sklearn.linear_model import LassoCV, LinearRegression +from sklearn.linear_model import LinearRegression from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config class PLRCATECoverageSimulation(BaseSimulation): @@ -36,26 +35,11 @@ def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] for learner in self.dml_parameters["learners"]: - assert "ml_g" in learner, "No ml_g specified in the config file" - assert "ml_m" in learner, "No ml_m specified in the config file" - - # Convert ml_g strings to actual objects - learner["ml_g"] = self._convert_ml_string_to_object(learner["ml_g"][0]) - learner["ml_m"] = self._convert_ml_string_to_object(learner["ml_m"][0]) - - def _convert_ml_string_to_object(self, ml_string): - """Convert a string to a machine learning object.""" - if ml_string == "Lasso": - learner = LassoCV() - elif ml_string == "Random Forest": - learner = RandomForestRegressor(n_estimators=200, max_features=10, max_depth=5, min_samples_leaf=2) - elif ml_string == "LGBM": - learner = LGBMRegressor(n_estimators=500, learning_rate=0.01, verbose=-1, n_jobs=1) - else: - raise ValueError(f"Unknown learner type: {ml_string}") - - return (ml_string, learner) + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" def _calculate_oracle_values(self): """Calculate oracle values for the simulation.""" @@ -87,8 +71,9 @@ def _calculate_oracle_values(self): def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: """Run a single repetition with the given parameters.""" # Extract parameters - learner_g_name, ml_g = dml_params["learners"]["ml_g"] - learner_m_name, ml_m = dml_params["learners"]["ml_m"] + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) score = dml_params["score"] # Model diff --git a/scripts/plm/plr_cate_config.yml b/scripts/plm/plr_cate_config.yml index 3280415..05194b1 100644 --- a/scripts/plm/plr_cate_config.yml +++ b/scripts/plm/plr_cate_config.yml @@ -12,22 +12,41 @@ dgp_parameters: support_size: [5] # Number of non-zero coefficients n_x: [1] +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + rf: &rf + name: "RF Regr." + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 2 + + lgbm: &lgbm + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 dml_parameters: - # ML methods for ml_g and ml_m learners: - - ml_g: ["Lasso"] - ml_m: ["Lasso"] - - ml_g: ["Random Forest"] - ml_m: ["Random Forest"] - - ml_g: ["Lasso"] - ml_m: ["Random Forest"] - - ml_g: ["Random Forest"] - ml_m: ["Lasso"] - - ml_g: ["LGBM"] - ml_m: ["LGBM"] - - ml_g: ["LGBM"] - ml_m: ["Lasso"] + - ml_g: *lasso + ml_m: *lasso + - ml_g: *rf + ml_m: *rf + - ml_g: *lasso + ml_m: *rf + - ml_g: *rf + ml_m: *lasso + - ml_g: *lgbm + ml_m: *lgbm + - ml_g: *lgbm + ml_m: *lasso + - ml_g: *lasso + ml_m: *lgbm score: ["partialling out", "IV-type"] From 572dc23b0b4c22e6ab53023024284ee22be2b030 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 10:46:37 +0200 Subject: [PATCH 034/142] fix typo --- monte-cover/src/montecover/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/monte-cover/src/montecover/base.py b/monte-cover/src/montecover/base.py index e24cf23..3edfca8 100644 --- a/monte-cover/src/montecover/base.py +++ b/monte-cover/src/montecover/base.py @@ -349,11 +349,11 @@ def _compute_coverage(thetas, oracle_thetas, confint, joint_confint=None): if joint_confint is not None: joint_lower_bound = joint_confint.iloc[:, 0] joint_upper_bound = joint_confint.iloc[:, 1] - joint_coverage_mark = (joint_lower_bound < oracle_thetas) & ( + joint_coverage_mask = (joint_lower_bound < oracle_thetas) & ( oracle_thetas < joint_upper_bound ) - result_dict["Uniform Coverage"] = np.all(joint_coverage_mark) + result_dict["Uniform Coverage"] = np.all(joint_coverage_mask) result_dict["Uniform CI Length"] = np.mean( joint_upper_bound - joint_lower_bound ) From a7469ecdf0c3aaed35c4be02660286345119f1f0 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 10:50:22 +0200 Subject: [PATCH 035/142] add plr sensitivity to monte cover --- monte-cover/src/montecover/plm/__init__.py | 2 + .../src/montecover/plm/plr_ate_sensitivity.py | 181 ++++++++++++++++++ 2 files changed, 183 insertions(+) create mode 100644 monte-cover/src/montecover/plm/plr_ate_sensitivity.py diff --git a/monte-cover/src/montecover/plm/__init__.py b/monte-cover/src/montecover/plm/__init__.py index 68d2291..167b36d 100644 --- a/monte-cover/src/montecover/plm/__init__.py +++ b/monte-cover/src/montecover/plm/__init__.py @@ -2,6 +2,7 @@ from montecover.plm.pliv_late import PLIVLATECoverageSimulation from montecover.plm.plr_ate import PLRATECoverageSimulation +from montecover.plm.plr_ate_sensitivity import PLRATESensitivityCoverageSimulation from montecover.plm.plr_cate import PLRCATECoverageSimulation from montecover.plm.plr_gate import PLRGATECoverageSimulation @@ -10,4 +11,5 @@ "PLIVLATECoverageSimulation", "PLRGATECoverageSimulation", "PLRCATECoverageSimulation", + "PLRATESensitivityCoverageSimulation", ] diff --git a/monte-cover/src/montecover/plm/plr_ate_sensitivity.py b/monte-cover/src/montecover/plm/plr_ate_sensitivity.py new file mode 100644 index 0000000..69a33f3 --- /dev/null +++ b/monte-cover/src/montecover/plm/plr_ate_sensitivity.py @@ -0,0 +1,181 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.datasets import make_confounded_plr_data + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class PLRATESensitivityCoverageSimulation(BaseSimulation): + """Simulation class for sensitivity properties of DoubleMLPLR for ATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + # hardcoded parameters for omitted confounders + cf_y = 0.1 + cf_d = 0.1 + + np.random.seed(42) + dgp_dict = make_confounded_plr_data(n_obs=int(1e6), cf_y=cf_y, cf_d=cf_d, theta=self.dgp_parameters["theta"]) + oracle_dict = dgp_dict["oracle_values"] + cf_y_test = np.mean(np.square(oracle_dict["g_long"] - oracle_dict["g_short"])) / np.mean( + np.square(dgp_dict["y"] - oracle_dict["g_short"]) + ) + self.logger.info(f"Input cf_y:{cf_y} \nCalculated cf_y: {round(cf_y_test, 5)}") + + rr_long = (dgp_dict["d"] - oracle_dict["m_long"]) / np.mean(np.square(dgp_dict["d"] - oracle_dict["m_long"])) + rr_short = (dgp_dict["d"] - oracle_dict["m_short"]) / np.mean(np.square(dgp_dict["d"] - oracle_dict["m_short"])) + C2_D = (np.mean(np.square(rr_long)) - np.mean(np.square(rr_short))) / np.mean(np.square(rr_short)) + cf_d_test = C2_D / (1 + C2_D) + self.logger.info(f"Input cf_d:{cf_d}\nCalculated cf_d: {round(cf_d_test, 5)}") + + # compute the value for rho + rho = np.corrcoef((oracle_dict["g_long"] - oracle_dict["g_short"]), (rr_long - rr_short))[0, 1] + self.logger.info(f"Correlation rho: {round(rho, 5)}") + + self.oracle_values = { + "theta": self.dgp_parameters["theta"], + "cf_y": cf_y, + "cf_d": cf_d, + "rho": rho, + } + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + score = dml_params["score"] + theta = self.oracle_values["theta"][0] + + # Model + dml_model = dml.DoubleMLPLR( + obj_dml_data=dml_data, + ml_l=ml_g, + ml_m=ml_m, + ml_g=ml_g if score == "IV-type" else None, + score=score, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=theta, + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # sensitvity analysis + dml_model.sensitivity_analysis( + cf_y=self.oracle_values["cf_y"], + cf_d=self.oracle_values["cf_d"], + rho=self.oracle_values["rho"], + level=level, + null_hypothesis=theta, + ) + sensitivity_results = { + "Coverage (Lower)": theta >= dml_model.sensitivity_params["ci"]["lower"][0], + "Coverage (Upper)": theta <= dml_model.sensitivity_params["ci"]["upper"][0], + "RV": dml_model.sensitivity_params["rv"][0], + "RVa": dml_model.sensitivity_params["rva"][0], + "Bias (Lower)": abs(theta - dml_model.sensitivity_params["theta"]["lower"][0]), + "Bias (Upper)": abs(theta - dml_model.sensitivity_params["theta"]["upper"][0]), + } + # add sensitivity results to the level result coverage + level_result["coverage"].update(sensitivity_results) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Score": score, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "Score", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + dgp_dict = make_confounded_plr_data( + n_obs=dgp_params["n_obs"], + cf_y=self.oracle_values["cf_y"], + cf_d=self.oracle_values["cf_d"], + theta=dgp_params["theta"], + ) + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + dml_data = dml.DoubleMLData(df, "y", "d") + return dml_data From f0850848aaa2374b476377aa0183f1de239fc8fb Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 10:50:56 +0200 Subject: [PATCH 036/142] update plr sensitivity scripts --- scripts/plm/plr_ate_sensitivity.py | 247 +-------------------- scripts/plm/plr_ate_sensitivity_config.yml | 53 +++++ scripts/plm/plr_ate_sensitivity_old.py | 240 ++++++++++++++++++++ 3 files changed, 303 insertions(+), 237 deletions(-) create mode 100644 scripts/plm/plr_ate_sensitivity_config.yml create mode 100644 scripts/plm/plr_ate_sensitivity_old.py diff --git a/scripts/plm/plr_ate_sensitivity.py b/scripts/plm/plr_ate_sensitivity.py index 7557435..2f53b98 100644 --- a/scripts/plm/plr_ate_sensitivity.py +++ b/scripts/plm/plr_ate_sensitivity.py @@ -1,240 +1,13 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys +from montecover.plm import PLRATESensitivityCoverageSimulation -from sklearn.ensemble import RandomForestRegressor -from lightgbm import LGBMRegressor - -import doubleml as dml -from doubleml.datasets import make_confounded_plr_data - - -# Number of repetitions -n_rep = 500 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 1000 -cf_y = 0.1 -cf_d = 0.1 -theta = 5.0 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) - -# test inputs -dgp_dict = make_confounded_plr_data(n_obs=int(1e6), cf_y=cf_y, cf_d=cf_d) -oracle_dict = dgp_dict["oracle_values"] - -cf_y_test = np.mean( - np.square(oracle_dict["g_long"] - oracle_dict["g_short"]) -) / np.mean(np.square(dgp_dict["y"] - oracle_dict["g_short"])) -print(f"Input cf_y:{cf_y} \nCalculated cf_y: {round(cf_y_test, 5)}") - -rr_long = (dgp_dict["d"] - oracle_dict["m_long"]) / np.mean( - np.square(dgp_dict["d"] - oracle_dict["m_long"]) -) -rr_short = (dgp_dict["d"] - oracle_dict["m_short"]) / np.mean( - np.square(dgp_dict["d"] - oracle_dict["m_short"]) -) -C2_D = (np.mean(np.square(rr_long)) - np.mean(np.square(rr_short))) / np.mean( - np.square(rr_short) -) -cf_d_test = C2_D / (1 + C2_D) -print(f"Input cf_d:{cf_d}\nCalculated cf_d: {round(cf_d_test, 5)}") - -# compute the value for rho -rho = np.corrcoef( - (oracle_dict["g_long"] - oracle_dict["g_short"]), (rr_long - rr_short) -)[0, 1] -print(f"Correlation rho: {round(rho, 5)}") - -datasets = [] -for i in range(n_rep): - data = make_confounded_plr_data(n_obs=n_obs, cf_y=cf_y, cf_d=cf_d, theta=theta) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "score": ["partialling out", "IV-type"], - "learner_g": [ - ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.05, min_child_samples=5, verbose=-1 - ), - ), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "learner_m": [ - ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.05, min_child_samples=2, verbose=-1 - ), - ), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep + 1}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - dgp_dict = datasets[i_rep] - x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] - df = pd.DataFrame( - np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), - columns=x_cols + ["y", "d"], - ) - obj_dml_data = dml.DoubleMLData(df, "y", "d") - - for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - if score == "IV-type": - # Set machine learning methods for g & m - dml_plr = dml.DoubleMLPLR( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - ml_g=ml_g, - score="IV-type", - ) - else: - # Set machine learning methods for g & m - dml_plr = dml.DoubleMLPLR( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - score=score, - ) - dml_plr.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - - estimate = dml_plr.coef[0] - confint = dml_plr.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & ( - theta < confint.iloc[0, 1] - ) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - # test sensitivity parameters - dml_plr.sensitivity_analysis( - cf_y=cf_y, - cf_d=cf_d, - rho=rho, - level=level, - null_hypothesis=theta, - ) - cover_lower = theta >= dml_plr.sensitivity_params["ci"]["lower"] - cover_upper = theta <= dml_plr.sensitivity_params["ci"]["upper"] - rv = dml_plr.sensitivity_params["rv"] - rva = dml_plr.sensitivity_params["rva"] - bias_lower = abs( - theta - dml_plr.sensitivity_params["theta"]["lower"] - ) - bias_upper = abs( - theta - dml_plr.sensitivity_params["theta"]["upper"] - ) - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "score", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "plr_ate_sensitivity.py" -path = "results/plm/plr_ate_sensitivity" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } +# Create and run simulation with config file +sim = PLRATESensitivityCoverageSimulation( + config_file="scripts/plm/plr_ate_sensitivity_config.yml", + log_level="INFO", + log_file="logs/plm/plr_ate_sensitivity_sim.log", ) -print(metadata) +sim.run_simulation() +sim.save_results(output_path="results/plm/", file_prefix="plr_ate_sensitivity") -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) +# Save config file for reproducibility +sim.save_config("results/plm/plr_ate_sensitivity_config.yml") diff --git a/scripts/plm/plr_ate_sensitivity_config.yml b/scripts/plm/plr_ate_sensitivity_config.yml new file mode 100644 index 0000000..cebfe1a --- /dev/null +++ b/scripts/plm/plr_ate_sensitivity_config.yml @@ -0,0 +1,53 @@ +# Simulation parameters for PLR ATE Sensitivity Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [0.5] # Treatment effect + n_obs: [1000] # Sample size + +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + rf: &rf + name: "RF Regr." + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 20 + + lgbm: &lgbm + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.05 + min_child_samples: 5 + +dml_parameters: + learners: + - ml_g: *lasso + ml_m: *lasso + - ml_g: *rf + ml_m: *rf + - ml_g: *lasso + ml_m: *rf + - ml_g: *rf + ml_m: *lasso + - ml_g: *lgbm + ml_m: *lgbm + - ml_g: *lgbm + ml_m: *lasso + - ml_g: *lasso + ml_m: *lgbm + + score: ["partialling out", "IV-type"] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/plm/plr_ate_sensitivity_old.py b/scripts/plm/plr_ate_sensitivity_old.py new file mode 100644 index 0000000..7557435 --- /dev/null +++ b/scripts/plm/plr_ate_sensitivity_old.py @@ -0,0 +1,240 @@ +import numpy as np +import pandas as pd +from datetime import datetime +import time +import sys + +from sklearn.ensemble import RandomForestRegressor +from lightgbm import LGBMRegressor + +import doubleml as dml +from doubleml.datasets import make_confounded_plr_data + + +# Number of repetitions +n_rep = 500 +max_runtime = 5.5 * 3600 # 5.5 hours in seconds + +# DGP pars +n_obs = 1000 +cf_y = 0.1 +cf_d = 0.1 +theta = 5.0 + +# to get the best possible comparison between different learners (and settings) we first simulate all datasets +np.random.seed(42) + +# test inputs +dgp_dict = make_confounded_plr_data(n_obs=int(1e6), cf_y=cf_y, cf_d=cf_d) +oracle_dict = dgp_dict["oracle_values"] + +cf_y_test = np.mean( + np.square(oracle_dict["g_long"] - oracle_dict["g_short"]) +) / np.mean(np.square(dgp_dict["y"] - oracle_dict["g_short"])) +print(f"Input cf_y:{cf_y} \nCalculated cf_y: {round(cf_y_test, 5)}") + +rr_long = (dgp_dict["d"] - oracle_dict["m_long"]) / np.mean( + np.square(dgp_dict["d"] - oracle_dict["m_long"]) +) +rr_short = (dgp_dict["d"] - oracle_dict["m_short"]) / np.mean( + np.square(dgp_dict["d"] - oracle_dict["m_short"]) +) +C2_D = (np.mean(np.square(rr_long)) - np.mean(np.square(rr_short))) / np.mean( + np.square(rr_short) +) +cf_d_test = C2_D / (1 + C2_D) +print(f"Input cf_d:{cf_d}\nCalculated cf_d: {round(cf_d_test, 5)}") + +# compute the value for rho +rho = np.corrcoef( + (oracle_dict["g_long"] - oracle_dict["g_short"]), (rr_long - rr_short) +)[0, 1] +print(f"Correlation rho: {round(rho, 5)}") + +datasets = [] +for i in range(n_rep): + data = make_confounded_plr_data(n_obs=n_obs, cf_y=cf_y, cf_d=cf_d, theta=theta) + datasets.append(data) + +# set up hyperparameters +hyperparam_dict = { + "score": ["partialling out", "IV-type"], + "learner_g": [ + ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.05, min_child_samples=5, verbose=-1 + ), + ), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "learner_m": [ + ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.05, min_child_samples=2, verbose=-1 + ), + ), + ( + "Random Forest", + RandomForestRegressor( + n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 + ), + ), + ], + "level": [0.95, 0.90], +} + +# set up the results dataframe +df_results_detailed = pd.DataFrame() + +# start simulation +np.random.seed(42) +start_time = time.time() + +for i_rep in range(n_rep): + print(f"Repetition: {i_rep + 1}/{n_rep}", end="\r") + + # Check the elapsed time + elapsed_time = time.time() - start_time + if elapsed_time > max_runtime: + print("Maximum runtime exceeded. Stopping the simulation.") + break + + # define the DoubleML data object + dgp_dict = datasets[i_rep] + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + obj_dml_data = dml.DoubleMLData(df, "y", "d") + + for score_idx, score in enumerate(hyperparam_dict["score"]): + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): + if score == "IV-type": + # Set machine learning methods for g & m + dml_plr = dml.DoubleMLPLR( + obj_dml_data=obj_dml_data, + ml_l=ml_g, + ml_m=ml_m, + ml_g=ml_g, + score="IV-type", + ) + else: + # Set machine learning methods for g & m + dml_plr = dml.DoubleMLPLR( + obj_dml_data=obj_dml_data, + ml_l=ml_g, + ml_m=ml_m, + score=score, + ) + dml_plr.fit(n_jobs_cv=5) + + for level_idx, level in enumerate(hyperparam_dict["level"]): + + estimate = dml_plr.coef[0] + confint = dml_plr.confint(level=level) + coverage = (confint.iloc[0, 0] < theta) & ( + theta < confint.iloc[0, 1] + ) + ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] + + # test sensitivity parameters + dml_plr.sensitivity_analysis( + cf_y=cf_y, + cf_d=cf_d, + rho=rho, + level=level, + null_hypothesis=theta, + ) + cover_lower = theta >= dml_plr.sensitivity_params["ci"]["lower"] + cover_upper = theta <= dml_plr.sensitivity_params["ci"]["upper"] + rv = dml_plr.sensitivity_params["rv"] + rva = dml_plr.sensitivity_params["rva"] + bias_lower = abs( + theta - dml_plr.sensitivity_params["theta"]["lower"] + ) + bias_upper = abs( + theta - dml_plr.sensitivity_params["theta"]["upper"] + ) + + df_results_detailed = pd.concat( + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] + - confint.iloc[0, 0], + "Bias": abs(estimate - theta), + "Coverage (Lower)": cover_lower.astype(int), + "Coverage (Upper)": cover_upper.astype(int), + "RV": rv, + "RVa": rva, + "Bias (Lower)": bias_lower, + "Bias (Upper)": bias_upper, + "score": score, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "score", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + ) + .reset_index() +) +print(df_results) + +end_time = time.time() +total_runtime = end_time - start_time + +# save results +script_name = "plr_ate_sensitivity.py" +path = "results/plm/plr_ate_sensitivity" + +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) +print(metadata) + +df_results.to_csv(f"{path}.csv", index=False) +metadata.to_csv(f"{path}_metadata.csv", index=False) From f9696e35ad580df6d6c80ebd7f4a812f8e352fc1 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 10:54:02 +0200 Subject: [PATCH 037/142] update plr sensitivity qmd and config --- doc/plm/plr.qmd | 10 +++++----- scripts/plm/plr_ate_sensitivity_config.yml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/plm/plr.qmd b/doc/plm/plr.qmd index 94cc46d..99f1df5 100644 --- a/doc/plm/plr.qmd +++ b/doc/plm/plr.qmd @@ -135,7 +135,7 @@ print(metadata_df_sens.T.to_string(header=False)) #| echo: false # set up data and rename columns -df_sensitivity = pd.read_csv("../../results/plm/plr_ate_sensitivity.csv", index_col=None) +df_sensitivity = pd.read_csv("../../results/plm/plr_ate_sensitivity_coverage.csv", index_col=None) if "repetition" in df_sensitivity.columns and df_sensitivity["repetition"].nunique() == 1: n_rep_sensitivity = df_sensitivity["repetition"].unique()[0] @@ -156,7 +156,7 @@ display_columns_sensitivity = [ generate_and_show_styled_table( main_df=df_sensitivity, - filters={"level": 0.95, "score": "partialling out"}, + filters={"level": 0.95, "Score": "partialling out"}, display_cols=display_columns_sensitivity, n_rep=n_rep_sensitivity, level_col="level", @@ -170,7 +170,7 @@ generate_and_show_styled_table( #| generate_and_show_styled_table( main_df=df_sensitivity, - filters={"level": 0.9, "score": "partialling out"}, + filters={"level": 0.9, "Score": "partialling out"}, display_cols=display_columns_sensitivity, n_rep=n_rep_sensitivity, level_col="level", @@ -188,7 +188,7 @@ For the IV-type score, the learners `ml_l` and `ml_g` are both set to the same t generate_and_show_styled_table( main_df=df_sensitivity, - filters={"level": 0.95, "score": "IV-type"}, + filters={"level": 0.95, "Score": "IV-type"}, display_cols=display_columns_sensitivity, n_rep=n_rep_sensitivity, level_col="level", @@ -201,7 +201,7 @@ generate_and_show_styled_table( generate_and_show_styled_table( main_df=df_sensitivity, - filters={"level": 0.9, "score": "IV-type"}, + filters={"level": 0.9, "Score": "IV-type"}, display_cols=display_columns_sensitivity, n_rep=n_rep_sensitivity, level_col="level", diff --git a/scripts/plm/plr_ate_sensitivity_config.yml b/scripts/plm/plr_ate_sensitivity_config.yml index cebfe1a..1d348f3 100644 --- a/scripts/plm/plr_ate_sensitivity_config.yml +++ b/scripts/plm/plr_ate_sensitivity_config.yml @@ -21,7 +21,7 @@ learner_definitions: n_estimators: 200 max_features: 10 max_depth: 5 - min_samples_leaf: 20 + min_samples_leaf: 2 lgbm: &lgbm name: "LGBM Regr." From 052a9cbd76c1e639dbe6700cd83c741f382cc13e Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 10:55:28 +0200 Subject: [PATCH 038/142] remove old sensitivity results --- results/plm/plr_ate_sensitivity.csv | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 results/plm/plr_ate_sensitivity.csv diff --git a/results/plm/plr_ate_sensitivity.csv b/results/plm/plr_ate_sensitivity.csv deleted file mode 100644 index a49f572..0000000 --- a/results/plm/plr_ate_sensitivity.csv +++ /dev/null @@ -1,17 +0,0 @@ -Learner g,Learner m,score,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition -LGBM,LGBM,IV-type,0.9,0.49,1.2836841849471865,0.642852034975727,1.0,0.998,0.0883267598773138,0.025200860015212666,1.3451446703513257,0.27137365708627864,500 -LGBM,LGBM,IV-type,0.95,0.65,1.529604050351386,0.642852034975727,1.0,1.0,0.0883267598773138,0.013790413915027114,1.3451446703513257,0.27137365708627864,500 -LGBM,LGBM,partialling out,0.9,0.052,1.0555526522517718,0.9216896766797483,1.0,0.878,0.12290629723561408,0.0667859903596657,1.6463724503661545,0.2830593598175856,500 -LGBM,LGBM,partialling out,0.95,0.114,1.2577685626857555,0.9216896766797483,1.0,0.962,0.12290629723561408,0.05210975377693211,1.6463724503661545,0.2830593598175856,500 -LGBM,Random Forest,IV-type,0.9,0.078,1.1807040473318011,0.9305252037122888,1.0,0.948,0.11737861374914874,0.05859551246754723,1.6961397857763842,0.26681869054967733,500 -LGBM,Random Forest,IV-type,0.95,0.168,1.4068956478881136,0.9305252037122888,1.0,0.992,0.11737861374914874,0.04349989594031229,1.6961397857763842,0.26681869054967733,500 -LGBM,Random Forest,partialling out,0.9,0.084,1.242402642005516,0.994677943081587,1.0,0.926,0.11839290118360876,0.06017561051060185,1.8096093868200793,0.29091837395052383,500 -LGBM,Random Forest,partialling out,0.95,0.154,1.4804140579616833,0.994677943081587,1.0,0.978,0.11839290118360876,0.04521577389281383,1.8096093868200793,0.29091837395052383,500 -Random Forest,LGBM,IV-type,0.9,0.576,1.9010430543765071,0.8897616306557555,1.0,0.998,0.07213108029374843,0.01823318209099959,2.122769568430025,0.4620602752705221,500 -Random Forest,LGBM,IV-type,0.95,0.75,2.265232515882643,0.8897616306557555,1.0,1.0,0.07213108029374843,0.008535492348285852,2.122769568430025,0.4620602752705221,500 -Random Forest,LGBM,partialling out,0.9,0.002,1.5135381055089399,1.5758793346465376,1.0,0.828,0.12842168619163824,0.08071664417065783,2.7774438145541147,0.40467501778184206,500 -Random Forest,LGBM,partialling out,0.95,0.008,1.803491889746142,1.5758793346465376,1.0,0.942,0.12842168619163824,0.06722056399959782,2.7774438145541147,0.40467501778184206,500 -Random Forest,Random Forest,IV-type,0.9,0.01,1.7160774922768312,1.6169678600750872,1.0,0.896,0.11938462955718954,0.07029811586923293,2.94609158848587,0.39721850987868246,500 -Random Forest,Random Forest,IV-type,0.95,0.038,2.0448324546519867,1.6169678600750872,1.0,0.972,0.11938462955718954,0.056429904585180324,2.94609158848587,0.39721850987868246,500 -Random Forest,Random Forest,partialling out,0.9,0.0,1.738561053384026,1.7359527505574848,1.0,0.806,0.1280019015187021,0.07819909367227408,3.0609083438237703,0.46246741584476964,500 -Random Forest,Random Forest,partialling out,0.95,0.016,2.0716232701338355,1.7359527505574848,1.0,0.94,0.1280019015187021,0.06411936004235119,3.0609083438237703,0.46246741584476964,500 From 3c3a78c53bc7dfb38c3134ea47cc47b5c240163b Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 11:00:18 +0200 Subject: [PATCH 039/142] update monte-cover to doubleml 0.10.0 --- monte-cover/pyproject.toml | 2 +- monte-cover/uv.lock | 1027 ++++++++++++++++++------------------ 2 files changed, 522 insertions(+), 507 deletions(-) diff --git a/monte-cover/pyproject.toml b/monte-cover/pyproject.toml index 9869e3e..547bf24 100644 --- a/monte-cover/pyproject.toml +++ b/monte-cover/pyproject.toml @@ -9,7 +9,7 @@ authors = [ requires-python = ">=3.12" dependencies = [ "black>=25.1.0", - "doubleml[rdd]>=0.9.3", + "doubleml[rdd]>=0.10.0", "ipykernel>=6.29.5", "itables>=2.2.5", "joblib>=1.4.2", diff --git a/monte-cover/uv.lock b/monte-cover/uv.lock index 215c455..dd4c066 100644 --- a/monte-cover/uv.lock +++ b/monte-cover/uv.lock @@ -1,23 +1,23 @@ version = 1 -revision = 2 +revision = 1 requires-python = ">=3.12" [[package]] name = "appnope" version = "0.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170 } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321 }, ] [[package]] name = "asttokens" version = "3.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978 } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918 }, ] [[package]] @@ -31,17 +31,17 @@ dependencies = [ { name = "pathspec" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449, upload-time = "2025-01-29T04:15:40.373Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/49/26a7b0f3f35da4b5a65f081943b7bcd22d7002f5f0fb8098ec1ff21cb6ef/black-25.1.0.tar.gz", hash = "sha256:33496d5cd1222ad73391352b4ae8da15253c5de89b93a80b3e2c8d9a19ec2666", size = 649449 } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988, upload-time = "2025-01-29T05:37:16.707Z" }, - { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985, upload-time = "2025-01-29T05:37:18.273Z" }, - { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816, upload-time = "2025-01-29T04:18:33.823Z" }, - { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860, upload-time = "2025-01-29T04:19:12.944Z" }, - { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673, upload-time = "2025-01-29T05:37:20.574Z" }, - { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190, upload-time = "2025-01-29T05:37:22.106Z" }, - { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926, upload-time = "2025-01-29T04:18:58.564Z" }, - { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613, upload-time = "2025-01-29T04:19:27.63Z" }, - { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646, upload-time = "2025-01-29T04:15:38.082Z" }, + { url = "https://files.pythonhosted.org/packages/83/71/3fe4741df7adf015ad8dfa082dd36c94ca86bb21f25608eb247b4afb15b2/black-25.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b60580e829091e6f9238c848ea6750efed72140b91b048770b64e74fe04908b", size = 1650988 }, + { url = "https://files.pythonhosted.org/packages/13/f3/89aac8a83d73937ccd39bbe8fc6ac8860c11cfa0af5b1c96d081facac844/black-25.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1e2978f6df243b155ef5fa7e558a43037c3079093ed5d10fd84c43900f2d8ecc", size = 1453985 }, + { url = "https://files.pythonhosted.org/packages/6f/22/b99efca33f1f3a1d2552c714b1e1b5ae92efac6c43e790ad539a163d1754/black-25.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b48735872ec535027d979e8dcb20bf4f70b5ac75a8ea99f127c106a7d7aba9f", size = 1783816 }, + { url = "https://files.pythonhosted.org/packages/18/7e/a27c3ad3822b6f2e0e00d63d58ff6299a99a5b3aee69fa77cd4b0076b261/black-25.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea0213189960bda9cf99be5b8c8ce66bb054af5e9e861249cd23471bd7b0b3ba", size = 1440860 }, + { url = "https://files.pythonhosted.org/packages/98/87/0edf98916640efa5d0696e1abb0a8357b52e69e82322628f25bf14d263d1/black-25.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f0b18a02996a836cc9c9c78e5babec10930862827b1b724ddfe98ccf2f2fe4f", size = 1650673 }, + { url = "https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3", size = 1453190 }, + { url = "https://files.pythonhosted.org/packages/e3/ee/adda3d46d4a9120772fae6de454c8495603c37c4c3b9c60f25b1ab6401fe/black-25.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:030b9759066a4ee5e5aca28c3c77f9c64789cdd4de8ac1df642c40b708be6171", size = 1782926 }, + { url = "https://files.pythonhosted.org/packages/cc/64/94eb5f45dcb997d2082f097a3944cfc7fe87e071907f677e80788a2d7b7a/black-25.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a22f402b410566e2d1c950708c77ebf5ebd5d0d88a6a2e87c86d9fb48afa0d18", size = 1442613 }, + { url = "https://files.pythonhosted.org/packages/09/71/54e999902aed72baf26bca0d50781b01838251a462612966e9fc4891eadd/black-25.1.0-py3-none-any.whl", hash = "sha256:95e8176dae143ba9097f351d174fdaf0ccd29efb414b362ae3fd72bf0f710717", size = 207646 }, ] [[package]] @@ -51,39 +51,39 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, ] [[package]] name = "cfgv" version = "3.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" }, + { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249 }, ] [[package]] @@ -93,18 +93,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] [[package]] @@ -114,9 +114,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210, upload-time = "2024-03-12T16:53:41.133Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/a8/fb783cb0abe2b5fded9f55e5703015cdf1c9c85b3669087c538dd15a6a86/comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e", size = 6210 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180, upload-time = "2024-03-12T16:53:39.226Z" }, + { url = "https://files.pythonhosted.org/packages/e6/75/49e5bfe642f71f272236b5b2d2691cf915a7283cc0ceda56357b61daa538/comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3", size = 7180 }, ] [[package]] @@ -126,87 +126,87 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753, upload-time = "2024-11-12T11:00:59.118Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494, upload-time = "2024-11-12T10:54:23.6Z" }, - { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444, upload-time = "2024-11-12T10:54:28.267Z" }, - { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628, upload-time = "2024-11-12T10:54:33.418Z" }, - { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271, upload-time = "2024-11-12T10:54:38.816Z" }, - { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906, upload-time = "2024-11-12T10:54:44.132Z" }, - { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622, upload-time = "2024-11-12T10:54:48.788Z" }, - { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699, upload-time = "2024-11-12T10:55:04.016Z" }, - { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395, upload-time = "2024-11-12T10:55:20.547Z" }, - { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354, upload-time = "2024-11-12T10:55:24.377Z" }, - { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971, upload-time = "2024-11-12T10:55:27.971Z" }, - { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548, upload-time = "2024-11-12T10:55:32.228Z" }, - { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576, upload-time = "2024-11-12T10:55:36.246Z" }, - { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635, upload-time = "2024-11-12T10:55:41.904Z" }, - { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925, upload-time = "2024-11-12T10:55:47.206Z" }, - { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000, upload-time = "2024-11-12T10:55:52.264Z" }, - { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689, upload-time = "2024-11-12T10:55:57.858Z" }, - { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413, upload-time = "2024-11-12T10:56:13.328Z" }, - { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530, upload-time = "2024-11-12T10:56:30.07Z" }, - { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315, upload-time = "2024-11-12T10:57:42.804Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987, upload-time = "2024-11-12T10:57:46.365Z" }, - { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001, upload-time = "2024-11-12T10:56:34.483Z" }, - { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553, upload-time = "2024-11-12T10:56:39.167Z" }, - { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386, upload-time = "2024-11-12T10:56:44.594Z" }, - { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806, upload-time = "2024-11-12T10:56:49.565Z" }, - { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108, upload-time = "2024-11-12T10:56:55.013Z" }, - { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291, upload-time = "2024-11-12T10:56:59.897Z" }, - { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752, upload-time = "2024-11-12T10:57:14.79Z" }, - { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403, upload-time = "2024-11-12T10:57:31.326Z" }, - { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117, upload-time = "2024-11-12T10:57:34.735Z" }, - { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668, upload-time = "2024-11-12T10:57:39.061Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/25/c2/fc7193cc5383637ff390a712e88e4ded0452c9fbcf84abe3de5ea3df1866/contourpy-1.3.1.tar.gz", hash = "sha256:dfd97abd83335045a913e3bcc4a09c0ceadbe66580cf573fe961f4a825efa699", size = 13465753 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/6b/175f60227d3e7f5f1549fcb374592be311293132207e451c3d7c654c25fb/contourpy-1.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0ffa84be8e0bd33410b17189f7164c3589c229ce5db85798076a3fa136d0e509", size = 271494 }, + { url = "https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc", size = 255444 }, + { url = "https://files.pythonhosted.org/packages/7f/b3/7859efce66eaca5c14ba7619791b084ed02d868d76b928ff56890d2d059d/contourpy-1.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade08d343436a94e633db932e7e8407fe7de8083967962b46bdfc1b0ced39454", size = 307628 }, + { url = "https://files.pythonhosted.org/packages/48/b2/011415f5e3f0a50b1e285a0bf78eb5d92a4df000553570f0851b6e309076/contourpy-1.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47734d7073fb4590b4a40122b35917cd77be5722d80683b249dac1de266aac80", size = 347271 }, + { url = "https://files.pythonhosted.org/packages/84/7d/ef19b1db0f45b151ac78c65127235239a8cf21a59d1ce8507ce03e89a30b/contourpy-1.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ba94a401342fc0f8b948e57d977557fbf4d515f03c67682dd5c6191cb2d16ec", size = 318906 }, + { url = "https://files.pythonhosted.org/packages/ba/99/6794142b90b853a9155316c8f470d2e4821fe6f086b03e372aca848227dd/contourpy-1.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efa874e87e4a647fd2e4f514d5e91c7d493697127beb95e77d2f7561f6905bd9", size = 323622 }, + { url = "https://files.pythonhosted.org/packages/3c/0f/37d2c84a900cd8eb54e105f4fa9aebd275e14e266736778bb5dccbf3bbbb/contourpy-1.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1bf98051f1045b15c87868dbaea84f92408337d4f81d0e449ee41920ea121d3b", size = 1266699 }, + { url = "https://files.pythonhosted.org/packages/3a/8a/deb5e11dc7d9cc8f0f9c8b29d4f062203f3af230ba83c30a6b161a6effc9/contourpy-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:61332c87493b00091423e747ea78200659dc09bdf7fd69edd5e98cef5d3e9a8d", size = 1326395 }, + { url = "https://files.pythonhosted.org/packages/1a/35/7e267ae7c13aaf12322ccc493531f1e7f2eb8fba2927b9d7a05ff615df7a/contourpy-1.3.1-cp312-cp312-win32.whl", hash = "sha256:e914a8cb05ce5c809dd0fe350cfbb4e881bde5e2a38dc04e3afe1b3e58bd158e", size = 175354 }, + { url = "https://files.pythonhosted.org/packages/a1/35/c2de8823211d07e8a79ab018ef03960716c5dff6f4d5bff5af87fd682992/contourpy-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:08d9d449a61cf53033612cb368f3a1b26cd7835d9b8cd326647efe43bca7568d", size = 220971 }, + { url = "https://files.pythonhosted.org/packages/9a/e7/de62050dce687c5e96f946a93546910bc67e483fe05324439e329ff36105/contourpy-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a761d9ccfc5e2ecd1bf05534eda382aa14c3e4f9205ba5b1684ecfe400716ef2", size = 271548 }, + { url = "https://files.pythonhosted.org/packages/78/4d/c2a09ae014ae984c6bdd29c11e74d3121b25eaa117eca0bb76340efd7e1c/contourpy-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:523a8ee12edfa36f6d2a49407f705a6ef4c5098de4f498619787e272de93f2d5", size = 255576 }, + { url = "https://files.pythonhosted.org/packages/ab/8a/915380ee96a5638bda80cd061ccb8e666bfdccea38d5741cb69e6dbd61fc/contourpy-1.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece6df05e2c41bd46776fbc712e0996f7c94e0d0543af1656956d150c4ca7c81", size = 306635 }, + { url = "https://files.pythonhosted.org/packages/29/5c/c83ce09375428298acd4e6582aeb68b1e0d1447f877fa993d9bf6cd3b0a0/contourpy-1.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:573abb30e0e05bf31ed067d2f82500ecfdaec15627a59d63ea2d95714790f5c2", size = 345925 }, + { url = "https://files.pythonhosted.org/packages/29/63/5b52f4a15e80c66c8078a641a3bfacd6e07106835682454647aca1afc852/contourpy-1.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9fa36448e6a3a1a9a2ba23c02012c43ed88905ec80163f2ffe2421c7192a5d7", size = 318000 }, + { url = "https://files.pythonhosted.org/packages/9a/e2/30ca086c692691129849198659bf0556d72a757fe2769eb9620a27169296/contourpy-1.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ea9924d28fc5586bf0b42d15f590b10c224117e74409dd7a0be3b62b74a501c", size = 322689 }, + { url = "https://files.pythonhosted.org/packages/6b/77/f37812ef700f1f185d348394debf33f22d531e714cf6a35d13d68a7003c7/contourpy-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b75aa69cb4d6f137b36f7eb2ace9280cfb60c55dc5f61c731fdf6f037f958a3", size = 1268413 }, + { url = "https://files.pythonhosted.org/packages/3f/6d/ce84e79cdd128542ebeb268f84abb4b093af78e7f8ec504676673d2675bc/contourpy-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:041b640d4ec01922083645a94bb3b2e777e6b626788f4095cf21abbe266413c1", size = 1326530 }, + { url = "https://files.pythonhosted.org/packages/72/22/8282f4eae20c73c89bee7a82a19c4e27af9b57bb602ecaa00713d5bdb54d/contourpy-1.3.1-cp313-cp313-win32.whl", hash = "sha256:36987a15e8ace5f58d4d5da9dca82d498c2bbb28dff6e5d04fbfcc35a9cb3a82", size = 175315 }, + { url = "https://files.pythonhosted.org/packages/e3/d5/28bca491f65312b438fbf076589dcde7f6f966b196d900777f5811b9c4e2/contourpy-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a7895f46d47671fa7ceec40f31fae721da51ad34bdca0bee83e38870b1f47ffd", size = 220987 }, + { url = "https://files.pythonhosted.org/packages/2f/24/a4b285d6adaaf9746e4700932f579f1a7b6f9681109f694cfa233ae75c4e/contourpy-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ddeb796389dadcd884c7eb07bd14ef12408aaae358f0e2ae24114d797eede30", size = 285001 }, + { url = "https://files.pythonhosted.org/packages/48/1d/fb49a401b5ca4f06ccf467cd6c4f1fd65767e63c21322b29b04ec40b40b9/contourpy-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:19c1555a6801c2f084c7ddc1c6e11f02eb6a6016ca1318dd5452ba3f613a1751", size = 268553 }, + { url = "https://files.pythonhosted.org/packages/79/1e/4aef9470d13fd029087388fae750dccb49a50c012a6c8d1d634295caa644/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:841ad858cff65c2c04bf93875e384ccb82b654574a6d7f30453a04f04af71342", size = 310386 }, + { url = "https://files.pythonhosted.org/packages/b0/34/910dc706ed70153b60392b5305c708c9810d425bde12499c9184a1100888/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4318af1c925fb9a4fb190559ef3eec206845f63e80fb603d47f2d6d67683901c", size = 349806 }, + { url = "https://files.pythonhosted.org/packages/31/3c/faee6a40d66d7f2a87f7102236bf4780c57990dd7f98e5ff29881b1b1344/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:14c102b0eab282427b662cb590f2e9340a9d91a1c297f48729431f2dcd16e14f", size = 321108 }, + { url = "https://files.pythonhosted.org/packages/17/69/390dc9b20dd4bb20585651d7316cc3054b7d4a7b4f8b710b2b698e08968d/contourpy-1.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05e806338bfeaa006acbdeba0ad681a10be63b26e1b17317bfac3c5d98f36cda", size = 327291 }, + { url = "https://files.pythonhosted.org/packages/ef/74/7030b67c4e941fe1e5424a3d988080e83568030ce0355f7c9fc556455b01/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4d76d5993a34ef3df5181ba3c92fabb93f1eaa5729504fb03423fcd9f3177242", size = 1263752 }, + { url = "https://files.pythonhosted.org/packages/f0/ed/92d86f183a8615f13f6b9cbfc5d4298a509d6ce433432e21da838b4b63f4/contourpy-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:89785bb2a1980c1bd87f0cb1517a71cde374776a5f150936b82580ae6ead44a1", size = 1318403 }, + { url = "https://files.pythonhosted.org/packages/b3/0e/c8e4950c77dcfc897c71d61e56690a0a9df39543d2164040301b5df8e67b/contourpy-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:8eb96e79b9f3dcadbad2a3891672f81cdcab7f95b27f28f1c67d75f045b6b4f1", size = 185117 }, + { url = "https://files.pythonhosted.org/packages/c1/31/1ae946f11dfbd229222e6d6ad8e7bd1891d3d48bde5fbf7a0beb9491f8e3/contourpy-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:287ccc248c9e0d0566934e7d606201abd74761b5703d804ff3df8935f523d546", size = 236668 }, ] [[package]] name = "cycler" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321 }, ] [[package]] name = "debugpy" version = "1.8.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/d4/f35f539e11c9344652f362c22413ec5078f677ac71229dc9b4f6f85ccaa3/debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce", size = 1641193, upload-time = "2025-03-05T01:02:22.807Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/d4/f35f539e11c9344652f362c22413ec5078f677ac71229dc9b4f6f85ccaa3/debugpy-1.8.13.tar.gz", hash = "sha256:837e7bef95bdefba426ae38b9a94821ebdc5bea55627879cd48165c90b9e50ce", size = 1641193 } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/ad/dff929b6b5403feaab0af0e5bb460fd723f9c62538b718a9af819b8fff20/debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1", size = 2501004, upload-time = "2025-03-05T01:02:42.602Z" }, - { url = "https://files.pythonhosted.org/packages/d6/4f/b7d42e6679f0bb525888c278b0c0d2b6dff26ed42795230bb46eaae4f9b3/debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522", size = 4222346, upload-time = "2025-03-05T01:02:44.803Z" }, - { url = "https://files.pythonhosted.org/packages/ec/18/d9b3e88e85d41f68f77235112adc31012a784e45a3fcdbb039777d570a0f/debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f", size = 5226639, upload-time = "2025-03-05T01:02:47.144Z" }, - { url = "https://files.pythonhosted.org/packages/c9/f7/0df18a4f530ed3cc06f0060f548efe9e3316102101e311739d906f5650be/debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea", size = 5268735, upload-time = "2025-03-05T01:02:48.92Z" }, - { url = "https://files.pythonhosted.org/packages/b1/db/ae7cd645c1826aae557cebccbc448f0cc9a818d364efb88f8d80e7a03f41/debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503", size = 2485416, upload-time = "2025-03-05T01:02:50.558Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ed/db4b10ff3b5bb30fe41d9e86444a08bb6448e4d8265e7768450b8408dd36/debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb", size = 4218784, upload-time = "2025-03-05T01:02:53.535Z" }, - { url = "https://files.pythonhosted.org/packages/82/82/ed81852a8d94086f51664d032d83c7f87cd2b087c6ea70dabec7c1ba813d/debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02", size = 5226270, upload-time = "2025-03-05T01:02:56.241Z" }, - { url = "https://files.pythonhosted.org/packages/15/63/aa92fb341a78ec40f1c414ec7a7885c2ee17032eee00d12cee0cdc502af4/debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8", size = 5268621, upload-time = "2025-03-05T01:02:57.845Z" }, - { url = "https://files.pythonhosted.org/packages/37/4f/0b65410a08b6452bfd3f7ed6f3610f1a31fb127f46836e82d31797065dcb/debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f", size = 5229306, upload-time = "2025-03-05T01:03:16.51Z" }, + { url = "https://files.pythonhosted.org/packages/79/ad/dff929b6b5403feaab0af0e5bb460fd723f9c62538b718a9af819b8fff20/debugpy-1.8.13-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:2b8de94c5c78aa0d0ed79023eb27c7c56a64c68217d881bee2ffbcb13951d0c1", size = 2501004 }, + { url = "https://files.pythonhosted.org/packages/d6/4f/b7d42e6679f0bb525888c278b0c0d2b6dff26ed42795230bb46eaae4f9b3/debugpy-1.8.13-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887d54276cefbe7290a754424b077e41efa405a3e07122d8897de54709dbe522", size = 4222346 }, + { url = "https://files.pythonhosted.org/packages/ec/18/d9b3e88e85d41f68f77235112adc31012a784e45a3fcdbb039777d570a0f/debugpy-1.8.13-cp312-cp312-win32.whl", hash = "sha256:3872ce5453b17837ef47fb9f3edc25085ff998ce63543f45ba7af41e7f7d370f", size = 5226639 }, + { url = "https://files.pythonhosted.org/packages/c9/f7/0df18a4f530ed3cc06f0060f548efe9e3316102101e311739d906f5650be/debugpy-1.8.13-cp312-cp312-win_amd64.whl", hash = "sha256:63ca7670563c320503fea26ac688988d9d6b9c6a12abc8a8cf2e7dd8e5f6b6ea", size = 5268735 }, + { url = "https://files.pythonhosted.org/packages/b1/db/ae7cd645c1826aae557cebccbc448f0cc9a818d364efb88f8d80e7a03f41/debugpy-1.8.13-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:31abc9618be4edad0b3e3a85277bc9ab51a2d9f708ead0d99ffb5bb750e18503", size = 2485416 }, + { url = "https://files.pythonhosted.org/packages/ec/ed/db4b10ff3b5bb30fe41d9e86444a08bb6448e4d8265e7768450b8408dd36/debugpy-1.8.13-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0bd87557f97bced5513a74088af0b84982b6ccb2e254b9312e29e8a5c4270eb", size = 4218784 }, + { url = "https://files.pythonhosted.org/packages/82/82/ed81852a8d94086f51664d032d83c7f87cd2b087c6ea70dabec7c1ba813d/debugpy-1.8.13-cp313-cp313-win32.whl", hash = "sha256:5268ae7fdca75f526d04465931cb0bd24577477ff50e8bb03dab90983f4ebd02", size = 5226270 }, + { url = "https://files.pythonhosted.org/packages/15/63/aa92fb341a78ec40f1c414ec7a7885c2ee17032eee00d12cee0cdc502af4/debugpy-1.8.13-cp313-cp313-win_amd64.whl", hash = "sha256:79ce4ed40966c4c1631d0131606b055a5a2f8e430e3f7bf8fd3744b09943e8e8", size = 5268621 }, + { url = "https://files.pythonhosted.org/packages/37/4f/0b65410a08b6452bfd3f7ed6f3610f1a31fb127f46836e82d31797065dcb/debugpy-1.8.13-py2.py3-none-any.whl", hash = "sha256:d4ba115cdd0e3a70942bd562adba9ec8c651fe69ddde2298a1be296fc331906f", size = 5229306 }, ] [[package]] name = "decorator" version = "5.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190 }, ] [[package]] name = "distlib" version = "0.3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923, upload-time = "2024-10-09T18:35:47.551Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973, upload-time = "2024-10-09T18:35:44.272Z" }, + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 }, ] [[package]] name = "doubleml" -version = "0.9.3" +version = "0.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib" }, @@ -216,11 +216,12 @@ dependencies = [ { name = "plotly" }, { name = "scikit-learn" }, { name = "scipy" }, + { name = "seaborn" }, { name = "statsmodels" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/48/c4/5798ab5c520868d31c625df3600e942612dea707a8da613a1a4341d47f1f/doubleml-0.9.3.tar.gz", hash = "sha256:a1f6337a5700856a3ab77af0b44449741d0fcb188b03ce7d15c0c0d0db0aca29", size = 226094, upload-time = "2025-01-09T14:57:18.159Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/e0/145b63e9b682a139911f5a3dbc6c34aa77a460b1747a2d418599eeeb2974/doubleml-0.10.0.tar.gz", hash = "sha256:648a4440f4e9c3586f78d338430e3b914f147f16cc13da864cef1439aad8e7a1", size = 294772 } wheels = [ - { url = "https://files.pythonhosted.org/packages/97/89/59665f3e7f1a2d99d6fd0babf61b2560c96686fe1fc17f8201f0a0c0baa0/DoubleML-0.9.3-py3-none-any.whl", hash = "sha256:c2ef19d8355babaf03392ae705353f309a684f4a8191cf8e2a7fed74db419808", size = 342917, upload-time = "2025-01-09T14:57:15.014Z" }, + { url = "https://files.pythonhosted.org/packages/5a/04/41d0f9cc48ca4b1d4c357961010d19f8a67fa5c2a139ddd5766655dd6ab5/doubleml-0.10.0-py3-none-any.whl", hash = "sha256:6bac311bc937bfed82d2e0d2dea0ac911604469fd144aa2de392daaca14134ed", size = 443289 }, ] [package.optional-dependencies] @@ -232,52 +233,52 @@ rdd = [ name = "executing" version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702 }, ] [[package]] name = "filelock" version = "3.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075, upload-time = "2025-03-14T07:11:40.47Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/10/c23352565a6544bdc5353e0b15fc1c563352101f30e24bf500207a54df9a/filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2", size = 18075 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215, upload-time = "2025-03-14T07:11:39.145Z" }, + { url = "https://files.pythonhosted.org/packages/4d/36/2a115987e2d8c300a974597416d9de88f2444426de9571f4b59b2cca3acc/filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de", size = 16215 }, ] [[package]] name = "fonttools" version = "4.56.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/8c/9ffa2a555af0e5e5d0e2ed7fdd8c9bef474ed676995bb4c57c9cd0014248/fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4", size = 3462892, upload-time = "2025-02-07T13:46:29.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/8c/9ffa2a555af0e5e5d0e2ed7fdd8c9bef474ed676995bb4c57c9cd0014248/fonttools-4.56.0.tar.gz", hash = "sha256:a114d1567e1a1586b7e9e7fc2ff686ca542a82769a296cef131e4c4af51e58f4", size = 3462892 } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/32/71cfd6877999576a11824a7fe7bc0bb57c5c72b1f4536fa56a3e39552643/fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9", size = 2747757, upload-time = "2025-02-07T13:44:28.021Z" }, - { url = "https://files.pythonhosted.org/packages/15/52/d9f716b072c5061a0b915dd4c387f74bef44c68c069e2195c753905bd9b7/fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f", size = 2279007, upload-time = "2025-02-07T13:44:31.325Z" }, - { url = "https://files.pythonhosted.org/packages/d1/97/f1b3a8afa9a0d814a092a25cd42f59ccb98a0bb7a295e6e02fc9ba744214/fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2", size = 4783991, upload-time = "2025-02-07T13:44:34.888Z" }, - { url = "https://files.pythonhosted.org/packages/95/70/2a781bedc1c45a0c61d29c56425609b22ed7f971da5d7e5df2679488741b/fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563", size = 4855109, upload-time = "2025-02-07T13:44:40.702Z" }, - { url = "https://files.pythonhosted.org/packages/0c/02/a2597858e61a5e3fb6a14d5f6be9e6eb4eaf090da56ad70cedcbdd201685/fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a", size = 4762496, upload-time = "2025-02-07T13:44:45.929Z" }, - { url = "https://files.pythonhosted.org/packages/f2/00/aaf00100d6078fdc73f7352b44589804af9dc12b182a2540b16002152ba4/fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28", size = 4990094, upload-time = "2025-02-07T13:44:49.004Z" }, - { url = "https://files.pythonhosted.org/packages/bf/dc/3ff1db522460db60cf3adaf1b64e0c72b43406717d139786d3fa1eb20709/fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c", size = 2142888, upload-time = "2025-02-07T13:44:54.127Z" }, - { url = "https://files.pythonhosted.org/packages/6f/e3/5a181a85777f7809076e51f7422e0dc77eb04676c40ec8bf6a49d390d1ff/fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba", size = 2189734, upload-time = "2025-02-07T13:44:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/a5/55/f06b48d48e0b4ec3a3489efafe9bd4d81b6e0802ac51026e3ee4634e89ba/fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692", size = 2735127, upload-time = "2025-02-07T13:44:59.966Z" }, - { url = "https://files.pythonhosted.org/packages/59/db/d2c7c9b6dd5cbd46f183e650a47403ffb88fca17484eb7c4b1cd88f9e513/fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0", size = 2272519, upload-time = "2025-02-07T13:45:03.891Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a2/da62d779c34a0e0c06415f02eab7fa3466de5d46df459c0275a255cefc65/fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1", size = 4762423, upload-time = "2025-02-07T13:45:07.034Z" }, - { url = "https://files.pythonhosted.org/packages/be/6a/fd4018e0448c8a5e12138906411282c5eab51a598493f080a9f0960e658f/fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea", size = 4834442, upload-time = "2025-02-07T13:45:10.6Z" }, - { url = "https://files.pythonhosted.org/packages/6d/63/fa1dec8efb35bc11ef9c39b2d74754b45d48a3ccb2cf78c0109c0af639e8/fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3", size = 4742800, upload-time = "2025-02-07T13:45:14.096Z" }, - { url = "https://files.pythonhosted.org/packages/dd/f4/963247ae8c73ccc4cf2929e7162f595c81dbe17997d1d0ea77da24a217c9/fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278", size = 4963746, upload-time = "2025-02-07T13:45:17.479Z" }, - { url = "https://files.pythonhosted.org/packages/ea/e0/46f9600c39c644b54e4420f941f75fa200d9288c9ae171e5d80918b8cbb9/fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f", size = 2140927, upload-time = "2025-02-07T13:45:21.084Z" }, - { url = "https://files.pythonhosted.org/packages/27/6d/3edda54f98a550a0473f032d8050315fbc8f1b76a0d9f3879b72ebb2cdd6/fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6", size = 2186709, upload-time = "2025-02-07T13:45:23.719Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ff/44934a031ce5a39125415eb405b9efb76fe7f9586b75291d66ae5cbfc4e6/fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14", size = 1089800, upload-time = "2025-02-07T13:46:26.415Z" }, + { url = "https://files.pythonhosted.org/packages/39/32/71cfd6877999576a11824a7fe7bc0bb57c5c72b1f4536fa56a3e39552643/fonttools-4.56.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6f195c14c01bd057bc9b4f70756b510e009c83c5ea67b25ced3e2c38e6ee6e9", size = 2747757 }, + { url = "https://files.pythonhosted.org/packages/15/52/d9f716b072c5061a0b915dd4c387f74bef44c68c069e2195c753905bd9b7/fonttools-4.56.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fa760e5fe8b50cbc2d71884a1eff2ed2b95a005f02dda2fa431560db0ddd927f", size = 2279007 }, + { url = "https://files.pythonhosted.org/packages/d1/97/f1b3a8afa9a0d814a092a25cd42f59ccb98a0bb7a295e6e02fc9ba744214/fonttools-4.56.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d54a45d30251f1d729e69e5b675f9a08b7da413391a1227781e2a297fa37f6d2", size = 4783991 }, + { url = "https://files.pythonhosted.org/packages/95/70/2a781bedc1c45a0c61d29c56425609b22ed7f971da5d7e5df2679488741b/fonttools-4.56.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:661a8995d11e6e4914a44ca7d52d1286e2d9b154f685a4d1f69add8418961563", size = 4855109 }, + { url = "https://files.pythonhosted.org/packages/0c/02/a2597858e61a5e3fb6a14d5f6be9e6eb4eaf090da56ad70cedcbdd201685/fonttools-4.56.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d94449ad0a5f2a8bf5d2f8d71d65088aee48adbe45f3c5f8e00e3ad861ed81a", size = 4762496 }, + { url = "https://files.pythonhosted.org/packages/f2/00/aaf00100d6078fdc73f7352b44589804af9dc12b182a2540b16002152ba4/fonttools-4.56.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f59746f7953f69cc3290ce2f971ab01056e55ddd0fb8b792c31a8acd7fee2d28", size = 4990094 }, + { url = "https://files.pythonhosted.org/packages/bf/dc/3ff1db522460db60cf3adaf1b64e0c72b43406717d139786d3fa1eb20709/fonttools-4.56.0-cp312-cp312-win32.whl", hash = "sha256:bce60f9a977c9d3d51de475af3f3581d9b36952e1f8fc19a1f2254f1dda7ce9c", size = 2142888 }, + { url = "https://files.pythonhosted.org/packages/6f/e3/5a181a85777f7809076e51f7422e0dc77eb04676c40ec8bf6a49d390d1ff/fonttools-4.56.0-cp312-cp312-win_amd64.whl", hash = "sha256:300c310bb725b2bdb4f5fc7e148e190bd69f01925c7ab437b9c0ca3e1c7cd9ba", size = 2189734 }, + { url = "https://files.pythonhosted.org/packages/a5/55/f06b48d48e0b4ec3a3489efafe9bd4d81b6e0802ac51026e3ee4634e89ba/fonttools-4.56.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f20e2c0dfab82983a90f3d00703ac0960412036153e5023eed2b4641d7d5e692", size = 2735127 }, + { url = "https://files.pythonhosted.org/packages/59/db/d2c7c9b6dd5cbd46f183e650a47403ffb88fca17484eb7c4b1cd88f9e513/fonttools-4.56.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f36a0868f47b7566237640c026c65a86d09a3d9ca5df1cd039e30a1da73098a0", size = 2272519 }, + { url = "https://files.pythonhosted.org/packages/4d/a2/da62d779c34a0e0c06415f02eab7fa3466de5d46df459c0275a255cefc65/fonttools-4.56.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62b4c6802fa28e14dba010e75190e0e6228513573f1eeae57b11aa1a39b7e5b1", size = 4762423 }, + { url = "https://files.pythonhosted.org/packages/be/6a/fd4018e0448c8a5e12138906411282c5eab51a598493f080a9f0960e658f/fonttools-4.56.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05d1f07eb0a7d755fbe01fee1fd255c3a4d3730130cf1bfefb682d18fd2fcea", size = 4834442 }, + { url = "https://files.pythonhosted.org/packages/6d/63/fa1dec8efb35bc11ef9c39b2d74754b45d48a3ccb2cf78c0109c0af639e8/fonttools-4.56.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0073b62c3438cf0058488c002ea90489e8801d3a7af5ce5f7c05c105bee815c3", size = 4742800 }, + { url = "https://files.pythonhosted.org/packages/dd/f4/963247ae8c73ccc4cf2929e7162f595c81dbe17997d1d0ea77da24a217c9/fonttools-4.56.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cad98c94833465bcf28f51c248aaf07ca022efc6a3eba750ad9c1e0256d278", size = 4963746 }, + { url = "https://files.pythonhosted.org/packages/ea/e0/46f9600c39c644b54e4420f941f75fa200d9288c9ae171e5d80918b8cbb9/fonttools-4.56.0-cp313-cp313-win32.whl", hash = "sha256:d0cb73ccf7f6d7ca8d0bc7ea8ac0a5b84969a41c56ac3ac3422a24df2680546f", size = 2140927 }, + { url = "https://files.pythonhosted.org/packages/27/6d/3edda54f98a550a0473f032d8050315fbc8f1b76a0d9f3879b72ebb2cdd6/fonttools-4.56.0-cp313-cp313-win_amd64.whl", hash = "sha256:62cc1253827d1e500fde9dbe981219fea4eb000fd63402283472d38e7d8aa1c6", size = 2186709 }, + { url = "https://files.pythonhosted.org/packages/bf/ff/44934a031ce5a39125415eb405b9efb76fe7f9586b75291d66ae5cbfc4e6/fonttools-4.56.0-py3-none-any.whl", hash = "sha256:1088182f68c303b50ca4dc0c82d42083d176cba37af1937e1a976a31149d4d14", size = 1089800 }, ] [[package]] name = "identify" version = "2.6.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254, upload-time = "2025-05-23T20:37:53.3Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/88/d193a27416618628a5eea64e3223acd800b40749a96ffb322a9b55a49ed1/identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6", size = 99254 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145, upload-time = "2025-05-23T20:37:51.495Z" }, + { url = "https://files.pythonhosted.org/packages/7a/cd/18f8da995b658420625f7ef13f037be53ae04ec5ad33f9b718240dcfd48c/identify-2.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2", size = 99145 }, ] [[package]] @@ -299,9 +300,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367, upload-time = "2024-07-01T14:07:22.543Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/5c/67594cb0c7055dc50814b21731c22a601101ea3b1b50a9a1b090e11f5d0f/ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215", size = 163367 } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173, upload-time = "2024-07-01T14:07:19.603Z" }, + { url = "https://files.pythonhosted.org/packages/94/5c/368ae6c01c7628438358e6d337c19b05425727fbb221d2a3c4303c372f42/ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5", size = 117173 }, ] [[package]] @@ -320,9 +321,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7d/ce/012a0f40ca58a966f87a6e894d6828e2817657cbdf522b02a5d3a87d92ce/ipython-9.0.2.tar.gz", hash = "sha256:ec7b479e3e5656bf4f58c652c120494df1820f4f28f522fb7ca09e213c2aab52", size = 4366102, upload-time = "2025-03-08T15:04:52.885Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/ce/012a0f40ca58a966f87a6e894d6828e2817657cbdf522b02a5d3a87d92ce/ipython-9.0.2.tar.gz", hash = "sha256:ec7b479e3e5656bf4f58c652c120494df1820f4f28f522fb7ca09e213c2aab52", size = 4366102 } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/3a/917cb9e72f4e1a4ea13c862533205ae1319bd664119189ee5cc9e4e95ebf/ipython-9.0.2-py3-none-any.whl", hash = "sha256:143ef3ea6fb1e1bffb4c74b114051de653ffb7737a3f7ab1670e657ca6ae8c44", size = 600524, upload-time = "2025-03-08T15:04:50.667Z" }, + { url = "https://files.pythonhosted.org/packages/20/3a/917cb9e72f4e1a4ea13c862533205ae1319bd664119189ee5cc9e4e95ebf/ipython-9.0.2-py3-none-any.whl", hash = "sha256:143ef3ea6fb1e1bffb4c74b114051de653ffb7737a3f7ab1670e657ca6ae8c44", size = 600524 }, ] [[package]] @@ -332,9 +333,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074 }, ] [[package]] @@ -346,9 +347,9 @@ dependencies = [ { name = "numpy" }, { name = "pandas" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/18/359fc46f2874290843a4ba2c089d0109874cd2d73863d0e69fd54a5e9532/itables-2.2.5.tar.gz", hash = "sha256:838ed4783da0b6481b9062c362b8a331aa56f48d6c90e0f6dc76a0488a316049", size = 2436699, upload-time = "2025-02-24T08:51:03.011Z" } +sdist = { url = "https://files.pythonhosted.org/packages/07/18/359fc46f2874290843a4ba2c089d0109874cd2d73863d0e69fd54a5e9532/itables-2.2.5.tar.gz", hash = "sha256:838ed4783da0b6481b9062c362b8a331aa56f48d6c90e0f6dc76a0488a316049", size = 2436699 } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/dd/8976761076632f492f0d25502e348f41f343423d36270dc32f323b9155bc/itables-2.2.5-py3-none-any.whl", hash = "sha256:d0d33ce427c6c84d4063998650323eb65ccddb47a5505ef1ad3f563580dc101d", size = 1407043, upload-time = "2025-02-24T08:50:59.745Z" }, + { url = "https://files.pythonhosted.org/packages/aa/dd/8976761076632f492f0d25502e348f41f343423d36270dc32f323b9155bc/itables-2.2.5-py3-none-any.whl", hash = "sha256:d0d33ce427c6c84d4063998650323eb65ccddb47a5505ef1ad3f563580dc101d", size = 1407043 }, ] [[package]] @@ -358,18 +359,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "parso" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278 }, ] [[package]] name = "joblib" version = "1.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621, upload-time = "2024-05-02T12:15:05.765Z" } +sdist = { url = "https://files.pythonhosted.org/packages/64/33/60135848598c076ce4b231e1b1895170f45fbcaeaa2c9d5e38b04db70c35/joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e", size = 2116621 } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817, upload-time = "2024-05-02T12:15:00.765Z" }, + { url = "https://files.pythonhosted.org/packages/91/29/df4b9b42f2be0b623cbd5e2140cafcaa2bef0759a00b7b70104dcfe2fb51/joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6", size = 301817 }, ] [[package]] @@ -383,9 +384,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019 } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105 }, ] [[package]] @@ -397,60 +398,60 @@ dependencies = [ { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629, upload-time = "2024-03-12T12:37:35.652Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/11/b56381fa6c3f4cc5d2cf54a7dbf98ad9aa0b339ef7a601d6053538b079a7/jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9", size = 87629 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965, upload-time = "2024-03-12T12:37:32.36Z" }, + { url = "https://files.pythonhosted.org/packages/c9/fb/108ecd1fe961941959ad0ee4e12ee7b8b1477247f30b1fdfd83ceaf017f0/jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409", size = 28965 }, ] [[package]] name = "kiwisolver" version = "1.4.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538, upload-time = "2024-12-24T18:30:51.519Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152, upload-time = "2024-12-24T18:29:16.85Z" }, - { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555, upload-time = "2024-12-24T18:29:19.146Z" }, - { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067, upload-time = "2024-12-24T18:29:20.096Z" }, - { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443, upload-time = "2024-12-24T18:29:22.843Z" }, - { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728, upload-time = "2024-12-24T18:29:24.463Z" }, - { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388, upload-time = "2024-12-24T18:29:25.776Z" }, - { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849, upload-time = "2024-12-24T18:29:27.202Z" }, - { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533, upload-time = "2024-12-24T18:29:28.638Z" }, - { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898, upload-time = "2024-12-24T18:29:30.368Z" }, - { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605, upload-time = "2024-12-24T18:29:33.151Z" }, - { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801, upload-time = "2024-12-24T18:29:34.584Z" }, - { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077, upload-time = "2024-12-24T18:29:36.138Z" }, - { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410, upload-time = "2024-12-24T18:29:39.991Z" }, - { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853, upload-time = "2024-12-24T18:29:42.006Z" }, - { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424, upload-time = "2024-12-24T18:29:44.38Z" }, - { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156, upload-time = "2024-12-24T18:29:45.368Z" }, - { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555, upload-time = "2024-12-24T18:29:46.37Z" }, - { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071, upload-time = "2024-12-24T18:29:47.333Z" }, - { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053, upload-time = "2024-12-24T18:29:49.636Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278, upload-time = "2024-12-24T18:29:51.164Z" }, - { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139, upload-time = "2024-12-24T18:29:52.594Z" }, - { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517, upload-time = "2024-12-24T18:29:53.941Z" }, - { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952, upload-time = "2024-12-24T18:29:56.523Z" }, - { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132, upload-time = "2024-12-24T18:29:57.989Z" }, - { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997, upload-time = "2024-12-24T18:29:59.393Z" }, - { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060, upload-time = "2024-12-24T18:30:01.338Z" }, - { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471, upload-time = "2024-12-24T18:30:04.574Z" }, - { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793, upload-time = "2024-12-24T18:30:06.25Z" }, - { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855, upload-time = "2024-12-24T18:30:07.535Z" }, - { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430, upload-time = "2024-12-24T18:30:08.504Z" }, - { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294, upload-time = "2024-12-24T18:30:09.508Z" }, - { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736, upload-time = "2024-12-24T18:30:11.039Z" }, - { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194, upload-time = "2024-12-24T18:30:14.886Z" }, - { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942, upload-time = "2024-12-24T18:30:18.927Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341, upload-time = "2024-12-24T18:30:22.102Z" }, - { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455, upload-time = "2024-12-24T18:30:24.947Z" }, - { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138, upload-time = "2024-12-24T18:30:26.286Z" }, - { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857, upload-time = "2024-12-24T18:30:28.86Z" }, - { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129, upload-time = "2024-12-24T18:30:30.34Z" }, - { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538, upload-time = "2024-12-24T18:30:33.334Z" }, - { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661, upload-time = "2024-12-24T18:30:34.939Z" }, - { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710, upload-time = "2024-12-24T18:30:37.281Z" }, - { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213, upload-time = "2024-12-24T18:30:40.019Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/82/59/7c91426a8ac292e1cdd53a63b6d9439abd573c875c3f92c146767dd33faf/kiwisolver-1.4.8.tar.gz", hash = "sha256:23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e", size = 97538 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/aa/cea685c4ab647f349c3bc92d2daf7ae34c8e8cf405a6dcd3a497f58a2ac3/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d6af5e8815fd02997cb6ad9bbed0ee1e60014438ee1a5c2444c96f87b8843502", size = 124152 }, + { url = "https://files.pythonhosted.org/packages/c5/0b/8db6d2e2452d60d5ebc4ce4b204feeb16176a851fd42462f66ade6808084/kiwisolver-1.4.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bade438f86e21d91e0cf5dd7c0ed00cda0f77c8c1616bd83f9fc157fa6760d31", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/60/26/d6a0db6785dd35d3ba5bf2b2df0aedc5af089962c6eb2cbf67a15b81369e/kiwisolver-1.4.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b83dc6769ddbc57613280118fb4ce3cd08899cc3369f7d0e0fab518a7cf37fdb", size = 65067 }, + { url = "https://files.pythonhosted.org/packages/c9/ed/1d97f7e3561e09757a196231edccc1bcf59d55ddccefa2afc9c615abd8e0/kiwisolver-1.4.8-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111793b232842991be367ed828076b03d96202c19221b5ebab421ce8bcad016f", size = 1378443 }, + { url = "https://files.pythonhosted.org/packages/29/61/39d30b99954e6b46f760e6289c12fede2ab96a254c443639052d1b573fbc/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:257af1622860e51b1a9d0ce387bf5c2c4f36a90594cb9514f55b074bcc787cfc", size = 1472728 }, + { url = "https://files.pythonhosted.org/packages/0c/3e/804163b932f7603ef256e4a715e5843a9600802bb23a68b4e08c8c0ff61d/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b5637c3f316cab1ec1c9a12b8c5f4750a4c4b71af9157645bf32830e39c03a", size = 1478388 }, + { url = "https://files.pythonhosted.org/packages/8a/9e/60eaa75169a154700be74f875a4d9961b11ba048bef315fbe89cb6999056/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:782bb86f245ec18009890e7cb8d13a5ef54dcf2ebe18ed65f795e635a96a1c6a", size = 1413849 }, + { url = "https://files.pythonhosted.org/packages/bc/b3/9458adb9472e61a998c8c4d95cfdfec91c73c53a375b30b1428310f923e4/kiwisolver-1.4.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc978a80a0db3a66d25767b03688f1147a69e6237175c0f4ffffaaedf744055a", size = 1475533 }, + { url = "https://files.pythonhosted.org/packages/e4/7a/0a42d9571e35798de80aef4bb43a9b672aa7f8e58643d7bd1950398ffb0a/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:36dbbfd34838500a31f52c9786990d00150860e46cd5041386f217101350f0d3", size = 2268898 }, + { url = "https://files.pythonhosted.org/packages/d9/07/1255dc8d80271400126ed8db35a1795b1a2c098ac3a72645075d06fe5c5d/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:eaa973f1e05131de5ff3569bbba7f5fd07ea0595d3870ed4a526d486fe57fa1b", size = 2425605 }, + { url = "https://files.pythonhosted.org/packages/84/df/5a3b4cf13780ef6f6942df67b138b03b7e79e9f1f08f57c49957d5867f6e/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a66f60f8d0c87ab7f59b6fb80e642ebb29fec354a4dfad687ca4092ae69d04f4", size = 2375801 }, + { url = "https://files.pythonhosted.org/packages/8f/10/2348d068e8b0f635c8c86892788dac7a6b5c0cb12356620ab575775aad89/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858416b7fb777a53f0c59ca08190ce24e9abbd3cffa18886a5781b8e3e26f65d", size = 2520077 }, + { url = "https://files.pythonhosted.org/packages/32/d8/014b89fee5d4dce157d814303b0fce4d31385a2af4c41fed194b173b81ac/kiwisolver-1.4.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:085940635c62697391baafaaeabdf3dd7a6c3643577dde337f4d66eba021b2b8", size = 2338410 }, + { url = "https://files.pythonhosted.org/packages/bd/72/dfff0cc97f2a0776e1c9eb5bef1ddfd45f46246c6533b0191887a427bca5/kiwisolver-1.4.8-cp312-cp312-win_amd64.whl", hash = "sha256:01c3d31902c7db5fb6182832713d3b4122ad9317c2c5877d0539227d96bb2e50", size = 71853 }, + { url = "https://files.pythonhosted.org/packages/dc/85/220d13d914485c0948a00f0b9eb419efaf6da81b7d72e88ce2391f7aed8d/kiwisolver-1.4.8-cp312-cp312-win_arm64.whl", hash = "sha256:a3c44cb68861de93f0c4a8175fbaa691f0aa22550c331fefef02b618a9dcb476", size = 65424 }, + { url = "https://files.pythonhosted.org/packages/79/b3/e62464a652f4f8cd9006e13d07abad844a47df1e6537f73ddfbf1bc997ec/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1c8ceb754339793c24aee1c9fb2485b5b1f5bb1c2c214ff13368431e51fc9a09", size = 124156 }, + { url = "https://files.pythonhosted.org/packages/8d/2d/f13d06998b546a2ad4f48607a146e045bbe48030774de29f90bdc573df15/kiwisolver-1.4.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54a62808ac74b5e55a04a408cda6156f986cefbcf0ada13572696b507cc92fa1", size = 66555 }, + { url = "https://files.pythonhosted.org/packages/59/e3/b8bd14b0a54998a9fd1e8da591c60998dc003618cb19a3f94cb233ec1511/kiwisolver-1.4.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:68269e60ee4929893aad82666821aaacbd455284124817af45c11e50a4b42e3c", size = 65071 }, + { url = "https://files.pythonhosted.org/packages/f0/1c/6c86f6d85ffe4d0ce04228d976f00674f1df5dc893bf2dd4f1928748f187/kiwisolver-1.4.8-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34d142fba9c464bc3bbfeff15c96eab0e7310343d6aefb62a79d51421fcc5f1b", size = 1378053 }, + { url = "https://files.pythonhosted.org/packages/4e/b9/1c6e9f6dcb103ac5cf87cb695845f5fa71379021500153566d8a8a9fc291/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ddc373e0eef45b59197de815b1b28ef89ae3955e7722cc9710fb91cd77b7f47", size = 1472278 }, + { url = "https://files.pythonhosted.org/packages/ee/81/aca1eb176de671f8bda479b11acdc42c132b61a2ac861c883907dde6debb/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77e6f57a20b9bd4e1e2cedda4d0b986ebd0216236f0106e55c28aea3d3d69b16", size = 1478139 }, + { url = "https://files.pythonhosted.org/packages/49/f4/e081522473671c97b2687d380e9e4c26f748a86363ce5af48b4a28e48d06/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08e77738ed7538f036cd1170cbed942ef749137b1311fa2bbe2a7fda2f6bf3cc", size = 1413517 }, + { url = "https://files.pythonhosted.org/packages/8f/e9/6a7d025d8da8c4931522922cd706105aa32b3291d1add8c5427cdcd66e63/kiwisolver-1.4.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5ce1e481a74b44dd5e92ff03ea0cb371ae7a0268318e202be06c8f04f4f1246", size = 1474952 }, + { url = "https://files.pythonhosted.org/packages/82/13/13fa685ae167bee5d94b415991c4fc7bb0a1b6ebea6e753a87044b209678/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fc2ace710ba7c1dfd1a3b42530b62b9ceed115f19a1656adefce7b1782a37794", size = 2269132 }, + { url = "https://files.pythonhosted.org/packages/ef/92/bb7c9395489b99a6cb41d502d3686bac692586db2045adc19e45ee64ed23/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3452046c37c7692bd52b0e752b87954ef86ee2224e624ef7ce6cb21e8c41cc1b", size = 2425997 }, + { url = "https://files.pythonhosted.org/packages/ed/12/87f0e9271e2b63d35d0d8524954145837dd1a6c15b62a2d8c1ebe0f182b4/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7e9a60b50fe8b2ec6f448fe8d81b07e40141bfced7f896309df271a0b92f80f3", size = 2376060 }, + { url = "https://files.pythonhosted.org/packages/02/6e/c8af39288edbce8bf0fa35dee427b082758a4b71e9c91ef18fa667782138/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:918139571133f366e8362fa4a297aeba86c7816b7ecf0bc79168080e2bd79957", size = 2520471 }, + { url = "https://files.pythonhosted.org/packages/13/78/df381bc7b26e535c91469f77f16adcd073beb3e2dd25042efd064af82323/kiwisolver-1.4.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e063ef9f89885a1d68dd8b2e18f5ead48653176d10a0e324e3b0030e3a69adeb", size = 2338793 }, + { url = "https://files.pythonhosted.org/packages/d0/dc/c1abe38c37c071d0fc71c9a474fd0b9ede05d42f5a458d584619cfd2371a/kiwisolver-1.4.8-cp313-cp313-win_amd64.whl", hash = "sha256:a17b7c4f5b2c51bb68ed379defd608a03954a1845dfed7cc0117f1cc8a9b7fd2", size = 71855 }, + { url = "https://files.pythonhosted.org/packages/a0/b6/21529d595b126ac298fdd90b705d87d4c5693de60023e0efcb4f387ed99e/kiwisolver-1.4.8-cp313-cp313-win_arm64.whl", hash = "sha256:3cd3bc628b25f74aedc6d374d5babf0166a92ff1317f46267f12d2ed54bc1d30", size = 65430 }, + { url = "https://files.pythonhosted.org/packages/34/bd/b89380b7298e3af9b39f49334e3e2a4af0e04819789f04b43d560516c0c8/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:370fd2df41660ed4e26b8c9d6bbcad668fbe2560462cba151a721d49e5b6628c", size = 126294 }, + { url = "https://files.pythonhosted.org/packages/83/41/5857dc72e5e4148eaac5aa76e0703e594e4465f8ab7ec0fc60e3a9bb8fea/kiwisolver-1.4.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:84a2f830d42707de1d191b9490ac186bf7997a9495d4e9072210a1296345f7dc", size = 67736 }, + { url = "https://files.pythonhosted.org/packages/e1/d1/be059b8db56ac270489fb0b3297fd1e53d195ba76e9bbb30e5401fa6b759/kiwisolver-1.4.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7a3ad337add5148cf51ce0b55642dc551c0b9d6248458a757f98796ca7348712", size = 66194 }, + { url = "https://files.pythonhosted.org/packages/e1/83/4b73975f149819eb7dcf9299ed467eba068ecb16439a98990dcb12e63fdd/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7506488470f41169b86d8c9aeff587293f530a23a23a49d6bc64dab66bedc71e", size = 1465942 }, + { url = "https://files.pythonhosted.org/packages/c7/2c/30a5cdde5102958e602c07466bce058b9d7cb48734aa7a4327261ac8e002/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f0121b07b356a22fb0414cec4666bbe36fd6d0d759db3d37228f496ed67c880", size = 1595341 }, + { url = "https://files.pythonhosted.org/packages/ff/9b/1e71db1c000385aa069704f5990574b8244cce854ecd83119c19e83c9586/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d6d6bd87df62c27d4185de7c511c6248040afae67028a8a22012b010bc7ad062", size = 1598455 }, + { url = "https://files.pythonhosted.org/packages/85/92/c8fec52ddf06231b31cbb779af77e99b8253cd96bd135250b9498144c78b/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:291331973c64bb9cce50bbe871fb2e675c4331dab4f31abe89f175ad7679a4d7", size = 1522138 }, + { url = "https://files.pythonhosted.org/packages/0b/51/9eb7e2cd07a15d8bdd976f6190c0164f92ce1904e5c0c79198c4972926b7/kiwisolver-1.4.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:893f5525bb92d3d735878ec00f781b2de998333659507d29ea4466208df37bed", size = 1582857 }, + { url = "https://files.pythonhosted.org/packages/0f/95/c5a00387a5405e68ba32cc64af65ce881a39b98d73cc394b24143bebc5b8/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b47a465040146981dc9db8647981b8cb96366fbc8d452b031e4f8fdffec3f26d", size = 2293129 }, + { url = "https://files.pythonhosted.org/packages/44/83/eeb7af7d706b8347548313fa3a3a15931f404533cc54fe01f39e830dd231/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:99cea8b9dd34ff80c521aef46a1dddb0dcc0283cf18bde6d756f1e6f31772165", size = 2421538 }, + { url = "https://files.pythonhosted.org/packages/05/f9/27e94c1b3eb29e6933b6986ffc5fa1177d2cd1f0c8efc5f02c91c9ac61de/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:151dffc4865e5fe6dafce5480fab84f950d14566c480c08a53c663a0020504b6", size = 2390661 }, + { url = "https://files.pythonhosted.org/packages/d9/d4/3c9735faa36ac591a4afcc2980d2691000506050b7a7e80bcfe44048daa7/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:577facaa411c10421314598b50413aa1ebcf5126f704f1e5d72d7e4e9f020d90", size = 2546710 }, + { url = "https://files.pythonhosted.org/packages/4c/fa/be89a49c640930180657482a74970cdcf6f7072c8d2471e1babe17a222dc/kiwisolver-1.4.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:be4816dc51c8a471749d664161b434912eee82f2ea66bd7628bd14583a833e85", size = 2349213 }, ] [[package]] @@ -461,13 +462,13 @@ dependencies = [ { name = "numpy" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/68/0b/a2e9f5c5da7ef047cc60cef37f86185088845e8433e54d2e7ed439cce8a3/lightgbm-4.6.0.tar.gz", hash = "sha256:cb1c59720eb569389c0ba74d14f52351b573af489f230032a1c9f314f8bab7fe", size = 1703705, upload-time = "2025-02-15T04:03:03.111Z" } +sdist = { url = "https://files.pythonhosted.org/packages/68/0b/a2e9f5c5da7ef047cc60cef37f86185088845e8433e54d2e7ed439cce8a3/lightgbm-4.6.0.tar.gz", hash = "sha256:cb1c59720eb569389c0ba74d14f52351b573af489f230032a1c9f314f8bab7fe", size = 1703705 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/75/cffc9962cca296bc5536896b7e65b4a7cdeb8db208e71b9c0133c08f8f7e/lightgbm-4.6.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:b7a393de8a334d5c8e490df91270f0763f83f959574d504c7ccb9eee4aef70ed", size = 2010151, upload-time = "2025-02-15T04:02:50.961Z" }, - { url = "https://files.pythonhosted.org/packages/21/1b/550ee378512b78847930f5d74228ca1fdba2a7fbdeaac9aeccc085b0e257/lightgbm-4.6.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:2dafd98d4e02b844ceb0b61450a660681076b1ea6c7adb8c566dfd66832aafad", size = 1592172, upload-time = "2025-02-15T04:02:53.937Z" }, - { url = "https://files.pythonhosted.org/packages/64/41/4fbde2c3d29e25ee7c41d87df2f2e5eda65b431ee154d4d462c31041846c/lightgbm-4.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4d68712bbd2b57a0b14390cbf9376c1d5ed773fa2e71e099cac588703b590336", size = 3454567, upload-time = "2025-02-15T04:02:56.443Z" }, - { url = "https://files.pythonhosted.org/packages/42/86/dabda8fbcb1b00bcfb0003c3776e8ade1aa7b413dff0a2c08f457dace22f/lightgbm-4.6.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:cb19b5afea55b5b61cbb2131095f50538bd608a00655f23ad5d25ae3e3bf1c8d", size = 3569831, upload-time = "2025-02-15T04:02:58.925Z" }, - { url = "https://files.pythonhosted.org/packages/5e/23/f8b28ca248bb629b9e08f877dd2965d1994e1674a03d67cd10c5246da248/lightgbm-4.6.0-py3-none-win_amd64.whl", hash = "sha256:37089ee95664b6550a7189d887dbf098e3eadab03537e411f52c63c121e3ba4b", size = 1451509, upload-time = "2025-02-15T04:03:01.515Z" }, + { url = "https://files.pythonhosted.org/packages/f2/75/cffc9962cca296bc5536896b7e65b4a7cdeb8db208e71b9c0133c08f8f7e/lightgbm-4.6.0-py3-none-macosx_10_15_x86_64.whl", hash = "sha256:b7a393de8a334d5c8e490df91270f0763f83f959574d504c7ccb9eee4aef70ed", size = 2010151 }, + { url = "https://files.pythonhosted.org/packages/21/1b/550ee378512b78847930f5d74228ca1fdba2a7fbdeaac9aeccc085b0e257/lightgbm-4.6.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:2dafd98d4e02b844ceb0b61450a660681076b1ea6c7adb8c566dfd66832aafad", size = 1592172 }, + { url = "https://files.pythonhosted.org/packages/64/41/4fbde2c3d29e25ee7c41d87df2f2e5eda65b431ee154d4d462c31041846c/lightgbm-4.6.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4d68712bbd2b57a0b14390cbf9376c1d5ed773fa2e71e099cac588703b590336", size = 3454567 }, + { url = "https://files.pythonhosted.org/packages/42/86/dabda8fbcb1b00bcfb0003c3776e8ade1aa7b413dff0a2c08f457dace22f/lightgbm-4.6.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:cb19b5afea55b5b61cbb2131095f50538bd608a00655f23ad5d25ae3e3bf1c8d", size = 3569831 }, + { url = "https://files.pythonhosted.org/packages/5e/23/f8b28ca248bb629b9e08f877dd2965d1994e1674a03d67cd10c5246da248/lightgbm-4.6.0-py3-none-win_amd64.whl", hash = "sha256:37089ee95664b6550a7189d887dbf098e3eadab03537e411f52c63c121e3ba4b", size = 1451509 }, ] [[package]] @@ -485,26 +486,26 @@ dependencies = [ { name = "pyparsing" }, { name = "python-dateutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335, upload-time = "2025-02-27T19:19:51.038Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/1d/5e0dc3b59c034e43de16f94deb68f4ad8a96b3ea00f4b37c160b7474928e/matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107", size = 8175488, upload-time = "2025-02-27T19:18:51.436Z" }, - { url = "https://files.pythonhosted.org/packages/7a/81/dae7e14042e74da658c3336ab9799128e09a1ee03964f2d89630b5d12106/matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be", size = 8046264, upload-time = "2025-02-27T19:18:54.344Z" }, - { url = "https://files.pythonhosted.org/packages/21/c4/22516775dcde10fc9c9571d155f90710761b028fc44f660508106c363c97/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6", size = 8452048, upload-time = "2025-02-27T19:18:56.536Z" }, - { url = "https://files.pythonhosted.org/packages/63/23/c0615001f67ce7c96b3051d856baedc0c818a2ed84570b9bf9bde200f85d/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d", size = 8597111, upload-time = "2025-02-27T19:18:59.439Z" }, - { url = "https://files.pythonhosted.org/packages/ca/c0/a07939a82aed77770514348f4568177d7dadab9787ebc618a616fe3d665e/matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea", size = 9402771, upload-time = "2025-02-27T19:19:01.944Z" }, - { url = "https://files.pythonhosted.org/packages/a6/b6/a9405484fb40746fdc6ae4502b16a9d6e53282ba5baaf9ebe2da579f68c4/matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c", size = 8063742, upload-time = "2025-02-27T19:19:04.632Z" }, - { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112, upload-time = "2025-02-27T19:19:07.59Z" }, - { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931, upload-time = "2025-02-27T19:19:10.515Z" }, - { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422, upload-time = "2025-02-27T19:19:12.738Z" }, - { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819, upload-time = "2025-02-27T19:19:15.306Z" }, - { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782, upload-time = "2025-02-27T19:19:17.841Z" }, - { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812, upload-time = "2025-02-27T19:19:20.888Z" }, - { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021, upload-time = "2025-02-27T19:19:23.412Z" }, - { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782, upload-time = "2025-02-27T19:19:28.33Z" }, - { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901, upload-time = "2025-02-27T19:19:31.536Z" }, - { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864, upload-time = "2025-02-27T19:19:34.233Z" }, - { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487, upload-time = "2025-02-27T19:19:36.924Z" }, - { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832, upload-time = "2025-02-27T19:19:39.431Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/2f/08/b89867ecea2e305f408fbb417139a8dd941ecf7b23a2e02157c36da546f0/matplotlib-3.10.1.tar.gz", hash = "sha256:e8d2d0e3881b129268585bf4765ad3ee73a4591d77b9a18c214ac7e3a79fb2ba", size = 36743335 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/1d/5e0dc3b59c034e43de16f94deb68f4ad8a96b3ea00f4b37c160b7474928e/matplotlib-3.10.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:66e907a06e68cb6cfd652c193311d61a12b54f56809cafbed9736ce5ad92f107", size = 8175488 }, + { url = "https://files.pythonhosted.org/packages/7a/81/dae7e14042e74da658c3336ab9799128e09a1ee03964f2d89630b5d12106/matplotlib-3.10.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b4bb156abb8fa5e5b2b460196f7db7264fc6d62678c03457979e7d5254b7be", size = 8046264 }, + { url = "https://files.pythonhosted.org/packages/21/c4/22516775dcde10fc9c9571d155f90710761b028fc44f660508106c363c97/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1985ad3d97f51307a2cbfc801a930f120def19ba22864182dacef55277102ba6", size = 8452048 }, + { url = "https://files.pythonhosted.org/packages/63/23/c0615001f67ce7c96b3051d856baedc0c818a2ed84570b9bf9bde200f85d/matplotlib-3.10.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96f2c2f825d1257e437a1482c5a2cf4fee15db4261bd6fc0750f81ba2b4ba3d", size = 8597111 }, + { url = "https://files.pythonhosted.org/packages/ca/c0/a07939a82aed77770514348f4568177d7dadab9787ebc618a616fe3d665e/matplotlib-3.10.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35e87384ee9e488d8dd5a2dd7baf471178d38b90618d8ea147aced4ab59c9bea", size = 9402771 }, + { url = "https://files.pythonhosted.org/packages/a6/b6/a9405484fb40746fdc6ae4502b16a9d6e53282ba5baaf9ebe2da579f68c4/matplotlib-3.10.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfd414bce89cc78a7e1d25202e979b3f1af799e416010a20ab2b5ebb3a02425c", size = 8063742 }, + { url = "https://files.pythonhosted.org/packages/60/73/6770ff5e5523d00f3bc584acb6031e29ee5c8adc2336b16cd1d003675fe0/matplotlib-3.10.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c42eee41e1b60fd83ee3292ed83a97a5f2a8239b10c26715d8a6172226988d7b", size = 8176112 }, + { url = "https://files.pythonhosted.org/packages/08/97/b0ca5da0ed54a3f6599c3ab568bdda65269bc27c21a2c97868c1625e4554/matplotlib-3.10.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4f0647b17b667ae745c13721602b540f7aadb2a32c5b96e924cd4fea5dcb90f1", size = 8046931 }, + { url = "https://files.pythonhosted.org/packages/df/9a/1acbdc3b165d4ce2dcd2b1a6d4ffb46a7220ceee960c922c3d50d8514067/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa3854b5f9473564ef40a41bc922be978fab217776e9ae1545c9b3a5cf2092a3", size = 8453422 }, + { url = "https://files.pythonhosted.org/packages/51/d0/2bc4368abf766203e548dc7ab57cf7e9c621f1a3c72b516cc7715347b179/matplotlib-3.10.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e496c01441be4c7d5f96d4e40f7fca06e20dcb40e44c8daa2e740e1757ad9e6", size = 8596819 }, + { url = "https://files.pythonhosted.org/packages/ab/1b/8b350f8a1746c37ab69dda7d7528d1fc696efb06db6ade9727b7887be16d/matplotlib-3.10.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d45d3f5245be5b469843450617dcad9af75ca50568acf59997bed9311131a0b", size = 9402782 }, + { url = "https://files.pythonhosted.org/packages/89/06/f570373d24d93503988ba8d04f213a372fa1ce48381c5eb15da985728498/matplotlib-3.10.1-cp313-cp313-win_amd64.whl", hash = "sha256:8e8e25b1209161d20dfe93037c8a7f7ca796ec9aa326e6e4588d8c4a5dd1e473", size = 8063812 }, + { url = "https://files.pythonhosted.org/packages/fc/e0/8c811a925b5a7ad75135f0e5af46408b78af88bbb02a1df775100ef9bfef/matplotlib-3.10.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:19b06241ad89c3ae9469e07d77efa87041eac65d78df4fcf9cac318028009b01", size = 8214021 }, + { url = "https://files.pythonhosted.org/packages/4a/34/319ec2139f68ba26da9d00fce2ff9f27679fb799a6c8e7358539801fd629/matplotlib-3.10.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01e63101ebb3014e6e9f80d9cf9ee361a8599ddca2c3e166c563628b39305dbb", size = 8090782 }, + { url = "https://files.pythonhosted.org/packages/77/ea/9812124ab9a99df5b2eec1110e9b2edc0b8f77039abf4c56e0a376e84a29/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f06bad951eea6422ac4e8bdebcf3a70c59ea0a03338c5d2b109f57b64eb3972", size = 8478901 }, + { url = "https://files.pythonhosted.org/packages/c9/db/b05bf463689134789b06dea85828f8ebe506fa1e37593f723b65b86c9582/matplotlib-3.10.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3dfb036f34873b46978f55e240cff7a239f6c4409eac62d8145bad3fc6ba5a3", size = 8613864 }, + { url = "https://files.pythonhosted.org/packages/c2/04/41ccec4409f3023a7576df3b5c025f1a8c8b81fbfe922ecfd837ac36e081/matplotlib-3.10.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dc6ab14a7ab3b4d813b88ba957fc05c79493a037f54e246162033591e770de6f", size = 9409487 }, + { url = "https://files.pythonhosted.org/packages/ac/c2/0d5aae823bdcc42cc99327ecdd4d28585e15ccd5218c453b7bcd827f3421/matplotlib-3.10.1-cp313-cp313t-win_amd64.whl", hash = "sha256:bc411ebd5889a78dabbc457b3fa153203e22248bfa6eedc6797be5df0164dbf9", size = 8134832 }, ] [[package]] @@ -514,9 +515,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, ] [[package]] @@ -529,9 +530,9 @@ dependencies = [ { name = "scipy" }, { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/91/c3/9f83c374314b2b42e7aec65f3bf87046415ab265f209fa8a04eb6da822ee/mizani-0.13.1.tar.gz", hash = "sha256:e3247ea12c746c8104767d7e42a2d16473173c7bc314f298d8294a58f4653353", size = 765181, upload-time = "2024-12-10T16:33:37.468Z" } +sdist = { url = "https://files.pythonhosted.org/packages/91/c3/9f83c374314b2b42e7aec65f3bf87046415ab265f209fa8a04eb6da822ee/mizani-0.13.1.tar.gz", hash = "sha256:e3247ea12c746c8104767d7e42a2d16473173c7bc314f298d8294a58f4653353", size = 765181 } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/85/16e17e75831ec01808c5f07e578f1552df87a4f5c827caa8be28f97b4c19/mizani-0.13.1-py3-none-any.whl", hash = "sha256:7da0dcacd43fbcc01c279ea06a76f1f064ae90dbb387c4a985ba24a92d3c7d7a", size = 127896, upload-time = "2024-12-10T16:33:35.763Z" }, + { url = "https://files.pythonhosted.org/packages/29/85/16e17e75831ec01808c5f07e578f1552df87a4f5c827caa8be28f97b4c19/mizani-0.13.1-py3-none-any.whl", hash = "sha256:7da0dcacd43fbcc01c279ea06a76f1f064ae90dbb387c4a985ba24a92d3c7d7a", size = 127896 }, ] [[package]] @@ -556,7 +557,7 @@ dependencies = [ [package.metadata] requires-dist = [ { name = "black", specifier = ">=25.1.0" }, - { name = "doubleml", extras = ["rdd"], specifier = ">=0.9.3" }, + { name = "doubleml", extras = ["rdd"], specifier = ">=0.10.0" }, { name = "ipykernel", specifier = ">=6.29.5" }, { name = "itables", specifier = ">=2.2.5" }, { name = "joblib", specifier = ">=1.4.2" }, @@ -573,83 +574,83 @@ requires-dist = [ name = "mypy-extensions" version = "1.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433, upload-time = "2023-02-04T12:11:27.157Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/a4/1ab47638b92648243faf97a5aeb6ea83059cc3624972ab6b8d2316078d3f/mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782", size = 4433 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695, upload-time = "2023-02-04T12:11:25.002Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d", size = 4695 }, ] [[package]] name = "narwhals" version = "1.31.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/36/fa/c2b6a4d5dbc4af15aa58c86920d5275a9c65142318179b246685069f57da/narwhals-1.31.0.tar.gz", hash = "sha256:333472e2562343dfdd27407ec9b5114a07c81d0416794e4ac6b703dd925c6a1a", size = 253463, upload-time = "2025-03-17T15:26:26.065Z" } +sdist = { url = "https://files.pythonhosted.org/packages/36/fa/c2b6a4d5dbc4af15aa58c86920d5275a9c65142318179b246685069f57da/narwhals-1.31.0.tar.gz", hash = "sha256:333472e2562343dfdd27407ec9b5114a07c81d0416794e4ac6b703dd925c6a1a", size = 253463 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/c0/fb39bd876ea2fd9509343d643690cd2f9715e6a77271e7c7b26f1eea70c1/narwhals-1.31.0-py3-none-any.whl", hash = "sha256:2a7b79bb5f511055c4c0142121fc0d4171ea171458e12d44dbd9c8fc6488e997", size = 313124, upload-time = "2025-03-17T15:26:23.87Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/fb39bd876ea2fd9509343d643690cd2f9715e6a77271e7c7b26f1eea70c1/narwhals-1.31.0-py3-none-any.whl", hash = "sha256:2a7b79bb5f511055c4c0142121fc0d4171ea171458e12d44dbd9c8fc6488e997", size = 313124 }, ] [[package]] name = "nest-asyncio" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195 }, ] [[package]] name = "nodeenv" version = "1.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314 }, ] [[package]] name = "numpy" version = "2.2.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701, upload-time = "2025-03-16T18:27:00.648Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/30/182db21d4f2a95904cec1a6f779479ea1ac07c0647f064dea454ec650c42/numpy-2.2.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", size = 20947156, upload-time = "2025-03-16T18:09:51.975Z" }, - { url = "https://files.pythonhosted.org/packages/24/6d/9483566acfbda6c62c6bc74b6e981c777229d2af93c8eb2469b26ac1b7bc/numpy-2.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", size = 14133092, upload-time = "2025-03-16T18:10:16.329Z" }, - { url = "https://files.pythonhosted.org/packages/27/f6/dba8a258acbf9d2bed2525cdcbb9493ef9bae5199d7a9cb92ee7e9b2aea6/numpy-2.2.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", size = 5163515, upload-time = "2025-03-16T18:10:26.19Z" }, - { url = "https://files.pythonhosted.org/packages/62/30/82116199d1c249446723c68f2c9da40d7f062551036f50b8c4caa42ae252/numpy-2.2.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", size = 6696558, upload-time = "2025-03-16T18:10:38.996Z" }, - { url = "https://files.pythonhosted.org/packages/0e/b2/54122b3c6df5df3e87582b2e9430f1bdb63af4023c739ba300164c9ae503/numpy-2.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", size = 14084742, upload-time = "2025-03-16T18:11:02.76Z" }, - { url = "https://files.pythonhosted.org/packages/02/e2/e2cbb8d634151aab9528ef7b8bab52ee4ab10e076509285602c2a3a686e0/numpy-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", size = 16134051, upload-time = "2025-03-16T18:11:32.767Z" }, - { url = "https://files.pythonhosted.org/packages/8e/21/efd47800e4affc993e8be50c1b768de038363dd88865920439ef7b422c60/numpy-2.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", size = 15578972, upload-time = "2025-03-16T18:11:59.877Z" }, - { url = "https://files.pythonhosted.org/packages/04/1e/f8bb88f6157045dd5d9b27ccf433d016981032690969aa5c19e332b138c0/numpy-2.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", size = 17898106, upload-time = "2025-03-16T18:12:31.487Z" }, - { url = "https://files.pythonhosted.org/packages/2b/93/df59a5a3897c1f036ae8ff845e45f4081bb06943039ae28a3c1c7c780f22/numpy-2.2.4-cp312-cp312-win32.whl", hash = "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", size = 6311190, upload-time = "2025-03-16T18:12:44.46Z" }, - { url = "https://files.pythonhosted.org/packages/46/69/8c4f928741c2a8efa255fdc7e9097527c6dc4e4df147e3cadc5d9357ce85/numpy-2.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", size = 12644305, upload-time = "2025-03-16T18:13:06.864Z" }, - { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623, upload-time = "2025-03-16T18:13:43.231Z" }, - { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681, upload-time = "2025-03-16T18:14:08.031Z" }, - { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759, upload-time = "2025-03-16T18:14:18.613Z" }, - { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092, upload-time = "2025-03-16T18:14:31.386Z" }, - { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422, upload-time = "2025-03-16T18:14:54.83Z" }, - { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202, upload-time = "2025-03-16T18:15:22.035Z" }, - { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131, upload-time = "2025-03-16T18:15:48.546Z" }, - { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270, upload-time = "2025-03-16T18:16:20.274Z" }, - { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141, upload-time = "2025-03-16T18:20:15.297Z" }, - { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885, upload-time = "2025-03-16T18:20:36.982Z" }, - { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829, upload-time = "2025-03-16T18:16:56.191Z" }, - { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419, upload-time = "2025-03-16T18:17:22.811Z" }, - { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414, upload-time = "2025-03-16T18:17:34.066Z" }, - { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379, upload-time = "2025-03-16T18:17:47.466Z" }, - { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725, upload-time = "2025-03-16T18:18:11.904Z" }, - { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638, upload-time = "2025-03-16T18:18:40.749Z" }, - { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717, upload-time = "2025-03-16T18:19:04.512Z" }, - { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998, upload-time = "2025-03-16T18:19:32.52Z" }, - { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896, upload-time = "2025-03-16T18:19:43.55Z" }, - { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119, upload-time = "2025-03-16T18:20:03.94Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/e1/78/31103410a57bc2c2b93a3597340a8119588571f6a4539067546cb9a0bfac/numpy-2.2.4.tar.gz", hash = "sha256:9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f", size = 20270701 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/30/182db21d4f2a95904cec1a6f779479ea1ac07c0647f064dea454ec650c42/numpy-2.2.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a7b9084668aa0f64e64bd00d27ba5146ef1c3a8835f3bd912e7a9e01326804c4", size = 20947156 }, + { url = "https://files.pythonhosted.org/packages/24/6d/9483566acfbda6c62c6bc74b6e981c777229d2af93c8eb2469b26ac1b7bc/numpy-2.2.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dbe512c511956b893d2dacd007d955a3f03d555ae05cfa3ff1c1ff6df8851854", size = 14133092 }, + { url = "https://files.pythonhosted.org/packages/27/f6/dba8a258acbf9d2bed2525cdcbb9493ef9bae5199d7a9cb92ee7e9b2aea6/numpy-2.2.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bb649f8b207ab07caebba230d851b579a3c8711a851d29efe15008e31bb4de24", size = 5163515 }, + { url = "https://files.pythonhosted.org/packages/62/30/82116199d1c249446723c68f2c9da40d7f062551036f50b8c4caa42ae252/numpy-2.2.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:f34dc300df798742b3d06515aa2a0aee20941c13579d7a2f2e10af01ae4901ee", size = 6696558 }, + { url = "https://files.pythonhosted.org/packages/0e/b2/54122b3c6df5df3e87582b2e9430f1bdb63af4023c739ba300164c9ae503/numpy-2.2.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3f7ac96b16955634e223b579a3e5798df59007ca43e8d451a0e6a50f6bfdfba", size = 14084742 }, + { url = "https://files.pythonhosted.org/packages/02/e2/e2cbb8d634151aab9528ef7b8bab52ee4ab10e076509285602c2a3a686e0/numpy-2.2.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f92084defa704deadd4e0a5ab1dc52d8ac9e8a8ef617f3fbb853e79b0ea3592", size = 16134051 }, + { url = "https://files.pythonhosted.org/packages/8e/21/efd47800e4affc993e8be50c1b768de038363dd88865920439ef7b422c60/numpy-2.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4e84a6283b36632e2a5b56e121961f6542ab886bc9e12f8f9818b3c266bfbb", size = 15578972 }, + { url = "https://files.pythonhosted.org/packages/04/1e/f8bb88f6157045dd5d9b27ccf433d016981032690969aa5c19e332b138c0/numpy-2.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:11c43995255eb4127115956495f43e9343736edb7fcdb0d973defd9de14cd84f", size = 17898106 }, + { url = "https://files.pythonhosted.org/packages/2b/93/df59a5a3897c1f036ae8ff845e45f4081bb06943039ae28a3c1c7c780f22/numpy-2.2.4-cp312-cp312-win32.whl", hash = "sha256:65ef3468b53269eb5fdb3a5c09508c032b793da03251d5f8722b1194f1790c00", size = 6311190 }, + { url = "https://files.pythonhosted.org/packages/46/69/8c4f928741c2a8efa255fdc7e9097527c6dc4e4df147e3cadc5d9357ce85/numpy-2.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:2aad3c17ed2ff455b8eaafe06bcdae0062a1db77cb99f4b9cbb5f4ecb13c5146", size = 12644305 }, + { url = "https://files.pythonhosted.org/packages/2a/d0/bd5ad792e78017f5decfb2ecc947422a3669a34f775679a76317af671ffc/numpy-2.2.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cf4e5c6a278d620dee9ddeb487dc6a860f9b199eadeecc567f777daace1e9e7", size = 20933623 }, + { url = "https://files.pythonhosted.org/packages/c3/bc/2b3545766337b95409868f8e62053135bdc7fa2ce630aba983a2aa60b559/numpy-2.2.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1974afec0b479e50438fc3648974268f972e2d908ddb6d7fb634598cdb8260a0", size = 14148681 }, + { url = "https://files.pythonhosted.org/packages/6a/70/67b24d68a56551d43a6ec9fe8c5f91b526d4c1a46a6387b956bf2d64744e/numpy-2.2.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:79bd5f0a02aa16808fcbc79a9a376a147cc1045f7dfe44c6e7d53fa8b8a79392", size = 5148759 }, + { url = "https://files.pythonhosted.org/packages/1c/8b/e2fc8a75fcb7be12d90b31477c9356c0cbb44abce7ffb36be39a0017afad/numpy-2.2.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:3387dd7232804b341165cedcb90694565a6015433ee076c6754775e85d86f1fc", size = 6683092 }, + { url = "https://files.pythonhosted.org/packages/13/73/41b7b27f169ecf368b52533edb72e56a133f9e86256e809e169362553b49/numpy-2.2.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f527d8fdb0286fd2fd97a2a96c6be17ba4232da346931d967a0630050dfd298", size = 14081422 }, + { url = "https://files.pythonhosted.org/packages/4b/04/e208ff3ae3ddfbafc05910f89546382f15a3f10186b1f56bd99f159689c2/numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bce43e386c16898b91e162e5baaad90c4b06f9dcbe36282490032cec98dc8ae7", size = 16132202 }, + { url = "https://files.pythonhosted.org/packages/fe/bc/2218160574d862d5e55f803d88ddcad88beff94791f9c5f86d67bd8fbf1c/numpy-2.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31504f970f563d99f71a3512d0c01a645b692b12a63630d6aafa0939e52361e6", size = 15573131 }, + { url = "https://files.pythonhosted.org/packages/a5/78/97c775bc4f05abc8a8426436b7cb1be806a02a2994b195945600855e3a25/numpy-2.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:81413336ef121a6ba746892fad881a83351ee3e1e4011f52e97fba79233611fd", size = 17894270 }, + { url = "https://files.pythonhosted.org/packages/b9/eb/38c06217a5f6de27dcb41524ca95a44e395e6a1decdc0c99fec0832ce6ae/numpy-2.2.4-cp313-cp313-win32.whl", hash = "sha256:f486038e44caa08dbd97275a9a35a283a8f1d2f0ee60ac260a1790e76660833c", size = 6308141 }, + { url = "https://files.pythonhosted.org/packages/52/17/d0dd10ab6d125c6d11ffb6dfa3423c3571befab8358d4f85cd4471964fcd/numpy-2.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:207a2b8441cc8b6a2a78c9ddc64d00d20c303d79fba08c577752f080c4007ee3", size = 12636885 }, + { url = "https://files.pythonhosted.org/packages/fa/e2/793288ede17a0fdc921172916efb40f3cbc2aa97e76c5c84aba6dc7e8747/numpy-2.2.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8120575cb4882318c791f839a4fd66161a6fa46f3f0a5e613071aae35b5dd8f8", size = 20961829 }, + { url = "https://files.pythonhosted.org/packages/3a/75/bb4573f6c462afd1ea5cbedcc362fe3e9bdbcc57aefd37c681be1155fbaa/numpy-2.2.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a761ba0fa886a7bb33c6c8f6f20213735cb19642c580a931c625ee377ee8bd39", size = 14161419 }, + { url = "https://files.pythonhosted.org/packages/03/68/07b4cd01090ca46c7a336958b413cdbe75002286295f2addea767b7f16c9/numpy-2.2.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:ac0280f1ba4a4bfff363a99a6aceed4f8e123f8a9b234c89140f5e894e452ecd", size = 5196414 }, + { url = "https://files.pythonhosted.org/packages/a5/fd/d4a29478d622fedff5c4b4b4cedfc37a00691079623c0575978d2446db9e/numpy-2.2.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:879cf3a9a2b53a4672a168c21375166171bc3932b7e21f622201811c43cdd3b0", size = 6709379 }, + { url = "https://files.pythonhosted.org/packages/41/78/96dddb75bb9be730b87c72f30ffdd62611aba234e4e460576a068c98eff6/numpy-2.2.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f05d4198c1bacc9124018109c5fba2f3201dbe7ab6e92ff100494f236209c960", size = 14051725 }, + { url = "https://files.pythonhosted.org/packages/00/06/5306b8199bffac2a29d9119c11f457f6c7d41115a335b78d3f86fad4dbe8/numpy-2.2.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f085ce2e813a50dfd0e01fbfc0c12bbe5d2063d99f8b29da30e544fb6483b8", size = 16101638 }, + { url = "https://files.pythonhosted.org/packages/fa/03/74c5b631ee1ded596945c12027649e6344614144369fd3ec1aaced782882/numpy-2.2.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:92bda934a791c01d6d9d8e038363c50918ef7c40601552a58ac84c9613a665bc", size = 15571717 }, + { url = "https://files.pythonhosted.org/packages/cb/dc/4fc7c0283abe0981e3b89f9b332a134e237dd476b0c018e1e21083310c31/numpy-2.2.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ee4d528022f4c5ff67332469e10efe06a267e32f4067dc76bb7e2cddf3cd25ff", size = 17879998 }, + { url = "https://files.pythonhosted.org/packages/e5/2b/878576190c5cfa29ed896b518cc516aecc7c98a919e20706c12480465f43/numpy-2.2.4-cp313-cp313t-win32.whl", hash = "sha256:05c076d531e9998e7e694c36e8b349969c56eadd2cdcd07242958489d79a7286", size = 6366896 }, + { url = "https://files.pythonhosted.org/packages/3e/05/eb7eec66b95cf697f08c754ef26c3549d03ebd682819f794cb039574a0a6/numpy-2.2.4-cp313-cp313t-win_amd64.whl", hash = "sha256:188dcbca89834cc2e14eb2f106c96d6d46f200fe0200310fc29089657379c58d", size = 12739119 }, ] [[package]] name = "packaging" version = "24.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950, upload-time = "2024-11-08T09:47:47.202Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451, upload-time = "2024-11-08T09:47:44.722Z" }, + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, ] [[package]] @@ -662,46 +663,46 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213, upload-time = "2024-09-20T13:10:04.827Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893, upload-time = "2024-09-20T13:09:09.655Z" }, - { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475, upload-time = "2024-09-20T13:09:14.718Z" }, - { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645, upload-time = "2024-09-20T19:02:03.88Z" }, - { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445, upload-time = "2024-09-20T13:09:17.621Z" }, - { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235, upload-time = "2024-09-20T19:02:07.094Z" }, - { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756, upload-time = "2024-09-20T13:09:20.474Z" }, - { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248, upload-time = "2024-09-20T13:09:23.137Z" }, - { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643, upload-time = "2024-09-20T13:09:25.522Z" }, - { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573, upload-time = "2024-09-20T13:09:28.012Z" }, - { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085, upload-time = "2024-09-20T19:02:10.451Z" }, - { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809, upload-time = "2024-09-20T13:09:30.814Z" }, - { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316, upload-time = "2024-09-20T19:02:13.825Z" }, - { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055, upload-time = "2024-09-20T13:09:33.462Z" }, - { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175, upload-time = "2024-09-20T13:09:35.871Z" }, - { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650, upload-time = "2024-09-20T13:09:38.685Z" }, - { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177, upload-time = "2024-09-20T13:09:41.141Z" }, - { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526, upload-time = "2024-09-20T19:02:16.905Z" }, - { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013, upload-time = "2024-09-20T13:09:44.39Z" }, - { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620, upload-time = "2024-09-20T19:02:20.639Z" }, - { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436, upload-time = "2024-09-20T13:09:48.112Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/9c/d6/9f8431bacc2e19dca897724cd097b1bb224a6ad5433784a44b587c7c13af/pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667", size = 4399213 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/a3/fb2734118db0af37ea7433f57f722c0a56687e14b14690edff0cdb4b7e58/pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9", size = 12529893 }, + { url = "https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4", size = 11363475 }, + { url = "https://files.pythonhosted.org/packages/c6/2a/4bba3f03f7d07207481fed47f5b35f556c7441acddc368ec43d6643c5777/pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3", size = 15188645 }, + { url = "https://files.pythonhosted.org/packages/38/f8/d8fddee9ed0d0c0f4a2132c1dfcf0e3e53265055da8df952a53e7eaf178c/pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319", size = 12739445 }, + { url = "https://files.pythonhosted.org/packages/20/e8/45a05d9c39d2cea61ab175dbe6a2de1d05b679e8de2011da4ee190d7e748/pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8", size = 16359235 }, + { url = "https://files.pythonhosted.org/packages/1d/99/617d07a6a5e429ff90c90da64d428516605a1ec7d7bea494235e1c3882de/pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a", size = 14056756 }, + { url = "https://files.pythonhosted.org/packages/29/d4/1244ab8edf173a10fd601f7e13b9566c1b525c4f365d6bee918e68381889/pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13", size = 11504248 }, + { url = "https://files.pythonhosted.org/packages/64/22/3b8f4e0ed70644e85cfdcd57454686b9057c6c38d2f74fe4b8bc2527214a/pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015", size = 12477643 }, + { url = "https://files.pythonhosted.org/packages/e4/93/b3f5d1838500e22c8d793625da672f3eec046b1a99257666c94446969282/pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28", size = 11281573 }, + { url = "https://files.pythonhosted.org/packages/f5/94/6c79b07f0e5aab1dcfa35a75f4817f5c4f677931d4234afcd75f0e6a66ca/pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0", size = 15196085 }, + { url = "https://files.pythonhosted.org/packages/e8/31/aa8da88ca0eadbabd0a639788a6da13bb2ff6edbbb9f29aa786450a30a91/pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24", size = 12711809 }, + { url = "https://files.pythonhosted.org/packages/ee/7c/c6dbdb0cb2a4344cacfb8de1c5808ca885b2e4dcfde8008266608f9372af/pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659", size = 16356316 }, + { url = "https://files.pythonhosted.org/packages/57/b7/8b757e7d92023b832869fa8881a992696a0bfe2e26f72c9ae9f255988d42/pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb", size = 14022055 }, + { url = "https://files.pythonhosted.org/packages/3b/bc/4b18e2b8c002572c5a441a64826252ce5da2aa738855747247a971988043/pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d", size = 11481175 }, + { url = "https://files.pythonhosted.org/packages/76/a3/a5d88146815e972d40d19247b2c162e88213ef51c7c25993942c39dbf41d/pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468", size = 12615650 }, + { url = "https://files.pythonhosted.org/packages/9c/8c/f0fd18f6140ddafc0c24122c8a964e48294acc579d47def376fef12bcb4a/pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18", size = 11290177 }, + { url = "https://files.pythonhosted.org/packages/ed/f9/e995754eab9c0f14c6777401f7eece0943840b7a9fc932221c19d1abee9f/pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2", size = 14651526 }, + { url = "https://files.pythonhosted.org/packages/25/b0/98d6ae2e1abac4f35230aa756005e8654649d305df9a28b16b9ae4353bff/pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4", size = 11871013 }, + { url = "https://files.pythonhosted.org/packages/cc/57/0f72a10f9db6a4628744c8e8f0df4e6e21de01212c7c981d31e50ffc8328/pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d", size = 15711620 }, + { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, ] [[package]] name = "parso" version = "0.8.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload-time = "2024-04-05T09:43:55.897Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload-time = "2024-04-05T09:43:53.299Z" }, + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, ] [[package]] name = "pathspec" version = "0.12.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, ] [[package]] @@ -711,9 +712,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/81/74f6a65b848ffd16c18f920620ce999fe45fe27f01ab3911260ce4ed85e4/patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4", size = 396010, upload-time = "2024-11-12T14:10:54.642Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/81/74f6a65b848ffd16c18f920620ce999fe45fe27f01ab3911260ce4ed85e4/patsy-1.0.1.tar.gz", hash = "sha256:e786a9391eec818c054e359b737bbce692f051aee4c661f4141cc88fb459c0c4", size = 396010 } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c", size = 232923, upload-time = "2024-11-12T14:10:52.85Z" }, + { url = "https://files.pythonhosted.org/packages/87/2b/b50d3d08ea0fc419c183a84210571eba005328efa62b6b98bc28e9ead32a/patsy-1.0.1-py2.py3-none-any.whl", hash = "sha256:751fb38f9e97e62312e921a1954b81e1bb2bcda4f5eeabaf94db251ee791509c", size = 232923 }, ] [[package]] @@ -723,56 +724,56 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ptyprocess" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, ] [[package]] name = "pillow" version = "11.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715, upload-time = "2025-01-02T08:13:58.407Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818, upload-time = "2025-01-02T08:11:22.518Z" }, - { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662, upload-time = "2025-01-02T08:11:25.19Z" }, - { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317, upload-time = "2025-01-02T08:11:30.371Z" }, - { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999, upload-time = "2025-01-02T08:11:33.499Z" }, - { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819, upload-time = "2025-01-02T08:11:37.304Z" }, - { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081, upload-time = "2025-01-02T08:11:39.598Z" }, - { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513, upload-time = "2025-01-02T08:11:43.083Z" }, - { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298, upload-time = "2025-01-02T08:11:46.626Z" }, - { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630, upload-time = "2025-01-02T08:11:49.401Z" }, - { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369, upload-time = "2025-01-02T08:11:52.02Z" }, - { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240, upload-time = "2025-01-02T08:11:56.193Z" }, - { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640, upload-time = "2025-01-02T08:11:58.329Z" }, - { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437, upload-time = "2025-01-02T08:12:01.797Z" }, - { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605, upload-time = "2025-01-02T08:12:05.224Z" }, - { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173, upload-time = "2025-01-02T08:12:08.281Z" }, - { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145, upload-time = "2025-01-02T08:12:11.411Z" }, - { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340, upload-time = "2025-01-02T08:12:15.29Z" }, - { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906, upload-time = "2025-01-02T08:12:17.485Z" }, - { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759, upload-time = "2025-01-02T08:12:20.382Z" }, - { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657, upload-time = "2025-01-02T08:12:23.922Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304, upload-time = "2025-01-02T08:12:28.069Z" }, - { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117, upload-time = "2025-01-02T08:12:30.064Z" }, - { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060, upload-time = "2025-01-02T08:12:32.362Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192, upload-time = "2025-01-02T08:12:34.361Z" }, - { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805, upload-time = "2025-01-02T08:12:36.99Z" }, - { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623, upload-time = "2025-01-02T08:12:41.912Z" }, - { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191, upload-time = "2025-01-02T08:12:45.186Z" }, - { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494, upload-time = "2025-01-02T08:12:47.098Z" }, - { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595, upload-time = "2025-01-02T08:12:50.47Z" }, - { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651, upload-time = "2025-01-02T08:12:53.356Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/f3/af/c097e544e7bd278333db77933e535098c259609c4eb3b85381109602fb5b/pillow-11.1.0.tar.gz", hash = "sha256:368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20", size = 46742715 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/95/20/9ce6ed62c91c073fcaa23d216e68289e19d95fb8188b9fb7a63d36771db8/pillow-11.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2062ffb1d36544d42fcaa277b069c88b01bb7298f4efa06731a7fd6cc290b81a", size = 3226818 }, + { url = "https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b", size = 3101662 }, + { url = "https://files.pythonhosted.org/packages/08/d9/892e705f90051c7a2574d9f24579c9e100c828700d78a63239676f960b74/pillow-11.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9409c080586d1f683df3f184f20e36fb647f2e0bc3988094d4fd8c9f4eb1b3b3", size = 4329317 }, + { url = "https://files.pythonhosted.org/packages/8c/aa/7f29711f26680eab0bcd3ecdd6d23ed6bce180d82e3f6380fb7ae35fcf3b/pillow-11.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fdadc077553621911f27ce206ffcbec7d3f8d7b50e0da39f10997e8e2bb7f6a", size = 4412999 }, + { url = "https://files.pythonhosted.org/packages/c8/c4/8f0fe3b9e0f7196f6d0bbb151f9fba323d72a41da068610c4c960b16632a/pillow-11.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:93a18841d09bcdd774dcdc308e4537e1f867b3dec059c131fde0327899734aa1", size = 4368819 }, + { url = "https://files.pythonhosted.org/packages/38/0d/84200ed6a871ce386ddc82904bfadc0c6b28b0c0ec78176871a4679e40b3/pillow-11.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9aa9aeddeed452b2f616ff5507459e7bab436916ccb10961c4a382cd3e03f47f", size = 4496081 }, + { url = "https://files.pythonhosted.org/packages/84/9c/9bcd66f714d7e25b64118e3952d52841a4babc6d97b6d28e2261c52045d4/pillow-11.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3cdcdb0b896e981678eee140d882b70092dac83ac1cdf6b3a60e2216a73f2b91", size = 4296513 }, + { url = "https://files.pythonhosted.org/packages/db/61/ada2a226e22da011b45f7104c95ebda1b63dcbb0c378ad0f7c2a710f8fd2/pillow-11.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:36ba10b9cb413e7c7dfa3e189aba252deee0602c86c309799da5a74009ac7a1c", size = 4431298 }, + { url = "https://files.pythonhosted.org/packages/e7/c4/fc6e86750523f367923522014b821c11ebc5ad402e659d8c9d09b3c9d70c/pillow-11.1.0-cp312-cp312-win32.whl", hash = "sha256:cfd5cd998c2e36a862d0e27b2df63237e67273f2fc78f47445b14e73a810e7e6", size = 2291630 }, + { url = "https://files.pythonhosted.org/packages/08/5c/2104299949b9d504baf3f4d35f73dbd14ef31bbd1ddc2c1b66a5b7dfda44/pillow-11.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a697cd8ba0383bba3d2d3ada02b34ed268cb548b369943cd349007730c92bddf", size = 2626369 }, + { url = "https://files.pythonhosted.org/packages/37/f3/9b18362206b244167c958984b57c7f70a0289bfb59a530dd8af5f699b910/pillow-11.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:4dd43a78897793f60766563969442020e90eb7847463eca901e41ba186a7d4a5", size = 2375240 }, + { url = "https://files.pythonhosted.org/packages/b3/31/9ca79cafdce364fd5c980cd3416c20ce1bebd235b470d262f9d24d810184/pillow-11.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae98e14432d458fc3de11a77ccb3ae65ddce70f730e7c76140653048c71bfcbc", size = 3226640 }, + { url = "https://files.pythonhosted.org/packages/ac/0f/ff07ad45a1f172a497aa393b13a9d81a32e1477ef0e869d030e3c1532521/pillow-11.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cc1331b6d5a6e144aeb5e626f4375f5b7ae9934ba620c0ac6b3e43d5e683a0f0", size = 3101437 }, + { url = "https://files.pythonhosted.org/packages/08/2f/9906fca87a68d29ec4530be1f893149e0cb64a86d1f9f70a7cfcdfe8ae44/pillow-11.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:758e9d4ef15d3560214cddbc97b8ef3ef86ce04d62ddac17ad39ba87e89bd3b1", size = 4326605 }, + { url = "https://files.pythonhosted.org/packages/b0/0f/f3547ee15b145bc5c8b336401b2d4c9d9da67da9dcb572d7c0d4103d2c69/pillow-11.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b523466b1a31d0dcef7c5be1f20b942919b62fd6e9a9be199d035509cbefc0ec", size = 4411173 }, + { url = "https://files.pythonhosted.org/packages/b1/df/bf8176aa5db515c5de584c5e00df9bab0713548fd780c82a86cba2c2fedb/pillow-11.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:9044b5e4f7083f209c4e35aa5dd54b1dd5b112b108648f5c902ad586d4f945c5", size = 4369145 }, + { url = "https://files.pythonhosted.org/packages/de/7c/7433122d1cfadc740f577cb55526fdc39129a648ac65ce64db2eb7209277/pillow-11.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:3764d53e09cdedd91bee65c2527815d315c6b90d7b8b79759cc48d7bf5d4f114", size = 4496340 }, + { url = "https://files.pythonhosted.org/packages/25/46/dd94b93ca6bd555588835f2504bd90c00d5438fe131cf01cfa0c5131a19d/pillow-11.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:31eba6bbdd27dde97b0174ddf0297d7a9c3a507a8a1480e1e60ef914fe23d352", size = 4296906 }, + { url = "https://files.pythonhosted.org/packages/a8/28/2f9d32014dfc7753e586db9add35b8a41b7a3b46540e965cb6d6bc607bd2/pillow-11.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b5d658fbd9f0d6eea113aea286b21d3cd4d3fd978157cbf2447a6035916506d3", size = 4431759 }, + { url = "https://files.pythonhosted.org/packages/33/48/19c2cbe7403870fbe8b7737d19eb013f46299cdfe4501573367f6396c775/pillow-11.1.0-cp313-cp313-win32.whl", hash = "sha256:f86d3a7a9af5d826744fabf4afd15b9dfef44fe69a98541f666f66fbb8d3fef9", size = 2291657 }, + { url = "https://files.pythonhosted.org/packages/3b/ad/285c556747d34c399f332ba7c1a595ba245796ef3e22eae190f5364bb62b/pillow-11.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:593c5fd6be85da83656b93ffcccc2312d2d149d251e98588b14fbc288fd8909c", size = 2626304 }, + { url = "https://files.pythonhosted.org/packages/e5/7b/ef35a71163bf36db06e9c8729608f78dedf032fc8313d19bd4be5c2588f3/pillow-11.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:11633d58b6ee5733bde153a8dafd25e505ea3d32e261accd388827ee987baf65", size = 2375117 }, + { url = "https://files.pythonhosted.org/packages/79/30/77f54228401e84d6791354888549b45824ab0ffde659bafa67956303a09f/pillow-11.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:70ca5ef3b3b1c4a0812b5c63c57c23b63e53bc38e758b37a951e5bc466449861", size = 3230060 }, + { url = "https://files.pythonhosted.org/packages/ce/b1/56723b74b07dd64c1010fee011951ea9c35a43d8020acd03111f14298225/pillow-11.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8000376f139d4d38d6851eb149b321a52bb8893a88dae8ee7d95840431977081", size = 3106192 }, + { url = "https://files.pythonhosted.org/packages/e1/cd/7bf7180e08f80a4dcc6b4c3a0aa9e0b0ae57168562726a05dc8aa8fa66b0/pillow-11.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee85f0696a17dd28fbcfceb59f9510aa71934b483d1f5601d1030c3c8304f3c", size = 4446805 }, + { url = "https://files.pythonhosted.org/packages/97/42/87c856ea30c8ed97e8efbe672b58c8304dee0573f8c7cab62ae9e31db6ae/pillow-11.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:dd0e081319328928531df7a0e63621caf67652c8464303fd102141b785ef9547", size = 4530623 }, + { url = "https://files.pythonhosted.org/packages/ff/41/026879e90c84a88e33fb00cc6bd915ac2743c67e87a18f80270dfe3c2041/pillow-11.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e63e4e5081de46517099dc30abe418122f54531a6ae2ebc8680bcd7096860eab", size = 4465191 }, + { url = "https://files.pythonhosted.org/packages/e5/fb/a7960e838bc5df57a2ce23183bfd2290d97c33028b96bde332a9057834d3/pillow-11.1.0-cp313-cp313t-win32.whl", hash = "sha256:dda60aa465b861324e65a78c9f5cf0f4bc713e4309f83bc387be158b077963d9", size = 2295494 }, + { url = "https://files.pythonhosted.org/packages/d7/6c/6ec83ee2f6f0fda8d4cf89045c6be4b0373ebfc363ba8538f8c999f63fcd/pillow-11.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ad5db5781c774ab9a9b2c4302bbf0c1014960a0a7be63278d13ae6fdf88126fe", size = 2631595 }, + { url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 }, ] [[package]] name = "platformdirs" version = "4.3.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302, upload-time = "2024-09-17T19:06:50.688Z" } +sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439, upload-time = "2024-09-17T19:06:49.212Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, ] [[package]] @@ -783,9 +784,9 @@ dependencies = [ { name = "narwhals" }, { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/cc/e41b5f697ae403f0b50e47b7af2e36642a193085f553bf7cc1169362873a/plotly-6.0.1.tar.gz", hash = "sha256:dd8400229872b6e3c964b099be699f8d00c489a974f2cfccfad5e8240873366b", size = 8094643, upload-time = "2025-03-17T15:02:23.994Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/cc/e41b5f697ae403f0b50e47b7af2e36642a193085f553bf7cc1169362873a/plotly-6.0.1.tar.gz", hash = "sha256:dd8400229872b6e3c964b099be699f8d00c489a974f2cfccfad5e8240873366b", size = 8094643 } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl", hash = "sha256:4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768", size = 14805757, upload-time = "2025-03-17T15:02:18.73Z" }, + { url = "https://files.pythonhosted.org/packages/02/65/ad2bc85f7377f5cfba5d4466d5474423a3fb7f6a97fd807c06f92dd3e721/plotly-6.0.1-py3-none-any.whl", hash = "sha256:4714db20fea57a435692c548a4eb4fae454f7daddf15f8d8ba7e1045681d7768", size = 14805757 }, ] [[package]] @@ -800,9 +801,9 @@ dependencies = [ { name = "scipy" }, { name = "statsmodels" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5d/0e/618bfa724ad19418c83eb22cdc4332dc69bb67f47094bd013ffe15e188d2/plotnine-0.14.5.tar.gz", hash = "sha256:9e75969e8e10d8d770a4be36d10e075cc10b88ca6fcc99e36ada53436fb5653f", size = 6424617, upload-time = "2025-01-02T11:06:07.338Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5d/0e/618bfa724ad19418c83eb22cdc4332dc69bb67f47094bd013ffe15e188d2/plotnine-0.14.5.tar.gz", hash = "sha256:9e75969e8e10d8d770a4be36d10e075cc10b88ca6fcc99e36ada53436fb5653f", size = 6424617 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/c5/7cfda7ba9fa02243367fbfb4880b6de8039266f22c47c2dbbd39b6adc46f/plotnine-0.14.5-py3-none-any.whl", hash = "sha256:4a8bc4360732dd69a0263def4abab285ed8f0f4386186f1e44c642f2cea79b88", size = 1301197, upload-time = "2025-01-02T11:06:03.686Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c5/7cfda7ba9fa02243367fbfb4880b6de8039266f22c47c2dbbd39b6adc46f/plotnine-0.14.5-py3-none-any.whl", hash = "sha256:4a8bc4360732dd69a0263def4abab285ed8f0f4386186f1e44c642f2cea79b88", size = 1301197 }, ] [[package]] @@ -816,9 +817,9 @@ dependencies = [ { name = "pyyaml" }, { name = "virtualenv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424, upload-time = "2025-03-18T21:35:20.987Z" } +sdist = { url = "https://files.pythonhosted.org/packages/08/39/679ca9b26c7bb2999ff122d50faa301e49af82ca9c066ec061cfbc0c6784/pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146", size = 193424 } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707, upload-time = "2025-03-18T21:35:19.343Z" }, + { url = "https://files.pythonhosted.org/packages/88/74/a88bf1b1efeae488a0c0b7bdf71429c313722d1fc0f377537fbe554e6180/pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd", size = 220707 }, ] [[package]] @@ -828,69 +829,69 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wcwidth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087, upload-time = "2025-01-20T15:55:35.072Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/e1/bd15cb8ffdcfeeb2bdc215de3c3cffca11408d829e4b8416dcfe71ba8854/prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab", size = 429087 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816, upload-time = "2025-01-20T15:55:29.98Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ea/d836f008d33151c7a1f62caf3d8dd782e4d15f6a43897f64480c2b8de2ad/prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198", size = 387816 }, ] [[package]] name = "psutil" version = "7.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051 }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535 }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004 }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986 }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544 }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053 }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885 }, ] [[package]] name = "ptyprocess" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, ] [[package]] name = "pure-eval" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, ] [[package]] name = "pycparser" version = "2.22" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, ] [[package]] name = "pygments" version = "2.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581, upload-time = "2025-01-06T17:26:30.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293, upload-time = "2025-01-06T17:26:25.553Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 }, ] [[package]] name = "pyparsing" version = "3.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/1a/3544f4f299a47911c2ab3710f534e52fea62a633c96806995da5d25be4b2/pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a", size = 1067694, upload-time = "2024-12-31T20:59:46.157Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/1a/3544f4f299a47911c2ab3710f534e52fea62a633c96806995da5d25be4b2/pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a", size = 1067694 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716, upload-time = "2024-12-31T20:59:42.738Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1", size = 107716 }, ] [[package]] @@ -900,18 +901,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, ] [[package]] name = "pytz" version = "2025.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5f/57/df1c9157c8d5a05117e455d66fd7cf6dbc46974f832b1058ed4856785d8a/pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e", size = 319617, upload-time = "2025-01-31T01:54:48.615Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/57/df1c9157c8d5a05117e455d66fd7cf6dbc46974f832b1058ed4856785d8a/pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e", size = 319617 } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", size = 507930, upload-time = "2025-01-31T01:54:45.634Z" }, + { url = "https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57", size = 507930 }, ] [[package]] @@ -919,38 +920,38 @@ name = "pywin32" version = "310" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239, upload-time = "2025-03-17T00:55:58.807Z" }, - { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839, upload-time = "2025-03-17T00:56:00.8Z" }, - { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470, upload-time = "2025-03-17T00:56:02.601Z" }, - { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384, upload-time = "2025-03-17T00:56:04.383Z" }, - { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039, upload-time = "2025-03-17T00:56:06.207Z" }, - { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152, upload-time = "2025-03-17T00:56:07.819Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ec/4fdbe47932f671d6e348474ea35ed94227fb5df56a7c30cbbb42cd396ed0/pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d", size = 8796239 }, + { url = "https://files.pythonhosted.org/packages/e3/e5/b0627f8bb84e06991bea89ad8153a9e50ace40b2e1195d68e9dff6b03d0f/pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060", size = 9503839 }, + { url = "https://files.pythonhosted.org/packages/1f/32/9ccf53748df72301a89713936645a664ec001abd35ecc8578beda593d37d/pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966", size = 8459470 }, + { url = "https://files.pythonhosted.org/packages/1c/09/9c1b978ffc4ae53999e89c19c77ba882d9fce476729f23ef55211ea1c034/pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab", size = 8794384 }, + { url = "https://files.pythonhosted.org/packages/45/3c/b4640f740ffebadd5d34df35fecba0e1cfef8fde9f3e594df91c28ad9b50/pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e", size = 9503039 }, + { url = "https://files.pythonhosted.org/packages/b4/f4/f785020090fb050e7fb6d34b780f2231f302609dc964672f72bfaeb59a28/pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33", size = 8458152 }, ] [[package]] name = "pyyaml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, ] [[package]] @@ -960,38 +961,38 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3a/ed/c3876f3b3e8beba336214ce44e1efa1792dd537027cef24192ac2b077d7c/pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3", size = 276733, upload-time = "2025-03-12T08:04:30.804Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/03/7170c3814bb9106c1bca67700c731aaf1cd990fd2f0097c754acb600330e/pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea", size = 1348354, upload-time = "2025-03-12T08:02:32.699Z" }, - { url = "https://files.pythonhosted.org/packages/74/f3/908b17f9111cdc764aef1de3d36026a2984c46ed90c3c2c85f28b66142f0/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7", size = 671056, upload-time = "2025-03-12T08:02:34.086Z" }, - { url = "https://files.pythonhosted.org/packages/02/ad/afcb8484b65ceacd1609f709c2caeed31bd6c49261a7507cd5c175cc105f/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d", size = 908597, upload-time = "2025-03-12T08:02:35.536Z" }, - { url = "https://files.pythonhosted.org/packages/a1/b5/4eeeae0aaaa6ef0c74cfa8b2273b53382bd858df6d99485f2fc8211e7002/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00", size = 865260, upload-time = "2025-03-12T08:02:37.562Z" }, - { url = "https://files.pythonhosted.org/packages/74/6a/63db856e93e3a3c3dc98a1de28a902cf1b21c7b0d3856cd5931d7cfd30af/pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695", size = 859916, upload-time = "2025-03-12T08:02:38.954Z" }, - { url = "https://files.pythonhosted.org/packages/e1/ce/d522c9b46ee3746d4b98c81969c568c2c6296e931a65f2c87104b645654c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52", size = 1201368, upload-time = "2025-03-12T08:02:40.774Z" }, - { url = "https://files.pythonhosted.org/packages/5a/56/29dcd3647a39e933eb489fda261a1e2700a59d4a9432889a85166e15651c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac", size = 1512663, upload-time = "2025-03-12T08:02:42.2Z" }, - { url = "https://files.pythonhosted.org/packages/6b/36/7c570698127a43398ed1b1832dada59496e633115016addbce5eda9938a6/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66", size = 1411693, upload-time = "2025-03-12T08:02:43.583Z" }, - { url = "https://files.pythonhosted.org/packages/de/54/51d39bef85a7cdbca36227f7defdbfcdc5011b8361a3bfc0e8df431f5a5d/pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37", size = 581244, upload-time = "2025-03-12T08:02:45.072Z" }, - { url = "https://files.pythonhosted.org/packages/f2/6a/9512b11a1d0c5648534f03d5ab0c3222f55dc9c192029c1cb00a0ca044e2/pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495", size = 643559, upload-time = "2025-03-12T08:02:46.485Z" }, - { url = "https://files.pythonhosted.org/packages/27/9f/faf5c9cf91b61eeb82a5e919d024d3ac28a795c92cce817be264ccd757d3/pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d", size = 557664, upload-time = "2025-03-12T08:02:47.896Z" }, - { url = "https://files.pythonhosted.org/packages/37/16/97b8c5107bfccb39120e611671a452c9ff6e8626fb3f8d4c15afd652b6ae/pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd", size = 1345691, upload-time = "2025-03-12T08:02:49.508Z" }, - { url = "https://files.pythonhosted.org/packages/a5/61/d5572d95040c0bb5b31eed5b23f3f0f992d94e4e0de0cea62e3c7f3a85c1/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597", size = 670622, upload-time = "2025-03-12T08:02:51.112Z" }, - { url = "https://files.pythonhosted.org/packages/1c/0c/f0235d27388aacf4ed8bcc1d574f6f2f629da0a20610faa0a8e9d363c2b0/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4", size = 908683, upload-time = "2025-03-12T08:02:52.659Z" }, - { url = "https://files.pythonhosted.org/packages/cb/52/664828f9586c396b857eec088d208230463e3dc991a24df6adbad98fbaa3/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9", size = 865212, upload-time = "2025-03-12T08:02:54.187Z" }, - { url = "https://files.pythonhosted.org/packages/2b/14/213b2967030b7d7aecc32dd453830f98799b3cbf2b10a40232e9f22a6520/pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558", size = 860068, upload-time = "2025-03-12T08:02:55.609Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e5/ff50c8fade69d1c0469652832c626d1910668697642c10cb0e1b6183ef9a/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64", size = 1201303, upload-time = "2025-03-12T08:02:57.073Z" }, - { url = "https://files.pythonhosted.org/packages/9a/e2/fff5e483be95ccc11a05781323e001e63ec15daec1d0f6f08de72ca534db/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53", size = 1512892, upload-time = "2025-03-12T08:02:58.68Z" }, - { url = "https://files.pythonhosted.org/packages/21/75/cc44d276e43136e5692e487c3c019f816e11ed445261e434217c28cc98c4/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36", size = 1411736, upload-time = "2025-03-12T08:03:00.202Z" }, - { url = "https://files.pythonhosted.org/packages/ee/1c/d070cbc9a7961fe772641c51bb3798d88cb1f8e20ca718407363462624cf/pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14", size = 581214, upload-time = "2025-03-12T08:03:02.412Z" }, - { url = "https://files.pythonhosted.org/packages/38/d3/91082f1151ff5b54e0bed40eb1a26f418530ab07ecaec4dbb83e3d9fa9a9/pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca", size = 643412, upload-time = "2025-03-12T08:03:04.007Z" }, - { url = "https://files.pythonhosted.org/packages/e0/cf/dabe68dfdf3e67bea6152eeec4b251cf899ee5b853cfb5c97e4719f9e6e9/pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce", size = 557444, upload-time = "2025-03-12T08:03:05.53Z" }, - { url = "https://files.pythonhosted.org/packages/c0/56/e7576ac71c1566da4f4ec586351462a2bb202143fb074bf56df8fe85dcc3/pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464", size = 1340288, upload-time = "2025-03-12T08:03:07.638Z" }, - { url = "https://files.pythonhosted.org/packages/f1/ab/0bca97e94d420b5908968bc479e51c3686a9f80d8893450eefcd673b1b1d/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825", size = 662462, upload-time = "2025-03-12T08:03:10.039Z" }, - { url = "https://files.pythonhosted.org/packages/ee/be/99e89b55863808da322ac3ab52d8e135dcf2241094aaa468bfe2923d5194/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52", size = 896464, upload-time = "2025-03-12T08:03:11.51Z" }, - { url = "https://files.pythonhosted.org/packages/38/d4/a4be06a313c8d6a5fe1d92975db30aca85f502e867fca392532e06a28c3c/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557", size = 853432, upload-time = "2025-03-12T08:03:12.948Z" }, - { url = "https://files.pythonhosted.org/packages/12/e6/e608b4c34106bbf5b3b382662ea90a43b2e23df0aa9c1f0fd4e21168d523/pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046", size = 845884, upload-time = "2025-03-12T08:03:14.429Z" }, - { url = "https://files.pythonhosted.org/packages/c3/a9/d5e6355308ba529d9cd3576ee8bb3b2e2b726571748f515fbb8559401f5b/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981", size = 1191454, upload-time = "2025-03-12T08:03:16.348Z" }, - { url = "https://files.pythonhosted.org/packages/6a/9a/a21dc6c73ac242e425709c1e0049368d8f5db5de7c1102a45f93f5c492b3/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3", size = 1500397, upload-time = "2025-03-12T08:03:17.918Z" }, - { url = "https://files.pythonhosted.org/packages/87/88/0236056156da0278c9ca2e2562463643597808b5bbd6c34009ba217e7e92/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f", size = 1398401, upload-time = "2025-03-12T08:03:19.493Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/3a/ed/c3876f3b3e8beba336214ce44e1efa1792dd537027cef24192ac2b077d7c/pyzmq-26.3.0.tar.gz", hash = "sha256:f1cd68b8236faab78138a8fc703f7ca0ad431b17a3fcac696358600d4e6243b3", size = 276733 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/03/7170c3814bb9106c1bca67700c731aaf1cd990fd2f0097c754acb600330e/pyzmq-26.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:c80653332c6136da7f4d4e143975e74ac0fa14f851f716d90583bc19e8945cea", size = 1348354 }, + { url = "https://files.pythonhosted.org/packages/74/f3/908b17f9111cdc764aef1de3d36026a2984c46ed90c3c2c85f28b66142f0/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e317ee1d4528a03506cb1c282cd9db73660a35b3564096de37de7350e7d87a7", size = 671056 }, + { url = "https://files.pythonhosted.org/packages/02/ad/afcb8484b65ceacd1609f709c2caeed31bd6c49261a7507cd5c175cc105f/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:943a22ebb3daacb45f76a9bcca9a7b74e7d94608c0c0505da30af900b998ca8d", size = 908597 }, + { url = "https://files.pythonhosted.org/packages/a1/b5/4eeeae0aaaa6ef0c74cfa8b2273b53382bd858df6d99485f2fc8211e7002/pyzmq-26.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3fc9e71490d989144981ea21ef4fdfaa7b6aa84aff9632d91c736441ce2f6b00", size = 865260 }, + { url = "https://files.pythonhosted.org/packages/74/6a/63db856e93e3a3c3dc98a1de28a902cf1b21c7b0d3856cd5931d7cfd30af/pyzmq-26.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e281a8071a06888575a4eb523c4deeefdcd2f5fe4a2d47e02ac8bf3a5b49f695", size = 859916 }, + { url = "https://files.pythonhosted.org/packages/e1/ce/d522c9b46ee3746d4b98c81969c568c2c6296e931a65f2c87104b645654c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:be77efd735bb1064605be8dec6e721141c1421ef0b115ef54e493a64e50e9a52", size = 1201368 }, + { url = "https://files.pythonhosted.org/packages/5a/56/29dcd3647a39e933eb489fda261a1e2700a59d4a9432889a85166e15651c/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7a4ac2ffa34f1212dd586af90f4ba894e424f0cabb3a49cdcff944925640f6ac", size = 1512663 }, + { url = "https://files.pythonhosted.org/packages/6b/36/7c570698127a43398ed1b1832dada59496e633115016addbce5eda9938a6/pyzmq-26.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ba698c7c252af83b6bba9775035263f0df5f807f0404019916d4b71af8161f66", size = 1411693 }, + { url = "https://files.pythonhosted.org/packages/de/54/51d39bef85a7cdbca36227f7defdbfcdc5011b8361a3bfc0e8df431f5a5d/pyzmq-26.3.0-cp312-cp312-win32.whl", hash = "sha256:214038aaa88e801e54c2ef0cfdb2e6df27eb05f67b477380a452b595c5ecfa37", size = 581244 }, + { url = "https://files.pythonhosted.org/packages/f2/6a/9512b11a1d0c5648534f03d5ab0c3222f55dc9c192029c1cb00a0ca044e2/pyzmq-26.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:bad7fe0372e505442482ca3ccbc0d6f38dae81b1650f57a0aa6bbee18e7df495", size = 643559 }, + { url = "https://files.pythonhosted.org/packages/27/9f/faf5c9cf91b61eeb82a5e919d024d3ac28a795c92cce817be264ccd757d3/pyzmq-26.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:b7b578d604e79e99aa39495becea013fd043fa9f36e4b490efa951f3d847a24d", size = 557664 }, + { url = "https://files.pythonhosted.org/packages/37/16/97b8c5107bfccb39120e611671a452c9ff6e8626fb3f8d4c15afd652b6ae/pyzmq-26.3.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:fa85953df84beb7b8b73cb3ec3f5d92b62687a09a8e71525c6734e020edf56fd", size = 1345691 }, + { url = "https://files.pythonhosted.org/packages/a5/61/d5572d95040c0bb5b31eed5b23f3f0f992d94e4e0de0cea62e3c7f3a85c1/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:209d09f0ab6ddbcebe64630d1e6ca940687e736f443c265ae15bc4bfad833597", size = 670622 }, + { url = "https://files.pythonhosted.org/packages/1c/0c/f0235d27388aacf4ed8bcc1d574f6f2f629da0a20610faa0a8e9d363c2b0/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d35cc1086f1d4f907df85c6cceb2245cb39a04f69c3f375993363216134d76d4", size = 908683 }, + { url = "https://files.pythonhosted.org/packages/cb/52/664828f9586c396b857eec088d208230463e3dc991a24df6adbad98fbaa3/pyzmq-26.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b380e9087078ba91e45fb18cdd0c25275ffaa045cf63c947be0ddae6186bc9d9", size = 865212 }, + { url = "https://files.pythonhosted.org/packages/2b/14/213b2967030b7d7aecc32dd453830f98799b3cbf2b10a40232e9f22a6520/pyzmq-26.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6d64e74143587efe7c9522bb74d1448128fdf9897cc9b6d8b9927490922fd558", size = 860068 }, + { url = "https://files.pythonhosted.org/packages/aa/e5/ff50c8fade69d1c0469652832c626d1910668697642c10cb0e1b6183ef9a/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:efba4f53ac7752eea6d8ca38a4ddac579e6e742fba78d1e99c12c95cd2acfc64", size = 1201303 }, + { url = "https://files.pythonhosted.org/packages/9a/e2/fff5e483be95ccc11a05781323e001e63ec15daec1d0f6f08de72ca534db/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9b0137a1c40da3b7989839f9b78a44de642cdd1ce20dcef341de174c8d04aa53", size = 1512892 }, + { url = "https://files.pythonhosted.org/packages/21/75/cc44d276e43136e5692e487c3c019f816e11ed445261e434217c28cc98c4/pyzmq-26.3.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a995404bd3982c089e57b428c74edd5bfc3b0616b3dbcd6a8e270f1ee2110f36", size = 1411736 }, + { url = "https://files.pythonhosted.org/packages/ee/1c/d070cbc9a7961fe772641c51bb3798d88cb1f8e20ca718407363462624cf/pyzmq-26.3.0-cp313-cp313-win32.whl", hash = "sha256:240b1634b9e530ef6a277d95cbca1a6922f44dfddc5f0a3cd6c722a8de867f14", size = 581214 }, + { url = "https://files.pythonhosted.org/packages/38/d3/91082f1151ff5b54e0bed40eb1a26f418530ab07ecaec4dbb83e3d9fa9a9/pyzmq-26.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:fe67291775ea4c2883764ba467eb389c29c308c56b86c1e19e49c9e1ed0cbeca", size = 643412 }, + { url = "https://files.pythonhosted.org/packages/e0/cf/dabe68dfdf3e67bea6152eeec4b251cf899ee5b853cfb5c97e4719f9e6e9/pyzmq-26.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:73ca9ae9a9011b714cf7650450cd9c8b61a135180b708904f1f0a05004543dce", size = 557444 }, + { url = "https://files.pythonhosted.org/packages/c0/56/e7576ac71c1566da4f4ec586351462a2bb202143fb074bf56df8fe85dcc3/pyzmq-26.3.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:fea7efbd7e49af9d7e5ed6c506dfc7de3d1a628790bd3a35fd0e3c904dc7d464", size = 1340288 }, + { url = "https://files.pythonhosted.org/packages/f1/ab/0bca97e94d420b5908968bc479e51c3686a9f80d8893450eefcd673b1b1d/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4430c7cba23bb0e2ee203eee7851c1654167d956fc6d4b3a87909ccaf3c5825", size = 662462 }, + { url = "https://files.pythonhosted.org/packages/ee/be/99e89b55863808da322ac3ab52d8e135dcf2241094aaa468bfe2923d5194/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:016d89bee8c7d566fad75516b4e53ec7c81018c062d4c51cd061badf9539be52", size = 896464 }, + { url = "https://files.pythonhosted.org/packages/38/d4/a4be06a313c8d6a5fe1d92975db30aca85f502e867fca392532e06a28c3c/pyzmq-26.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04bfe59852d76d56736bfd10ac1d49d421ab8ed11030b4a0332900691507f557", size = 853432 }, + { url = "https://files.pythonhosted.org/packages/12/e6/e608b4c34106bbf5b3b382662ea90a43b2e23df0aa9c1f0fd4e21168d523/pyzmq-26.3.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:1fe05bd0d633a0f672bb28cb8b4743358d196792e1caf04973b7898a0d70b046", size = 845884 }, + { url = "https://files.pythonhosted.org/packages/c3/a9/d5e6355308ba529d9cd3576ee8bb3b2e2b726571748f515fbb8559401f5b/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:2aa1a9f236d5b835fb8642f27de95f9edcfd276c4bc1b6ffc84f27c6fb2e2981", size = 1191454 }, + { url = "https://files.pythonhosted.org/packages/6a/9a/a21dc6c73ac242e425709c1e0049368d8f5db5de7c1102a45f93f5c492b3/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:21399b31753bf321043ea60c360ed5052cc7be20739785b1dff1820f819e35b3", size = 1500397 }, + { url = "https://files.pythonhosted.org/packages/87/88/0236056156da0278c9ca2e2562463643597808b5bbd6c34009ba217e7e92/pyzmq-26.3.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d015efcd96aca8882057e7e6f06224f79eecd22cad193d3e6a0a91ec67590d1f", size = 1398401 }, ] [[package]] @@ -1006,34 +1007,34 @@ dependencies = [ { name = "scikit-learn" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/40/8a/e8ae926da333a82d597c874a59f888838616651de6bc815d9d78c2f76c64/rdrobust-1.3.0.tar.gz", hash = "sha256:994528ca6c7351b2ef8a1f9f57a524d8caa9d40f5f40f8a16c6533bd53109d53", size = 29187, upload-time = "2024-09-14T15:23:56.396Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/8a/e8ae926da333a82d597c874a59f888838616651de6bc815d9d78c2f76c64/rdrobust-1.3.0.tar.gz", hash = "sha256:994528ca6c7351b2ef8a1f9f57a524d8caa9d40f5f40f8a16c6533bd53109d53", size = 29187 } wheels = [ - { url = "https://files.pythonhosted.org/packages/90/d6/c2faba19eea47e62c9cb07abd9a4ef735d43d1f85ba562eb549b7540af12/rdrobust-1.3.0-py3-none-any.whl", hash = "sha256:611ae2c07dc4e7969596800987953747c7dd9a68c0536c86cb1c53af90b9a2de", size = 30285, upload-time = "2024-09-14T15:23:55.245Z" }, + { url = "https://files.pythonhosted.org/packages/90/d6/c2faba19eea47e62c9cb07abd9a4ef735d43d1f85ba562eb549b7540af12/rdrobust-1.3.0-py3-none-any.whl", hash = "sha256:611ae2c07dc4e7969596800987953747c7dd9a68c0536c86cb1c53af90b9a2de", size = 30285 }, ] [[package]] name = "ruff" version = "0.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/77/2b/7ca27e854d92df5e681e6527dc0f9254c9dc06c8408317893cf96c851cdd/ruff-0.11.0.tar.gz", hash = "sha256:e55c620690a4a7ee6f1cccb256ec2157dc597d109400ae75bbf944fc9d6462e2", size = 3799407, upload-time = "2025-03-14T13:52:36.539Z" } +sdist = { url = "https://files.pythonhosted.org/packages/77/2b/7ca27e854d92df5e681e6527dc0f9254c9dc06c8408317893cf96c851cdd/ruff-0.11.0.tar.gz", hash = "sha256:e55c620690a4a7ee6f1cccb256ec2157dc597d109400ae75bbf944fc9d6462e2", size = 3799407 } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/40/3d0340a9e5edc77d37852c0cd98c5985a5a8081fc3befaeb2ae90aaafd2b/ruff-0.11.0-py3-none-linux_armv6l.whl", hash = "sha256:dc67e32bc3b29557513eb7eeabb23efdb25753684b913bebb8a0c62495095acb", size = 10098158, upload-time = "2025-03-14T13:51:55.69Z" }, - { url = "https://files.pythonhosted.org/packages/ec/a9/d8f5abb3b87b973b007649ac7bf63665a05b2ae2b2af39217b09f52abbbf/ruff-0.11.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38c23fd9bdec4eb437b4c1e3595905a0a8edfccd63a790f818b28c78fe345639", size = 10879071, upload-time = "2025-03-14T13:51:58.989Z" }, - { url = "https://files.pythonhosted.org/packages/ab/62/aaa198614c6211677913ec480415c5e6509586d7b796356cec73a2f8a3e6/ruff-0.11.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7c8661b0be91a38bd56db593e9331beaf9064a79028adee2d5f392674bbc5e88", size = 10247944, upload-time = "2025-03-14T13:52:02.318Z" }, - { url = "https://files.pythonhosted.org/packages/9f/52/59e0a9f2cf1ce5e6cbe336b6dd0144725c8ea3b97cac60688f4e7880bf13/ruff-0.11.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6c0e8d3d2db7e9f6efd884f44b8dc542d5b6b590fc4bb334fdbc624d93a29a2", size = 10421725, upload-time = "2025-03-14T13:52:04.303Z" }, - { url = "https://files.pythonhosted.org/packages/a6/c3/dcd71acc6dff72ce66d13f4be5bca1dbed4db678dff2f0f6f307b04e5c02/ruff-0.11.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c3156d3f4b42e57247275a0a7e15a851c165a4fc89c5e8fa30ea6da4f7407b8", size = 9954435, upload-time = "2025-03-14T13:52:06.602Z" }, - { url = "https://files.pythonhosted.org/packages/a6/9a/342d336c7c52dbd136dee97d4c7797e66c3f92df804f8f3b30da59b92e9c/ruff-0.11.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:490b1e147c1260545f6d041c4092483e3f6d8eba81dc2875eaebcf9140b53905", size = 11492664, upload-time = "2025-03-14T13:52:08.613Z" }, - { url = "https://files.pythonhosted.org/packages/84/35/6e7defd2d7ca95cc385ac1bd9f7f2e4a61b9cc35d60a263aebc8e590c462/ruff-0.11.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1bc09a7419e09662983b1312f6fa5dab829d6ab5d11f18c3760be7ca521c9329", size = 12207856, upload-time = "2025-03-14T13:52:11.019Z" }, - { url = "https://files.pythonhosted.org/packages/22/78/da669c8731bacf40001c880ada6d31bcfb81f89cc996230c3b80d319993e/ruff-0.11.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcfa478daf61ac8002214eb2ca5f3e9365048506a9d52b11bea3ecea822bb844", size = 11645156, upload-time = "2025-03-14T13:52:13.383Z" }, - { url = "https://files.pythonhosted.org/packages/ee/47/e27d17d83530a208f4a9ab2e94f758574a04c51e492aa58f91a3ed7cbbcb/ruff-0.11.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fbb2aed66fe742a6a3a0075ed467a459b7cedc5ae01008340075909d819df1e", size = 13884167, upload-time = "2025-03-14T13:52:15.528Z" }, - { url = "https://files.pythonhosted.org/packages/9f/5e/42ffbb0a5d4b07bbc642b7d58357b4e19a0f4774275ca6ca7d1f7b5452cd/ruff-0.11.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92c0c1ff014351c0b0cdfdb1e35fa83b780f1e065667167bb9502d47ca41e6db", size = 11348311, upload-time = "2025-03-14T13:52:18.088Z" }, - { url = "https://files.pythonhosted.org/packages/c8/51/dc3ce0c5ce1a586727a3444a32f98b83ba99599bb1ebca29d9302886e87f/ruff-0.11.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e4fd5ff5de5f83e0458a138e8a869c7c5e907541aec32b707f57cf9a5e124445", size = 10305039, upload-time = "2025-03-14T13:52:20.476Z" }, - { url = "https://files.pythonhosted.org/packages/60/e0/475f0c2f26280f46f2d6d1df1ba96b3399e0234cf368cc4c88e6ad10dcd9/ruff-0.11.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:96bc89a5c5fd21a04939773f9e0e276308be0935de06845110f43fd5c2e4ead7", size = 9937939, upload-time = "2025-03-14T13:52:22.798Z" }, - { url = "https://files.pythonhosted.org/packages/e2/d3/3e61b7fd3e9cdd1e5b8c7ac188bec12975c824e51c5cd3d64caf81b0331e/ruff-0.11.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a9352b9d767889ec5df1483f94870564e8102d4d7e99da52ebf564b882cdc2c7", size = 10923259, upload-time = "2025-03-14T13:52:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/30/32/cd74149ebb40b62ddd14bd2d1842149aeb7f74191fb0f49bd45c76909ff2/ruff-0.11.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:049a191969a10897fe052ef9cc7491b3ef6de79acd7790af7d7897b7a9bfbcb6", size = 11406212, upload-time = "2025-03-14T13:52:27.493Z" }, - { url = "https://files.pythonhosted.org/packages/00/ef/033022a6b104be32e899b00de704d7c6d1723a54d4c9e09d147368f14b62/ruff-0.11.0-py3-none-win32.whl", hash = "sha256:3191e9116b6b5bbe187447656f0c8526f0d36b6fd89ad78ccaad6bdc2fad7df2", size = 10310905, upload-time = "2025-03-14T13:52:30.46Z" }, - { url = "https://files.pythonhosted.org/packages/ed/8a/163f2e78c37757d035bd56cd60c8d96312904ca4a6deeab8442d7b3cbf89/ruff-0.11.0-py3-none-win_amd64.whl", hash = "sha256:c58bfa00e740ca0a6c43d41fb004cd22d165302f360aaa56f7126d544db31a21", size = 11411730, upload-time = "2025-03-14T13:52:32.508Z" }, - { url = "https://files.pythonhosted.org/packages/4e/f7/096f6efabe69b49d7ca61052fc70289c05d8d35735c137ef5ba5ef423662/ruff-0.11.0-py3-none-win_arm64.whl", hash = "sha256:868364fc23f5aa122b00c6f794211e85f7e78f5dffdf7c590ab90b8c4e69b657", size = 10538956, upload-time = "2025-03-14T13:52:34.491Z" }, + { url = "https://files.pythonhosted.org/packages/48/40/3d0340a9e5edc77d37852c0cd98c5985a5a8081fc3befaeb2ae90aaafd2b/ruff-0.11.0-py3-none-linux_armv6l.whl", hash = "sha256:dc67e32bc3b29557513eb7eeabb23efdb25753684b913bebb8a0c62495095acb", size = 10098158 }, + { url = "https://files.pythonhosted.org/packages/ec/a9/d8f5abb3b87b973b007649ac7bf63665a05b2ae2b2af39217b09f52abbbf/ruff-0.11.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38c23fd9bdec4eb437b4c1e3595905a0a8edfccd63a790f818b28c78fe345639", size = 10879071 }, + { url = "https://files.pythonhosted.org/packages/ab/62/aaa198614c6211677913ec480415c5e6509586d7b796356cec73a2f8a3e6/ruff-0.11.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7c8661b0be91a38bd56db593e9331beaf9064a79028adee2d5f392674bbc5e88", size = 10247944 }, + { url = "https://files.pythonhosted.org/packages/9f/52/59e0a9f2cf1ce5e6cbe336b6dd0144725c8ea3b97cac60688f4e7880bf13/ruff-0.11.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b6c0e8d3d2db7e9f6efd884f44b8dc542d5b6b590fc4bb334fdbc624d93a29a2", size = 10421725 }, + { url = "https://files.pythonhosted.org/packages/a6/c3/dcd71acc6dff72ce66d13f4be5bca1dbed4db678dff2f0f6f307b04e5c02/ruff-0.11.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c3156d3f4b42e57247275a0a7e15a851c165a4fc89c5e8fa30ea6da4f7407b8", size = 9954435 }, + { url = "https://files.pythonhosted.org/packages/a6/9a/342d336c7c52dbd136dee97d4c7797e66c3f92df804f8f3b30da59b92e9c/ruff-0.11.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:490b1e147c1260545f6d041c4092483e3f6d8eba81dc2875eaebcf9140b53905", size = 11492664 }, + { url = "https://files.pythonhosted.org/packages/84/35/6e7defd2d7ca95cc385ac1bd9f7f2e4a61b9cc35d60a263aebc8e590c462/ruff-0.11.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1bc09a7419e09662983b1312f6fa5dab829d6ab5d11f18c3760be7ca521c9329", size = 12207856 }, + { url = "https://files.pythonhosted.org/packages/22/78/da669c8731bacf40001c880ada6d31bcfb81f89cc996230c3b80d319993e/ruff-0.11.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcfa478daf61ac8002214eb2ca5f3e9365048506a9d52b11bea3ecea822bb844", size = 11645156 }, + { url = "https://files.pythonhosted.org/packages/ee/47/e27d17d83530a208f4a9ab2e94f758574a04c51e492aa58f91a3ed7cbbcb/ruff-0.11.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fbb2aed66fe742a6a3a0075ed467a459b7cedc5ae01008340075909d819df1e", size = 13884167 }, + { url = "https://files.pythonhosted.org/packages/9f/5e/42ffbb0a5d4b07bbc642b7d58357b4e19a0f4774275ca6ca7d1f7b5452cd/ruff-0.11.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92c0c1ff014351c0b0cdfdb1e35fa83b780f1e065667167bb9502d47ca41e6db", size = 11348311 }, + { url = "https://files.pythonhosted.org/packages/c8/51/dc3ce0c5ce1a586727a3444a32f98b83ba99599bb1ebca29d9302886e87f/ruff-0.11.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e4fd5ff5de5f83e0458a138e8a869c7c5e907541aec32b707f57cf9a5e124445", size = 10305039 }, + { url = "https://files.pythonhosted.org/packages/60/e0/475f0c2f26280f46f2d6d1df1ba96b3399e0234cf368cc4c88e6ad10dcd9/ruff-0.11.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:96bc89a5c5fd21a04939773f9e0e276308be0935de06845110f43fd5c2e4ead7", size = 9937939 }, + { url = "https://files.pythonhosted.org/packages/e2/d3/3e61b7fd3e9cdd1e5b8c7ac188bec12975c824e51c5cd3d64caf81b0331e/ruff-0.11.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a9352b9d767889ec5df1483f94870564e8102d4d7e99da52ebf564b882cdc2c7", size = 10923259 }, + { url = "https://files.pythonhosted.org/packages/30/32/cd74149ebb40b62ddd14bd2d1842149aeb7f74191fb0f49bd45c76909ff2/ruff-0.11.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:049a191969a10897fe052ef9cc7491b3ef6de79acd7790af7d7897b7a9bfbcb6", size = 11406212 }, + { url = "https://files.pythonhosted.org/packages/00/ef/033022a6b104be32e899b00de704d7c6d1723a54d4c9e09d147368f14b62/ruff-0.11.0-py3-none-win32.whl", hash = "sha256:3191e9116b6b5bbe187447656f0c8526f0d36b6fd89ad78ccaad6bdc2fad7df2", size = 10310905 }, + { url = "https://files.pythonhosted.org/packages/ed/8a/163f2e78c37757d035bd56cd60c8d96312904ca4a6deeab8442d7b3cbf89/ruff-0.11.0-py3-none-win_amd64.whl", hash = "sha256:c58bfa00e740ca0a6c43d41fb004cd22d165302f360aaa56f7126d544db31a21", size = 11411730 }, + { url = "https://files.pythonhosted.org/packages/4e/f7/096f6efabe69b49d7ca61052fc70289c05d8d35735c137ef5ba5ef423662/ruff-0.11.0-py3-none-win_arm64.whl", hash = "sha256:868364fc23f5aa122b00c6f794211e85f7e78f5dffdf7c590ab90b8c4e69b657", size = 10538956 }, ] [[package]] @@ -1046,18 +1047,18 @@ dependencies = [ { name = "scipy" }, { name = "threadpoolctl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size = 7001680, upload-time = "2024-09-11T15:50:10.957Z" } +sdist = { url = "https://files.pythonhosted.org/packages/37/59/44985a2bdc95c74e34fef3d10cb5d93ce13b0e2a7baefffe1b53853b502d/scikit_learn-1.5.2.tar.gz", hash = "sha256:b4237ed7b3fdd0a4882792e68ef2545d5baa50aca3bb45aa7df468138ad8f94d", size = 7001680 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/db/b485c1ac54ff3bd9e7e6b39d3cc6609c4c76a65f52ab0a7b22b6c3ab0e9d/scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a", size = 12110344, upload-time = "2024-09-11T15:49:46.253Z" }, - { url = "https://files.pythonhosted.org/packages/54/1a/7deb52fa23aebb855431ad659b3c6a2e1709ece582cb3a63d66905e735fe/scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1", size = 11033502, upload-time = "2024-09-11T15:49:48.656Z" }, - { url = "https://files.pythonhosted.org/packages/a1/32/4a7a205b14c11225609b75b28402c196e4396ac754dab6a81971b811781c/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd", size = 12085794, upload-time = "2024-09-11T15:49:51.388Z" }, - { url = "https://files.pythonhosted.org/packages/c6/29/044048c5e911373827c0e1d3051321b9183b2a4f8d4e2f11c08fcff83f13/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6", size = 12945797, upload-time = "2024-09-11T15:49:53.579Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ce/c0b912f2f31aeb1b756a6ba56bcd84dd1f8a148470526a48515a3f4d48cd/scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1", size = 10985467, upload-time = "2024-09-11T15:49:56.446Z" }, - { url = "https://files.pythonhosted.org/packages/a4/50/8891028437858cc510e13578fe7046574a60c2aaaa92b02d64aac5b1b412/scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5", size = 12025584, upload-time = "2024-10-02T18:35:29.369Z" }, - { url = "https://files.pythonhosted.org/packages/d2/79/17feef8a1c14149436083bec0e61d7befb4812e272d5b20f9d79ea3e9ab1/scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908", size = 10959795, upload-time = "2024-10-02T18:35:34.22Z" }, - { url = "https://files.pythonhosted.org/packages/b1/c8/f08313f9e2e656bd0905930ae8bf99a573ea21c34666a813b749c338202f/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3", size = 12077302, upload-time = "2024-10-02T18:35:38.911Z" }, - { url = "https://files.pythonhosted.org/packages/a7/48/fbfb4dc72bed0fe31fe045fb30e924909ad03f717c36694351612973b1a9/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12", size = 13002811, upload-time = "2024-10-02T18:35:43.28Z" }, - { url = "https://files.pythonhosted.org/packages/a5/e7/0c869f9e60d225a77af90d2aefa7a4a4c0e745b149325d1450f0f0ce5399/scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f", size = 10951354, upload-time = "2024-10-02T18:35:47.954Z" }, + { url = "https://files.pythonhosted.org/packages/a4/db/b485c1ac54ff3bd9e7e6b39d3cc6609c4c76a65f52ab0a7b22b6c3ab0e9d/scikit_learn-1.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f932a02c3f4956dfb981391ab24bda1dbd90fe3d628e4b42caef3e041c67707a", size = 12110344 }, + { url = "https://files.pythonhosted.org/packages/54/1a/7deb52fa23aebb855431ad659b3c6a2e1709ece582cb3a63d66905e735fe/scikit_learn-1.5.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3b923d119d65b7bd555c73be5423bf06c0105678ce7e1f558cb4b40b0a5502b1", size = 11033502 }, + { url = "https://files.pythonhosted.org/packages/a1/32/4a7a205b14c11225609b75b28402c196e4396ac754dab6a81971b811781c/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd", size = 12085794 }, + { url = "https://files.pythonhosted.org/packages/c6/29/044048c5e911373827c0e1d3051321b9183b2a4f8d4e2f11c08fcff83f13/scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6", size = 12945797 }, + { url = "https://files.pythonhosted.org/packages/aa/ce/c0b912f2f31aeb1b756a6ba56bcd84dd1f8a148470526a48515a3f4d48cd/scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1", size = 10985467 }, + { url = "https://files.pythonhosted.org/packages/a4/50/8891028437858cc510e13578fe7046574a60c2aaaa92b02d64aac5b1b412/scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5", size = 12025584 }, + { url = "https://files.pythonhosted.org/packages/d2/79/17feef8a1c14149436083bec0e61d7befb4812e272d5b20f9d79ea3e9ab1/scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908", size = 10959795 }, + { url = "https://files.pythonhosted.org/packages/b1/c8/f08313f9e2e656bd0905930ae8bf99a573ea21c34666a813b749c338202f/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3", size = 12077302 }, + { url = "https://files.pythonhosted.org/packages/a7/48/fbfb4dc72bed0fe31fe045fb30e924909ad03f717c36694351612973b1a9/scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12", size = 13002811 }, + { url = "https://files.pythonhosted.org/packages/a5/e7/0c869f9e60d225a77af90d2aefa7a4a4c0e745b149325d1450f0f0ce5399/scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f", size = 10951354 }, ] [[package]] @@ -1067,44 +1068,58 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316, upload-time = "2025-02-17T00:42:24.791Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/5d/3c78815cbab499610f26b5bae6aed33e227225a9fa5290008a733a64f6fc/scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd", size = 38756184, upload-time = "2025-02-17T00:31:50.623Z" }, - { url = "https://files.pythonhosted.org/packages/37/20/3d04eb066b471b6e171827548b9ddb3c21c6bbea72a4d84fc5989933910b/scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301", size = 30163558, upload-time = "2025-02-17T00:31:56.721Z" }, - { url = "https://files.pythonhosted.org/packages/a4/98/e5c964526c929ef1f795d4c343b2ff98634ad2051bd2bbadfef9e772e413/scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93", size = 22437211, upload-time = "2025-02-17T00:32:03.042Z" }, - { url = "https://files.pythonhosted.org/packages/1d/cd/1dc7371e29195ecbf5222f9afeedb210e0a75057d8afbd942aa6cf8c8eca/scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20", size = 25232260, upload-time = "2025-02-17T00:32:07.847Z" }, - { url = "https://files.pythonhosted.org/packages/f0/24/1a181a9e5050090e0b5138c5f496fee33293c342b788d02586bc410c6477/scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e", size = 35198095, upload-time = "2025-02-17T00:32:14.565Z" }, - { url = "https://files.pythonhosted.org/packages/c0/53/eaada1a414c026673eb983f8b4a55fe5eb172725d33d62c1b21f63ff6ca4/scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8", size = 37297371, upload-time = "2025-02-17T00:32:21.411Z" }, - { url = "https://files.pythonhosted.org/packages/e9/06/0449b744892ed22b7e7b9a1994a866e64895363572677a316a9042af1fe5/scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11", size = 36872390, upload-time = "2025-02-17T00:32:29.421Z" }, - { url = "https://files.pythonhosted.org/packages/6a/6f/a8ac3cfd9505ec695c1bc35edc034d13afbd2fc1882a7c6b473e280397bb/scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53", size = 39700276, upload-time = "2025-02-17T00:32:37.431Z" }, - { url = "https://files.pythonhosted.org/packages/f5/6f/e6e5aff77ea2a48dd96808bb51d7450875af154ee7cbe72188afb0b37929/scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded", size = 40942317, upload-time = "2025-02-17T00:32:45.47Z" }, - { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587, upload-time = "2025-02-17T00:32:53.196Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266, upload-time = "2025-02-17T00:32:59.318Z" }, - { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768, upload-time = "2025-02-17T00:33:04.091Z" }, - { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719, upload-time = "2025-02-17T00:33:08.909Z" }, - { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195, upload-time = "2025-02-17T00:33:15.352Z" }, - { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404, upload-time = "2025-02-17T00:33:22.21Z" }, - { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011, upload-time = "2025-02-17T00:33:29.446Z" }, - { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406, upload-time = "2025-02-17T00:33:39.019Z" }, - { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243, upload-time = "2025-02-17T00:34:51.024Z" }, - { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286, upload-time = "2025-02-17T00:33:47.62Z" }, - { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634, upload-time = "2025-02-17T00:33:54.131Z" }, - { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179, upload-time = "2025-02-17T00:33:59.948Z" }, - { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412, upload-time = "2025-02-17T00:34:06.328Z" }, - { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867, upload-time = "2025-02-17T00:34:12.928Z" }, - { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009, upload-time = "2025-02-17T00:34:19.55Z" }, - { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159, upload-time = "2025-02-17T00:34:26.724Z" }, - { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566, upload-time = "2025-02-17T00:34:34.512Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705, upload-time = "2025-02-17T00:34:43.619Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/b7/b9/31ba9cd990e626574baf93fbc1ac61cf9ed54faafd04c479117517661637/scipy-1.15.2.tar.gz", hash = "sha256:cd58a314d92838f7e6f755c8a2167ead4f27e1fd5c1251fd54289569ef3495ec", size = 59417316 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/5d/3c78815cbab499610f26b5bae6aed33e227225a9fa5290008a733a64f6fc/scipy-1.15.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c4697a10da8f8765bb7c83e24a470da5797e37041edfd77fd95ba3811a47c4fd", size = 38756184 }, + { url = "https://files.pythonhosted.org/packages/37/20/3d04eb066b471b6e171827548b9ddb3c21c6bbea72a4d84fc5989933910b/scipy-1.15.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:869269b767d5ee7ea6991ed7e22b3ca1f22de73ab9a49c44bad338b725603301", size = 30163558 }, + { url = "https://files.pythonhosted.org/packages/a4/98/e5c964526c929ef1f795d4c343b2ff98634ad2051bd2bbadfef9e772e413/scipy-1.15.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:bad78d580270a4d32470563ea86c6590b465cb98f83d760ff5b0990cb5518a93", size = 22437211 }, + { url = "https://files.pythonhosted.org/packages/1d/cd/1dc7371e29195ecbf5222f9afeedb210e0a75057d8afbd942aa6cf8c8eca/scipy-1.15.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b09ae80010f52efddb15551025f9016c910296cf70adbf03ce2a8704f3a5ad20", size = 25232260 }, + { url = "https://files.pythonhosted.org/packages/f0/24/1a181a9e5050090e0b5138c5f496fee33293c342b788d02586bc410c6477/scipy-1.15.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6fd6eac1ce74a9f77a7fc724080d507c5812d61e72bd5e4c489b042455865e", size = 35198095 }, + { url = "https://files.pythonhosted.org/packages/c0/53/eaada1a414c026673eb983f8b4a55fe5eb172725d33d62c1b21f63ff6ca4/scipy-1.15.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b871df1fe1a3ba85d90e22742b93584f8d2b8e6124f8372ab15c71b73e428b8", size = 37297371 }, + { url = "https://files.pythonhosted.org/packages/e9/06/0449b744892ed22b7e7b9a1994a866e64895363572677a316a9042af1fe5/scipy-1.15.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:03205d57a28e18dfd39f0377d5002725bf1f19a46f444108c29bdb246b6c8a11", size = 36872390 }, + { url = "https://files.pythonhosted.org/packages/6a/6f/a8ac3cfd9505ec695c1bc35edc034d13afbd2fc1882a7c6b473e280397bb/scipy-1.15.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:601881dfb761311045b03114c5fe718a12634e5608c3b403737ae463c9885d53", size = 39700276 }, + { url = "https://files.pythonhosted.org/packages/f5/6f/e6e5aff77ea2a48dd96808bb51d7450875af154ee7cbe72188afb0b37929/scipy-1.15.2-cp312-cp312-win_amd64.whl", hash = "sha256:e7c68b6a43259ba0aab737237876e5c2c549a031ddb7abc28c7b47f22e202ded", size = 40942317 }, + { url = "https://files.pythonhosted.org/packages/53/40/09319f6e0f276ea2754196185f95cd191cb852288440ce035d5c3a931ea2/scipy-1.15.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01edfac9f0798ad6b46d9c4c9ca0e0ad23dbf0b1eb70e96adb9fa7f525eff0bf", size = 38717587 }, + { url = "https://files.pythonhosted.org/packages/fe/c3/2854f40ecd19585d65afaef601e5e1f8dbf6758b2f95b5ea93d38655a2c6/scipy-1.15.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:08b57a9336b8e79b305a143c3655cc5bdbe6d5ece3378578888d2afbb51c4e37", size = 30100266 }, + { url = "https://files.pythonhosted.org/packages/dd/b1/f9fe6e3c828cb5930b5fe74cb479de5f3d66d682fa8adb77249acaf545b8/scipy-1.15.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:54c462098484e7466362a9f1672d20888f724911a74c22ae35b61f9c5919183d", size = 22373768 }, + { url = "https://files.pythonhosted.org/packages/15/9d/a60db8c795700414c3f681908a2b911e031e024d93214f2d23c6dae174ab/scipy-1.15.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf72ff559a53a6a6d77bd8eefd12a17995ffa44ad86c77a5df96f533d4e6c6bb", size = 25154719 }, + { url = "https://files.pythonhosted.org/packages/37/3b/9bda92a85cd93f19f9ed90ade84aa1e51657e29988317fabdd44544f1dd4/scipy-1.15.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9de9d1416b3d9e7df9923ab23cd2fe714244af10b763975bea9e4f2e81cebd27", size = 35163195 }, + { url = "https://files.pythonhosted.org/packages/03/5a/fc34bf1aa14dc7c0e701691fa8685f3faec80e57d816615e3625f28feb43/scipy-1.15.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb530e4794fc8ea76a4a21ccb67dea33e5e0e60f07fc38a49e821e1eae3b71a0", size = 37255404 }, + { url = "https://files.pythonhosted.org/packages/4a/71/472eac45440cee134c8a180dbe4c01b3ec247e0338b7c759e6cd71f199a7/scipy-1.15.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5ea7ed46d437fc52350b028b1d44e002646e28f3e8ddc714011aaf87330f2f32", size = 36860011 }, + { url = "https://files.pythonhosted.org/packages/01/b3/21f890f4f42daf20e4d3aaa18182dddb9192771cd47445aaae2e318f6738/scipy-1.15.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:11e7ad32cf184b74380f43d3c0a706f49358b904fa7d5345f16ddf993609184d", size = 39657406 }, + { url = "https://files.pythonhosted.org/packages/0d/76/77cf2ac1f2a9cc00c073d49e1e16244e389dd88e2490c91d84e1e3e4d126/scipy-1.15.2-cp313-cp313-win_amd64.whl", hash = "sha256:a5080a79dfb9b78b768cebf3c9dcbc7b665c5875793569f48bf0e2b1d7f68f6f", size = 40961243 }, + { url = "https://files.pythonhosted.org/packages/4c/4b/a57f8ddcf48e129e6054fa9899a2a86d1fc6b07a0e15c7eebff7ca94533f/scipy-1.15.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:447ce30cee6a9d5d1379087c9e474628dab3db4a67484be1b7dc3196bfb2fac9", size = 38870286 }, + { url = "https://files.pythonhosted.org/packages/0c/43/c304d69a56c91ad5f188c0714f6a97b9c1fed93128c691148621274a3a68/scipy-1.15.2-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:c90ebe8aaa4397eaefa8455a8182b164a6cc1d59ad53f79943f266d99f68687f", size = 30141634 }, + { url = "https://files.pythonhosted.org/packages/44/1a/6c21b45d2548eb73be9b9bff421aaaa7e85e22c1f9b3bc44b23485dfce0a/scipy-1.15.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:def751dd08243934c884a3221156d63e15234a3155cf25978b0a668409d45eb6", size = 22415179 }, + { url = "https://files.pythonhosted.org/packages/74/4b/aefac4bba80ef815b64f55da06f62f92be5d03b467f2ce3668071799429a/scipy-1.15.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:302093e7dfb120e55515936cb55618ee0b895f8bcaf18ff81eca086c17bd80af", size = 25126412 }, + { url = "https://files.pythonhosted.org/packages/b1/53/1cbb148e6e8f1660aacd9f0a9dfa2b05e9ff1cb54b4386fe868477972ac2/scipy-1.15.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7cd5b77413e1855351cdde594eca99c1f4a588c2d63711388b6a1f1c01f62274", size = 34952867 }, + { url = "https://files.pythonhosted.org/packages/2c/23/e0eb7f31a9c13cf2dca083828b97992dd22f8184c6ce4fec5deec0c81fcf/scipy-1.15.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d0194c37037707b2afa7a2f2a924cf7bac3dc292d51b6a925e5fcb89bc5c776", size = 36890009 }, + { url = "https://files.pythonhosted.org/packages/03/f3/e699e19cabe96bbac5189c04aaa970718f0105cff03d458dc5e2b6bd1e8c/scipy-1.15.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:bae43364d600fdc3ac327db99659dcb79e6e7ecd279a75fe1266669d9a652828", size = 36545159 }, + { url = "https://files.pythonhosted.org/packages/af/f5/ab3838e56fe5cc22383d6fcf2336e48c8fe33e944b9037fbf6cbdf5a11f8/scipy-1.15.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f031846580d9acccd0044efd1a90e6f4df3a6e12b4b6bd694a7bc03a89892b28", size = 39136566 }, + { url = "https://files.pythonhosted.org/packages/0a/c8/b3f566db71461cabd4b2d5b39bcc24a7e1c119535c8361f81426be39bb47/scipy-1.15.2-cp313-cp313t-win_amd64.whl", hash = "sha256:fe8a9eb875d430d81755472c5ba75e84acc980e4a8f6204d402849234d3017db", size = 40477705 }, +] + +[[package]] +name = "seaborn" +version = "0.13.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "matplotlib" }, + { name = "numpy" }, + { name = "pandas" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914 }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] [[package]] @@ -1116,9 +1131,9 @@ dependencies = [ { name = "executing" }, { name = "pure-eval" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, ] [[package]] @@ -1132,65 +1147,65 @@ dependencies = [ { name = "patsy" }, { name = "scipy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1f/3b/963a015dd8ea17e10c7b0e2f14d7c4daec903baf60a017e756b57953a4bf/statsmodels-0.14.4.tar.gz", hash = "sha256:5d69e0f39060dc72c067f9bb6e8033b6dccdb0bae101d76a7ef0bcc94e898b67", size = 20354802, upload-time = "2024-10-03T16:15:36.273Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/3b/963a015dd8ea17e10c7b0e2f14d7c4daec903baf60a017e756b57953a4bf/statsmodels-0.14.4.tar.gz", hash = "sha256:5d69e0f39060dc72c067f9bb6e8033b6dccdb0bae101d76a7ef0bcc94e898b67", size = 20354802 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/99/654fd41a9024643ee70b239e5ebc987bf98ce9fc2693bd550bee58136564/statsmodels-0.14.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5221dba7424cf4f2561b22e9081de85f5bb871228581124a0d1b572708545199", size = 10220508, upload-time = "2024-10-03T17:10:31.183Z" }, - { url = "https://files.pythonhosted.org/packages/67/d8/ac30cf4cf97adaa48548be57e7cf02e894f31b45fd55bf9213358d9781c9/statsmodels-0.14.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:17672b30c6b98afe2b095591e32d1d66d4372f2651428e433f16a3667f19eabb", size = 9912317, upload-time = "2024-10-03T16:22:29.504Z" }, - { url = "https://files.pythonhosted.org/packages/e0/77/2440d551eaf27f9c1d3650e13b3821a35ad5b21d3a19f62fb302af9203e8/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab5e6312213b8cfb9dca93dd46a0f4dccb856541f91d3306227c3d92f7659245", size = 10301662, upload-time = "2024-10-03T17:13:04.537Z" }, - { url = "https://files.pythonhosted.org/packages/fa/e1/60a652f18996a40a7410aeb7eb476c18da8a39792c7effe67f06883e9852/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bbb150620b53133d6cd1c5d14c28a4f85701e6c781d9b689b53681effaa655f", size = 10741763, upload-time = "2024-10-03T17:13:17.594Z" }, - { url = "https://files.pythonhosted.org/packages/81/0c/2453eec3ac25e300847d9ed97f41156de145e507391ecb5ac989e111e525/statsmodels-0.14.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb695c2025d122a101c2aca66d2b78813c321b60d3a7c86bb8ec4467bb53b0f9", size = 10879534, upload-time = "2024-10-03T17:13:31.19Z" }, - { url = "https://files.pythonhosted.org/packages/59/9a/e466a1b887a1441141e52dbcc98152f013d85076576da6eed2357f2016ae/statsmodels-0.14.4-cp312-cp312-win_amd64.whl", hash = "sha256:7f7917a51766b4e074da283c507a25048ad29a18e527207883d73535e0dc6184", size = 9823866, upload-time = "2024-10-03T16:14:23.828Z" }, - { url = "https://files.pythonhosted.org/packages/31/f8/2662e6a101315ad336f75168fa9bac71f913ebcb92a6be84031d84a0f21f/statsmodels-0.14.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5a24f5d2c22852d807d2b42daf3a61740820b28d8381daaf59dcb7055bf1a79", size = 10186886, upload-time = "2024-10-03T17:10:44.074Z" }, - { url = "https://files.pythonhosted.org/packages/fa/c0/ee6e8ed35fc1ca9c7538c592f4974547bf72274bc98db1ae4a6e87481a83/statsmodels-0.14.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df4f7864606fa843d7e7c0e6af288f034a2160dba14e6ccc09020a3cf67cb092", size = 9880066, upload-time = "2024-10-03T17:10:56.972Z" }, - { url = "https://files.pythonhosted.org/packages/d1/97/3380ca6d8fd66cfb3d12941e472642f26e781a311c355a4e97aab2ed0216/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91341cbde9e8bea5fb419a76e09114e221567d03f34ca26e6d67ae2c27d8fe3c", size = 10283521, upload-time = "2024-10-03T17:14:06.216Z" }, - { url = "https://files.pythonhosted.org/packages/fe/2a/55c5b5c5e5124a202ea3fe0bcdbdeceaf91b4ec6164b8434acb9dd97409c/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1322286a7bfdde2790bf72d29698a1b76c20b8423a55bdcd0d457969d0041f72", size = 10723228, upload-time = "2024-10-03T17:14:19.587Z" }, - { url = "https://files.pythonhosted.org/packages/4f/76/67747e49dc758daae06f33aad8247b718cd7d224f091d2cd552681215bb2/statsmodels-0.14.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e31b95ac603415887c9f0d344cb523889cf779bc52d68e27e2d23c358958fec7", size = 10859503, upload-time = "2024-10-03T17:14:32.798Z" }, - { url = "https://files.pythonhosted.org/packages/1d/eb/cb8b01f5edf8f135eb3d0553d159db113a35b2948d0e51eeb735e7ae09ea/statsmodels-0.14.4-cp313-cp313-win_amd64.whl", hash = "sha256:81030108d27aecc7995cac05aa280cf8c6025f6a6119894eef648997936c2dd0", size = 9817574, upload-time = "2024-10-03T16:14:37.461Z" }, + { url = "https://files.pythonhosted.org/packages/f5/99/654fd41a9024643ee70b239e5ebc987bf98ce9fc2693bd550bee58136564/statsmodels-0.14.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5221dba7424cf4f2561b22e9081de85f5bb871228581124a0d1b572708545199", size = 10220508 }, + { url = "https://files.pythonhosted.org/packages/67/d8/ac30cf4cf97adaa48548be57e7cf02e894f31b45fd55bf9213358d9781c9/statsmodels-0.14.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:17672b30c6b98afe2b095591e32d1d66d4372f2651428e433f16a3667f19eabb", size = 9912317 }, + { url = "https://files.pythonhosted.org/packages/e0/77/2440d551eaf27f9c1d3650e13b3821a35ad5b21d3a19f62fb302af9203e8/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab5e6312213b8cfb9dca93dd46a0f4dccb856541f91d3306227c3d92f7659245", size = 10301662 }, + { url = "https://files.pythonhosted.org/packages/fa/e1/60a652f18996a40a7410aeb7eb476c18da8a39792c7effe67f06883e9852/statsmodels-0.14.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bbb150620b53133d6cd1c5d14c28a4f85701e6c781d9b689b53681effaa655f", size = 10741763 }, + { url = "https://files.pythonhosted.org/packages/81/0c/2453eec3ac25e300847d9ed97f41156de145e507391ecb5ac989e111e525/statsmodels-0.14.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb695c2025d122a101c2aca66d2b78813c321b60d3a7c86bb8ec4467bb53b0f9", size = 10879534 }, + { url = "https://files.pythonhosted.org/packages/59/9a/e466a1b887a1441141e52dbcc98152f013d85076576da6eed2357f2016ae/statsmodels-0.14.4-cp312-cp312-win_amd64.whl", hash = "sha256:7f7917a51766b4e074da283c507a25048ad29a18e527207883d73535e0dc6184", size = 9823866 }, + { url = "https://files.pythonhosted.org/packages/31/f8/2662e6a101315ad336f75168fa9bac71f913ebcb92a6be84031d84a0f21f/statsmodels-0.14.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b5a24f5d2c22852d807d2b42daf3a61740820b28d8381daaf59dcb7055bf1a79", size = 10186886 }, + { url = "https://files.pythonhosted.org/packages/fa/c0/ee6e8ed35fc1ca9c7538c592f4974547bf72274bc98db1ae4a6e87481a83/statsmodels-0.14.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df4f7864606fa843d7e7c0e6af288f034a2160dba14e6ccc09020a3cf67cb092", size = 9880066 }, + { url = "https://files.pythonhosted.org/packages/d1/97/3380ca6d8fd66cfb3d12941e472642f26e781a311c355a4e97aab2ed0216/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91341cbde9e8bea5fb419a76e09114e221567d03f34ca26e6d67ae2c27d8fe3c", size = 10283521 }, + { url = "https://files.pythonhosted.org/packages/fe/2a/55c5b5c5e5124a202ea3fe0bcdbdeceaf91b4ec6164b8434acb9dd97409c/statsmodels-0.14.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1322286a7bfdde2790bf72d29698a1b76c20b8423a55bdcd0d457969d0041f72", size = 10723228 }, + { url = "https://files.pythonhosted.org/packages/4f/76/67747e49dc758daae06f33aad8247b718cd7d224f091d2cd552681215bb2/statsmodels-0.14.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e31b95ac603415887c9f0d344cb523889cf779bc52d68e27e2d23c358958fec7", size = 10859503 }, + { url = "https://files.pythonhosted.org/packages/1d/eb/cb8b01f5edf8f135eb3d0553d159db113a35b2948d0e51eeb735e7ae09ea/statsmodels-0.14.4-cp313-cp313-win_amd64.whl", hash = "sha256:81030108d27aecc7995cac05aa280cf8c6025f6a6119894eef648997936c2dd0", size = 9817574 }, ] [[package]] name = "threadpoolctl" version = "3.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274 } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, + { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638 }, ] [[package]] name = "tornado" version = "6.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135, upload-time = "2024-11-22T03:06:38.036Z" } +sdist = { url = "https://files.pythonhosted.org/packages/59/45/a0daf161f7d6f36c3ea5fc0c2de619746cc3dd4c76402e9db545bd920f63/tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b", size = 501135 } wheels = [ - { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299, upload-time = "2024-11-22T03:06:20.162Z" }, - { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253, upload-time = "2024-11-22T03:06:22.39Z" }, - { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602, upload-time = "2024-11-22T03:06:24.214Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972, upload-time = "2024-11-22T03:06:25.559Z" }, - { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173, upload-time = "2024-11-22T03:06:27.584Z" }, - { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892, upload-time = "2024-11-22T03:06:28.933Z" }, - { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334, upload-time = "2024-11-22T03:06:30.428Z" }, - { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261, upload-time = "2024-11-22T03:06:32.458Z" }, - { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463, upload-time = "2024-11-22T03:06:34.71Z" }, - { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907, upload-time = "2024-11-22T03:06:36.71Z" }, + { url = "https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1", size = 436299 }, + { url = "https://files.pythonhosted.org/packages/96/44/87543a3b99016d0bf54fdaab30d24bf0af2e848f1d13d34a3a5380aabe16/tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803", size = 434253 }, + { url = "https://files.pythonhosted.org/packages/cb/fb/fdf679b4ce51bcb7210801ef4f11fdac96e9885daa402861751353beea6e/tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec", size = 437602 }, + { url = "https://files.pythonhosted.org/packages/4f/3b/e31aeffffc22b475a64dbeb273026a21b5b566f74dee48742817626c47dc/tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946", size = 436972 }, + { url = "https://files.pythonhosted.org/packages/22/55/b78a464de78051a30599ceb6983b01d8f732e6f69bf37b4ed07f642ac0fc/tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf", size = 437173 }, + { url = "https://files.pythonhosted.org/packages/79/5e/be4fb0d1684eb822c9a62fb18a3e44a06188f78aa466b2ad991d2ee31104/tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634", size = 437892 }, + { url = "https://files.pythonhosted.org/packages/f5/33/4f91fdd94ea36e1d796147003b490fe60a0215ac5737b6f9c65e160d4fe0/tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73", size = 437334 }, + { url = "https://files.pythonhosted.org/packages/2b/ae/c1b22d4524b0e10da2f29a176fb2890386f7bd1f63aacf186444873a88a0/tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c", size = 437261 }, + { url = "https://files.pythonhosted.org/packages/b5/25/36dbd49ab6d179bcfc4c6c093a51795a4f3bed380543a8242ac3517a1751/tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482", size = 438463 }, + { url = "https://files.pythonhosted.org/packages/61/cc/58b1adeb1bb46228442081e746fcdbc4540905c87e8add7c277540934edb/tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38", size = 438907 }, ] [[package]] name = "traitlets" version = "5.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, ] [[package]] name = "tzdata" version = "2025.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/0f/fa4723f22942480be4ca9527bbde8d43f6c3f2fe8412f00e7f5f6746bc8b/tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", size = 194950, upload-time = "2025-01-21T19:49:38.686Z" } +sdist = { url = "https://files.pythonhosted.org/packages/43/0f/fa4723f22942480be4ca9527bbde8d43f6c3f2fe8412f00e7f5f6746bc8b/tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694", size = 194950 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639", size = 346762, upload-time = "2025-01-21T19:49:37.187Z" }, + { url = "https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639", size = 346762 }, ] [[package]] @@ -1202,16 +1217,16 @@ dependencies = [ { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316, upload-time = "2025-05-08T17:58:23.811Z" } +sdist = { url = "https://files.pythonhosted.org/packages/56/2c/444f465fb2c65f40c3a104fd0c495184c4f2336d65baf398e3c75d72ea94/virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af", size = 6076316 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982, upload-time = "2025-05-08T17:58:21.15Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/b1c265d4b2b62b58576588510fc4d1fe60a86319c8de99fd8e9fec617d2c/virtualenv-20.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11", size = 6057982 }, ] [[package]] name = "wcwidth" version = "0.2.13" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, ] From 6197ea94967f6f90910758283d5bda8f3aabe5a1 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 11:09:08 +0200 Subject: [PATCH 040/142] update config save --- monte-cover/src/montecover/base.py | 44 ++++++++---------------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/monte-cover/src/montecover/base.py b/monte-cover/src/montecover/base.py index 3edfca8..1695e2e 100644 --- a/monte-cover/src/montecover/base.py +++ b/monte-cover/src/montecover/base.py @@ -107,9 +107,7 @@ def run_simulation(self, n_jobs=None): rep_end_time = time.time() rep_duration = rep_end_time - rep_start_time - self.logger.info( - f"Repetition {i_rep+1} completed in {rep_duration:.2f}s" - ) + self.logger.info(f"Repetition {i_rep+1} completed in {rep_duration:.2f}s") else: self.logger.info(f"Starting parallel execution with n_jobs={n_jobs}") @@ -140,9 +138,7 @@ def save_results(self, output_path: str = "results", file_prefix: str = ""): "Script": [self.__class__.__name__], "Date": [datetime.now().strftime("%Y-%m-%d %H:%M")], "Total Runtime (minutes)": [self.total_runtime / 60], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], + "Python Version": [f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}"], "Config File": [self.config_file], } ) @@ -165,7 +161,7 @@ def save_config(self, output_path: str): self.logger.warning(f"Adding .yaml extension to output path: {output_path}") with open(output_path, "w") as file: - yaml.dump(self.config, file) + yaml.dump(self.config, file, sort_keys=False, default_flow_style=False, indent=2, allow_unicode=True) self.logger.info(f"Configuration saved to {output_path}") @@ -178,9 +174,7 @@ def _load_config(self, config_path: str) -> Dict[str, Any]: with open(config_path, "r") as file: config = yaml.safe_load(file) else: - raise ValueError( - f"Unsupported config file format: {config_path}. Use .yaml or .yml" - ) + raise ValueError(f"Unsupported config file format: {config_path}. Use .yaml or .yml") return config @@ -204,9 +198,7 @@ def _setup_logging(self, log_level: str, log_file: Optional[str]): # Console handler ch = logging.StreamHandler() ch.setLevel(level) - formatter = logging.Formatter( - "%(asctime)s - %(name)s - %(levelname)s - %(message)s" - ) + formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") ch.setFormatter(formatter) self.logger.addHandler(ch) @@ -264,9 +256,7 @@ def _process_repetition(self, i_rep): dml_params = dict(zip(self.dml_parameters.keys(), dml_param_values)) i_param_comb += 1 - comb_results = self._process_parameter_combination( - i_rep, i_param_comb, dgp_params, dml_params, dml_data - ) + comb_results = self._process_parameter_combination(i_rep, i_param_comb, dgp_params, dml_params, dml_data) # Merge results for result_name, result_list in comb_results.items(): @@ -276,14 +266,11 @@ def _process_repetition(self, i_rep): return rep_results - def _process_parameter_combination( - self, i_rep, i_param_comb, dgp_params, dml_params, dml_data - ): + def _process_parameter_combination(self, i_rep, i_param_comb, dgp_params, dml_params, dml_data): """Process a single parameter combination.""" # Log parameter combination self.logger.debug( - f"Rep {i_rep+1}, Combo {i_param_comb}/{self.total_combinations}: " - f"DGPs {dgp_params}, DML {dml_params}" + f"Rep {i_rep+1}, Combo {i_param_comb}/{self.total_combinations}: " f"DGPs {dgp_params}, DML {dml_params}" ) param_start_time = time.time() @@ -292,9 +279,7 @@ def _process_parameter_combination( # Log timing param_duration = time.time() - param_start_time - self.logger.debug( - f"Parameter combination completed in {param_duration:.2f}s" - ) + self.logger.debug(f"Parameter combination completed in {param_duration:.2f}s") # Process results if repetition_results is None: @@ -313,8 +298,7 @@ def _process_parameter_combination( except Exception as e: self.logger.error( - f"Error: repetition {i_rep+1}, DGP parameters {dgp_params}, " - f"DML parameters {dml_params}: {str(e)}" + f"Error: repetition {i_rep+1}, DGP parameters {dgp_params}, " f"DML parameters {dml_params}: {str(e)}" ) self.logger.exception("Exception details:") return {} @@ -349,13 +333,9 @@ def _compute_coverage(thetas, oracle_thetas, confint, joint_confint=None): if joint_confint is not None: joint_lower_bound = joint_confint.iloc[:, 0] joint_upper_bound = joint_confint.iloc[:, 1] - joint_coverage_mask = (joint_lower_bound < oracle_thetas) & ( - oracle_thetas < joint_upper_bound - ) + joint_coverage_mask = (joint_lower_bound < oracle_thetas) & (oracle_thetas < joint_upper_bound) result_dict["Uniform Coverage"] = np.all(joint_coverage_mask) - result_dict["Uniform CI Length"] = np.mean( - joint_upper_bound - joint_lower_bound - ) + result_dict["Uniform CI Length"] = np.mean(joint_upper_bound - joint_lower_bound) return result_dict From 1da4c9a409a6cac04463c35e8cb25711dc0a3d45 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 14:21:31 +0200 Subject: [PATCH 041/142] update simulations --- results/plm/pliv_late_config.yml | 753 ++----------------- results/plm/pliv_late_coverage.csv | 64 +- results/plm/pliv_late_metadata.csv | 2 +- results/plm/plr_ate_config.yml | 412 +--------- results/plm/plr_ate_coverage.csv | 46 +- results/plm/plr_ate_metadata.csv | 2 +- results/plm/plr_ate_sensitivity_config.yml | 49 ++ results/plm/plr_ate_sensitivity_coverage.csv | 29 + results/plm/plr_ate_sensitivity_metadata.csv | 4 +- results/plm/plr_cate_config.yml | 408 +--------- results/plm/plr_cate_coverage.csv | 52 +- results/plm/plr_cate_metadata.csv | 2 +- results/plm/plr_gate_config.yml | 408 +--------- results/plm/plr_gate_coverage.csv | 52 +- results/plm/plr_gate_metadata.csv | 2 +- scripts/plm/pliv_late_config.yml | 4 +- 16 files changed, 359 insertions(+), 1930 deletions(-) create mode 100644 results/plm/plr_ate_sensitivity_config.yml create mode 100644 results/plm/plr_ate_sensitivity_coverage.csv diff --git a/results/plm/pliv_late_config.yml b/results/plm/pliv_late_config.yml index c701676..9863dcf 100644 --- a/results/plm/pliv_late_config.yml +++ b/results/plm/pliv_late_config.yml @@ -1,718 +1,57 @@ -confidence_parameters: - level: - - 0.95 - - 0.9 +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 dgp_parameters: + theta: + - 0.5 + n_obs: + - 500 dim_x: - 20 dim_z: - 1 - n_obs: - - 500 - theta: - - 0.5 -dml_parameters: - learners: - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_r: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: &id001 !!python/tuple - - criterion - - max_depth - - min_samples_split - - min_samples_leaf - - min_weight_fraction_leaf - - max_features - - max_leaf_nodes - - min_impurity_decrease - - random_state - - ccp_alpha - - monotonic_cst - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_r: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: + n_estimators: 200 max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_r: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_r: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_r: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_r: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_r: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 20 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 100 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_r: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + ml_r: *id001 + - ml_g: *id002 + ml_m: *id002 + ml_r: *id002 + - ml_g: *id001 + ml_m: *id002 + ml_r: *id002 + - ml_g: *id002 + ml_m: *id001 + ml_r: *id002 + - ml_g: *id002 + ml_m: *id002 + ml_r: *id001 + - ml_g: *id001 + ml_m: *id001 + ml_r: *id002 + - ml_g: *id002 + ml_m: *id001 + ml_r: *id001 + - ml_g: *id001 + ml_m: *id002 + ml_r: *id001 score: - partialling out - IV-type -simulation_parameters: - max_runtime: 19800 - n_jobs: -2 - random_seed: 42 - repetitions: 1000 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/pliv_late_coverage.csv b/results/plm/pliv_late_coverage.csv index a88c46d..b7699eb 100644 --- a/results/plm/pliv_late_coverage.csv +++ b/results/plm/pliv_late_coverage.csv @@ -1,33 +1,33 @@ Learner g,Learner m,Learner r,Score,level,Coverage,CI Length,Bias,repetition -Lasso,Lasso,Lasso,IV-type,0.9,0.77,0.2311670246722693,0.07351137803097982,1000 -Lasso,Lasso,Lasso,IV-type,0.95,0.853,0.2754524994486315,0.07351137803097982,1000 -Lasso,Lasso,Lasso,partialling out,0.9,0.882,0.29873840617005004,0.07352898443923109,1000 -Lasso,Lasso,Lasso,partialling out,0.95,0.936,0.3559687666417936,0.07352898443923109,1000 -Lasso,Lasso,Random Forest,IV-type,0.9,0.777,0.23104564062515098,0.07292686591867557,1000 -Lasso,Lasso,Random Forest,IV-type,0.95,0.846,0.27530786143540564,0.07292686591867557,1000 -Lasso,Lasso,Random Forest,partialling out,0.9,0.875,0.30560561442708173,0.0754105177262708,1000 -Lasso,Lasso,Random Forest,partialling out,0.95,0.93,0.36415154998347216,0.0754105177262708,1000 -Lasso,Random Forest,Lasso,IV-type,0.9,0.822,0.26337832028825253,0.07879147116049506,1000 -Lasso,Random Forest,Lasso,IV-type,0.95,0.885,0.3138346255346524,0.07879147116049506,1000 -Lasso,Random Forest,Lasso,partialling out,0.9,0.891,0.316241872167824,0.07999092574770732,1000 -Lasso,Random Forest,Lasso,partialling out,0.95,0.933,0.3768254327901611,0.07999092574770732,1000 -Lasso,Random Forest,Random Forest,IV-type,0.9,0.824,0.2646018830744012,0.07786123070241949,1000 -Lasso,Random Forest,Random Forest,IV-type,0.95,0.893,0.315292590519731,0.07786123070241949,1000 -Lasso,Random Forest,Random Forest,partialling out,0.9,0.876,0.30059448125206695,0.08076615513006948,1000 -Lasso,Random Forest,Random Forest,partialling out,0.95,0.928,0.358180416513702,0.08076615513006948,1000 -Random Forest,Lasso,Lasso,IV-type,0.9,0.782,0.24089307789954117,0.07711265155797907,1000 -Random Forest,Lasso,Lasso,IV-type,0.95,0.863,0.2870418066823109,0.07711265155797907,1000 -Random Forest,Lasso,Lasso,partialling out,0.9,0.895,0.33019788438737024,0.08083652454735182,1000 -Random Forest,Lasso,Lasso,partialling out,0.95,0.943,0.3934550470427116,0.08083652454735182,1000 -Random Forest,Lasso,Random Forest,IV-type,0.9,0.78,0.24137668899853607,0.07696667082860091,1000 -Random Forest,Lasso,Random Forest,IV-type,0.95,0.856,0.28761806484961694,0.07696667082860091,1000 -Random Forest,Lasso,Random Forest,partialling out,0.9,0.887,0.31720465918002544,0.07868619249395503,1000 -Random Forest,Lasso,Random Forest,partialling out,0.95,0.941,0.3779726642749438,0.07868619249395503,1000 -Random Forest,Random Forest,Lasso,IV-type,0.9,0.808,0.276723535376228,0.08329949900345505,1000 -Random Forest,Random Forest,Lasso,IV-type,0.95,0.875,0.32973643011458303,0.08329949900345505,1000 -Random Forest,Random Forest,Lasso,partialling out,0.9,0.777,0.3500959987873081,0.10966539595371148,1000 -Random Forest,Random Forest,Lasso,partialling out,0.95,0.847,0.41716511275622853,0.10966539595371148,1000 -Random Forest,Random Forest,Random Forest,IV-type,0.9,0.815,0.2748458977378696,0.08114552106062414,1000 -Random Forest,Random Forest,Random Forest,IV-type,0.95,0.871,0.32749908687206,0.08114552106062414,1000 -Random Forest,Random Forest,Random Forest,partialling out,0.9,0.858,0.3033050825261931,0.08095253102426896,1000 -Random Forest,Random Forest,Random Forest,partialling out,0.95,0.915,0.36141029714665657,0.08095253102426896,1000 +LassoCV,LassoCV,LassoCV,IV-type,0.9,0.79,0.23041849621634433,0.07269684158242082,1000 +LassoCV,LassoCV,LassoCV,IV-type,0.95,0.863,0.274560572780521,0.07269684158242082,1000 +LassoCV,LassoCV,LassoCV,partialling out,0.9,0.891,0.2981413780443461,0.07240941269300215,1000 +LassoCV,LassoCV,LassoCV,partialling out,0.95,0.929,0.3552573637516131,0.07240941269300215,1000 +LassoCV,LassoCV,RF Regr.,IV-type,0.9,0.781,0.2301096797207173,0.07376128885356645,1000 +LassoCV,LassoCV,RF Regr.,IV-type,0.95,0.852,0.27419259522960504,0.07376128885356645,1000 +LassoCV,LassoCV,RF Regr.,partialling out,0.9,0.878,0.3053702107250711,0.0755821331794551,1000 +LassoCV,LassoCV,RF Regr.,partialling out,0.95,0.934,0.36387104917160157,0.0755821331794551,1000 +LassoCV,RF Regr.,LassoCV,IV-type,0.9,0.815,0.2629630290991766,0.07749979444505609,1000 +LassoCV,RF Regr.,LassoCV,IV-type,0.95,0.884,0.31333977556116616,0.07749979444505609,1000 +LassoCV,RF Regr.,LassoCV,partialling out,0.9,0.898,0.31506448220942895,0.07731675568554748,1000 +LassoCV,RF Regr.,LassoCV,partialling out,0.95,0.949,0.3754224861228091,0.07731675568554748,1000 +LassoCV,RF Regr.,RF Regr.,IV-type,0.9,0.84,0.2641363274938619,0.0769395592062568,1000 +LassoCV,RF Regr.,RF Regr.,IV-type,0.95,0.909,0.3147378468296498,0.0769395592062568,1000 +LassoCV,RF Regr.,RF Regr.,partialling out,0.9,0.907,0.29937522552270945,0.07811168308197916,1000 +LassoCV,RF Regr.,RF Regr.,partialling out,0.95,0.951,0.3567275837033359,0.07811168308197916,1000 +RF Regr.,LassoCV,LassoCV,IV-type,0.9,0.8,0.23974287206977238,0.07457301116763686,1000 +RF Regr.,LassoCV,LassoCV,IV-type,0.95,0.87,0.28567125190210646,0.07457301116763686,1000 +RF Regr.,LassoCV,LassoCV,partialling out,0.9,0.893,0.3286443044443393,0.07800154378757782,1000 +RF Regr.,LassoCV,LassoCV,partialling out,0.95,0.937,0.39160384236069506,0.07800154378757782,1000 +RF Regr.,LassoCV,RF Regr.,IV-type,0.9,0.796,0.2396474794539173,0.07406169428929765,1000 +RF Regr.,LassoCV,RF Regr.,IV-type,0.95,0.867,0.2855575845894633,0.07406169428929765,1000 +RF Regr.,LassoCV,RF Regr.,partialling out,0.9,0.895,0.3154062840535594,0.07501237332238155,1000 +RF Regr.,LassoCV,RF Regr.,partialling out,0.95,0.935,0.3758297681407154,0.07501237332238155,1000 +RF Regr.,RF Regr.,LassoCV,IV-type,0.9,0.816,0.2751591936918531,0.0805973908326483,1000 +RF Regr.,RF Regr.,LassoCV,IV-type,0.95,0.87,0.32787240202682416,0.0805973908326483,1000 +RF Regr.,RF Regr.,LassoCV,partialling out,0.9,0.77,0.34739924987735415,0.10944380509793578,1000 +RF Regr.,RF Regr.,LassoCV,partialling out,0.95,0.851,0.41395173823326054,0.10944380509793578,1000 +RF Regr.,RF Regr.,RF Regr.,IV-type,0.9,0.811,0.272008906069617,0.07916378827421267,1000 +RF Regr.,RF Regr.,RF Regr.,IV-type,0.95,0.876,0.3241186027954794,0.07916378827421267,1000 +RF Regr.,RF Regr.,RF Regr.,partialling out,0.9,0.855,0.30064395770722446,0.07963031397212984,1000 +RF Regr.,RF Regr.,RF Regr.,partialling out,0.95,0.916,0.3582393713462795,0.07963031397212984,1000 diff --git a/results/plm/pliv_late_metadata.csv b/results/plm/pliv_late_metadata.csv index c55eeb8..ef55f3b 100644 --- a/results/plm/pliv_late_metadata.csv +++ b/results/plm/pliv_late_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.9.3,PLIVLATECoverageSimulation,2025-05-28 07:39,35.943938295046486,3.12.9,scripts/plm/pliv_late_config.yml +0.10.0,PLIVLATECoverageSimulation,2025-05-28 14:19,63.04629045327504,3.12.9,scripts/plm/pliv_late_config.yml diff --git a/results/plm/plr_ate_config.yml b/results/plm/plr_ate_config.yml index af73b18..d504ba6 100644 --- a/results/plm/plr_ate_config.yml +++ b/results/plm/plr_ate_config.yml @@ -1,386 +1,50 @@ -confidence_parameters: - level: - - 0.95 - - 0.9 +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 dgp_parameters: - dim_x: - - 20 - n_obs: - - 500 theta: - 0.5 -dml_parameters: - learners: - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: &id001 !!python/tuple - - criterion - - max_depth - - min_samples_split - - min_samples_leaf - - min_weight_fraction_leaf - - max_features - - max_leaf_nodes - - min_impurity_decrease - - random_state - - ccp_alpha - - monotonic_cst - max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 20 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 20 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 20 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 min_samples_leaf: 20 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split - learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 + lgbm: &id003 + name: LGBM Regr. + params: n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - ml_m: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 - n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - - ml_g: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split - learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 - n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id003 + ml_m: *id003 + - ml_g: *id003 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id003 score: - partialling out - IV-type -simulation_parameters: - max_runtime: 19800 - n_jobs: -2 - random_seed: 42 - repetitions: 1000 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/plr_ate_coverage.csv b/results/plm/plr_ate_coverage.csv index db54406..310ec3e 100644 --- a/results/plm/plr_ate_coverage.csv +++ b/results/plm/plr_ate_coverage.csv @@ -1,17 +1,29 @@ -Learner g,Learner m,score,level,Coverage,CI Length,Bias,repetition -Lasso,Lasso,IV-type,0.9,0.881,0.1393979255576113,0.0352891099128789,1000 -Lasso,Lasso,IV-type,0.95,0.945,0.16610287331091153,0.0352891099128789,1000 -Lasso,Lasso,partialling out,0.9,0.908,0.14646362984437974,0.034686755904342816,1000 -Lasso,Lasso,partialling out,0.95,0.956,0.17452217926042807,0.034686755904342816,1000 -Lasso,Random Forest,IV-type,0.9,0.903,0.14665557372989238,0.03608539101919554,1000 -Lasso,Random Forest,IV-type,0.95,0.959,0.17475089450687506,0.03608539101919554,1000 -Lasso,Random Forest,partialling out,0.9,0.817,0.1432734763096462,0.04196371030845358,1000 -Lasso,Random Forest,partialling out,0.95,0.885,0.17072087686440923,0.04196371030845358,1000 -Random Forest,Lasso,IV-type,0.9,0.875,0.14194433574047324,0.0357528457566247,1000 -Random Forest,Lasso,IV-type,0.95,0.95,0.16913710819144942,0.0357528457566247,1000 -Random Forest,Lasso,partialling out,0.9,0.907,0.15192454689522888,0.036047683886664836,1000 -Random Forest,Lasso,partialling out,0.95,0.948,0.18102926327498683,0.036047683886664836,1000 -Random Forest,Random Forest,IV-type,0.9,0.897,0.14940035190827072,0.036842562593482744,1000 -Random Forest,Random Forest,IV-type,0.95,0.953,0.17802149943306753,0.036842562593482744,1000 -Random Forest,Random Forest,partialling out,0.9,0.878,0.14629982233202476,0.03724671506945692,1000 -Random Forest,Random Forest,partialling out,0.95,0.941,0.1743269905704728,0.03724671506945692,1000 +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.881,0.1595019374208847,0.04100069583914705,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.934,0.19005828098436547,0.04100069583914705,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.846,0.14675274853894962,0.04190791237104824,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.906,0.1748666854337004,0.04190791237104824,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.868,0.14824170920889415,0.038100428221802235,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.928,0.17664089150266024,0.038100428221802235,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.884,0.15938519368433107,0.040002152187652996,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.951,0.18991917224221566,0.040002152187652996,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.877,0.15050782237661248,0.03888238970332176,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.926,0.1793411318893089,0.03888238970332176,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.518,0.13890986601831956,0.06993679744603097,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.629,0.1655213145000549,0.06993679744603097,1000 +LassoCV,LassoCV,IV-type,0.9,0.872,0.13969849281695265,0.036499996257704004,1000 +LassoCV,LassoCV,IV-type,0.95,0.926,0.16646102129051793,0.036499996257704004,1000 +LassoCV,LassoCV,partialling out,0.9,0.885,0.14668089047289096,0.036074540811218185,1000 +LassoCV,LassoCV,partialling out,0.95,0.94,0.17478106126680434,0.036074540811218185,1000 +LassoCV,RF Regr.,IV-type,0.9,0.83,0.13018546605867554,0.03666478054707691,1000 +LassoCV,RF Regr.,IV-type,0.95,0.908,0.1551255507509627,0.03666478054707691,1000 +LassoCV,RF Regr.,partialling out,0.9,0.77,0.1428404897252024,0.04728817703065239,1000 +LassoCV,RF Regr.,partialling out,0.95,0.847,0.1702049415268244,0.04728817703065239,1000 +RF Regr.,LassoCV,IV-type,0.9,0.867,0.14097249774433687,0.03618679510307958,1000 +RF Regr.,LassoCV,IV-type,0.95,0.931,0.1679790917941089,0.03618679510307958,1000 +RF Regr.,LassoCV,partialling out,0.9,0.884,0.15066452213723588,0.03704282071453597,1000 +RF Regr.,LassoCV,partialling out,0.95,0.948,0.17952785117069395,0.03704282071453597,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.835,0.13139894350736067,0.036892972501779066,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.906,0.1565714983152347,0.036892972501779066,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.877,0.1423808019770533,0.03596103352057129,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.935,0.16965718979029062,0.03596103352057129,1000 diff --git a/results/plm/plr_ate_metadata.csv b/results/plm/plr_ate_metadata.csv index 16eb5fb..548bb9f 100644 --- a/results/plm/plr_ate_metadata.csv +++ b/results/plm/plr_ate_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.dev0,PLRATECoverageSimulation,2025-04-28 10:01,17.98821387688319,3.12.9,scripts/plm/plr_ate_config.yml +0.10.0,PLRATECoverageSimulation,2025-05-28 11:53,19.402489805221556,3.12.9,scripts/plm/plr_ate_config.yml diff --git a/results/plm/plr_ate_sensitivity_config.yml b/results/plm/plr_ate_sensitivity_config.yml new file mode 100644 index 0000000..f575860 --- /dev/null +++ b/results/plm/plr_ate_sensitivity_config.yml @@ -0,0 +1,49 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 1000 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 2 + lgbm: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.05 + min_child_samples: 5 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id003 + ml_m: *id003 + - ml_g: *id003 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id003 + score: + - partialling out + - IV-type +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/plr_ate_sensitivity_coverage.csv b/results/plm/plr_ate_sensitivity_coverage.csv new file mode 100644 index 0000000..796ebb1 --- /dev/null +++ b/results/plm/plr_ate_sensitivity_coverage.csv @@ -0,0 +1,29 @@ +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.39,1.3986705379938356,0.7568282321229512,1.0,0.988,0.10353480945618435,0.03235018190031817,1.4548430258873413,0.28172487679956865,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.58,1.6666187408942352,0.7568282321229512,1.0,1.0,0.10353480945618435,0.01796667554987849,1.4548430258873413,0.28172487679956865,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.189,1.0916003345751164,0.745229048299796,1.0,0.973,0.1023937709456171,0.044092205129545176,1.442888296129542,0.25557592890310343,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.324,1.3007220254876957,0.745229048299796,1.0,0.995,0.1023937709456171,0.030232722136220927,1.442888296129542,0.25557592890310343,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.016,1.4953372314591729,1.4437039585742597,1.0,0.367,0.1846856506540317,0.10955601303401202,2.1770030519509964,0.7149314146862207,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.049,1.7818042106480279,1.4437039585742597,1.0,0.609,0.1846856506540317,0.08936562705573936,2.1770030519509964,0.7149314146862207,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.03,1.4919170534236628,1.3175826417336374,1.0,0.544,0.17179477468456222,0.09581680392710966,2.0443898530689166,0.5946400367152096,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.07,1.7777288171537513,1.3175826417336374,1.0,0.77,0.17179477468456222,0.07565525212879724,2.0443898530689166,0.5946400367152096,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.749,2.4952496109160456,1.0145422303587268,1.0,1.0,0.06791119635868348,0.010650476142068233,2.5249767999961263,0.5857185427518798,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.912,2.9732732990333854,1.0145422303587268,1.0,1.0,0.06791119635868348,0.0032460863536700716,2.5249767999961263,0.5857185427518798,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.609,1.9751467087315708,0.9036654709929666,1.0,1.0,0.06017733068670644,0.012149079760602238,2.428068537165219,0.6515481756903952,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.838,2.3535324662727057,0.9036654709929666,1.0,1.0,0.06017733068670644,0.004321101616502405,2.428068537165219,0.6515481756903952,1000 +LassoCV,LassoCV,IV-type,0.9,0.0,2.570905623457247,4.871689647553308,1.0,0.0,0.2833507883908374,0.22483236768389947,6.401886830835185,3.3414924642714303,1000 +LassoCV,LassoCV,IV-type,0.95,0.0,3.0634229982923324,4.871689647553308,1.0,0.001,0.2833507883908374,0.2083270399684552,6.401886830835185,3.3414924642714303,1000 +LassoCV,LassoCV,partialling out,0.9,0.0,2.582851020829039,4.8682049948568435,1.0,0.0,0.2831862172881001,0.22444151265479817,6.398501952740017,3.337908036973671,1000 +LassoCV,LassoCV,partialling out,0.95,0.0,3.077656817184245,4.8682049948568435,1.0,0.001,0.2831862172881001,0.2078678688958407,6.398501952740017,3.337908036973671,1000 +LassoCV,RF Regr.,IV-type,0.9,0.031,2.218507467951665,1.7178678824226112,1.0,0.998,0.10325395969596025,0.05111030684415464,3.3724761415150177,0.3301794731947294,1000 +LassoCV,RF Regr.,IV-type,0.95,0.103,2.6435146966099587,1.7178678824226112,1.0,1.0,0.10325395969596025,0.03686806786848796,3.3724761415150177,0.3301794731947294,1000 +LassoCV,RF Regr.,partialling out,0.9,0.044,2.2498687284565397,1.670090276024268,1.0,0.999,0.09888207085046483,0.04679808786318507,3.3517396057501476,0.3225059187094146,1000 +LassoCV,RF Regr.,partialling out,0.95,0.126,2.680883943388017,1.670090276024268,1.0,1.0,0.09888207085046483,0.032643923084138514,3.3517396057501476,0.3225059187094146,1000 +RF Regr.,LassoCV,IV-type,0.9,0.0,1.96066578563569,2.4936356454855275,1.0,0.142,0.18809144339634407,0.13187684446648076,3.7456419033735524,1.241834820171921,1000 +RF Regr.,LassoCV,IV-type,0.95,0.003,2.3362773821328338,2.4936356454855275,1.0,0.308,0.18809144339634407,0.11583520853471695,3.7456419033735524,1.241834820171921,1000 +RF Regr.,LassoCV,partialling out,0.9,0.002,1.9364767343021458,2.186351619767898,1.0,0.34,0.16663942582739455,0.11068129598917131,3.4433305987624845,0.9311455138290707,1000 +RF Regr.,LassoCV,partialling out,0.95,0.007,2.307454349701793,2.186351619767898,1.0,0.569,0.16663942582739455,0.094716607796404,3.4433305987624845,0.9311455138290707,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.014,1.7687787143287037,1.6346921352566222,1.0,0.902,0.12057974289166994,0.07009780029981512,2.96405956805537,0.4053973668607306,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.043,2.1076298339874096,1.6346921352566222,1.0,0.971,0.12057974289166994,0.05588378266476332,2.96405956805537,0.4053973668607306,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.02,1.762896240257672,1.603626030511156,1.0,0.923,0.11784052011259094,0.06776242515012326,2.939681088448932,0.3787688727982098,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.043,2.1006204338010956,1.603626030511156,1.0,0.981,0.11784052011259094,0.0536700006473343,2.939681088448932,0.3787688727982098,1000 diff --git a/results/plm/plr_ate_sensitivity_metadata.csv b/results/plm/plr_ate_sensitivity_metadata.csv index fa762a2..1257058 100644 --- a/results/plm/plr_ate_sensitivity_metadata.csv +++ b/results/plm/plr_ate_sensitivity_metadata.csv @@ -1,2 +1,2 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,plr_ate_sensitivity.py,2025-05-22 14:16:38,9875.844212293625,3.12.3 +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,PLRATESensitivityCoverageSimulation,2025-05-28 11:33,22.490594506263733,3.12.9,scripts/plm/plr_ate_sensitivity_config.yml diff --git a/results/plm/plr_cate_config.yml b/results/plm/plr_cate_config.yml index d988265..20ce744 100644 --- a/results/plm/plr_cate_config.yml +++ b/results/plm/plr_cate_config.yml @@ -1,388 +1,52 @@ -confidence_parameters: - level: - - 0.95 - - 0.9 +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 dgp_parameters: n_obs: - 500 - n_x: - - 1 p: - 10 support_size: - 5 -dml_parameters: - learners: - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: &id001 !!python/tuple - - criterion - - max_depth - - min_samples_split - - min_samples_leaf - - min_weight_fraction_leaf - - max_features - - max_leaf_nodes - - min_impurity_decrease - - random_state - - ccp_alpha - - monotonic_cst - max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null + n_x: + - 1 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split - learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 - n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - ml_m: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split - learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 + lgbm: &id003 + name: LGBM Regr. + params: n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - - ml_g: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 - n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id003 + ml_m: *id003 + - ml_g: *id003 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id003 score: - partialling out - IV-type -simulation_parameters: - max_runtime: 19800 - n_jobs: -2 - random_seed: 42 - repetitions: 1000 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/plr_cate_coverage.csv b/results/plm/plr_cate_coverage.csv index c680064..f5e512d 100644 --- a/results/plm/plr_cate_coverage.csv +++ b/results/plm/plr_cate_coverage.csv @@ -1,25 +1,29 @@ Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,IV-type,0.9,0.82067,0.3480458660370899,0.10323087380216943,0.977,0.875262542113541,1000 -LGBM,LGBM,IV-type,0.95,0.89175,0.41472222891044763,0.10323087380216943,0.983,0.8743760032152794,1000 -LGBM,LGBM,partialling out,0.9,0.74924,0.45501765367949726,0.1561157579023202,0.974,1.1411615621374567,1000 -LGBM,LGBM,partialling out,0.95,0.8330700000000001,0.5421869757460459,0.1561157579023202,0.983,1.1472728814827193,1000 -LGBM,Lasso,IV-type,0.9,0.88225,0.36549541297084914,0.09199824425988169,0.997,0.9219589426057265,1000 -LGBM,Lasso,IV-type,0.95,0.93223,0.43551464653127614,0.09199824425988169,0.997,0.9186939466891947,1000 -LGBM,Lasso,partialling out,0.9,0.85111,0.6446559853424424,0.17612250701674348,0.99,1.62087577457141,1000 -LGBM,Lasso,partialling out,0.95,0.91225,0.7681549853351447,0.17612250701674348,0.989,1.6242424203893664,1000 -Lasso,Lasso,IV-type,0.9,0.88906,0.36205036797328316,0.08843630787984691,1.0,0.9108837341579921,1000 -Lasso,Lasso,IV-type,0.95,0.93988,0.4314096222241203,0.08843630787984691,0.996,0.9061325373084409,1000 -Lasso,Lasso,partialling out,0.9,0.88793,0.3773997029778743,0.09300684328946347,0.997,0.948374081382946,1000 -Lasso,Lasso,partialling out,0.95,0.93798,0.4496994829768948,0.09300684328946347,0.997,0.9529022667813315,1000 -Lasso,Random Forest,IV-type,0.9,0.89116,0.3591188383661412,0.08807017223492676,0.996,0.9031782149507243,1000 -Lasso,Random Forest,IV-type,0.95,0.9410700000000001,0.4279164892453154,0.08807017223492676,0.997,0.9029142372777073,1000 -Lasso,Random Forest,partialling out,0.9,0.77049,0.43201602915906673,0.14144817831483167,0.985,1.08875890710365,1000 -Lasso,Random Forest,partialling out,0.95,0.8559500000000001,0.5147788496324103,0.14144817831483167,0.987,1.0843847856728872,1000 -Random Forest,Lasso,IV-type,0.9,0.87576,0.34751733535976115,0.0886897386333643,0.996,0.8745686690953299,1000 -Random Forest,Lasso,IV-type,0.95,0.93031,0.41409244576420573,0.0886897386333643,0.995,0.8733571197353698,1000 -Random Forest,Lasso,partialling out,0.9,0.86897,0.44402322385123977,0.11698781037612511,0.996,1.1173200423596061,1000 -Random Forest,Lasso,partialling out,0.95,0.92803,0.5290863045733317,0.11698781037612511,0.997,1.1171431096930422,1000 -Random Forest,Random Forest,IV-type,0.9,0.87924,0.3435059623808316,0.08632814627418449,0.995,0.8679115609348612,1000 -Random Forest,Random Forest,IV-type,0.95,0.93233,0.4093126000451489,0.08632814627418449,0.995,0.8651443116799056,1000 -Random Forest,Random Forest,partialling out,0.9,0.8770399999999999,0.3833881326033233,0.09756911569117849,0.997,0.9628844750559203,1000 -Random Forest,Random Forest,partialling out,0.95,0.93259,0.45683513699346895,0.09756911569117849,0.997,0.9670687030845722,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.81872,0.3484341786513707,0.1039072228697912,0.977,0.8735457715384822,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.88763,0.4151849319292831,0.1039072228697912,0.975,0.877374987951199,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.75648,0.45514808901251486,0.15290537117667263,0.981,1.1424331881394036,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.8371799999999999,0.5423423990316424,0.15290537117667263,0.979,1.142799510188823,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.8856499999999999,0.3662063463009163,0.09204888518157552,1.0,0.9247548051292168,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.93689,0.43636177584388447,0.09204888518157552,0.999,0.9236089253816859,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.84688,0.6464074102760973,0.17946086748352624,0.995,1.6256670452631903,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.9107799999999999,0.7702419368640483,0.17946086748352624,0.996,1.6305817344109326,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.78087,0.3556343884075679,0.11497576751014303,0.966,0.8955793802746171,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.85573,0.42376451103106344,0.11497576751014303,0.972,0.8997414462422942,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.10748999999999999,0.5604813459090218,0.5281926632323442,0.259,1.4108192445041974,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.16302,0.6678547160601714,0.5281926632323442,0.233,1.4071877112582576,1000 +LassoCV,LassoCV,IV-type,0.9,0.8975299999999999,0.3610680866329369,0.08892599643587756,0.997,0.9088195224190736,1000 +LassoCV,LassoCV,IV-type,0.95,0.9484199999999999,0.43023916181462313,0.08892599643587756,0.996,0.9083975172623389,1000 +LassoCV,LassoCV,partialling out,0.9,0.89234,0.37698973728540563,0.09361005140948865,0.997,0.9483857952556856,1000 +LassoCV,LassoCV,partialling out,0.95,0.94629,0.44921097872401194,0.09361005140948865,0.998,0.9438793910364098,1000 +LassoCV,RF Regr.,IV-type,0.9,0.8957,0.35890276102823065,0.08780941541278481,0.994,0.9029643561853794,1000 +LassoCV,RF Regr.,IV-type,0.95,0.94789,0.42765901721665533,0.08780941541278481,0.997,0.9033578503803233,1000 +LassoCV,RF Regr.,partialling out,0.9,0.77067,0.4314925841837379,0.14084420773113004,0.986,1.0838238758137209,1000 +LassoCV,RF Regr.,partialling out,0.95,0.85138,0.5141551264738733,0.14084420773113004,0.986,1.0863305594246508,1000 +RF Regr.,LassoCV,IV-type,0.9,0.88722,0.3480546970781213,0.08762130960708955,0.998,0.876052154778042,1000 +RF Regr.,LassoCV,IV-type,0.95,0.93845,0.4147327517448713,0.08762130960708955,0.998,0.8777107926499674,1000 +RF Regr.,LassoCV,partialling out,0.9,0.86107,0.44535039439205076,0.11954267106103694,0.994,1.1199997005622482,1000 +RF Regr.,LassoCV,partialling out,0.95,0.92228,0.5306677258127116,0.11954267106103694,0.994,1.1226937767841374,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.885,0.3437548964747918,0.08683852771958954,0.998,0.8645012928978736,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.93662,0.4096092233134395,0.08683852771958954,0.995,0.8675836496124723,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.8829199999999999,0.38292401479596566,0.09657773202124784,0.996,0.9660658753776165,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.93575,0.4562821065158023,0.09657773202124784,0.997,0.9646462523121563,1000 diff --git a/results/plm/plr_cate_metadata.csv b/results/plm/plr_cate_metadata.csv index 4f9538e..833a568 100644 --- a/results/plm/plr_cate_metadata.csv +++ b/results/plm/plr_cate_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.9.3,PLRCATECoverageSimulation,2025-05-28 08:04,18.608062847455344,3.12.9,scripts/plm/plr_cate_config.yml +0.10.0,PLRCATECoverageSimulation,2025-05-28 12:33,18.714494454860688,3.12.9,scripts/plm/plr_cate_config.yml diff --git a/results/plm/plr_gate_config.yml b/results/plm/plr_gate_config.yml index d988265..20ce744 100644 --- a/results/plm/plr_gate_config.yml +++ b/results/plm/plr_gate_config.yml @@ -1,388 +1,52 @@ -confidence_parameters: - level: - - 0.95 - - 0.9 +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 dgp_parameters: n_obs: - 500 - n_x: - - 1 p: - 10 support_size: - 5 -dml_parameters: - learners: - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: &id001 !!python/tuple - - criterion - - max_depth - - min_samples_split - - min_samples_leaf - - min_weight_fraction_leaf - - max_features - - max_leaf_nodes - - min_impurity_decrease - - random_state - - ccp_alpha - - monotonic_cst - max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null + n_x: + - 1 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - ml_m: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 - max_depth: 5 max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 - min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - Random Forest - - !!python/object:sklearn.ensemble._forest.RandomForestRegressor - _sklearn_version: 1.5.2 - bootstrap: true - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - estimator: !!python/object:sklearn.tree._classes.DecisionTreeRegressor - _sklearn_version: 1.5.2 - ccp_alpha: 0.0 - class_weight: null - criterion: squared_error - max_depth: null - max_features: null - max_leaf_nodes: null - min_impurity_decrease: 0.0 - min_samples_leaf: 1 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - random_state: null - splitter: best - estimator_params: *id001 max_depth: 5 - max_features: 10 - max_leaf_nodes: null - max_samples: null - min_impurity_decrease: 0.0 min_samples_leaf: 2 - min_samples_split: 2 - min_weight_fraction_leaf: 0.0 - monotonic_cst: null - n_estimators: 200 - n_jobs: null - oob_score: false - random_state: null - verbose: 0 - warm_start: false - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false - - ml_g: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split - learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 - n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - ml_m: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split - learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 + lgbm: &id003 + name: LGBM Regr. + params: n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - - ml_g: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split learning_rate: 0.01 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 - n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - ml_m: !!python/tuple - - Lasso - - !!python/object:sklearn.linear_model._coordinate_descent.LassoCV - _sklearn_version: 1.5.2 - alphas: null - copy_X: true - cv: null - eps: 0.001 - fit_intercept: true - max_iter: 1000 - n_alphas: 100 - n_jobs: null - positive: false - precompute: auto - random_state: null - selection: cyclic - tol: 0.0001 - verbose: false +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id003 + ml_m: *id003 + - ml_g: *id003 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id003 score: - partialling out - IV-type -simulation_parameters: - max_runtime: 19800 - n_jobs: -2 - random_seed: 42 - repetitions: 1000 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/plr_gate_coverage.csv b/results/plm/plr_gate_coverage.csv index 6b2255d..7e72d5d 100644 --- a/results/plm/plr_gate_coverage.csv +++ b/results/plm/plr_gate_coverage.csv @@ -1,25 +1,29 @@ Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,IV-type,0.9,0.7913333333333333,0.34087019015713244,0.10955365259161864,0.984,0.8024111896303185,1000 -LGBM,LGBM,IV-type,0.95,0.8666666666666666,0.4061718837253168,0.10955365259161864,0.986,0.8021358516058951,1000 -LGBM,LGBM,partialling out,0.9,0.733,0.41199254921037415,0.1412366447574056,0.976,0.969336707290682,1000 -LGBM,LGBM,partialling out,0.95,0.8146666666666667,0.49091940165384834,0.1412366447574056,0.979,0.9670432579194853,1000 -LGBM,Lasso,IV-type,0.9,0.8743333333333334,0.35934038817776554,0.09337368161834425,0.995,0.8445474458877711,1000 -LGBM,Lasso,IV-type,0.95,0.9356666666666666,0.42818048212860316,0.09337368161834425,0.995,0.8434599972250386,1000 -LGBM,Lasso,partialling out,0.9,0.8463333333333334,0.5552110089974697,0.1532082984330501,0.998,1.3118736080937614,1000 -LGBM,Lasso,partialling out,0.95,0.9053333333333333,0.6615747222882156,0.1532082984330501,0.996,1.3086219841863547,1000 -Lasso,Lasso,IV-type,0.9,0.8936666666666666,0.3563210711330694,0.0883132202205594,0.998,0.8375773423599656,1000 -Lasso,Lasso,IV-type,0.95,0.944,0.4245827439660409,0.0883132202205594,0.998,0.8389714933825461,1000 -Lasso,Lasso,partialling out,0.9,0.8916666666666666,0.36779082542346053,0.09228530255512166,0.999,0.8607482851866739,1000 -Lasso,Lasso,partialling out,0.95,0.944,0.4382497991692171,0.09228530255512166,0.999,0.8648102492763181,1000 -Lasso,Random Forest,IV-type,0.9,0.8923333333333334,0.3549776833767524,0.08879950167844942,0.998,0.8332032784130605,1000 -Lasso,Random Forest,IV-type,0.95,0.9426666666666667,0.42298199872250614,0.08879950167844942,0.999,0.8323824489187096,1000 -Lasso,Random Forest,partialling out,0.9,0.7343333333333334,0.4036193152513892,0.13656662200734915,0.993,0.9476058107144939,1000 -Lasso,Random Forest,partialling out,0.95,0.8216666666666667,0.480942078003382,0.13656662200734915,0.992,0.9514873421828395,1000 -Random Forest,Lasso,IV-type,0.9,0.875,0.347078729389649,0.09097126345936613,0.996,0.8160886798754291,1000 -Random Forest,Lasso,IV-type,0.95,0.9276666666666666,0.41356981451560193,0.09097126345936613,0.995,0.8160923905909828,1000 -Random Forest,Lasso,partialling out,0.9,0.8603333333333334,0.4129163782356481,0.1102747613884337,0.995,0.9701530221434742,1000 -Random Forest,Lasso,partialling out,0.95,0.921,0.4920202118340013,0.1102747613884337,0.996,0.9666885122358938,1000 -Random Forest,Random Forest,IV-type,0.9,0.8683333333333334,0.344414723727709,0.09021405187831832,0.993,0.8096356132792374,1000 -Random Forest,Random Forest,IV-type,0.95,0.9313333333333333,0.41039545597909777,0.09021405187831832,0.995,0.8088254975336233,1000 -Random Forest,Random Forest,partialling out,0.9,0.869,0.36859916852570823,0.09499263192691354,0.997,0.865589788143947,1000 -Random Forest,Random Forest,partialling out,0.95,0.926,0.4392129993844807,0.09499263192691354,0.995,0.8653642165581639,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.796,0.33979387523253995,0.10832024259607073,0.988,0.7987743234601482,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.868,0.4048893753892201,0.10832024259607073,0.99,0.7981381466570634,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.7426666666666666,0.41253739858303995,0.1379360725471448,0.973,0.9685345214480735,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.827,0.49156862972492193,0.1379360725471448,0.977,0.9706519271358062,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.8903333333333334,0.3583176199626944,0.08991666159175972,0.998,0.8451480137128867,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.94,0.4269617786323006,0.08991666159175972,1.0,0.8422233010378128,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.848,0.5529121340916043,0.15054236219738926,0.999,1.3033198207453243,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.9123333333333333,0.6588354438827505,0.15054236219738926,0.998,1.3030953275783792,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.742,0.3531330151725611,0.12340559819327977,0.986,0.8300293210286666,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.8276666666666667,0.42078394098387195,0.12340559819327977,0.984,0.8283739312540487,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.12766666666666665,0.47905979871807697,0.48500341376693923,0.16,1.122577859602209,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.182,0.5708349585298022,0.48500341376693923,0.16,1.1252861010872666,1000 +LassoCV,LassoCV,IV-type,0.9,0.905,0.35645532493693804,0.08490211367538716,0.997,0.8399910654126411,1000 +LassoCV,LassoCV,IV-type,0.95,0.954,0.4247427172402937,0.08490211367538716,0.999,0.8368436044474815,1000 +LassoCV,LassoCV,partialling out,0.9,0.8943333333333334,0.368066120806204,0.08948202507419564,0.998,0.8643461362966711,1000 +LassoCV,LassoCV,partialling out,0.95,0.9503333333333334,0.438577833850508,0.08948202507419564,0.999,0.8637601952261709,1000 +LassoCV,RF Regr.,IV-type,0.9,0.9016666666666666,0.35500723548805535,0.08586161820519025,1.0,0.8353326719489717,1000 +LassoCV,RF Regr.,IV-type,0.95,0.952,0.4230172122350473,0.08586161820519025,1.0,0.8355837734736805,1000 +LassoCV,RF Regr.,partialling out,0.9,0.7353333333333334,0.4023375098601938,0.13394637674951615,0.984,0.9460067864994943,1000 +LassoCV,RF Regr.,partialling out,0.95,0.8286666666666667,0.47941471267386726,0.13394637674951615,0.983,0.9439115267272103,1000 +RF Regr.,LassoCV,IV-type,0.9,0.889,0.3468752399423248,0.0860424576014443,1.0,0.8175427756023521,1000 +RF Regr.,LassoCV,IV-type,0.95,0.9396666666666667,0.41332734188371884,0.0860424576014443,0.999,0.8150835598723535,1000 +RF Regr.,LassoCV,partialling out,0.9,0.8663333333333334,0.4123094410216395,0.10900134257780769,0.998,0.9721969733962775,1000 +RF Regr.,LassoCV,partialling out,0.95,0.9203333333333333,0.49129700153684036,0.10900134257780769,0.997,0.9677084911245076,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.8866666666666666,0.3435260325999401,0.08655262597325532,1.0,0.8058250235958847,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.9433333333333334,0.4093365151862714,0.08655262597325532,1.0,0.8074016774960018,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.8973333333333333,0.368415125024972,0.09153529382288327,1.0,0.8677735227889573,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.9456666666666667,0.43899369802713123,0.09153529382288327,1.0,0.8665965965230119,1000 diff --git a/results/plm/plr_gate_metadata.csv b/results/plm/plr_gate_metadata.csv index f369a73..0f19bf8 100644 --- a/results/plm/plr_gate_metadata.csv +++ b/results/plm/plr_gate_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.dev0,PLRGATECoverageSimulation,2025-05-27 17:07,19.04006079832713,3.12.9,scripts/plm/plr_gate_config.yml +0.10.0,PLRGATECoverageSimulation,2025-05-28 12:13,19.178568251927693,3.12.9,scripts/plm/plr_gate_config.yml diff --git a/scripts/plm/pliv_late_config.yml b/scripts/plm/pliv_late_config.yml index 6da5fb0..975025f 100644 --- a/scripts/plm/pliv_late_config.yml +++ b/scripts/plm/pliv_late_config.yml @@ -21,9 +21,9 @@ learner_definitions: name: "RF Regr." params: n_estimators: 200 - max_features: 10 + max_features: 20 max_depth: 5 - min_samples_leaf: 20 + min_samples_leaf: 2 dml_parameters: # ML methods for ml_g and ml_m From d45bd30791dc644f39d6dc3aaa2c1a0ac54e0657 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 28 May 2025 14:21:48 +0200 Subject: [PATCH 042/142] update plr workflows --- .github/workflows/pliv_sim.yml | 27 ++++++++++++++++++--------- .github/workflows/plr_sim.yml | 8 ++++---- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/.github/workflows/pliv_sim.yml b/.github/workflows/pliv_sim.yml index 231d6ec..22a91bc 100644 --- a/.github/workflows/pliv_sim.yml +++ b/.github/workflows/pliv_sim.yml @@ -17,7 +17,7 @@ jobs: strategy: matrix: script: [ - 'scripts/plm/pliv_late_coverage.py', + 'scripts/plm/pliv_late.py', ] steps: @@ -47,20 +47,27 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.7.8" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt - + cd monte-cover + uv venv + uv sync + - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -68,7 +75,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | diff --git a/.github/workflows/plr_sim.yml b/.github/workflows/plr_sim.yml index 9c0990d..20c61bf 100644 --- a/.github/workflows/plr_sim.yml +++ b/.github/workflows/plr_sim.yml @@ -17,10 +17,10 @@ jobs: strategy: matrix: script: [ - 'scripts/plm/plr_ate_coverage.py', + 'scripts/plm/plr_ate.py', 'scripts/plm/plr_ate_sensitivity.py', - 'scripts/plm/plr_cate_coverage.py', - 'scripts/plm/plr_gate_coverage.py', + 'scripts/plm/plr_cate.py', + 'scripts/plm/plr_gate.py', ] steps: @@ -53,7 +53,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 with: - version: "0.6.11" + version: "0.7.8" - name: Set up Python uses: actions/setup-python@v5 From 79f3886633a39c1dce28e771b090a07440ce7652 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 28 May 2025 15:27:04 +0000 Subject: [PATCH 043/142] Update results from script: scripts/plm/plr_gate.py --- results/plm/plr_gate_coverage.csv | 56 +++++++++++++++---------------- results/plm/plr_gate_metadata.csv | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/results/plm/plr_gate_coverage.csv b/results/plm/plr_gate_coverage.csv index 7e72d5d..90e8c35 100644 --- a/results/plm/plr_gate_coverage.csv +++ b/results/plm/plr_gate_coverage.csv @@ -1,29 +1,29 @@ Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Regr.,IV-type,0.9,0.796,0.33979387523253995,0.10832024259607073,0.988,0.7987743234601482,1000 -LGBM Regr.,LGBM Regr.,IV-type,0.95,0.868,0.4048893753892201,0.10832024259607073,0.99,0.7981381466570634,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.9,0.7426666666666666,0.41253739858303995,0.1379360725471448,0.973,0.9685345214480735,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.95,0.827,0.49156862972492193,0.1379360725471448,0.977,0.9706519271358062,1000 -LGBM Regr.,LassoCV,IV-type,0.9,0.8903333333333334,0.3583176199626944,0.08991666159175972,0.998,0.8451480137128867,1000 -LGBM Regr.,LassoCV,IV-type,0.95,0.94,0.4269617786323006,0.08991666159175972,1.0,0.8422233010378128,1000 -LGBM Regr.,LassoCV,partialling out,0.9,0.848,0.5529121340916043,0.15054236219738926,0.999,1.3033198207453243,1000 -LGBM Regr.,LassoCV,partialling out,0.95,0.9123333333333333,0.6588354438827505,0.15054236219738926,0.998,1.3030953275783792,1000 -LassoCV,LGBM Regr.,IV-type,0.9,0.742,0.3531330151725611,0.12340559819327977,0.986,0.8300293210286666,1000 -LassoCV,LGBM Regr.,IV-type,0.95,0.8276666666666667,0.42078394098387195,0.12340559819327977,0.984,0.8283739312540487,1000 -LassoCV,LGBM Regr.,partialling out,0.9,0.12766666666666665,0.47905979871807697,0.48500341376693923,0.16,1.122577859602209,1000 -LassoCV,LGBM Regr.,partialling out,0.95,0.182,0.5708349585298022,0.48500341376693923,0.16,1.1252861010872666,1000 -LassoCV,LassoCV,IV-type,0.9,0.905,0.35645532493693804,0.08490211367538716,0.997,0.8399910654126411,1000 -LassoCV,LassoCV,IV-type,0.95,0.954,0.4247427172402937,0.08490211367538716,0.999,0.8368436044474815,1000 -LassoCV,LassoCV,partialling out,0.9,0.8943333333333334,0.368066120806204,0.08948202507419564,0.998,0.8643461362966711,1000 -LassoCV,LassoCV,partialling out,0.95,0.9503333333333334,0.438577833850508,0.08948202507419564,0.999,0.8637601952261709,1000 -LassoCV,RF Regr.,IV-type,0.9,0.9016666666666666,0.35500723548805535,0.08586161820519025,1.0,0.8353326719489717,1000 -LassoCV,RF Regr.,IV-type,0.95,0.952,0.4230172122350473,0.08586161820519025,1.0,0.8355837734736805,1000 -LassoCV,RF Regr.,partialling out,0.9,0.7353333333333334,0.4023375098601938,0.13394637674951615,0.984,0.9460067864994943,1000 -LassoCV,RF Regr.,partialling out,0.95,0.8286666666666667,0.47941471267386726,0.13394637674951615,0.983,0.9439115267272103,1000 -RF Regr.,LassoCV,IV-type,0.9,0.889,0.3468752399423248,0.0860424576014443,1.0,0.8175427756023521,1000 -RF Regr.,LassoCV,IV-type,0.95,0.9396666666666667,0.41332734188371884,0.0860424576014443,0.999,0.8150835598723535,1000 -RF Regr.,LassoCV,partialling out,0.9,0.8663333333333334,0.4123094410216395,0.10900134257780769,0.998,0.9721969733962775,1000 -RF Regr.,LassoCV,partialling out,0.95,0.9203333333333333,0.49129700153684036,0.10900134257780769,0.997,0.9677084911245076,1000 -RF Regr.,RF Regr.,IV-type,0.9,0.8866666666666666,0.3435260325999401,0.08655262597325532,1.0,0.8058250235958847,1000 -RF Regr.,RF Regr.,IV-type,0.95,0.9433333333333334,0.4093365151862714,0.08655262597325532,1.0,0.8074016774960018,1000 -RF Regr.,RF Regr.,partialling out,0.9,0.8973333333333333,0.368415125024972,0.09153529382288327,1.0,0.8677735227889573,1000 -RF Regr.,RF Regr.,partialling out,0.95,0.9456666666666667,0.43899369802713123,0.09153529382288327,1.0,0.8665965965230119,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.792,0.3409717982379027,0.10939094977617905,0.993,0.8022444119321607,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.868,0.4062929572212102,0.10939094977617905,0.993,0.8004798193792318,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.7256666666666667,0.41261199381065716,0.14296451918548386,0.97,0.9675570982673285,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.815,0.49165751542098196,0.14296451918548386,0.967,0.9691480724040933,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.877,0.35826783725657413,0.09169163906741995,0.999,0.8408389172164787,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.93,0.42690245887919315,0.09169163906741995,0.997,0.8447866030999811,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.8436666666666667,0.5545701417184685,0.15552961423549327,0.998,1.3051628808444764,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.901,0.6608110818249359,0.15552961423549327,0.995,1.3025794190401572,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.7456666666666666,0.3540709326890836,0.12416752914751389,0.987,0.8320224393479907,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.837,0.42190153863677704,0.12416752914751389,0.984,0.8317500001409704,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.1333333333333333,0.48177803693340226,0.48575358485471176,0.177,1.1312945673131298,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.18,0.5740739391394702,0.48575358485471176,0.163,1.1319600186032173,1000 +LassoCV,LassoCV,IV-type,0.9,0.8926666666666666,0.35742311987476943,0.0870152370686674,1.0,0.8398941995619424,1000 +LassoCV,LassoCV,IV-type,0.95,0.9413333333333334,0.4258959160365205,0.0870152370686674,1.0,0.8405778234098288,1000 +LassoCV,LassoCV,partialling out,0.9,0.8856666666666666,0.3675924080229034,0.09140883729216352,0.999,0.8634618636354112,1000 +LassoCV,LassoCV,partialling out,0.95,0.937,0.4380133702538254,0.09140883729216352,0.998,0.8645135749451283,1000 +LassoCV,RF Regr.,IV-type,0.9,0.8906666666666666,0.35602270119404505,0.08734257475647278,1.0,0.8374639259045487,1000 +LassoCV,RF Regr.,IV-type,0.95,0.9416666666666667,0.4242272142550836,0.08734257475647278,0.999,0.836868604185174,1000 +LassoCV,RF Regr.,partialling out,0.9,0.738,0.40491199800883637,0.13642422484844158,0.983,0.9500817559029185,1000 +LassoCV,RF Regr.,partialling out,0.95,0.8273333333333334,0.4824824045142146,0.13642422484844158,0.983,0.9523261430293178,1000 +RF Regr.,LassoCV,IV-type,0.9,0.8773333333333334,0.34720295214031466,0.08839198383861967,0.998,0.8185421027515423,1000 +RF Regr.,LassoCV,IV-type,0.95,0.9343333333333333,0.41371783505273413,0.08839198383861967,0.998,0.8146669237329567,1000 +RF Regr.,LassoCV,partialling out,0.9,0.8533333333333334,0.41301433989509856,0.10966336398968128,0.996,0.9683790675299301,1000 +RF Regr.,LassoCV,partialling out,0.95,0.9136666666666666,0.49213694035089944,0.10966336398968128,0.998,0.9669097488144158,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.8783333333333334,0.3444973770845564,0.08786209409395863,1.0,0.8103855381771613,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.9303333333333333,0.4104939435283654,0.08786209409395863,0.998,0.8085416729445144,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.8793333333333334,0.3693751123936641,0.0927826393282892,0.999,0.8668280374940234,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.9333333333333333,0.44013759353091364,0.0927826393282892,0.998,0.8658046899691123,1000 diff --git a/results/plm/plr_gate_metadata.csv b/results/plm/plr_gate_metadata.csv index 0f19bf8..ef66b20 100644 --- a/results/plm/plr_gate_metadata.csv +++ b/results/plm/plr_gate_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,PLRGATECoverageSimulation,2025-05-28 12:13,19.178568251927693,3.12.9,scripts/plm/plr_gate_config.yml +0.11.dev0,PLRGATECoverageSimulation,2025-05-28 15:27,184.28431547085444,3.12.3,scripts/plm/plr_gate_config.yml From a91ab53d21b64722bfc3b3cd64777c70154e0428 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 28 May 2025 15:29:08 +0000 Subject: [PATCH 044/142] Update results from script: scripts/plm/plr_cate.py --- results/plm/plr_cate_coverage.csv | 56 +++++++++++++++---------------- results/plm/plr_cate_metadata.csv | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/results/plm/plr_cate_coverage.csv b/results/plm/plr_cate_coverage.csv index f5e512d..bf7168b 100644 --- a/results/plm/plr_cate_coverage.csv +++ b/results/plm/plr_cate_coverage.csv @@ -1,29 +1,29 @@ Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Regr.,IV-type,0.9,0.81872,0.3484341786513707,0.1039072228697912,0.977,0.8735457715384822,1000 -LGBM Regr.,LGBM Regr.,IV-type,0.95,0.88763,0.4151849319292831,0.1039072228697912,0.975,0.877374987951199,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.9,0.75648,0.45514808901251486,0.15290537117667263,0.981,1.1424331881394036,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.95,0.8371799999999999,0.5423423990316424,0.15290537117667263,0.979,1.142799510188823,1000 -LGBM Regr.,LassoCV,IV-type,0.9,0.8856499999999999,0.3662063463009163,0.09204888518157552,1.0,0.9247548051292168,1000 -LGBM Regr.,LassoCV,IV-type,0.95,0.93689,0.43636177584388447,0.09204888518157552,0.999,0.9236089253816859,1000 -LGBM Regr.,LassoCV,partialling out,0.9,0.84688,0.6464074102760973,0.17946086748352624,0.995,1.6256670452631903,1000 -LGBM Regr.,LassoCV,partialling out,0.95,0.9107799999999999,0.7702419368640483,0.17946086748352624,0.996,1.6305817344109326,1000 -LassoCV,LGBM Regr.,IV-type,0.9,0.78087,0.3556343884075679,0.11497576751014303,0.966,0.8955793802746171,1000 -LassoCV,LGBM Regr.,IV-type,0.95,0.85573,0.42376451103106344,0.11497576751014303,0.972,0.8997414462422942,1000 -LassoCV,LGBM Regr.,partialling out,0.9,0.10748999999999999,0.5604813459090218,0.5281926632323442,0.259,1.4108192445041974,1000 -LassoCV,LGBM Regr.,partialling out,0.95,0.16302,0.6678547160601714,0.5281926632323442,0.233,1.4071877112582576,1000 -LassoCV,LassoCV,IV-type,0.9,0.8975299999999999,0.3610680866329369,0.08892599643587756,0.997,0.9088195224190736,1000 -LassoCV,LassoCV,IV-type,0.95,0.9484199999999999,0.43023916181462313,0.08892599643587756,0.996,0.9083975172623389,1000 -LassoCV,LassoCV,partialling out,0.9,0.89234,0.37698973728540563,0.09361005140948865,0.997,0.9483857952556856,1000 -LassoCV,LassoCV,partialling out,0.95,0.94629,0.44921097872401194,0.09361005140948865,0.998,0.9438793910364098,1000 -LassoCV,RF Regr.,IV-type,0.9,0.8957,0.35890276102823065,0.08780941541278481,0.994,0.9029643561853794,1000 -LassoCV,RF Regr.,IV-type,0.95,0.94789,0.42765901721665533,0.08780941541278481,0.997,0.9033578503803233,1000 -LassoCV,RF Regr.,partialling out,0.9,0.77067,0.4314925841837379,0.14084420773113004,0.986,1.0838238758137209,1000 -LassoCV,RF Regr.,partialling out,0.95,0.85138,0.5141551264738733,0.14084420773113004,0.986,1.0863305594246508,1000 -RF Regr.,LassoCV,IV-type,0.9,0.88722,0.3480546970781213,0.08762130960708955,0.998,0.876052154778042,1000 -RF Regr.,LassoCV,IV-type,0.95,0.93845,0.4147327517448713,0.08762130960708955,0.998,0.8777107926499674,1000 -RF Regr.,LassoCV,partialling out,0.9,0.86107,0.44535039439205076,0.11954267106103694,0.994,1.1199997005622482,1000 -RF Regr.,LassoCV,partialling out,0.95,0.92228,0.5306677258127116,0.11954267106103694,0.994,1.1226937767841374,1000 -RF Regr.,RF Regr.,IV-type,0.9,0.885,0.3437548964747918,0.08683852771958954,0.998,0.8645012928978736,1000 -RF Regr.,RF Regr.,IV-type,0.95,0.93662,0.4096092233134395,0.08683852771958954,0.995,0.8675836496124723,1000 -RF Regr.,RF Regr.,partialling out,0.9,0.8829199999999999,0.38292401479596566,0.09657773202124784,0.996,0.9660658753776165,1000 -RF Regr.,RF Regr.,partialling out,0.95,0.93575,0.4562821065158023,0.09657773202124784,0.997,0.9646462523121563,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.81356,0.3481406151640484,0.10430800140217082,0.983,0.8752657879172515,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.88477,0.4148351294587775,0.10430800140217082,0.982,0.8732288511102869,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.74012,0.4560685341081391,0.15783062735200043,0.977,1.14744422301648,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.8299500000000001,0.5434391770109168,0.15783062735200043,0.98,1.1454708849896886,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.88352,0.36584955467139657,0.09269456203727587,0.997,0.9190652139310769,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.93592,0.4359366323950171,0.09269456203727587,0.997,0.9182701523375287,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.8598600000000001,0.6464984966564067,0.17497861883142152,0.997,1.6227149811912818,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.9182,0.7703504729805534,0.17497861883142152,0.993,1.6256277670143164,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.76988,0.35642448629422974,0.11632423194012062,0.967,0.8974918718098766,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.85114,0.42470597073102984,0.11632423194012062,0.969,0.8968672652695018,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.11622,0.5619854399953333,0.5256323682345825,0.234,1.410142913244516,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.17595,0.6696469547069583,0.5256323682345825,0.229,1.40931387611625,1000 +LassoCV,LassoCV,IV-type,0.9,0.89151,0.36264059342442617,0.08911225886649077,0.999,0.9175790450518392,1000 +LassoCV,LassoCV,IV-type,0.95,0.9436899999999999,0.432112919227601,0.08911225886649077,0.997,0.9122947604257755,1000 +LassoCV,LassoCV,partialling out,0.9,0.88915,0.37658641629597944,0.09294192591629252,0.998,0.9493314635761626,1000 +LassoCV,LassoCV,partialling out,0.95,0.9430700000000001,0.4487303921231547,0.09294192591629252,0.999,0.9492044628231284,1000 +LassoCV,RF Regr.,IV-type,0.9,0.8881699999999999,0.36007271468635116,0.08945011832697905,0.997,0.905729315492467,1000 +LassoCV,RF Regr.,IV-type,0.95,0.94083,0.42905310298570154,0.08945011832697905,0.996,0.905560466242843,1000 +LassoCV,RF Regr.,partialling out,0.9,0.75973,0.4327531492388262,0.14496239788299442,0.979,1.0861336481238588,1000 +LassoCV,RF Regr.,partialling out,0.95,0.8421900000000001,0.5156571823818642,0.14496239788299442,0.978,1.0839002162247489,1000 +RF Regr.,LassoCV,IV-type,0.9,0.88758,0.3483083251389444,0.08779327663792416,0.998,0.8779489030402857,1000 +RF Regr.,LassoCV,IV-type,0.95,0.94112,0.41503496821966074,0.08779327663792416,0.996,0.8735133292532407,1000 +RF Regr.,LassoCV,partialling out,0.9,0.86795,0.4443503476360394,0.11714250183161505,0.994,1.1172789302634005,1000 +RF Regr.,LassoCV,partialling out,0.95,0.92418,0.5294760966047857,0.11714250183161505,0.995,1.114769235628846,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.8849,0.34393624819903923,0.08639122390266744,0.996,0.8665106551289745,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.9396100000000001,0.40982531722127136,0.08639122390266744,0.996,0.8683144995935241,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.88555,0.3841724761396707,0.09707379630217602,0.998,0.9672632389200293,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.93972,0.45776973996212145,0.09707379630217602,0.999,0.9635850313374369,1000 diff --git a/results/plm/plr_cate_metadata.csv b/results/plm/plr_cate_metadata.csv index 833a568..f90c6c2 100644 --- a/results/plm/plr_cate_metadata.csv +++ b/results/plm/plr_cate_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,PLRCATECoverageSimulation,2025-05-28 12:33,18.714494454860688,3.12.9,scripts/plm/plr_cate_config.yml +0.11.dev0,PLRCATECoverageSimulation,2025-05-28 15:29,186.339128780365,3.12.3,scripts/plm/plr_cate_config.yml From 5c9ea8ed80403ad055a3d22b8f48ff930397dae7 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 28 May 2025 15:36:54 +0000 Subject: [PATCH 045/142] Update results from script: scripts/plm/plr_ate.py --- results/plm/plr_ate_coverage.csv | 56 ++++++++++++++++---------------- results/plm/plr_ate_metadata.csv | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/results/plm/plr_ate_coverage.csv b/results/plm/plr_ate_coverage.csv index 310ec3e..6049e48 100644 --- a/results/plm/plr_ate_coverage.csv +++ b/results/plm/plr_ate_coverage.csv @@ -1,29 +1,29 @@ Learner g,Learner m,Score,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Regr.,IV-type,0.9,0.881,0.1595019374208847,0.04100069583914705,1000 -LGBM Regr.,LGBM Regr.,IV-type,0.95,0.934,0.19005828098436547,0.04100069583914705,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.9,0.846,0.14675274853894962,0.04190791237104824,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.95,0.906,0.1748666854337004,0.04190791237104824,1000 -LGBM Regr.,LassoCV,IV-type,0.9,0.868,0.14824170920889415,0.038100428221802235,1000 -LGBM Regr.,LassoCV,IV-type,0.95,0.928,0.17664089150266024,0.038100428221802235,1000 -LGBM Regr.,LassoCV,partialling out,0.9,0.884,0.15938519368433107,0.040002152187652996,1000 -LGBM Regr.,LassoCV,partialling out,0.95,0.951,0.18991917224221566,0.040002152187652996,1000 -LassoCV,LGBM Regr.,IV-type,0.9,0.877,0.15050782237661248,0.03888238970332176,1000 -LassoCV,LGBM Regr.,IV-type,0.95,0.926,0.1793411318893089,0.03888238970332176,1000 -LassoCV,LGBM Regr.,partialling out,0.9,0.518,0.13890986601831956,0.06993679744603097,1000 -LassoCV,LGBM Regr.,partialling out,0.95,0.629,0.1655213145000549,0.06993679744603097,1000 -LassoCV,LassoCV,IV-type,0.9,0.872,0.13969849281695265,0.036499996257704004,1000 -LassoCV,LassoCV,IV-type,0.95,0.926,0.16646102129051793,0.036499996257704004,1000 -LassoCV,LassoCV,partialling out,0.9,0.885,0.14668089047289096,0.036074540811218185,1000 -LassoCV,LassoCV,partialling out,0.95,0.94,0.17478106126680434,0.036074540811218185,1000 -LassoCV,RF Regr.,IV-type,0.9,0.83,0.13018546605867554,0.03666478054707691,1000 -LassoCV,RF Regr.,IV-type,0.95,0.908,0.1551255507509627,0.03666478054707691,1000 -LassoCV,RF Regr.,partialling out,0.9,0.77,0.1428404897252024,0.04728817703065239,1000 -LassoCV,RF Regr.,partialling out,0.95,0.847,0.1702049415268244,0.04728817703065239,1000 -RF Regr.,LassoCV,IV-type,0.9,0.867,0.14097249774433687,0.03618679510307958,1000 -RF Regr.,LassoCV,IV-type,0.95,0.931,0.1679790917941089,0.03618679510307958,1000 -RF Regr.,LassoCV,partialling out,0.9,0.884,0.15066452213723588,0.03704282071453597,1000 -RF Regr.,LassoCV,partialling out,0.95,0.948,0.17952785117069395,0.03704282071453597,1000 -RF Regr.,RF Regr.,IV-type,0.9,0.835,0.13139894350736067,0.036892972501779066,1000 -RF Regr.,RF Regr.,IV-type,0.95,0.906,0.1565714983152347,0.036892972501779066,1000 -RF Regr.,RF Regr.,partialling out,0.9,0.877,0.1423808019770533,0.03596103352057129,1000 -RF Regr.,RF Regr.,partialling out,0.95,0.935,0.16965718979029062,0.03596103352057129,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.883,0.15961877895273296,0.04068372543442765,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.933,0.1901975062567962,0.04068372543442765,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.817,0.14642066864789335,0.041735779410315844,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.897,0.17447098783739418,0.041735779410315844,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.888,0.14828359010688336,0.03751445724526263,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.944,0.17669079567063856,0.03751445724526263,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.904,0.1593118503428552,0.03940645884290757,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.946,0.1898317782605001,0.03940645884290757,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.888,0.1501213938923901,0.037389002407502744,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.934,0.17888067394991158,0.037389002407502744,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.49,0.13868359580763356,0.07134433277798699,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.628,0.16525169691436084,0.07134433277798699,1000 +LassoCV,LassoCV,IV-type,0.9,0.879,0.1395848933214119,0.03508684359283747,1000 +LassoCV,LassoCV,IV-type,0.95,0.936,0.16632565914262007,0.03508684359283747,1000 +LassoCV,LassoCV,partialling out,0.9,0.895,0.14655835450119167,0.034987652787981494,1000 +LassoCV,LassoCV,partialling out,0.95,0.944,0.17463505065077992,0.034987652787981494,1000 +LassoCV,RF Regr.,IV-type,0.9,0.859,0.1302363383352069,0.03561064803310554,1000 +LassoCV,RF Regr.,IV-type,0.95,0.915,0.15518616880729266,0.03561064803310554,1000 +LassoCV,RF Regr.,partialling out,0.9,0.781,0.1426668302933166,0.04651298597227526,1000 +LassoCV,RF Regr.,partialling out,0.95,0.869,0.16999801355068422,0.04651298597227526,1000 +RF Regr.,LassoCV,IV-type,0.9,0.885,0.14079639422615867,0.034650404336531236,1000 +RF Regr.,LassoCV,IV-type,0.95,0.936,0.16776925150952393,0.034650404336531236,1000 +RF Regr.,LassoCV,partialling out,0.9,0.888,0.15051167153657427,0.036505990374521784,1000 +RF Regr.,LassoCV,partialling out,0.95,0.948,0.17934571844629627,0.036505990374521784,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.856,0.13145465044384871,0.03623204217504653,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.909,0.1566378772242249,0.03623204217504653,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.886,0.14234151080307436,0.03605936619645565,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.931,0.1696103714688016,0.03605936619645565,1000 diff --git a/results/plm/plr_ate_metadata.csv b/results/plm/plr_ate_metadata.csv index 548bb9f..9eb81ce 100644 --- a/results/plm/plr_ate_metadata.csv +++ b/results/plm/plr_ate_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,PLRATECoverageSimulation,2025-05-28 11:53,19.402489805221556,3.12.9,scripts/plm/plr_ate_config.yml +0.11.dev0,PLRATECoverageSimulation,2025-05-28 15:36,194.11949107646942,3.12.3,scripts/plm/plr_ate_config.yml From 2d8cafd158a6c958d1fc10f11b96a33dfc528b5d Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 28 May 2025 16:12:08 +0000 Subject: [PATCH 046/142] Update results from script: scripts/plm/plr_ate_sensitivity.py --- results/plm/plr_ate_sensitivity_coverage.csv | 56 ++++++++++---------- results/plm/plr_ate_sensitivity_metadata.csv | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/results/plm/plr_ate_sensitivity_coverage.csv b/results/plm/plr_ate_sensitivity_coverage.csv index 796ebb1..434f452 100644 --- a/results/plm/plr_ate_sensitivity_coverage.csv +++ b/results/plm/plr_ate_sensitivity_coverage.csv @@ -1,29 +1,29 @@ Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition -LGBM Regr.,LGBM Regr.,IV-type,0.9,0.39,1.3986705379938356,0.7568282321229512,1.0,0.988,0.10353480945618435,0.03235018190031817,1.4548430258873413,0.28172487679956865,1000 -LGBM Regr.,LGBM Regr.,IV-type,0.95,0.58,1.6666187408942352,0.7568282321229512,1.0,1.0,0.10353480945618435,0.01796667554987849,1.4548430258873413,0.28172487679956865,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.9,0.189,1.0916003345751164,0.745229048299796,1.0,0.973,0.1023937709456171,0.044092205129545176,1.442888296129542,0.25557592890310343,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.95,0.324,1.3007220254876957,0.745229048299796,1.0,0.995,0.1023937709456171,0.030232722136220927,1.442888296129542,0.25557592890310343,1000 -LGBM Regr.,LassoCV,IV-type,0.9,0.016,1.4953372314591729,1.4437039585742597,1.0,0.367,0.1846856506540317,0.10955601303401202,2.1770030519509964,0.7149314146862207,1000 -LGBM Regr.,LassoCV,IV-type,0.95,0.049,1.7818042106480279,1.4437039585742597,1.0,0.609,0.1846856506540317,0.08936562705573936,2.1770030519509964,0.7149314146862207,1000 -LGBM Regr.,LassoCV,partialling out,0.9,0.03,1.4919170534236628,1.3175826417336374,1.0,0.544,0.17179477468456222,0.09581680392710966,2.0443898530689166,0.5946400367152096,1000 -LGBM Regr.,LassoCV,partialling out,0.95,0.07,1.7777288171537513,1.3175826417336374,1.0,0.77,0.17179477468456222,0.07565525212879724,2.0443898530689166,0.5946400367152096,1000 -LassoCV,LGBM Regr.,IV-type,0.9,0.749,2.4952496109160456,1.0145422303587268,1.0,1.0,0.06791119635868348,0.010650476142068233,2.5249767999961263,0.5857185427518798,1000 -LassoCV,LGBM Regr.,IV-type,0.95,0.912,2.9732732990333854,1.0145422303587268,1.0,1.0,0.06791119635868348,0.0032460863536700716,2.5249767999961263,0.5857185427518798,1000 -LassoCV,LGBM Regr.,partialling out,0.9,0.609,1.9751467087315708,0.9036654709929666,1.0,1.0,0.06017733068670644,0.012149079760602238,2.428068537165219,0.6515481756903952,1000 -LassoCV,LGBM Regr.,partialling out,0.95,0.838,2.3535324662727057,0.9036654709929666,1.0,1.0,0.06017733068670644,0.004321101616502405,2.428068537165219,0.6515481756903952,1000 -LassoCV,LassoCV,IV-type,0.9,0.0,2.570905623457247,4.871689647553308,1.0,0.0,0.2833507883908374,0.22483236768389947,6.401886830835185,3.3414924642714303,1000 -LassoCV,LassoCV,IV-type,0.95,0.0,3.0634229982923324,4.871689647553308,1.0,0.001,0.2833507883908374,0.2083270399684552,6.401886830835185,3.3414924642714303,1000 -LassoCV,LassoCV,partialling out,0.9,0.0,2.582851020829039,4.8682049948568435,1.0,0.0,0.2831862172881001,0.22444151265479817,6.398501952740017,3.337908036973671,1000 -LassoCV,LassoCV,partialling out,0.95,0.0,3.077656817184245,4.8682049948568435,1.0,0.001,0.2831862172881001,0.2078678688958407,6.398501952740017,3.337908036973671,1000 -LassoCV,RF Regr.,IV-type,0.9,0.031,2.218507467951665,1.7178678824226112,1.0,0.998,0.10325395969596025,0.05111030684415464,3.3724761415150177,0.3301794731947294,1000 -LassoCV,RF Regr.,IV-type,0.95,0.103,2.6435146966099587,1.7178678824226112,1.0,1.0,0.10325395969596025,0.03686806786848796,3.3724761415150177,0.3301794731947294,1000 -LassoCV,RF Regr.,partialling out,0.9,0.044,2.2498687284565397,1.670090276024268,1.0,0.999,0.09888207085046483,0.04679808786318507,3.3517396057501476,0.3225059187094146,1000 -LassoCV,RF Regr.,partialling out,0.95,0.126,2.680883943388017,1.670090276024268,1.0,1.0,0.09888207085046483,0.032643923084138514,3.3517396057501476,0.3225059187094146,1000 -RF Regr.,LassoCV,IV-type,0.9,0.0,1.96066578563569,2.4936356454855275,1.0,0.142,0.18809144339634407,0.13187684446648076,3.7456419033735524,1.241834820171921,1000 -RF Regr.,LassoCV,IV-type,0.95,0.003,2.3362773821328338,2.4936356454855275,1.0,0.308,0.18809144339634407,0.11583520853471695,3.7456419033735524,1.241834820171921,1000 -RF Regr.,LassoCV,partialling out,0.9,0.002,1.9364767343021458,2.186351619767898,1.0,0.34,0.16663942582739455,0.11068129598917131,3.4433305987624845,0.9311455138290707,1000 -RF Regr.,LassoCV,partialling out,0.95,0.007,2.307454349701793,2.186351619767898,1.0,0.569,0.16663942582739455,0.094716607796404,3.4433305987624845,0.9311455138290707,1000 -RF Regr.,RF Regr.,IV-type,0.9,0.014,1.7687787143287037,1.6346921352566222,1.0,0.902,0.12057974289166994,0.07009780029981512,2.96405956805537,0.4053973668607306,1000 -RF Regr.,RF Regr.,IV-type,0.95,0.043,2.1076298339874096,1.6346921352566222,1.0,0.971,0.12057974289166994,0.05588378266476332,2.96405956805537,0.4053973668607306,1000 -RF Regr.,RF Regr.,partialling out,0.9,0.02,1.762896240257672,1.603626030511156,1.0,0.923,0.11784052011259094,0.06776242515012326,2.939681088448932,0.3787688727982098,1000 -RF Regr.,RF Regr.,partialling out,0.95,0.043,2.1006204338010956,1.603626030511156,1.0,0.981,0.11784052011259094,0.0536700006473343,2.939681088448932,0.3787688727982098,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.385,1.4663299122305629,0.7925421322234831,1.0,0.985,0.10725651393439574,0.03326460518365192,1.4913903235634014,0.2926564371041883,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.576,1.7472398579028525,0.7925421322234831,1.0,0.996,0.10725651393439574,0.0186351412063672,1.4913903235634014,0.2926564371041883,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.182,1.1497967634349104,0.7729578872365019,1.0,0.97,0.10474768112597262,0.04431238181012191,1.4751597629464743,0.2712920302703979,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.318,1.3700673476033447,0.7729578872365019,1.0,0.995,0.10474768112597262,0.030097055769805838,1.4751597629464743,0.2712920302703979,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.016,1.5675897053004566,1.4881399909307544,1.0,0.349,0.18835258787429676,0.11061603940247629,2.22500572268596,0.7547108921538096,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.049,1.8678983434039613,1.4881399909307544,1.0,0.589,0.18835258787429676,0.08965505199962495,2.22500572268596,0.7547108921538096,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.033,1.5608447161075107,1.3368140143494018,1.0,0.538,0.17297048595824702,0.09456285640366094,2.0670435317928293,0.609504417265797,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.093,1.8598611930595945,1.3368140143494018,1.0,0.767,0.17297048595824702,0.07389205339318292,2.0670435317928293,0.609504417265797,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.73,2.5656781122758883,1.0677570591023937,1.0,1.0,0.0711666272086956,0.011464853941823843,2.578295926341774,0.5631859759280742,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.891,3.057194034525367,1.0677570591023937,1.0,1.0,0.0711666272086956,0.003910618305845746,2.578295926341774,0.5631859759280742,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.641,2.027924924331959,0.9237208344896396,1.0,1.0,0.06130931642754562,0.011850855336480514,2.4482326562106262,0.6449506923859979,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.857,2.416421589079803,0.9237208344896396,1.0,1.0,0.06130931642754562,0.004197479989729969,2.4482326562106262,0.6449506923859979,1000 +LassoCV,LassoCV,IV-type,0.9,0.0,2.6390903058880437,4.873595405404249,1.0,0.0,0.2835323346090944,0.2235995852752004,6.403190100985858,3.344000709822638,1000 +LassoCV,LassoCV,IV-type,0.95,0.0,3.144670058621553,4.873595405404249,1.0,0.0,0.2835323346090944,0.20668125629682246,6.403190100985858,3.344000709822638,1000 +LassoCV,LassoCV,partialling out,0.9,0.0,2.6512157416595166,4.8742982878654155,1.0,0.0,0.28358055454345027,0.22344281290628232,6.403739456275626,3.3448571194552046,1000 +LassoCV,LassoCV,partialling out,0.95,0.0,3.159118406498553,4.8742982878654155,1.0,0.0,0.28358055454345027,0.20645960241254674,6.403739456275626,3.3448571194552046,1000 +LassoCV,RF Regr.,IV-type,0.9,0.033,2.2828984031735264,1.7549860217797124,1.0,0.992,0.10540674548204913,0.05179748157769331,3.4080328923671543,0.34365428027936945,1000 +LassoCV,RF Regr.,IV-type,0.95,0.117,2.720241228319411,1.7549860217797124,1.0,1.0,0.10540674548204913,0.03703505470417302,3.4080328923671543,0.34365428027936945,1000 +LassoCV,RF Regr.,partialling out,0.9,0.037,2.3209438874895922,1.7056607970976996,1.0,0.998,0.10089770825684756,0.0472619615205151,3.386769951832876,0.32870269184314155,1000 +LassoCV,RF Regr.,partialling out,0.95,0.147,2.7655752190235416,1.7056607970976996,1.0,1.0,0.10089770825684756,0.03263938744702106,3.386769951832876,0.32870269184314155,1000 +RF Regr.,LassoCV,IV-type,0.9,0.002,2.0336458826639054,2.5168441311266254,1.0,0.15,0.18897217034656957,0.13108215640403256,3.7726967118723413,1.2630723489756102,1000 +RF Regr.,LassoCV,IV-type,0.95,0.004,2.4232385313924456,2.5168441311266254,1.0,0.296,0.18897217034656957,0.11456339186569718,3.7726967118723413,1.2630723489756102,1000 +RF Regr.,LassoCV,partialling out,0.9,0.004,2.0042262177980654,2.2020124873834774,1.0,0.326,0.1673566906972531,0.10968485912427584,3.461182283094903,0.945607640026297,1000 +RF Regr.,LassoCV,partialling out,0.95,0.013,2.388182838515291,2.2020124873834774,1.0,0.586,0.1673566906972531,0.093218820211599,3.461182283094903,0.945607640026297,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.017,1.832711921828132,1.666112390968602,1.0,0.903,0.12210557487205914,0.07016425910777375,2.9998575741792273,0.43566994445193274,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.06,2.1838109494750206,1.666112390968602,1.0,0.967,0.12210557487205914,0.05560391034447919,2.9998575741792273,0.43566994445193274,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.016,1.8212178132592944,1.6223242047256947,1.0,0.919,0.1187876211842705,0.0672786914116626,2.9607373471379326,0.4017526397593657,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.06,2.170114874359165,1.6223242047256947,1.0,0.983,0.1187876211842705,0.05284651175118434,2.9607373471379326,0.4017526397593657,1000 diff --git a/results/plm/plr_ate_sensitivity_metadata.csv b/results/plm/plr_ate_sensitivity_metadata.csv index 1257058..d9b4047 100644 --- a/results/plm/plr_ate_sensitivity_metadata.csv +++ b/results/plm/plr_ate_sensitivity_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,PLRATESensitivityCoverageSimulation,2025-05-28 11:33,22.490594506263733,3.12.9,scripts/plm/plr_ate_sensitivity_config.yml +0.11.dev0,PLRATESensitivityCoverageSimulation,2025-05-28 16:12,229.2524726430575,3.12.3,scripts/plm/plr_ate_sensitivity_config.yml From e631195591b09eee0af52080a6f29f4278648546 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 28 May 2025 17:55:58 +0000 Subject: [PATCH 047/142] Update results from script: scripts/plm/pliv_late.py --- results/plm/pliv_late_coverage.csv | 64 +++++++++++++++--------------- results/plm/pliv_late_metadata.csv | 2 +- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/results/plm/pliv_late_coverage.csv b/results/plm/pliv_late_coverage.csv index b7699eb..dabc338 100644 --- a/results/plm/pliv_late_coverage.csv +++ b/results/plm/pliv_late_coverage.csv @@ -1,33 +1,33 @@ Learner g,Learner m,Learner r,Score,level,Coverage,CI Length,Bias,repetition -LassoCV,LassoCV,LassoCV,IV-type,0.9,0.79,0.23041849621634433,0.07269684158242082,1000 -LassoCV,LassoCV,LassoCV,IV-type,0.95,0.863,0.274560572780521,0.07269684158242082,1000 -LassoCV,LassoCV,LassoCV,partialling out,0.9,0.891,0.2981413780443461,0.07240941269300215,1000 -LassoCV,LassoCV,LassoCV,partialling out,0.95,0.929,0.3552573637516131,0.07240941269300215,1000 -LassoCV,LassoCV,RF Regr.,IV-type,0.9,0.781,0.2301096797207173,0.07376128885356645,1000 -LassoCV,LassoCV,RF Regr.,IV-type,0.95,0.852,0.27419259522960504,0.07376128885356645,1000 -LassoCV,LassoCV,RF Regr.,partialling out,0.9,0.878,0.3053702107250711,0.0755821331794551,1000 -LassoCV,LassoCV,RF Regr.,partialling out,0.95,0.934,0.36387104917160157,0.0755821331794551,1000 -LassoCV,RF Regr.,LassoCV,IV-type,0.9,0.815,0.2629630290991766,0.07749979444505609,1000 -LassoCV,RF Regr.,LassoCV,IV-type,0.95,0.884,0.31333977556116616,0.07749979444505609,1000 -LassoCV,RF Regr.,LassoCV,partialling out,0.9,0.898,0.31506448220942895,0.07731675568554748,1000 -LassoCV,RF Regr.,LassoCV,partialling out,0.95,0.949,0.3754224861228091,0.07731675568554748,1000 -LassoCV,RF Regr.,RF Regr.,IV-type,0.9,0.84,0.2641363274938619,0.0769395592062568,1000 -LassoCV,RF Regr.,RF Regr.,IV-type,0.95,0.909,0.3147378468296498,0.0769395592062568,1000 -LassoCV,RF Regr.,RF Regr.,partialling out,0.9,0.907,0.29937522552270945,0.07811168308197916,1000 -LassoCV,RF Regr.,RF Regr.,partialling out,0.95,0.951,0.3567275837033359,0.07811168308197916,1000 -RF Regr.,LassoCV,LassoCV,IV-type,0.9,0.8,0.23974287206977238,0.07457301116763686,1000 -RF Regr.,LassoCV,LassoCV,IV-type,0.95,0.87,0.28567125190210646,0.07457301116763686,1000 -RF Regr.,LassoCV,LassoCV,partialling out,0.9,0.893,0.3286443044443393,0.07800154378757782,1000 -RF Regr.,LassoCV,LassoCV,partialling out,0.95,0.937,0.39160384236069506,0.07800154378757782,1000 -RF Regr.,LassoCV,RF Regr.,IV-type,0.9,0.796,0.2396474794539173,0.07406169428929765,1000 -RF Regr.,LassoCV,RF Regr.,IV-type,0.95,0.867,0.2855575845894633,0.07406169428929765,1000 -RF Regr.,LassoCV,RF Regr.,partialling out,0.9,0.895,0.3154062840535594,0.07501237332238155,1000 -RF Regr.,LassoCV,RF Regr.,partialling out,0.95,0.935,0.3758297681407154,0.07501237332238155,1000 -RF Regr.,RF Regr.,LassoCV,IV-type,0.9,0.816,0.2751591936918531,0.0805973908326483,1000 -RF Regr.,RF Regr.,LassoCV,IV-type,0.95,0.87,0.32787240202682416,0.0805973908326483,1000 -RF Regr.,RF Regr.,LassoCV,partialling out,0.9,0.77,0.34739924987735415,0.10944380509793578,1000 -RF Regr.,RF Regr.,LassoCV,partialling out,0.95,0.851,0.41395173823326054,0.10944380509793578,1000 -RF Regr.,RF Regr.,RF Regr.,IV-type,0.9,0.811,0.272008906069617,0.07916378827421267,1000 -RF Regr.,RF Regr.,RF Regr.,IV-type,0.95,0.876,0.3241186027954794,0.07916378827421267,1000 -RF Regr.,RF Regr.,RF Regr.,partialling out,0.9,0.855,0.30064395770722446,0.07963031397212984,1000 -RF Regr.,RF Regr.,RF Regr.,partialling out,0.95,0.916,0.3582393713462795,0.07963031397212984,1000 +LassoCV,LassoCV,LassoCV,IV-type,0.9,0.7766143106457243,0.22989223679605483,0.07287153111653735,573 +LassoCV,LassoCV,LassoCV,IV-type,0.95,0.8534031413612565,0.2739334960039667,0.07287153111653735,573 +LassoCV,LassoCV,LassoCV,partialling out,0.9,0.881326352530541,0.29700780857260933,0.07271080850444225,573 +LassoCV,LassoCV,LassoCV,partialling out,0.95,0.9476439790575916,0.35390663241468806,0.07271080850444225,573 +LassoCV,LassoCV,RF Regr.,IV-type,0.9,0.7975567190226877,0.23015212335471688,0.07216217057387413,573 +LassoCV,LassoCV,RF Regr.,IV-type,0.95,0.8691099476439791,0.27424316993889775,0.07216217057387413,573 +LassoCV,LassoCV,RF Regr.,partialling out,0.9,0.8987783595113438,0.30254607837243314,0.07481695240309204,573 +LassoCV,LassoCV,RF Regr.,partialling out,0.95,0.9511343804537522,0.3605058879146674,0.07481695240309204,573 +LassoCV,RF Regr.,LassoCV,IV-type,0.9,0.8289703315881326,0.2609713252114788,0.075760272295832,573 +LassoCV,RF Regr.,LassoCV,IV-type,0.95,0.8830715532286213,0.3109665139992902,0.075760272295832,573 +LassoCV,RF Regr.,LassoCV,partialling out,0.9,0.900523560209424,0.31348377219475954,0.07615050625397395,573 +LassoCV,RF Regr.,LassoCV,partialling out,0.95,0.9476439790575916,0.3735389539665188,0.07615050625397395,573 +LassoCV,RF Regr.,RF Regr.,IV-type,0.9,0.8342059336823735,0.2618973110694574,0.07635382529994407,573 +LassoCV,RF Regr.,RF Regr.,IV-type,0.95,0.9022687609075044,0.3120698942041265,0.07635382529994407,573 +LassoCV,RF Regr.,RF Regr.,partialling out,0.9,0.900523560209424,0.2969325926809845,0.08064896780776748,573 +LassoCV,RF Regr.,RF Regr.,partialling out,0.95,0.9493891797556719,0.35381700715184744,0.08064896780776748,573 +RF Regr.,LassoCV,LassoCV,IV-type,0.9,0.7888307155322862,0.2399734669407101,0.07565892605977774,573 +RF Regr.,LassoCV,LassoCV,IV-type,0.95,0.8603839441535777,0.28594602263833013,0.07565892605977774,573 +RF Regr.,LassoCV,LassoCV,partialling out,0.9,0.8952879581151832,0.32748151131844716,0.08012239409438285,573 +RF Regr.,LassoCV,LassoCV,partialling out,0.95,0.9476439790575916,0.39021828889206017,0.08012239409438285,573 +RF Regr.,LassoCV,RF Regr.,IV-type,0.9,0.7975567190226877,0.23928903589865372,0.07494587967257611,573 +RF Regr.,LassoCV,RF Regr.,IV-type,0.95,0.8568935427574171,0.2851304727496643,0.07494587967257611,573 +RF Regr.,LassoCV,RF Regr.,partialling out,0.9,0.8952879581151832,0.3140855171898558,0.07607988220815401,573 +RF Regr.,LassoCV,RF Regr.,partialling out,0.95,0.9424083769633508,0.3742559773532452,0.07607988220815401,573 +RF Regr.,RF Regr.,LassoCV,IV-type,0.9,0.8132635253054101,0.2731895612733841,0.07830955419542239,573 +RF Regr.,RF Regr.,LassoCV,IV-type,0.95,0.8708551483420593,0.3255254402426704,0.07830955419542239,573 +RF Regr.,RF Regr.,LassoCV,partialling out,0.9,0.7801047120418848,0.3462668556955946,0.10647619537980385,573 +RF Regr.,RF Regr.,LassoCV,partialling out,0.95,0.8481675392670157,0.41260240734072084,0.10647619537980385,573 +RF Regr.,RF Regr.,RF Regr.,IV-type,0.9,0.8150087260034904,0.2716740654611092,0.07804596547692132,573 +RF Regr.,RF Regr.,RF Regr.,IV-type,0.95,0.8778359511343804,0.3237196156014316,0.07804596547692132,573 +RF Regr.,RF Regr.,RF Regr.,partialling out,0.9,0.8691099476439791,0.2991970298118071,0.07619100964756245,573 +RF Regr.,RF Regr.,RF Regr.,partialling out,0.95,0.9109947643979057,0.356515250417355,0.07619100964756245,573 diff --git a/results/plm/pliv_late_metadata.csv b/results/plm/pliv_late_metadata.csv index ef55f3b..ea4b643 100644 --- a/results/plm/pliv_late_metadata.csv +++ b/results/plm/pliv_late_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,PLIVLATECoverageSimulation,2025-05-28 14:19,63.04629045327504,3.12.9,scripts/plm/pliv_late_config.yml +0.11.dev0,PLIVLATECoverageSimulation,2025-05-28 17:55,333.0460760434469,3.12.3,scripts/plm/pliv_late_config.yml From 942afcab0d8e668f44fa3f9e496e82601e7e8f8a Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 2 Jun 2025 08:57:04 +0200 Subject: [PATCH 048/142] update did script and config --- .../src/montecover/did/did_pa_multi.py | 44 ++++--------------- scripts/did/did_pa_multi_config.yml | 28 ++++++++++-- 2 files changed, 33 insertions(+), 39 deletions(-) diff --git a/monte-cover/src/montecover/did/did_pa_multi.py b/monte-cover/src/montecover/did/did_pa_multi.py index fa6aeb6..eb84934 100644 --- a/monte-cover/src/montecover/did/did_pa_multi.py +++ b/monte-cover/src/montecover/did/did_pa_multi.py @@ -4,10 +4,9 @@ import numpy as np import pandas as pd from doubleml.did.datasets import make_did_CS2021 -from lightgbm import LGBMClassifier, LGBMRegressor -from sklearn.linear_model import LinearRegression, LogisticRegression from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config class DIDMultiCoverageSimulation(BaseSimulation): @@ -36,39 +35,13 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" - assert ( - "learners" in self.dml_parameters - ), "No learners specified in the config file" + required_learners = ["ml_g", "ml_m"] for learner in self.dml_parameters["learners"]: - assert "ml_g" in learner, "No ml_g specified in the config file" - assert "ml_m" in learner, "No ml_m specified in the config file" - - # Convert ml_g strings to actual objects - if learner["ml_g"][0] == "Linear": - learner["ml_g"] = ("Linear", LinearRegression()) - elif learner["ml_g"][0] == "LGBM": - learner["ml_g"] = ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.02, verbose=-1, n_jobs=1 - ), - ) - else: - raise ValueError(f"Unknown learner type: {learner['ml_g']}") - - # Convert ml_m strings to actual objects - if learner["ml_m"][0] == "Linear": - learner["ml_m"] = ("Linear", LogisticRegression()) - elif learner["ml_m"][0] == "LGBM": - learner["ml_m"] = ( - "LGBM", - LGBMClassifier( - n_estimators=500, learning_rate=0.02, verbose=-1, n_jobs=1 - ), - ) - else: - raise ValueError(f"Unknown learner type: {learner['ml_m']}") + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" def _calculate_oracle_values(self): """Calculate oracle values for the simulation.""" @@ -102,8 +75,9 @@ def _calculate_oracle_values(self): def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: """Run a single repetition with the given parameters.""" # Extract parameters - learner_g_name, ml_g = dml_params["learners"]["ml_g"] - learner_m_name, ml_m = dml_params["learners"]["ml_m"] + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) score = dml_params["score"] in_sample_normalization = dml_params["in_sample_normalization"] diff --git a/scripts/did/did_pa_multi_config.yml b/scripts/did/did_pa_multi_config.yml index 67eead1..c89ef8d 100644 --- a/scripts/did/did_pa_multi_config.yml +++ b/scripts/did/did_pa_multi_config.yml @@ -10,13 +10,33 @@ dgp_parameters: DGP: [1, 4, 6] # Different DGP specifications n_obs: [2000] # Sample size for each simulation (has to be a list) +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logistic: &logistic + name: "Logistic" + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.02 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.02 + dml_parameters: # ML methods for ml_g and ml_m learners: - - ml_g: ["Linear"] - ml_m: ["Linear"] - - ml_g: ["LGBM"] - ml_m: ["LGBM"] + - ml_g: *linear + ml_m: *logistic + - ml_g: *lgbmr + ml_m: *lgbmc score: - observational # Standard DML score From 83c562f56e5b0f836f3aff0739cf6404afed95a0 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 2 Jun 2025 10:55:35 +0200 Subject: [PATCH 049/142] add rdd coverage class to monte-cover --- monte-cover/src/montecover/rdd/__init__.py | 7 + monte-cover/src/montecover/rdd/rdd.py | 235 +++++++++++++++++++++ monte-cover/src/montecover/utils.py | 28 ++- 3 files changed, 268 insertions(+), 2 deletions(-) create mode 100644 monte-cover/src/montecover/rdd/__init__.py create mode 100644 monte-cover/src/montecover/rdd/rdd.py diff --git a/monte-cover/src/montecover/rdd/__init__.py b/monte-cover/src/montecover/rdd/__init__.py new file mode 100644 index 0000000..50efadb --- /dev/null +++ b/monte-cover/src/montecover/rdd/__init__.py @@ -0,0 +1,7 @@ +"""Monte Carlo coverage simulations for RDD.""" + +from montecover.rdd.rdd import RDDCoverageSimulation + +__all__ = [ + "RDDCoverageSimulation", +] diff --git a/monte-cover/src/montecover/rdd/rdd.py b/monte-cover/src/montecover/rdd/rdd.py new file mode 100644 index 0000000..5faaab7 --- /dev/null +++ b/monte-cover/src/montecover/rdd/rdd.py @@ -0,0 +1,235 @@ +import time +import warnings +from itertools import product +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.rdd.datasets import make_simple_rdd_data +from rdrobust import rdrobust +from statsmodels.nonparametric.kernel_regression import KernelReg + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class RDDCoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleML RDFlex for RDD.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + self.fuzzy = self.dgp_parameters.get("fuzzy", [False])[0] + self.cutoff = self.dgp_parameters.get("cutoff", [0.0])[0] + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config.""" + + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + data_oracle = make_simple_rdd_data(n_obs=int(1e5), fuzzy=self.fuzzy, cutoff=self.cutoff) + # get oracle value + score = data_oracle["score"] + ite = data_oracle["oracle_values"]["Y1"] - data_oracle["oracle_values"]["Y0"] + + # subset score and ite for faster computation + score_subset = (score >= (self.cutoff - 0.02)) & (score <= (self.cutoff + 0.02)) + self.logger.info(f"Oracle score subset size: {np.sum(score_subset)}") + kernel_reg = KernelReg(endog=ite[score_subset], exog=score[score_subset], var_type="c", reg_type="ll") + effect_at_cutoff, _ = kernel_reg.fit(np.array([self.cutoff])) + oracle_effect = effect_at_cutoff[0] + + self.logger.info(f"Oracle effect at cutoff: {oracle_effect}") + self.oracle_values = dict() + self.oracle_values["theta"] = oracle_effect + + def _process_repetition(self, i_rep): + """Process a single repetition with all parameter combinations.""" + if self.suppress_warnings: + warnings.simplefilter(action="ignore", category=UserWarning) + + i_param_comb = 0 + rep_results = { + "coverage": [], + } + + # loop through all parameter combinations + for dgp_param_values in product(*self.dgp_parameters.values()): + dgp_params = dict(zip(self.dgp_parameters.keys(), dgp_param_values)) + dml_data = self._generate_dml_data(dgp_params) + + # --- Run rdrobust benchmark --- + self.logger.debug(f"Rep {i_rep+1}: Running rdrobust benchmark for DGP {dgp_params}") + param_start_time_rd_benchmark = time.time() + + # Call the dedicated benchmark function + # Pass dml_data, current dgp_params, and repetition index + benchmark_result_list = self._rdrobust_benchmark(dml_data, dgp_params, i_rep) + if benchmark_result_list: + rep_results["coverage"].extend(benchmark_result_list) + + param_duration_rd_benchmark = time.time() - param_start_time_rd_benchmark + self.logger.debug(f"rdrobust benchmark for DGP {dgp_params} completed in {param_duration_rd_benchmark:.2f}s") + + for dml_param_values in product(*self.dml_parameters.values()): + dml_params = dict(zip(self.dml_parameters.keys(), dml_param_values)) + i_param_comb += 1 + + comb_results = self._process_parameter_combination(i_rep, i_param_comb, dgp_params, dml_params, dml_data) + rep_results["coverage"].extend(comb_results["coverage"]) + + return rep_results + + def _rdrobust_benchmark(self, dml_data, dml_params, i_rep): + """Run a benchmark using rdrobust for RDD.""" + + # Extract parameters + score = dml_data.data[dml_data.s_col] + Y = dml_data.data[dml_data.y_col] + Z = dml_data.data[dml_data.x_cols] + + benchmark_results_list = [] + for level in self.confidence_parameters["level"]: + rd_model = rdrobust(y=Y, x=score, covs=Z, c=self.cutoff, level=level * 100) + coef_rd = rd_model.coef.loc["Robust", "Coeff"] + ci_lower_rd = rd_model.ci.loc["Robust", "CI Lower"] + ci_upper_rd = rd_model.ci.loc["Robust", "CI Upper"] + + confint_for_compute = pd.DataFrame({"lower": [ci_lower_rd], "upper": [ci_upper_rd]}) + theta_for_compute = np.array([coef_rd]) + + coverage_metrics = self._compute_coverage( + thetas=theta_for_compute, + oracle_thetas=self.oracle_values["theta"], + confint=confint_for_compute, + joint_confint=None, + ) + + # Add metadata + coverage_metrics.update( + { + "repetition": i_rep, + "Learner g": "Linear", + "Learner m": "Logistic", + "Method": "rdrobust", + "fs_specification": "cutoff", + "level": level, + } + ) + benchmark_results_list.append(coverage_metrics) + + return benchmark_results_list + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + if self.fuzzy: + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + else: + learner_m_name, ml_m = "N/A", None + fs_specification = dml_params["fs_specification"] + + # Model + dml_model = dml.rdd.RDFlex( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + n_folds=5, + n_rep=1, + fuzzy=self.fuzzy, + cutoff=self.cutoff, + fs_specification=fs_specification, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["theta"], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Method": "RDFlex", + "fs_specification": fs_specification, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Method", "fs_specification", "Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_simple_rdd_data( + n_obs=dgp_params["n_obs"], + fuzzy=dgp_params["fuzzy"], + cutoff=dgp_params["cutoff"], + ) + + score = data["score"] + Y = data["Y"] + X = data["X"].reshape(dgp_params["n_obs"], -1) + D = data["D"] + + dml_data = dml.DoubleMLData.from_arrays(y=Y, d=D, x=X, s=score) + return dml_data diff --git a/monte-cover/src/montecover/utils.py b/monte-cover/src/montecover/utils.py index b73dee4..dfadbbf 100644 --- a/monte-cover/src/montecover/utils.py +++ b/monte-cover/src/montecover/utils.py @@ -1,8 +1,9 @@ from typing import Any, Callable, Dict, Tuple +from doubleml.utils import GlobalRegressor from lightgbm import LGBMClassifier, LGBMRegressor -from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor -from sklearn.linear_model import LassoCV, LinearRegression, LogisticRegression +from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor, StackingClassifier, StackingRegressor +from sklearn.linear_model import LassoCV, LinearRegression, LogisticRegression, Ridge LearnerInstantiator = Callable[[Dict[str, Any]], Any] # Map learner abbreviations to their instantiation logic @@ -14,6 +15,29 @@ "LGBM Clas.": lambda params: LGBMClassifier(**{**{"verbose": -1, "n_jobs": 1}, **params}), "Linear": lambda params: LinearRegression(**params), "Logistic": lambda params: LogisticRegression(**params), + "Global Linear": lambda params: GlobalRegressor(LinearRegression(**params)), + "Global Logistic": lambda params: GlobalRegressor(LogisticRegression(**params)), + "Stacked Regr.": lambda params: StackingRegressor( + estimators=[ + ("lr", LinearRegression()), + ( + "lgbm", + LGBMRegressor(**{**{"verbose": -1, "n_jobs": 1}, **params}), + ), + ("glr", GlobalRegressor(LinearRegression())), + ], + final_estimator=Ridge(), + ), + "Stacked Clas.": lambda params: StackingClassifier( + estimators=[ + ("lr", LogisticRegression()), + ( + "lgbm", + LGBMClassifier(**{**{"verbose": -1, "n_jobs": 1}, **params}), + ), + ("glr", GlobalRegressor(LogisticRegression())), + ], + ), } From ca45ef9f6514aab0da2ce9d91a9cba2432462c81 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 2 Jun 2025 10:55:56 +0200 Subject: [PATCH 050/142] update rdd sharp scripts --- scripts/rdd/rdd_sharp.py | 13 +++++++++ scripts/rdd/rdd_sharp_config.yml | 45 ++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 scripts/rdd/rdd_sharp.py create mode 100644 scripts/rdd/rdd_sharp_config.yml diff --git a/scripts/rdd/rdd_sharp.py b/scripts/rdd/rdd_sharp.py new file mode 100644 index 0000000..3520881 --- /dev/null +++ b/scripts/rdd/rdd_sharp.py @@ -0,0 +1,13 @@ +from montecover.rdd import RDDCoverageSimulation + +# Create and run simulation with config file +sim = RDDCoverageSimulation( + config_file="scripts/rdd/rdd_sharp_config.yml", + log_level="INFO", + log_file="logs/rdd/rdd_sharp_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/rdd/", file_prefix="rdd_sharp") + +# Save config file for reproducibility +sim.save_config("results/rdd/rdd_sharp_config.yml") diff --git a/scripts/rdd/rdd_sharp_config.yml b/scripts/rdd/rdd_sharp_config.yml new file mode 100644 index 0000000..2192ac0 --- /dev/null +++ b/scripts/rdd/rdd_sharp_config.yml @@ -0,0 +1,45 @@ +# Simulation parameters for sharp RDD Coverage + +simulation_parameters: + repetitions: 100 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [1000] # Sample size + fuzzy: [False] + cutoff: [0.0] + +# Define reusable learner configurations +learner_definitions: + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 100 + learning_rate: 0.05 + + global_linear: &global_linear + name: "Global Linear" + + local_linear: &local_linear + name: "Linear" + + stacked_reg: &stacked_reg + name: "Stacked Regr." + params: + n_estimators: 100 + learning_rate: 0.05 + +dml_parameters: + fs_specification: ["cutoff", "cutoff and score", "interacted cutoff and score"] + + learners: + - ml_g: *lgbmr + - ml_g: *global_linear + - ml_g: *local_linear + - ml_g: *stacked_reg + + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From b7d0ffb9bbef2803861ee22a5776cf821948ffd7 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 2 Jun 2025 11:04:25 +0200 Subject: [PATCH 051/142] add fuzzy rdd scripts --- scripts/rdd/rdd_fuzzy.py | 13 +++++++ scripts/rdd/rdd_fuzzy_config.yml | 66 ++++++++++++++++++++++++++++++++ scripts/rdd/rdd_sharp_config.yml | 8 ++-- 3 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 scripts/rdd/rdd_fuzzy.py create mode 100644 scripts/rdd/rdd_fuzzy_config.yml diff --git a/scripts/rdd/rdd_fuzzy.py b/scripts/rdd/rdd_fuzzy.py new file mode 100644 index 0000000..3fec90e --- /dev/null +++ b/scripts/rdd/rdd_fuzzy.py @@ -0,0 +1,13 @@ +from montecover.rdd import RDDCoverageSimulation + +# Create and run simulation with config file +sim = RDDCoverageSimulation( + config_file="scripts/rdd/rdd_fuzzy_config.yml", + log_level="INFO", + log_file="logs/rdd/rdd_fuzzy_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/rdd/", file_prefix="rdd_fuzzy") + +# Save config file for reproducibility +sim.save_config("results/rdd/rdd_fuzzy_config.yml") diff --git a/scripts/rdd/rdd_fuzzy_config.yml b/scripts/rdd/rdd_fuzzy_config.yml new file mode 100644 index 0000000..830515a --- /dev/null +++ b/scripts/rdd/rdd_fuzzy_config.yml @@ -0,0 +1,66 @@ +# Simulation parameters for fuzzy RDD Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [1000] # Sample size + fuzzy: [True] + cutoff: [0.0] + +# Define reusable learner configurations +learner_definitions: + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 100 + learning_rate: 0.05 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 100 + learning_rate: 0.05 + + global_linear: &global_linear + name: "Global Linear" + + global_logistic: &global_logistic + name: "Global Logistic" + + local_linear: &local_linear + name: "Linear" + + local_logistic: &local_logistic + name: "Logistic" + + stacked_reg: &stacked_reg + name: "Stacked Regr." + params: + n_estimators: 100 + learning_rate: 0.05 + + stacked_cls: &stacked_cls + name: "Stacked Clas." + params: + n_estimators: 100 + learning_rate: 0.05 + +dml_parameters: + fs_specification: ["cutoff", "cutoff and score", "interacted cutoff and score"] + + learners: + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *global_linear + ml_m: *global_logistic + - ml_g: *local_linear + ml_m: *local_logistic + - ml_g: *stacked_reg + ml_m: *stacked_cls + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/rdd/rdd_sharp_config.yml b/scripts/rdd/rdd_sharp_config.yml index 2192ac0..560c913 100644 --- a/scripts/rdd/rdd_sharp_config.yml +++ b/scripts/rdd/rdd_sharp_config.yml @@ -1,7 +1,7 @@ # Simulation parameters for sharp RDD Coverage simulation_parameters: - repetitions: 100 + repetitions: 1000 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 @@ -18,13 +18,13 @@ learner_definitions: params: n_estimators: 100 learning_rate: 0.05 - + global_linear: &global_linear name: "Global Linear" - + local_linear: &local_linear name: "Linear" - + stacked_reg: &stacked_reg name: "Stacked Regr." params: From ae560c7db80ad2fdf8a7ab1a3ad2a4ef1ce5ee12 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 2 Jun 2025 11:05:07 +0200 Subject: [PATCH 052/142] add classifier to utils and increase oracle obs --- monte-cover/src/montecover/rdd/rdd.py | 2 +- monte-cover/src/montecover/utils.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/monte-cover/src/montecover/rdd/rdd.py b/monte-cover/src/montecover/rdd/rdd.py index 5faaab7..b01caa0 100644 --- a/monte-cover/src/montecover/rdd/rdd.py +++ b/monte-cover/src/montecover/rdd/rdd.py @@ -51,7 +51,7 @@ def _calculate_oracle_values(self): """Calculate oracle values for the simulation.""" self.logger.info("Calculating oracle values") - data_oracle = make_simple_rdd_data(n_obs=int(1e5), fuzzy=self.fuzzy, cutoff=self.cutoff) + data_oracle = make_simple_rdd_data(n_obs=int(1e6), fuzzy=self.fuzzy, cutoff=self.cutoff) # get oracle value score = data_oracle["score"] ite = data_oracle["oracle_values"]["Y1"] - data_oracle["oracle_values"]["Y0"] diff --git a/monte-cover/src/montecover/utils.py b/monte-cover/src/montecover/utils.py index dfadbbf..838cb43 100644 --- a/monte-cover/src/montecover/utils.py +++ b/monte-cover/src/montecover/utils.py @@ -1,6 +1,6 @@ from typing import Any, Callable, Dict, Tuple -from doubleml.utils import GlobalRegressor +from doubleml.utils import GlobalClassifier, GlobalRegressor from lightgbm import LGBMClassifier, LGBMRegressor from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor, StackingClassifier, StackingRegressor from sklearn.linear_model import LassoCV, LinearRegression, LogisticRegression, Ridge @@ -16,7 +16,7 @@ "Linear": lambda params: LinearRegression(**params), "Logistic": lambda params: LogisticRegression(**params), "Global Linear": lambda params: GlobalRegressor(LinearRegression(**params)), - "Global Logistic": lambda params: GlobalRegressor(LogisticRegression(**params)), + "Global Logistic": lambda params: GlobalClassifier(LogisticRegression(**params)), "Stacked Regr.": lambda params: StackingRegressor( estimators=[ ("lr", LinearRegression()), @@ -35,8 +35,9 @@ "lgbm", LGBMClassifier(**{**{"verbose": -1, "n_jobs": 1}, **params}), ), - ("glr", GlobalRegressor(LogisticRegression())), + ("glr", GlobalClassifier(LogisticRegression())), ], + final_estimator=LogisticRegression(), ), } From ab69ab4ca6b552891115c0356d68f23b10ee746c Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 2 Jun 2025 12:54:29 +0200 Subject: [PATCH 053/142] update workflows --- .github/workflows/did_sim.yml | 2 +- .github/workflows/rdd_sim.yml | 38 +++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/.github/workflows/did_sim.yml b/.github/workflows/did_sim.yml index 199220d..411502f 100644 --- a/.github/workflows/did_sim.yml +++ b/.github/workflows/did_sim.yml @@ -52,7 +52,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@v5 with: - version: "0.6.11" + version: "0.7.8" - name: Set up Python uses: actions/setup-python@v5 diff --git a/.github/workflows/rdd_sim.yml b/.github/workflows/rdd_sim.yml index e79bee9..ea490ee 100644 --- a/.github/workflows/rdd_sim.yml +++ b/.github/workflows/rdd_sim.yml @@ -17,8 +17,8 @@ jobs: strategy: matrix: script: [ - 'scripts/rdd/rdd_sharp_coverage.py', - 'scripts/rdd/rdd_fuzzy_coverage.py', + 'scripts/rdd/rdd_sharp.py', + 'scripts/rdd/rdd_fuzzy.py', ] steps: @@ -48,26 +48,32 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.7.8" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + cd monte-cover + uv venv + uv sync - - name: Install DoubleML from correct branch - run: | - pip uninstall -y doubleml - pip install "doubleml[rdd] @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' - - name: Install RDFlex from main branch + - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install git+https://github.com/DoubleML/doubleml-rdflex.git@main - pip install rdrobust + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml[rdd] @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -75,7 +81,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | From be7909025c738bcd17152fd3d8cb70428f37a96d Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Mon, 2 Jun 2025 12:54:53 +0200 Subject: [PATCH 054/142] update qmd file --- doc/rdd/rdd.qmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/rdd/rdd.qmd b/doc/rdd/rdd.qmd index 4a74fb7..dce518d 100644 --- a/doc/rdd/rdd.qmd +++ b/doc/rdd/rdd.qmd @@ -47,7 +47,7 @@ df_sharp = pd.read_csv("../../results/rdd/rdd_sharp_coverage.csv", index_col=Non assert df_sharp["repetition"].nunique() == 1 n_rep_sharp = df_sharp["repetition"].unique()[0] -display_columns_sharp = ["Method", "Learner g", "fs specification", "Bias", "CI Length", "Coverage"] +display_columns_sharp = ["Method", "Learner g", "fs_specification", "Bias", "CI Length", "Coverage"] ``` ```{python} @@ -99,7 +99,7 @@ df_fuzzy = pd.read_csv("../../results/rdd/rdd_fuzzy_coverage.csv", index_col=Non assert df_fuzzy["repetition"].nunique() == 1 n_rep_fuzzy = df_fuzzy["repetition"].unique()[0] -display_columns_fuzzy = ["Method", "Learner g", "Learner m", "fs specification", "Bias", "CI Length", "Coverage"] +display_columns_fuzzy = ["Method", "Learner g", "Learner m", "fs_specification", "Bias", "CI Length", "Coverage"] ``` ```{python} From c4509c9b05e5640249938e561b5961f95c6f1e14 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 2 Jun 2025 13:17:13 +0000 Subject: [PATCH 055/142] Update results from script: scripts/rdd/rdd_sharp.py --- results/rdd/rdd_sharp_config.yml | 41 +++++++++++++++++++++++ results/rdd/rdd_sharp_coverage.csv | 54 +++++++++++++++--------------- results/rdd/rdd_sharp_metadata.csv | 2 ++ 3 files changed, 70 insertions(+), 27 deletions(-) create mode 100644 results/rdd/rdd_sharp_config.yml create mode 100644 results/rdd/rdd_sharp_metadata.csv diff --git a/results/rdd/rdd_sharp_config.yml b/results/rdd/rdd_sharp_config.yml new file mode 100644 index 0000000..57d0a43 --- /dev/null +++ b/results/rdd/rdd_sharp_config.yml @@ -0,0 +1,41 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 1000 + fuzzy: + - false + cutoff: + - 0.0 +learner_definitions: + lgbmr: &id001 + name: LGBM Regr. + params: + n_estimators: 100 + learning_rate: 0.05 + global_linear: &id002 + name: Global Linear + local_linear: &id003 + name: Linear + stacked_reg: &id004 + name: Stacked Regr. + params: + n_estimators: 100 + learning_rate: 0.05 +dml_parameters: + fs_specification: + - cutoff + - cutoff and score + - interacted cutoff and score + learners: + - ml_g: *id001 + - ml_g: *id002 + - ml_g: *id003 + - ml_g: *id004 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/rdd/rdd_sharp_coverage.csv b/results/rdd/rdd_sharp_coverage.csv index 558f06e..f9b942e 100644 --- a/results/rdd/rdd_sharp_coverage.csv +++ b/results/rdd/rdd_sharp_coverage.csv @@ -1,27 +1,27 @@ -Method,fs specification,Learner g,level,Coverage,CI Length,Bias,repetition -rdflex,cutoff,Global linear,0.9,0.874,2.2011088216647567,0.5534513823633507,500 -rdflex,cutoff,Global linear,0.95,0.922,2.6227829308507813,0.5534513823633507,500 -rdflex,cutoff,LGBM,0.9,0.914,0.5720094363002372,0.1386055523323647,500 -rdflex,cutoff,LGBM,0.95,0.96,0.681591283014874,0.1386055523323647,500 -rdflex,cutoff,Linear,0.9,0.874,2.2135060296971463,0.558126057195101,500 -rdflex,cutoff,Linear,0.95,0.918,2.6375551153504855,0.558126057195101,500 -rdflex,cutoff,Stacked,0.9,0.9,0.5590842827226126,0.12977180379581715,500 -rdflex,cutoff,Stacked,0.95,0.964,0.6661900125968221,0.12977180379581715,500 -rdflex,cutoff and score,Global linear,0.9,0.876,2.2005650015589864,0.5551812535814453,500 -rdflex,cutoff and score,Global linear,0.95,0.922,2.622134929226859,0.5551812535814453,500 -rdflex,cutoff and score,LGBM,0.9,0.902,0.5984294788353389,0.14476299319184177,500 -rdflex,cutoff and score,LGBM,0.95,0.95,0.7130727054286046,0.14476299319184177,500 -rdflex,cutoff and score,Linear,0.9,0.87,2.212887444081595,0.5582781571131341,500 -rdflex,cutoff and score,Linear,0.95,0.922,2.63681802512679,0.5582781571131341,500 -rdflex,cutoff and score,Stacked,0.9,0.88,0.5820101876494705,0.14231610717047102,500 -rdflex,cutoff and score,Stacked,0.95,0.956,0.6935079132497274,0.14231610717047102,500 -rdflex,interacted cutoff and score,Global linear,0.9,0.878,2.202268208292408,0.5546663773642981,500 -rdflex,interacted cutoff and score,Global linear,0.95,0.926,2.6241644252264025,0.5546663773642981,500 -rdflex,interacted cutoff and score,LGBM,0.9,0.886,0.6002731299225453,0.151487055237104,500 -rdflex,interacted cutoff and score,LGBM,0.95,0.948,0.7152695511975984,0.151487055237104,500 -rdflex,interacted cutoff and score,Linear,0.9,0.88,2.2252512728137637,0.5541600195953326,500 -rdflex,interacted cutoff and score,Linear,0.95,0.916,2.651550435737079,0.5541600195953326,500 -rdflex,interacted cutoff and score,Stacked,0.9,0.904,0.5793073094025809,0.14171607962579613,500 -rdflex,interacted cutoff and score,Stacked,0.95,0.962,0.6902872351713266,0.14171607962579613,500 -rdrobust,cutoff,linear,0.9,0.874,2.1797037623552287,0.555486091306879,500 -rdrobust,cutoff,linear,0.95,0.916,2.597277229525019,0.555486091306879,500 +Method,fs_specification,Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +RDFlex,cutoff,Global Linear,N/A,0.9,0.8783333333333334,1.9718196650713942,0.5093136469698075,1000 +RDFlex,cutoff,Global Linear,N/A,0.95,0.9376666666666666,2.3495680492315225,0.5093136469698075,1000 +RDFlex,cutoff,LGBM Regr.,N/A,0.9,0.8753333333333334,0.5757111703216161,0.15519089437437322,1000 +RDFlex,cutoff,LGBM Regr.,N/A,0.95,0.9316666666666666,0.6860021711591865,0.15519089437437322,1000 +RDFlex,cutoff,Linear,N/A,0.9,0.8823333333333334,1.9835872651996145,0.5100383308045482,1000 +RDFlex,cutoff,Linear,N/A,0.95,0.942,2.363590009640563,0.5100383308045482,1000 +RDFlex,cutoff,Stacked Regr.,N/A,0.9,0.882,0.5590578781507813,0.14332464663035524,1000 +RDFlex,cutoff,Stacked Regr.,N/A,0.95,0.9366666666666666,0.6661585496088891,0.14332464663035524,1000 +RDFlex,cutoff and score,Global Linear,N/A,0.9,0.882,1.971849810438757,0.5080389655599933,1000 +RDFlex,cutoff and score,Global Linear,N/A,0.95,0.9383333333333334,2.34960396965226,0.5080389655599933,1000 +RDFlex,cutoff and score,LGBM Regr.,N/A,0.9,0.8846666666666666,0.6017477258893029,0.15725459328740565,1000 +RDFlex,cutoff and score,LGBM Regr.,N/A,0.95,0.9423333333333334,0.7170266406669815,0.15725459328740565,1000 +RDFlex,cutoff and score,Linear,N/A,0.9,0.8826666666666666,1.9835459135793096,0.5104954020103588,1000 +RDFlex,cutoff and score,Linear,N/A,0.95,0.9403333333333334,2.363540736145845,0.5104954020103588,1000 +RDFlex,cutoff and score,Stacked Regr.,N/A,0.9,0.8973333333333333,0.5804002753516253,0.14754701246061155,1000 +RDFlex,cutoff and score,Stacked Regr.,N/A,0.95,0.9413333333333334,0.6915895844268198,0.14754701246061155,1000 +RDFlex,interacted cutoff and score,Global Linear,N/A,0.9,0.882,1.9748055181211774,0.508213715385231,1000 +RDFlex,interacted cutoff and score,Global Linear,N/A,0.95,0.938,2.3531259125847197,0.508213715385231,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,N/A,0.9,0.889,0.6013814494909888,0.15466636196782954,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,N/A,0.95,0.9433333333333334,0.7165901954190156,0.15466636196782954,1000 +RDFlex,interacted cutoff and score,Linear,N/A,0.9,0.88,1.992308168049787,0.5113923914828905,1000 +RDFlex,interacted cutoff and score,Linear,N/A,0.95,0.938,2.373981606326701,0.5113923914828905,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,N/A,0.9,0.8756666666666666,0.5801425055800902,0.14962735197253088,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,N/A,0.95,0.929,0.6912824327993231,0.14962735197253088,1000 +rdrobust,cutoff,Linear,Logistic,0.9,0.896,2.178474435204289,0.5326223192522394,1000 +rdrobust,cutoff,Linear,Logistic,0.95,0.954,2.595812395875642,0.5326223192522394,1000 diff --git a/results/rdd/rdd_sharp_metadata.csv b/results/rdd/rdd_sharp_metadata.csv new file mode 100644 index 0000000..375d001 --- /dev/null +++ b/results/rdd/rdd_sharp_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,RDDCoverageSimulation,2025-06-02 13:17,65.69356084664663,3.12.3,scripts/rdd/rdd_sharp_config.yml From 85d424c6efdae7d3daa6654ce9982c18773e8a59 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 2 Jun 2025 14:19:40 +0000 Subject: [PATCH 056/142] Update results from script: scripts/rdd/rdd_fuzzy.py --- results/rdd/rdd_fuzzy_config.yml | 59 ++++++++++++++ results/rdd/rdd_fuzzy_coverage.csv | 126 +++++++---------------------- results/rdd/rdd_fuzzy_metadata.csv | 2 + 3 files changed, 88 insertions(+), 99 deletions(-) create mode 100644 results/rdd/rdd_fuzzy_config.yml create mode 100644 results/rdd/rdd_fuzzy_metadata.csv diff --git a/results/rdd/rdd_fuzzy_config.yml b/results/rdd/rdd_fuzzy_config.yml new file mode 100644 index 0000000..d8b09c0 --- /dev/null +++ b/results/rdd/rdd_fuzzy_config.yml @@ -0,0 +1,59 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 1000 + fuzzy: + - true + cutoff: + - 0.0 +learner_definitions: + lgbmr: &id001 + name: LGBM Regr. + params: + n_estimators: 100 + learning_rate: 0.05 + lgbmc: &id002 + name: LGBM Clas. + params: + n_estimators: 100 + learning_rate: 0.05 + global_linear: &id003 + name: Global Linear + global_logistic: &id004 + name: Global Logistic + local_linear: &id005 + name: Linear + local_logistic: &id006 + name: Logistic + stacked_reg: &id007 + name: Stacked Regr. + params: + n_estimators: 100 + learning_rate: 0.05 + stacked_cls: &id008 + name: Stacked Clas. + params: + n_estimators: 100 + learning_rate: 0.05 +dml_parameters: + fs_specification: + - cutoff + - cutoff and score + - interacted cutoff and score + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id007 + ml_m: *id008 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/rdd/rdd_fuzzy_coverage.csv b/results/rdd/rdd_fuzzy_coverage.csv index ebec18a..71a7b18 100644 --- a/results/rdd/rdd_fuzzy_coverage.csv +++ b/results/rdd/rdd_fuzzy_coverage.csv @@ -1,99 +1,27 @@ -Method,fs specification,Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -rdflex,cutoff,Global linear,Global linear,0.9,0.928,10.556606789284906,2.56683549934152,250 -rdflex,cutoff,Global linear,Global linear,0.95,0.964,12.578972844104541,2.56683549934152,250 -rdflex,cutoff,Global linear,LGBM,0.9,0.932,10.775966548524359,2.6575671123131777,250 -rdflex,cutoff,Global linear,LGBM,0.95,0.976,12.840356119018518,2.6575671123131777,250 -rdflex,cutoff,Global linear,Linear,0.9,0.928,10.680654195730742,2.6095109173162823,250 -rdflex,cutoff,Global linear,Linear,0.95,0.964,12.726784445711942,2.6095109173162823,250 -rdflex,cutoff,Global linear,Stacked,0.9,0.932,10.571620600845328,2.6448751082127377,250 -rdflex,cutoff,Global linear,Stacked,0.95,0.96,12.596862904014394,2.6448751082127377,250 -rdflex,cutoff,LGBM,Global linear,0.9,0.94,2.038612360942403,0.46302745914972104,250 -rdflex,cutoff,LGBM,Global linear,0.95,0.968,2.4291564552711176,0.46302745914972104,250 -rdflex,cutoff,LGBM,LGBM,0.9,0.94,2.0417477871653618,0.4912050569704094,250 -rdflex,cutoff,LGBM,LGBM,0.95,0.976,2.4328925460529893,0.4912050569704094,250 -rdflex,cutoff,LGBM,Linear,0.9,0.96,2.088603350877394,0.47982216259182514,250 -rdflex,cutoff,LGBM,Linear,0.95,0.992,2.488724393851574,0.47982216259182514,250 -rdflex,cutoff,LGBM,Stacked,0.9,0.916,2.0184810970572267,0.46215722170125356,250 -rdflex,cutoff,LGBM,Stacked,0.95,0.972,2.405168574810687,0.46215722170125356,250 -rdflex,cutoff,Linear,Global linear,0.9,0.928,10.564695732971051,2.553945752977564,250 -rdflex,cutoff,Linear,Global linear,0.95,0.968,12.58861141500109,2.553945752977564,250 -rdflex,cutoff,Linear,LGBM,0.9,0.928,10.777243710702589,2.650598511347432,250 -rdflex,cutoff,Linear,LGBM,0.95,0.972,12.841877951618534,2.650598511347432,250 -rdflex,cutoff,Linear,Linear,0.9,0.92,10.74105034617443,2.6072040698667376,250 -rdflex,cutoff,Linear,Linear,0.95,0.968,12.798750897762686,2.6072040698667376,250 -rdflex,cutoff,Linear,Stacked,0.9,0.932,10.404127851046006,2.505787762202565,250 -rdflex,cutoff,Linear,Stacked,0.95,0.968,12.397282982798743,2.505787762202565,250 -rdflex,cutoff,Stacked,Global linear,0.9,0.928,2.100685938954007,0.4945555538677959,250 -rdflex,cutoff,Stacked,Global linear,0.95,0.972,2.50312168555107,0.4945555538677959,250 -rdflex,cutoff,Stacked,LGBM,0.9,0.956,2.003482953646103,0.4641511546138578,250 -rdflex,cutoff,Stacked,LGBM,0.95,0.992,2.3872971846522506,0.4641511546138578,250 -rdflex,cutoff,Stacked,Linear,0.9,0.944,2.11736656727605,0.46071259221608185,250 -rdflex,cutoff,Stacked,Linear,0.95,0.984,2.522997880134595,0.46071259221608185,250 -rdflex,cutoff,Stacked,Stacked,0.9,0.936,2.0245073903258874,0.44210382922098473,250 -rdflex,cutoff,Stacked,Stacked,0.95,0.976,2.412349346140925,0.44210382922098473,250 -rdflex,cutoff and score,Global linear,Global linear,0.9,0.928,10.544420005750476,2.567803474303041,250 -rdflex,cutoff and score,Global linear,Global linear,0.95,0.964,12.564451395859244,2.567803474303041,250 -rdflex,cutoff and score,Global linear,LGBM,0.9,0.928,10.805365747954351,2.6437437844814258,250 -rdflex,cutoff and score,Global linear,LGBM,0.95,0.972,12.875387425824758,2.6437437844814258,250 -rdflex,cutoff and score,Global linear,Linear,0.9,0.928,10.699263774918355,2.5999147658504103,250 -rdflex,cutoff and score,Global linear,Linear,0.95,0.964,12.748959127019463,2.5999147658504103,250 -rdflex,cutoff and score,Global linear,Stacked,0.9,0.932,10.82713502969946,2.6270982998447745,250 -rdflex,cutoff and score,Global linear,Stacked,0.95,0.972,12.901327124950933,2.6270982998447745,250 -rdflex,cutoff and score,LGBM,Global linear,0.9,0.956,2.1656416896389774,0.4963137476876054,250 -rdflex,cutoff and score,LGBM,Global linear,0.95,0.984,2.5805212363957613,0.4963137476876054,250 -rdflex,cutoff and score,LGBM,LGBM,0.9,0.94,2.201449781464929,0.5341193634721544,250 -rdflex,cutoff and score,LGBM,LGBM,0.95,0.972,2.6231892095114255,0.5341193634721544,250 -rdflex,cutoff and score,LGBM,Linear,0.9,0.952,2.1894694844073546,0.4635302319336836,250 -rdflex,cutoff and score,LGBM,Linear,0.95,0.98,2.6089138050789615,0.4635302319336836,250 -rdflex,cutoff and score,LGBM,Stacked,0.9,0.964,2.1361906429140674,0.5017184797294254,250 -rdflex,cutoff and score,LGBM,Stacked,0.95,0.984,2.545428149727124,0.5017184797294254,250 -rdflex,cutoff and score,Linear,Global linear,0.9,0.92,10.636843214150689,2.585401553398786,250 -rdflex,cutoff and score,Linear,Global linear,0.95,0.968,12.67458044128427,2.585401553398786,250 -rdflex,cutoff and score,Linear,LGBM,0.9,0.936,10.869584147939532,2.6903868750455233,250 -rdflex,cutoff and score,Linear,LGBM,0.95,0.98,12.95190836911928,2.6903868750455233,250 -rdflex,cutoff and score,Linear,Linear,0.9,0.912,10.715620665219745,2.5870008277605034,250 -rdflex,cutoff and score,Linear,Linear,0.95,0.968,12.76844956395835,2.5870008277605034,250 -rdflex,cutoff and score,Linear,Stacked,0.9,0.92,10.814063241507966,2.6455094849616714,250 -rdflex,cutoff and score,Linear,Stacked,0.95,0.964,12.88575112861359,2.6455094849616714,250 -rdflex,cutoff and score,Stacked,Global linear,0.9,0.932,2.1726374228239367,0.4855323537680247,250 -rdflex,cutoff and score,Stacked,Global linear,0.95,0.976,2.5888571666349667,0.4855323537680247,250 -rdflex,cutoff and score,Stacked,LGBM,0.9,0.952,2.14733586500187,0.5004783937020142,250 -rdflex,cutoff and score,Stacked,LGBM,0.95,0.972,2.5587085009595185,0.5004783937020142,250 -rdflex,cutoff and score,Stacked,Linear,0.9,0.948,2.202424304512329,0.49388698262577957,250 -rdflex,cutoff and score,Stacked,Linear,0.95,0.992,2.6243504253446837,0.49388698262577957,250 -rdflex,cutoff and score,Stacked,Stacked,0.9,0.956,2.23318991538815,0.4972797313578032,250 -rdflex,cutoff and score,Stacked,Stacked,0.95,0.98,2.6610099118126316,0.4972797313578032,250 -rdflex,interacted cutoff and score,Global linear,Global linear,0.9,0.932,10.545804244171494,2.539582402518461,250 -rdflex,interacted cutoff and score,Global linear,Global linear,0.95,0.964,12.566100817672075,2.539582402518461,250 -rdflex,interacted cutoff and score,Global linear,LGBM,0.9,0.932,10.884267411835014,2.650211237977455,250 -rdflex,interacted cutoff and score,Global linear,LGBM,0.95,0.972,12.969404557192851,2.650211237977455,250 -rdflex,interacted cutoff and score,Global linear,Linear,0.9,0.936,10.674123116042953,2.5790433126760175,250 -rdflex,interacted cutoff and score,Global linear,Linear,0.95,0.964,12.719002184264186,2.5790433126760175,250 -rdflex,interacted cutoff and score,Global linear,Stacked,0.9,0.932,10.626731756603398,2.6159768660130136,250 -rdflex,interacted cutoff and score,Global linear,Stacked,0.95,0.968,12.662531896478109,2.6159768660130136,250 -rdflex,interacted cutoff and score,LGBM,Global linear,0.9,0.936,2.1565580135903732,0.5032955415920486,250 -rdflex,interacted cutoff and score,LGBM,Global linear,0.95,0.98,2.569697368781784,0.5032955415920486,250 -rdflex,interacted cutoff and score,LGBM,LGBM,0.9,0.944,2.2329626116556094,0.5196735971141546,250 -rdflex,interacted cutoff and score,LGBM,LGBM,0.95,0.98,2.6607390627096894,0.5196735971141546,250 -rdflex,interacted cutoff and score,LGBM,Linear,0.9,0.94,2.188972984996604,0.5079568034409114,250 -rdflex,interacted cutoff and score,LGBM,Linear,0.95,0.988,2.608322189540976,0.5079568034409114,250 -rdflex,interacted cutoff and score,LGBM,Stacked,0.9,0.94,2.1435376000141364,0.5369566034254465,250 -rdflex,interacted cutoff and score,LGBM,Stacked,0.95,0.988,2.55418258907428,0.5369566034254465,250 -rdflex,interacted cutoff and score,Linear,Global linear,0.9,0.92,10.689912181088147,2.611324508403497,250 -rdflex,interacted cutoff and score,Linear,Global linear,0.95,0.968,12.737816015678167,2.611324508403497,250 -rdflex,interacted cutoff and score,Linear,LGBM,0.9,0.936,10.997728797394373,2.7029090494109984,250 -rdflex,interacted cutoff and score,Linear,LGBM,0.95,0.976,13.104602136897563,2.7029090494109984,250 -rdflex,interacted cutoff and score,Linear,Linear,0.9,0.936,10.779112620544133,2.610958342807748,250 -rdflex,interacted cutoff and score,Linear,Linear,0.95,0.968,12.844104895049702,2.610958342807748,250 -rdflex,interacted cutoff and score,Linear,Stacked,0.9,0.92,10.737943290197988,2.6468998393072347,250 -rdflex,interacted cutoff and score,Linear,Stacked,0.95,0.968,12.795048612214599,2.6468998393072347,250 -rdflex,interacted cutoff and score,Stacked,Global linear,0.9,0.932,2.233890329611388,0.5262031584833204,250 -rdflex,interacted cutoff and score,Stacked,Global linear,0.95,0.976,2.661844506836355,0.5262031584833204,250 -rdflex,interacted cutoff and score,Stacked,LGBM,0.9,0.936,2.20946398801941,0.5095892633671805,250 -rdflex,interacted cutoff and score,Stacked,LGBM,0.95,0.98,2.632738725622813,0.5095892633671805,250 -rdflex,interacted cutoff and score,Stacked,Linear,0.9,0.928,2.2332457187032886,0.49902647466338274,250 -rdflex,interacted cutoff and score,Stacked,Linear,0.95,0.968,2.661076405563868,0.49902647466338274,250 -rdflex,interacted cutoff and score,Stacked,Stacked,0.9,0.948,2.181302390767035,0.4919155381101698,250 -rdflex,interacted cutoff and score,Stacked,Stacked,0.95,0.984,2.599182112768406,0.4919155381101698,250 -rdrobust,cutoff,linear,linear,0.9,0.928,10.396400783944904,2.560336967798922,250 -rdrobust,cutoff,linear,linear,0.95,0.964,12.388075614449283,2.560336967798922,250 +Method,fs_specification,Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +RDFlex,cutoff,Global Linear,Global Logistic,0.9,0.9363333333333334,61.21542033320797,6.094527516865915,1000 +RDFlex,cutoff,Global Linear,Global Logistic,0.95,0.972,72.942672336101,6.094527516865915,1000 +RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.9,0.9513333333333334,8.933409181593555,1.5599808778760562,1000 +RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.95,0.9876666666666666,10.644813598115608,1.5599808778760562,1000 +RDFlex,cutoff,Linear,Logistic,0.9,0.939,34.93607282259327,5.6843493908942815,1000 +RDFlex,cutoff,Linear,Logistic,0.95,0.973,41.62889838438588,5.6843493908942815,1000 +RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.9,0.9503333333333334,6.7442427655640484,1.3456834189094324,1000 +RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.95,0.9853333333333334,8.036260921282771,1.3456834189094324,1000 +RDFlex,cutoff and score,Global Linear,Global Logistic,0.9,0.9346666666666666,4016.9877724310254,50.8166330459716,1000 +RDFlex,cutoff and score,Global Linear,Global Logistic,0.95,0.9713333333333334,4786.536158171398,50.8166330459716,1000 +RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.951,9.065887957351245,1.5153501497320774,1000 +RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9873333333333334,10.802671795919059,1.5153501497320774,1000 +RDFlex,cutoff and score,Linear,Logistic,0.9,0.94,335.8084886364535,7.708410484814828,1000 +RDFlex,cutoff and score,Linear,Logistic,0.95,0.9746666666666667,400.1404943551824,7.708410484814828,1000 +RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.9496666666666667,7.718643198281012,1.36917558119484,1000 +RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.9866666666666666,9.1973306501346,1.36917558119484,1000 +RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.9,0.939,49.6899424879847,5.516111563740509,1000 +RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.95,0.9723333333333334,59.20921842195623,5.516111563740509,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.949,8.869451650244981,1.5644296749591,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9866666666666666,10.568603498974065,1.5644296749591,1000 +RDFlex,interacted cutoff and score,Linear,Logistic,0.9,0.939,165.6185238963947,6.482221436992595,1000 +RDFlex,interacted cutoff and score,Linear,Logistic,0.95,0.9733333333333334,197.34664330663676,6.482221436992595,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.953,12.965304115439578,1.8427674267462426,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.9833333333333334,15.449112734710363,1.8427674267462426,1000 +rdrobust,cutoff,Linear,Logistic,0.9,0.66,2.2540261137473974,0.9256316634723921,1000 +rdrobust,cutoff,Linear,Logistic,0.95,0.768,2.685837773507866,0.9256316634723921,1000 diff --git a/results/rdd/rdd_fuzzy_metadata.csv b/results/rdd/rdd_fuzzy_metadata.csv new file mode 100644 index 0000000..1bee153 --- /dev/null +++ b/results/rdd/rdd_fuzzy_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,RDDCoverageSimulation,2025-06-02 14:19,128.11025975545246,3.12.3,scripts/rdd/rdd_fuzzy_config.yml From e952f83782b95649757749e9cf280f00b04f7acd Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 2 Jun 2025 15:10:52 +0000 Subject: [PATCH 057/142] Update results from script: scripts/did/did_pa_atte_coverage.py --- results/did/did_pa_atte_coverage_metadata.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/results/did/did_pa_atte_coverage_metadata.csv b/results/did/did_pa_atte_coverage_metadata.csv index 5a18477..961444b 100644 --- a/results/did/did_pa_atte_coverage_metadata.csv +++ b/results/did/did_pa_atte_coverage_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,did_pa_atte_coverage.py,2025-05-22 14:30:49,10714.369587659836,3.12.3 +0.11.dev0,did_pa_atte_coverage.py,2025-06-02 15:10:48,10769.977479457855,3.12.3 From de82da6ea7223b782cbe2af236e0a68f615e3b5c Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 2 Jun 2025 15:42:32 +0000 Subject: [PATCH 058/142] Update results from script: scripts/did/did_cs_atte_coverage.py --- results/did/did_cs_atte_coverage_metadata.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/results/did/did_cs_atte_coverage_metadata.csv b/results/did/did_cs_atte_coverage_metadata.csv index 19aa007..c055b9e 100644 --- a/results/did/did_cs_atte_coverage_metadata.csv +++ b/results/did/did_cs_atte_coverage_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,did_cs_atte_coverage.py,2025-05-22 15:05:03,12767.107241630554,3.12.3 +0.11.dev0,did_cs_atte_coverage.py,2025-06-02 15:42:26,12669.156663179398,3.12.3 From bd4246fc4641ed87537129f78a9a45f92055ad03 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 2 Jun 2025 17:51:11 +0000 Subject: [PATCH 059/142] Update results from script: scripts/did/did_pa_multi.py --- results/did/did_multi_detailed.csv | 96 +++++++++--------- results/did/did_multi_eventstudy.csv | 96 +++++++++--------- results/did/did_multi_group.csv | 96 +++++++++--------- results/did/did_multi_metadata.csv | 2 +- results/did/did_multi_time.csv | 96 +++++++++--------- results/did/did_pa_multi_config.yml | 140 ++++++--------------------- 6 files changed, 223 insertions(+), 303 deletions(-) diff --git a/results/did/did_multi_detailed.csv b/results/did/did_multi_detailed.csv index 3384909..0792d64 100644 --- a/results/did/did_multi_detailed.csv +++ b/results/did/did_multi_detailed.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,experimental,False,1,0.9,0.4084166666666667,0.6711379447655711,0.45573140858217215,0.079,1.0050739084247675,1000 -LGBM,LGBM,experimental,False,1,0.95,0.49625,0.7997101862715227,0.45573140858217215,0.132,1.115181838446232,1000 -LGBM,LGBM,experimental,False,4,0.9,0.5408333333333334,0.5829183572257842,0.3256247127712507,0.227,0.8979506620328224,1000 -LGBM,LGBM,experimental,False,4,0.95,0.62975,0.6945900640455575,0.3256247127712507,0.299,0.9884673580918313,1000 -LGBM,LGBM,experimental,False,6,0.9,0.8979166666666666,0.5800302078090503,0.14243775358828042,0.89,0.892704703388473,1000 -LGBM,LGBM,experimental,False,6,0.95,0.95,0.691148621751838,0.14243775358828042,0.955,0.9829906161123636,1000 -LGBM,LGBM,experimental,True,1,0.9,0.4105833333333333,0.671233414997924,0.45509646764918477,0.081,1.005300983475438,1000 -LGBM,LGBM,experimental,True,1,0.95,0.4990833333333333,0.7998239460699273,0.45509646764918477,0.139,1.1154305467306445,1000 -LGBM,LGBM,experimental,True,4,0.9,0.5370833333333334,0.5828484393127565,0.3258110613161524,0.212,0.8973624125797166,1000 -LGBM,LGBM,experimental,True,4,0.95,0.6318333333333334,0.6945067517135889,0.3258110613161524,0.305,0.9879336259779586,1000 -LGBM,LGBM,experimental,True,6,0.9,0.89625,0.5799071420563836,0.14138962778278252,0.903,0.8926727198727438,1000 -LGBM,LGBM,experimental,True,6,0.95,0.947,0.6910019798628547,0.14138962778278252,0.954,0.982776272537425,1000 -LGBM,LGBM,observational,False,1,0.9,0.90725,2.7320711716537267,0.7081787206178205,0.946,4.2481549947682335,1000 -LGBM,LGBM,observational,False,1,0.95,0.9646666666666667,3.255463593782398,0.7081787206178205,0.985,4.664072261741128,1000 -LGBM,LGBM,observational,False,4,0.9,0.9076666666666666,3.5140296061122283,0.9722309202462336,0.972,5.406999616722633,1000 -LGBM,LGBM,observational,False,4,0.95,0.9648333333333333,4.187224538241929,0.9722309202462336,0.995,5.954805878504198,1000 -LGBM,LGBM,observational,False,6,0.9,0.92525,2.166594877755592,0.5140262158838963,0.96,3.3799046023620645,1000 -LGBM,LGBM,observational,False,6,0.95,0.9675833333333334,2.5816570300909847,0.5140262158838963,0.984,3.7082268657228123,1000 -LGBM,LGBM,observational,True,1,0.9,0.9088333333333334,1.1285770515711326,0.2779542066229801,0.934,1.7607428145840895,1000 -LGBM,LGBM,observational,True,1,0.95,0.9595833333333333,1.3447825013812504,0.2779542066229801,0.971,1.9310262593666496,1000 -LGBM,LGBM,observational,True,4,0.9,0.92175,1.4119321412730104,0.3268873239533469,0.941,2.1833548301330525,1000 -LGBM,LGBM,observational,True,4,0.95,0.9650833333333334,1.6824209158589551,0.3268873239533469,0.975,2.400470983600388,1000 -LGBM,LGBM,observational,True,6,0.9,0.9054166666666666,1.0205289656802177,0.2486678941122539,0.917,1.597156856017389,1000 -LGBM,LGBM,observational,True,6,0.95,0.9546666666666667,1.2160352660803362,0.2486678941122539,0.957,1.7513439251743073,1000 -Linear,Linear,experimental,False,1,0.9,0.84575,0.2947177158765365,0.08161611344312397,0.752,0.4590941708451621,1000 -Linear,Linear,experimental,False,1,0.95,0.9100833333333334,0.35117781865763664,0.08161611344312397,0.853,0.504099184053661,1000 -Linear,Linear,experimental,False,4,0.9,0.3073333333333333,0.974825708310707,0.808795845992618,0.033,1.4112500397019019,1000 -Linear,Linear,experimental,False,4,0.95,0.38408333333333333,1.1615764759772769,0.808795845992618,0.069,1.5731674507528597,1000 -Linear,Linear,experimental,False,6,0.9,0.8911666666666667,0.9832819402273247,0.243739180309483,0.893,1.4205928620859418,1000 -Linear,Linear,experimental,False,6,0.95,0.9423333333333334,1.171652697794173,0.243739180309483,0.949,1.5853446204128676,1000 -Linear,Linear,experimental,True,1,0.9,0.8463333333333334,0.2947197524013989,0.08159475357883039,0.759,0.4593380570357237,1000 -Linear,Linear,experimental,True,1,0.95,0.9099166666666666,0.351180245326684,0.08159475357883039,0.86,0.5045635273614648,1000 -Linear,Linear,experimental,True,4,0.9,0.30625,0.9748445034208943,0.8085550484761943,0.034,1.4110989059663714,1000 -Linear,Linear,experimental,True,4,0.95,0.38475,1.1615988717324064,0.8085550484761943,0.068,1.574069732455078,1000 -Linear,Linear,experimental,True,6,0.9,0.89,0.9832818903405501,0.24368928454372696,0.893,1.4193554640817743,1000 -Linear,Linear,experimental,True,6,0.95,0.94225,1.1716526383504147,0.24368928454372696,0.952,1.5837169582518265,1000 -Linear,Linear,observational,False,1,0.9,0.9005,0.3188204993145348,0.07710334427560887,0.894,0.495905282385802,1000 -Linear,Linear,observational,False,1,0.95,0.9494166666666666,0.37989805655090114,0.07710334427560887,0.948,0.5446250222430568,1000 -Linear,Linear,observational,False,4,0.9,0.42083333333333334,1.2366389453819784,0.7873737934686624,0.183,1.7673158966945293,1000 -Linear,Linear,observational,False,4,0.95,0.527,1.4735461898335716,0.7873737934686624,0.272,1.977244843861637,1000 -Linear,Linear,observational,False,6,0.9,0.8901666666666667,1.0315660555384851,0.2592484851241425,0.889,1.4876338955955155,1000 -Linear,Linear,observational,False,6,0.95,0.9431666666666666,1.2291867698140935,0.2592484851241425,0.937,1.6596741796186278,1000 -Linear,Linear,observational,True,1,0.9,0.8986666666666666,0.31665078693066356,0.07694111946321994,0.883,0.49251977204037817,1000 -Linear,Linear,observational,True,1,0.95,0.9495,0.37731268478315316,0.07694111946321994,0.944,0.5411752370665596,1000 -Linear,Linear,observational,True,4,0.9,0.417,1.2352689208194765,0.7872341789805914,0.183,1.7660298619152044,1000 -Linear,Linear,observational,True,4,0.95,0.5238333333333334,1.4719137048778035,0.7872341789805914,0.278,1.9751958823009785,1000 -Linear,Linear,observational,True,6,0.9,0.8873333333333334,1.023987089801951,0.259336442252307,0.88,1.4789961469734276,1000 -Linear,Linear,observational,True,6,0.95,0.9425,1.2201558751251838,0.259336442252307,0.947,1.6504862891485015,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.4084507042253521,0.6612522092326544,0.44973970228836385,0.10328638497652583,0.9935059914244001,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.49178403755868544,0.787930605834864,0.44973970228836385,0.1596244131455399,1.1014902175259917,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.5336463223787168,0.582766759983815,0.32299857116015934,0.18309859154929578,0.8961664076512703,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.6263693270735524,0.694409424790157,0.32299857116015934,0.28169014084507044,0.9867179947950292,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9017996870109547,0.578959671088662,0.13751972629200543,0.8732394366197183,0.8919682440411882,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9491392801251956,0.6898729985707177,0.13751972629200543,0.9342723004694836,0.9817237170113741,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.4107981220657277,0.6610990972056453,0.4476286561990305,0.107981220657277,0.9924537064343187,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.5050860719874805,0.7877481616017598,0.4476286561990305,0.1643192488262911,1.099584135360425,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.5348200312989045,0.5827020149697208,0.32210086748537925,0.20187793427230047,0.8980725212627803,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.6255868544600939,0.6943322763474483,0.32210086748537925,0.29577464788732394,0.9881288275749126,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9021909233176838,0.5789579680053694,0.13548606467162275,0.892018779342723,0.8906297555939263,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9518779342723005,0.6898709692218071,0.13548606467162275,0.9389671361502347,0.9807905334864873,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9197965571205008,2.6943514650786105,0.6839666644937138,0.9765258215962441,4.190030688848515,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9655712050078247,3.210517791199548,0.6839666644937138,0.9859154929577465,4.601967336099581,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9194053208137716,3.4922540819240244,0.9237972600914225,0.9812206572769953,5.388123646746446,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9698748043818467,4.16127740078602,0.9237972600914225,1.0,5.930060622023973,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9354460093896714,2.1911606588763415,0.5011619074030041,0.9624413145539906,3.4237130298632317,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.969092331768388,2.6109289637511237,0.5011619074030041,0.9953051643192489,3.7555769901088496,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9139280125195618,1.109267010415937,0.2755940893225088,0.8685446009389671,1.7291751019525257,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.954225352112676,1.321773168159112,0.2755940893225088,0.9342723004694836,1.8979923185233545,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9205790297339593,1.4158326633799614,0.33401929336661684,0.9107981220657277,2.1920950306133054,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9616588419405321,1.6870686746170975,0.33401929336661684,0.9389671361502347,2.408946885913222,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9123630672926448,1.0199912152288533,0.24510901682198524,0.9248826291079812,1.5958111429274424,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9561815336463223,1.2153944968957262,0.24510901682198524,0.971830985915493,1.7484330943458928,213 +Linear,Logistic,experimental,False,1,0.9,0.8450704225352113,0.29447476044239895,0.08354776001109418,0.7276995305164319,0.4596087013280646,213 +Linear,Logistic,experimental,False,1,0.95,0.9084507042253521,0.35088831940192455,0.08354776001109418,0.8075117370892019,0.5045368833572496,213 +Linear,Logistic,experimental,False,4,0.9,0.3341158059467919,0.9748301672712222,0.7902188560164397,0.056338028169014086,1.4111319523263854,213 +Linear,Logistic,experimental,False,4,0.95,0.4017996870109546,1.1615817891564408,0.7902188560164397,0.07042253521126761,1.5730924328858458,213 +Linear,Logistic,experimental,False,6,0.9,0.9080594679186228,0.9825593405176763,0.23361443805782198,0.9154929577464789,1.4168592399518378,213 +Linear,Logistic,experimental,False,6,0.95,0.956964006259781,1.1707916671328766,0.23361443805782198,0.9483568075117371,1.5807909190964573,213 +Linear,Logistic,experimental,True,1,0.9,0.8438967136150235,0.29448998280268696,0.08353477895677355,0.7183098591549296,0.45943729886831725,213 +Linear,Logistic,experimental,True,1,0.95,0.9088419405320814,0.35090645796297054,0.08353477895677355,0.812206572769953,0.5041114400484898,213 +Linear,Logistic,experimental,True,4,0.9,0.3333333333333333,0.9747975428898821,0.7903965236641811,0.056338028169014086,1.4119051235101507,213 +Linear,Logistic,experimental,True,4,0.95,0.4033646322378717,1.161542914808355,0.7903965236641811,0.07981220657276995,1.5743781294233699,213 +Linear,Logistic,experimental,True,6,0.9,0.9092331768388106,0.9825623304514758,0.2341476257220959,0.92018779342723,1.41979846440565,213 +Linear,Logistic,experimental,True,6,0.95,0.9553990610328639,1.1707952298587427,0.2341476257220959,0.9530516431924883,1.5817945290736959,213 +Linear,Logistic,observational,False,1,0.9,0.894757433489828,0.3183557829503854,0.07809759992541833,0.892018779342723,0.49488785729946616,213 +Linear,Logistic,observational,False,1,0.95,0.9483568075117371,0.3793443128488264,0.07809759992541833,0.9436619718309859,0.5435074166885125,213 +Linear,Logistic,observational,False,4,0.9,0.44405320813771515,1.2415493083413676,0.7711800746228612,0.19718309859154928,1.774858650110625,213 +Linear,Logistic,observational,False,4,0.95,0.5453834115805947,1.4793972481853468,0.7711800746228612,0.2676056338028169,1.9858757227772874,213 +Linear,Logistic,observational,False,6,0.9,0.9115805946791862,1.0304949773365348,0.24398615030125753,0.92018779342723,1.4858759045886074,213 +Linear,Logistic,observational,False,6,0.95,0.9557902973395932,1.2279105014178964,0.24398615030125753,0.9577464788732394,1.6602060040028728,213 +Linear,Logistic,observational,True,1,0.9,0.892018779342723,0.3163792430260323,0.07808090534806102,0.8873239436619719,0.4927677081751961,213 +Linear,Logistic,observational,True,1,0.95,0.9464006259780908,0.37698912026374665,0.07808090534806102,0.9530516431924883,0.5411219121582408,213 +Linear,Logistic,observational,True,4,0.9,0.4409233176838811,1.2414842562609323,0.7671739690013839,0.19718309859154928,1.7725218888802696,213 +Linear,Logistic,observational,True,4,0.95,0.5410798122065728,1.4793197338505248,0.7671739690013839,0.28169014084507044,1.9817316211484592,213 +Linear,Logistic,observational,True,6,0.9,0.9061032863849765,1.027459591935346,0.24734972591149948,0.9154929577464789,1.4817614944804902,213 +Linear,Logistic,observational,True,6,0.95,0.9546165884194053,1.2242936166276337,0.24734972591149948,0.9436619718309859,1.6552966469110102,213 diff --git a/results/did/did_multi_eventstudy.csv b/results/did/did_multi_eventstudy.csv index 2977684..2498639 100644 --- a/results/did/did_multi_eventstudy.csv +++ b/results/did/did_multi_eventstudy.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,experimental,False,1,0.9,0.2695,0.6664379809971152,0.5273245725879285,0.065,0.875601005136764,1000 -LGBM,LGBM,experimental,False,1,0.95,0.35933333333333334,0.7941098340189701,0.5273245725879285,0.123,0.993123730170564,1000 -LGBM,LGBM,experimental,False,4,0.9,0.398,0.5415820487655375,0.3712684690429321,0.2,0.7377555251101078,1000 -LGBM,LGBM,experimental,False,4,0.95,0.4905,0.6453348145154958,0.3712684690429321,0.303,0.8304953131373951,1000 -LGBM,LGBM,experimental,False,6,0.9,0.8975,0.5398952913714347,0.13395236250758816,0.89,0.7349862691616095,1000 -LGBM,LGBM,experimental,False,6,0.95,0.9498333333333334,0.6433249191126899,0.13395236250758816,0.943,0.8272174489329279,1000 -LGBM,LGBM,experimental,True,1,0.9,0.27066666666666667,0.6664609685957759,0.5268935068048141,0.073,0.8756450610322313,1000 -LGBM,LGBM,experimental,True,1,0.95,0.362,0.7941372254322411,0.5268935068048141,0.131,0.9924410930584766,1000 -LGBM,LGBM,experimental,True,4,0.9,0.3908333333333333,0.5414895331777497,0.37122437324957164,0.19,0.7376044296248573,1000 -LGBM,LGBM,experimental,True,4,0.95,0.4928333333333333,0.6452245753932411,0.37122437324957164,0.294,0.8300401173811606,1000 -LGBM,LGBM,experimental,True,6,0.9,0.8971666666666667,0.5397522456658546,0.13239266622447163,0.893,0.7343809360201817,1000 -LGBM,LGBM,experimental,True,6,0.95,0.9475,0.6431544696413897,0.13239266622447163,0.946,0.8273225484496115,1000 -LGBM,LGBM,observational,False,1,0.9,0.902,2.653721378497191,0.7070490800856716,0.933,3.6804836186191254,1000 -LGBM,LGBM,observational,False,1,0.95,0.958,3.162104056941675,0.7070490800856716,0.973,4.1198480194456915,1000 -LGBM,LGBM,observational,False,4,0.9,0.901,3.561000033087922,1.0237738258563158,0.94,4.872767022094824,1000 -LGBM,LGBM,observational,False,4,0.95,0.9645,4.243193254061008,1.0237738258563158,0.99,5.476875359796976,1000 -LGBM,LGBM,observational,False,6,0.9,0.932,2.0204226296120424,0.46987471691349253,0.953,2.8163439845272875,1000 -LGBM,LGBM,observational,False,6,0.95,0.9728333333333333,2.4074820535421066,0.46987471691349253,0.982,3.1491467155171455,1000 -LGBM,LGBM,observational,True,1,0.9,0.9123333333333333,1.07183187495378,0.2603956402406786,0.938,1.4925039393303094,1000 -LGBM,LGBM,observational,True,1,0.95,0.9661666666666666,1.2771664529718216,0.2603956402406786,0.969,1.6679753377448512,1000 -LGBM,LGBM,observational,True,4,0.9,0.936,1.3868740368469075,0.30530138471391266,0.942,1.9070687685924095,1000 -LGBM,LGBM,observational,True,4,0.95,0.9701666666666666,1.6525623427973326,0.30530138471391266,0.973,2.1382550302116794,1000 -LGBM,LGBM,observational,True,6,0.9,0.9173333333333333,0.9435499321525795,0.22352810241642249,0.928,1.3193862165661938,1000 -LGBM,LGBM,observational,True,6,0.95,0.96,1.1243090900810153,0.22352810241642249,0.965,1.4751970915806725,1000 -Linear,Linear,experimental,False,1,0.9,0.8038333333333334,0.21012774921404478,0.06511858439798791,0.723,0.29993875767609723,1000 -Linear,Linear,experimental,False,1,0.95,0.8825,0.25038265646487395,0.06511858439798791,0.819,0.3333237643577245,1000 -Linear,Linear,experimental,False,4,0.9,0.18866666666666665,0.9724995300651125,0.9445552734461886,0.035,1.2537683002940827,1000 -Linear,Linear,experimental,False,4,0.95,0.2515,1.1588046636358738,0.9445552734461886,0.059,1.4271667404908353,1000 -Linear,Linear,experimental,False,6,0.9,0.8888333333333334,0.9839291437722918,0.24625318596473464,0.885,1.265266070206284,1000 -Linear,Linear,experimental,False,6,0.95,0.941,1.172423888384033,0.24625318596473464,0.936,1.4400279208463234,1000 -Linear,Linear,experimental,True,1,0.9,0.8053333333333333,0.21013098816621933,0.06512604019501264,0.732,0.300014012964527,1000 -Linear,Linear,experimental,True,1,0.95,0.8816666666666666,0.2503865159144358,0.06512604019501264,0.824,0.333092537873174,1000 -Linear,Linear,experimental,True,4,0.9,0.18933333333333333,0.972518967504493,0.9443719698591424,0.037,1.2555177892281149,1000 -Linear,Linear,experimental,True,4,0.95,0.252,1.1588278247734445,0.9443719698591424,0.06,1.4274806534380786,1000 -Linear,Linear,experimental,True,6,0.9,0.8875,0.9839063096253385,0.24613101616711022,0.885,1.2651613665652979,1000 -Linear,Linear,experimental,True,6,0.95,0.9415,1.1723966798197494,0.24613101616711022,0.941,1.4397415352658391,1000 -Linear,Linear,observational,False,1,0.9,0.8916666666666666,0.22637212149559552,0.054683601823785656,0.891,0.3228630405513039,1000 -Linear,Linear,observational,False,1,0.95,0.9456666666666667,0.2697390199136439,0.054683601823785656,0.949,0.358552269863231,1000 -Linear,Linear,observational,False,4,0.9,0.3156666666666667,1.2872024456860576,0.9190699365216015,0.185,1.6388325707815383,1000 -Linear,Linear,observational,False,4,0.95,0.4146666666666667,1.5337963165952757,0.9190699365216015,0.262,1.8700830647518032,1000 -Linear,Linear,observational,False,6,0.9,0.8868333333333334,1.0372399263148084,0.26320551491048766,0.877,1.3311336840392576,1000 -Linear,Linear,observational,False,6,0.95,0.9406666666666667,1.2359476038435253,0.26320551491048766,0.943,1.5174947513822885,1000 -Linear,Linear,observational,True,1,0.9,0.8923333333333334,0.22495023196577907,0.05470760964666116,0.891,0.3207319286670861,1000 -Linear,Linear,observational,True,1,0.95,0.9435,0.2680447340375201,0.05470760964666116,0.94,0.35645975459527846,1000 -Linear,Linear,observational,True,4,0.9,0.3105,1.2870401885570502,0.9190767720949804,0.177,1.6393372900395775,1000 -Linear,Linear,observational,True,4,0.95,0.41433333333333333,1.533602975301024,0.9190767720949804,0.257,1.8708048686939287,1000 -Linear,Linear,observational,True,6,0.9,0.8815,1.028838214628254,0.26320130535902825,0.884,1.3218761748802963,1000 -Linear,Linear,observational,True,6,0.95,0.9405,1.225936346887698,0.26320130535902825,0.935,1.5055011269416756,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.2793427230046948,0.6538940149561205,0.5211711102717896,0.06103286384976526,0.86055821069107,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.3528951486697966,0.7791627765660771,0.5211711102717896,0.1267605633802817,0.9765429620402541,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.39358372456964,0.541925194741234,0.3658723164598346,0.14084507042253522,0.7380373644216336,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4694835680751174,0.6457436981649495,0.3658723164598346,0.30985915492957744,0.8302776266426216,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9014084507042254,0.5382900596052185,0.12834769643838123,0.9014084507042254,0.7329552647921785,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9499217527386542,0.6414121674872129,0.12834769643838123,0.9530516431924883,0.8240621744454719,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.2902973395931142,0.653663670745508,0.5177678460962447,0.07511737089201878,0.8606157129718126,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.36932707355242567,0.7788883045100532,0.5177678460962447,0.14084507042253522,0.978192241517096,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3763693270735525,0.5420271299376794,0.36469586751312316,0.18779342723004694,0.7374141258484136,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4647887323943662,0.645865161443211,0.36469586751312316,0.27230046948356806,0.8307165715799049,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9194053208137716,0.5383523983929166,0.12524713080884226,0.9248826291079812,0.7331206282884405,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9483568075117371,0.6414864487343258,0.12524713080884226,0.9389671361502347,0.8244543573667497,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9131455399061033,2.635762776399446,0.6863198917243725,0.9389671361502347,3.6611895504458305,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9608763693270735,3.1407050626801003,0.6863198917243725,0.9812206572769953,4.095116662293061,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9107981220657277,3.5476693552380327,0.9618718220501209,0.9577464788732394,4.871536434987288,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9733959311424101,4.227308771668667,0.9618718220501209,0.9765258215962441,5.471362486927891,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.94679186228482,2.048525808104845,0.4424199042553949,0.9530516431924883,2.8547596856961075,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9780907668231612,2.4409690561510136,0.4424199042553949,0.9859154929577465,3.191610282696814,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9178403755868545,1.0506825752853373,0.25838130000929665,0.9248826291079812,1.4648011676731838,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9624413145539906,1.2519655080553924,0.25838130000929665,0.9577464788732394,1.6360312921813787,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9225352112676056,1.3999042833283855,0.32349351954396005,0.9248826291079812,1.9287116595218243,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9679186228482003,1.6680888391340973,0.32349351954396005,0.9624413145539906,2.1548062661512533,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9194053208137716,0.941095371039425,0.21448858413067756,0.9530516431924883,1.3188087131097894,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9710485133020345,1.1213843001174537,0.21448858413067756,0.9812206572769953,1.4720050449124056,213 +Linear,Logistic,experimental,False,1,0.9,0.8176838810641627,0.2097616817290772,0.06354647829956948,0.7511737089201878,0.29957865791433536,213 +Linear,Logistic,experimental,False,1,0.95,0.888888888888889,0.24994646015251432,0.06354647829956948,0.8356807511737089,0.3324902033558004,213 +Linear,Logistic,experimental,False,4,0.9,0.20735524256651017,0.9731315969907915,0.9247823933778377,0.051643192488262914,1.2553334876224438,213 +Linear,Logistic,experimental,False,4,0.95,0.26682316118935834,1.1595578178313908,0.9247823933778377,0.06572769953051644,1.427245013596636,213 +Linear,Logistic,experimental,False,6,0.9,0.9162754303599373,0.982583831624362,0.2340222441493123,0.9107981220657277,1.2642250097051084,213 +Linear,Logistic,experimental,False,6,0.95,0.9538341158059468,1.1708208500864592,0.2340222441493123,0.9436619718309859,1.440074754119655,213 +Linear,Logistic,experimental,True,1,0.9,0.8184663536776213,0.209784288558112,0.06346289348873158,0.7511737089201878,0.2994094620604152,213 +Linear,Logistic,experimental,True,1,0.95,0.8896713615023474,0.24997339785079145,0.06346289348873158,0.8497652582159625,0.33304580863290817,213 +Linear,Logistic,experimental,True,4,0.9,0.21048513302034427,0.9730155853528542,0.9248338055294343,0.051643192488262914,1.2540423515599672,213 +Linear,Logistic,experimental,True,4,0.95,0.2699530516431925,1.1594195814385477,0.9248338055294343,0.07042253521126761,1.4266453422038732,213 +Linear,Logistic,experimental,True,6,0.9,0.9139280125195618,0.9825202138375453,0.23446937547502114,0.9061032863849765,1.2635545418793521,213 +Linear,Logistic,experimental,True,6,0.95,0.9522691705790298,1.1707450448178967,0.23446937547502114,0.9389671361502347,1.4364612584863943,213 +Linear,Logistic,observational,False,1,0.9,0.9100156494522692,0.2256652512730398,0.05275781831070359,0.9248826291079812,0.3210767224862521,213 +Linear,Logistic,observational,False,1,0.95,0.960093896713615,0.26889673209225234,0.05275781831070359,0.9483568075117371,0.357572619911957,213 +Linear,Logistic,observational,False,4,0.9,0.3325508607198748,1.2935393301274787,0.9012986658762238,0.20187793427230047,1.6449223740918557,213 +Linear,Logistic,observational,False,4,0.95,0.4460093896713615,1.5413471801346634,0.9012986658762238,0.2863849765258216,1.8802622354415948,213 +Linear,Logistic,observational,False,6,0.9,0.9123630672926448,1.0362716142235429,0.2466341904936733,0.9248826291079812,1.328413177022464,213 +Linear,Logistic,observational,False,6,0.95,0.960093896713615,1.2347937888209737,0.2466341904936733,0.9483568075117371,1.5124625048982703,213 +Linear,Logistic,observational,True,1,0.9,0.906885758998435,0.22449816162535258,0.05285134622236858,0.9107981220657277,0.32006341717518294,213 +Linear,Logistic,observational,True,1,0.95,0.9561815336463223,0.267506059002127,0.05285134622236858,0.9483568075117371,0.355619479598059,213 +Linear,Logistic,observational,True,4,0.9,0.3380281690140845,1.2948063187256469,0.8972215616534344,0.1784037558685446,1.6460425935700733,213 +Linear,Logistic,observational,True,4,0.95,0.430359937402191,1.5428568901663307,0.8972215616534344,0.3051643192488263,1.8803448054869478,213 +Linear,Logistic,observational,True,6,0.9,0.9123630672926448,1.0324801100143304,0.2506321361153765,0.9014084507042254,1.3236751031745002,213 +Linear,Logistic,observational,True,6,0.95,0.9499217527386542,1.2302759329002244,0.2506321361153765,0.9530516431924883,1.510018818061999,213 diff --git a/results/did/did_multi_group.csv b/results/did/did_multi_group.csv index d6d461b..de75e59 100644 --- a/results/did/did_multi_group.csv +++ b/results/did/did_multi_group.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,experimental,False,1,0.9,0.3723333333333333,0.712829716785441,0.5120534147173762,0.073,0.8873091560105003,1000 -LGBM,LGBM,experimental,False,1,0.95,0.4606666666666666,0.849388996757564,0.5120534147173762,0.122,1.0124899542984358,1000 -LGBM,LGBM,experimental,False,4,0.9,0.504,0.608382718738708,0.36202329008148987,0.219,0.7745653409497698,1000 -LGBM,LGBM,experimental,False,4,0.95,0.589,0.7249327222838707,0.36202329008148987,0.31,0.8776439618079263,1000 -LGBM,LGBM,experimental,False,6,0.9,0.8986666666666666,0.6042439878313273,0.14850794162785066,0.899,0.7675396748306148,1000 -LGBM,LGBM,experimental,False,6,0.95,0.9503333333333334,0.7200011202329313,0.14850794162785066,0.945,0.8700300494781059,1000 -LGBM,LGBM,experimental,True,1,0.9,0.3866666666666666,0.7129187295177013,0.5108468478621639,0.076,0.8873896060492763,1000 -LGBM,LGBM,experimental,True,1,0.95,0.4633333333333333,0.8494950619700162,0.5108468478621639,0.135,1.0122432445151552,1000 -LGBM,LGBM,experimental,True,4,0.9,0.5016666666666666,0.608263026948519,0.3616198619719443,0.223,0.7738821674571664,1000 -LGBM,LGBM,experimental,True,4,0.95,0.5966666666666667,0.7247901007191481,0.3616198619719443,0.308,0.877557935434779,1000 -LGBM,LGBM,experimental,True,6,0.9,0.8976666666666666,0.6041013460350053,0.14653383224031008,0.898,0.7676921917774191,1000 -LGBM,LGBM,experimental,True,6,0.95,0.947,0.7198311520491973,0.14653383224031008,0.954,0.8702372370829647,1000 -LGBM,LGBM,observational,False,1,0.9,0.9093333333333333,2.665571501346606,0.6783738614604253,0.937,3.372964798983418,1000 -LGBM,LGBM,observational,False,1,0.95,0.9673333333333334,3.1762243492380025,0.6783738614604253,0.98,3.825961439092819,1000 -LGBM,LGBM,observational,False,4,0.9,0.909,3.534531876327934,0.9946875737404597,0.935,4.445144884485254,1000 -LGBM,LGBM,observational,False,4,0.95,0.967,4.211654500012185,0.9946875737404597,0.976,5.055292173043325,1000 -LGBM,LGBM,observational,False,6,0.9,0.9416666666666667,2.122820536068101,0.4787787714125554,0.957,2.6963338440693168,1000 -LGBM,LGBM,observational,False,6,0.95,0.9766666666666667,2.5294966847881346,0.4787787714125554,0.986,3.0585559742251704,1000 -LGBM,LGBM,observational,True,1,0.9,0.921,1.1147256542022042,0.2672559046096273,0.934,1.4159126956485517,1000 -LGBM,LGBM,observational,True,1,0.95,0.966,1.3282775434118486,0.2672559046096273,0.968,1.6037050855151684,1000 -LGBM,LGBM,observational,True,4,0.9,0.94,1.422767817772445,0.30810115099970276,0.936,1.7975736984737825,1000 -LGBM,LGBM,observational,True,4,0.95,0.9706666666666667,1.6953324207728482,0.30810115099970276,0.972,2.041855425299719,1000 -LGBM,LGBM,observational,True,6,0.9,0.91,1.006741237739991,0.237584782868055,0.927,1.2840461885633785,1000 -LGBM,LGBM,observational,True,6,0.95,0.9603333333333334,1.1996061749145979,0.237584782868055,0.969,1.4521486558429435,1000 -Linear,Linear,experimental,False,1,0.9,0.809,0.2639472488371848,0.07836725122654463,0.751,0.33918155040956693,1000 -Linear,Linear,experimental,False,1,0.95,0.8853333333333334,0.3145125457139394,0.07836725122654463,0.833,0.3826104197586172,1000 -Linear,Linear,experimental,False,4,0.9,0.29933333333333334,1.0775733624029018,0.9144760793156517,0.031,1.3581931890994936,1000 -Linear,Linear,experimental,False,4,0.95,0.376,1.28400785723636,0.9144760793156517,0.066,1.544378342112665,1000 -Linear,Linear,experimental,False,6,0.9,0.8916666666666666,1.0855871936277797,0.2674422239505616,0.886,1.3663373525384621,1000 -Linear,Linear,experimental,False,6,0.95,0.9413333333333334,1.293556926114941,0.2674422239505616,0.947,1.554433869195187,1000 -Linear,Linear,experimental,True,1,0.9,0.809,0.26395101798234016,0.07841196950190694,0.751,0.3392834245796571,1000 -Linear,Linear,experimental,True,1,0.95,0.8856666666666666,0.3145170369274041,0.07841196950190694,0.832,0.38257509241292276,1000 -Linear,Linear,experimental,True,4,0.9,0.29733333333333334,1.0775450811401135,0.9139676817765434,0.033,1.3594859465438789,1000 -Linear,Linear,experimental,True,4,0.95,0.37666666666666665,1.283974158033225,0.9139676817765434,0.065,1.545038224259449,1000 -Linear,Linear,experimental,True,6,0.9,0.8946666666666666,1.0856219017160036,0.2672586672222071,0.896,1.366450981317095,1000 -Linear,Linear,experimental,True,6,0.95,0.942,1.2935982833529203,0.2672586672222071,0.952,1.5542102827957853,1000 -Linear,Linear,observational,False,1,0.9,0.8963333333333334,0.28417672167828534,0.0704315330527404,0.888,0.36504143473823225,1000 -Linear,Linear,observational,False,1,0.95,0.945,0.33861744936319155,0.0704315330527404,0.941,0.41189946472127525,1000 -Linear,Linear,observational,False,4,0.9,0.408,1.3757050815726335,0.8986741240953303,0.193,1.723360009232728,1000 -Linear,Linear,observational,False,4,0.95,0.5103333333333333,1.639253711728994,0.8986741240953303,0.289,1.9608953756229532,1000 -Linear,Linear,observational,False,6,0.9,0.8906666666666666,1.1373073172966048,0.284219716886748,0.88,1.4298799083888758,1000 -Linear,Linear,observational,False,6,0.95,0.9396666666666667,1.35518525462143,0.284219716886748,0.944,1.6242483562467662,1000 -Linear,Linear,observational,True,1,0.9,0.8976666666666666,0.28247229568225285,0.07026934090791014,0.889,0.3628745212929247,1000 -Linear,Linear,observational,True,1,0.95,0.9476666666666667,0.33658650052263794,0.07026934090791014,0.945,0.40971246171295345,1000 -Linear,Linear,observational,True,4,0.9,0.4056666666666666,1.3749682398133307,0.8988135221197031,0.198,1.7216124241871145,1000 -Linear,Linear,observational,True,4,0.95,0.505,1.638375710618819,0.8988135221197031,0.282,1.959504408369747,1000 -Linear,Linear,observational,True,6,0.9,0.8893333333333334,1.1272233554666016,0.2838441687177051,0.879,1.416566966857148,1000 -Linear,Linear,observational,True,6,0.95,0.943,1.3431694729832098,0.2838441687177051,0.945,1.6114267967021605,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.38341158059467917,0.7010247560032261,0.5045579001393814,0.06572769953051644,0.8747944725382377,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.44913928012519555,0.8353225183834784,0.5045579001393814,0.13145539906103287,0.9956978967225759,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.514866979655712,0.6082806742773996,0.35754266882547,0.18309859154929578,0.7739715228608116,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.5884194053208137,0.7248111288084945,0.35754266882547,0.29107981220657275,0.878325999451341,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9045383411580594,0.6032942628400023,0.1416087698948157,0.9061032863849765,0.7672596153857486,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9577464788732394,0.7188694531060122,0.1416087698948157,0.9483568075117371,0.8700719219107395,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.38028169014084506,0.7006624811428777,0.5027623497763666,0.08450704225352113,0.8749076136062413,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.45383411580594674,0.8348908412620905,0.5027623497763666,0.14084507042253522,0.9960800157981575,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.49765258215962443,0.6078684171461785,0.3564700998360187,0.1784037558685446,0.7724813665598308,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.5915492957746479,0.7243198941379295,0.3564700998360187,0.28169014084507044,0.8768342044058519,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9092331768388106,0.6035874382384104,0.13992167424040736,0.9295774647887324,0.7668293165413835,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9577464788732394,0.7192187931400541,0.13992167424040736,0.9483568075117371,0.8695905007790928,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9233176838810642,2.6401625405977405,0.6680316774131236,0.9530516431924883,3.348805972231518,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9687010954616588,3.1459477050817273,0.6680316774131236,0.9812206572769953,3.791143326987578,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9123630672926448,3.4982482043306202,0.9449299713795152,0.9248826291079812,4.416321409189137,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9577464788732394,4.1684198381697195,0.9449299713795152,0.9812206572769953,5.007980964364257,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9389671361502347,2.1556775041672305,0.46296654578958996,0.9483568075117371,2.739619518142511,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9733959311424101,2.568648177091331,0.46296654578958996,0.9906103286384976,3.1020251380422854,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9264475743348983,1.0864056229119294,0.2572919037765861,0.9389671361502347,1.3803957820627104,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9624413145539906,1.2945321447572218,0.2572919037765861,0.9624413145539906,1.5630008344403068,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9405320813771518,1.4335989322710556,0.318773509562249,0.9577464788732394,1.8127247140484581,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9765258215962441,1.7082384897274767,0.318773509562249,0.9859154929577465,2.0590624139128217,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.917057902973396,1.015686570779001,0.23606871293652523,0.9483568075117371,1.2952585886030479,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9640062597809077,1.2102651966651654,0.23606871293652523,0.9812206572769953,1.4663039002495655,213 +Linear,Logistic,experimental,False,1,0.9,0.8169014084507042,0.263859732601683,0.08071876563864448,0.7746478873239436,0.33907438784389654,213 +Linear,Logistic,experimental,False,1,0.95,0.895148669796557,0.31440826368735936,0.08071876563864448,0.8544600938967136,0.38284950361525444,213 +Linear,Logistic,experimental,False,4,0.9,0.3302034428794992,1.077782919659112,0.8937614998777182,0.051643192488262914,1.3561544020534126,213 +Linear,Logistic,experimental,False,4,0.95,0.39749608763693267,1.2842575601084827,0.8937614998777182,0.07511737089201878,1.5423676656010097,213 +Linear,Logistic,experimental,False,6,0.9,0.9092331768388106,1.084908190453934,0.25576007865798384,0.9295774647887324,1.365127434841,213 +Linear,Logistic,experimental,False,6,0.95,0.9593114241001566,1.2927478439301676,0.25576007865798384,0.9577464788732394,1.55476043284721,213 +Linear,Logistic,experimental,True,1,0.9,0.8106416275430359,0.26388645094216934,0.08082008766978688,0.7793427230046949,0.33860699865003,213 +Linear,Logistic,experimental,True,1,0.95,0.8982785602503913,0.31444010055370525,0.08082008766978688,0.8544600938967136,0.38363187019926315,213 +Linear,Logistic,experimental,True,4,0.9,0.32707355242566505,1.0776870925219295,0.8937933391766094,0.051643192488262914,1.3587107289972284,213 +Linear,Logistic,experimental,True,4,0.95,0.40219092331768386,1.284143375031743,0.8937933391766094,0.07981220657276995,1.5423186997471712,213 +Linear,Logistic,experimental,True,6,0.9,0.9123630672926448,1.0847636730976646,0.25673459846880975,0.9295774647887324,1.3684316527340743,213 +Linear,Logistic,experimental,True,6,0.95,0.9530516431924883,1.2925756408789129,0.25673459846880975,0.9530516431924883,1.552030854337275,213 +Linear,Logistic,observational,False,1,0.9,0.895148669796557,0.2840761342590122,0.06969384593021301,0.9154929577464789,0.36506933928947094,213 +Linear,Logistic,observational,False,1,0.95,0.9577464788732394,0.3384975920604852,0.06969384593021301,0.9483568075117371,0.41184024131390085,213 +Linear,Logistic,observational,False,4,0.9,0.42879499217527384,1.3815569998881347,0.8834464565663525,0.19718309859154928,1.7278992279793388,213 +Linear,Logistic,observational,False,4,0.95,0.5226917057902973,1.646226702486907,0.8834464565663525,0.2863849765258216,1.9664187739003602,213 +Linear,Logistic,observational,False,6,0.9,0.9139280125195618,1.1353911192689263,0.2657678059270839,0.92018779342723,1.4244455772241778,213 +Linear,Logistic,observational,False,6,0.95,0.9593114241001566,1.3529019638410478,0.2657678059270839,0.9624413145539906,1.6176444941500485,213 +Linear,Logistic,observational,True,1,0.9,0.8826291079812206,0.2823311571824021,0.06993758010197051,0.9295774647887324,0.3628548286921628,213 +Linear,Logistic,observational,True,1,0.95,0.9561815336463223,0.33641832362713375,0.06993758010197051,0.9577464788732394,0.40938919268144514,213 +Linear,Logistic,observational,True,4,0.9,0.4194053208137715,1.3815154955504438,0.876582736122305,0.2112676056338028,1.7315155396141317,213 +Linear,Logistic,observational,True,4,0.95,0.5273865414710485,1.6461772470181997,0.876582736122305,0.3145539906103286,1.9679400718614783,213 +Linear,Logistic,observational,True,6,0.9,0.9076682316118936,1.1396624657364007,0.2717053464179361,0.9154929577464789,1.430838330810308,213 +Linear,Logistic,observational,True,6,0.95,0.9608763693270735,1.3579915870783799,0.2717053464179361,0.9577464788732394,1.6241526383361697,213 diff --git a/results/did/did_multi_metadata.csv b/results/did/did_multi_metadata.csv index 191c4eb..67772b0 100644 --- a/results/did/did_multi_metadata.csv +++ b/results/did/did_multi_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.dev0,DIDMultiCoverageSimulation,2025-05-23 09:01,152.65548847913743,3.12.9,scripts/did/did_pa_multi_config.yml +0.11.dev0,DIDMultiCoverageSimulation,2025-06-02 17:51,339.9238995909691,3.12.3,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_time.csv b/results/did/did_multi_time.csv index 333f774..8a5c303 100644 --- a/results/did/did_multi_time.csv +++ b/results/did/did_multi_time.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,experimental,False,1,0.9,0.105,0.6770474680143006,0.5882187359928296,0.06,0.8037202643084942,1000 -LGBM,LGBM,experimental,False,1,0.95,0.17066666666666666,0.8067518175410349,0.5882187359928296,0.118,0.926841610902776,1000 -LGBM,LGBM,experimental,False,4,0.9,0.236,0.5444213002720629,0.41426795329176225,0.178,0.6607984097007097,1000 -LGBM,LGBM,experimental,False,4,0.95,0.3276666666666666,0.6487179913554645,0.41426795329176225,0.267,0.7587562686524103,1000 -LGBM,LGBM,experimental,False,6,0.9,0.8943333333333334,0.53982673853458,0.1342938994875208,0.908,0.6564456680014384,1000 -LGBM,LGBM,experimental,False,6,0.95,0.95,0.6432432333693072,0.1342938994875208,0.951,0.7533485914407448,1000 -LGBM,LGBM,experimental,True,1,0.9,0.104,0.6773164375641183,0.5871963271333144,0.063,0.8038330391648153,1000 -LGBM,LGBM,experimental,True,1,0.95,0.17566666666666667,0.8070723145274795,0.5871963271333144,0.136,0.9270642436123595,1000 -LGBM,LGBM,experimental,True,4,0.9,0.2313333333333333,0.5443770179339803,0.414059062792942,0.171,0.6603179410869597,1000 -LGBM,LGBM,experimental,True,4,0.95,0.327,0.6486652256951217,0.414059062792942,0.258,0.7584758454668876,1000 -LGBM,LGBM,experimental,True,6,0.9,0.9013333333333333,0.5395668449941098,0.13154818699839163,0.895,0.6563984364887405,1000 -LGBM,LGBM,experimental,True,6,0.95,0.9493333333333334,0.6429335511150388,0.13154818699839163,0.942,0.7529872439559875,1000 -LGBM,LGBM,observational,False,1,0.9,0.8973333333333333,2.8900944626182756,0.7577316621702538,0.915,3.57007703127756,1000 -LGBM,LGBM,observational,False,1,0.95,0.958,3.4437599588413588,0.7577316621702538,0.968,4.083723276817505,1000 -LGBM,LGBM,observational,False,4,0.9,0.8883333333333334,3.944278944663819,1.1508934356199159,0.921,4.817695497037129,1000 -LGBM,LGBM,observational,False,4,0.95,0.959,4.699898246173131,1.1508934356199159,0.981,5.525753606365474,1000 -LGBM,LGBM,observational,False,6,0.9,0.9346666666666666,2.007004968725184,0.4621685573032238,0.943,2.5048024891920218,1000 -LGBM,LGBM,observational,False,6,0.95,0.973,2.391493924468424,0.4621685573032238,0.976,2.8553234091559982,1000 -LGBM,LGBM,observational,True,1,0.9,0.9203333333333333,1.1214028688438904,0.2681238910047797,0.932,1.3877940365894852,1000 -LGBM,LGBM,observational,True,1,0.95,0.966,1.336233935397319,0.2681238910047797,0.965,1.5830862634102072,1000 -LGBM,LGBM,observational,True,4,0.9,0.946,1.4738907100586922,0.3155685506978381,0.947,1.8023292945303246,1000 -LGBM,LGBM,observational,True,4,0.95,0.975,1.756249104193653,0.3155685506978381,0.978,2.0652293790201095,1000 -LGBM,LGBM,observational,True,6,0.9,0.9036666666666666,0.9243181245460811,0.22145829614971912,0.904,1.1513913386950982,1000 -LGBM,LGBM,observational,True,6,0.95,0.9506666666666667,1.101392977881901,0.22145829614971912,0.964,1.312498872874679,1000 -Linear,Linear,experimental,False,1,0.9,0.785,0.24421028738791545,0.07700598814984021,0.726,0.31283981302906455,1000 -Linear,Linear,experimental,False,1,0.95,0.8656666666666666,0.29099450558503215,0.07700598814984021,0.822,0.3536648083533155,1000 -Linear,Linear,experimental,False,4,0.9,0.029,0.9657408497851493,1.0738907262320931,0.024,1.1066254403295672,1000 -Linear,Linear,experimental,False,4,0.95,0.05633333333333333,1.1507511993551036,1.0738907262320931,0.042,1.2857511031369329,1000 -Linear,Linear,experimental,False,6,0.9,0.891,0.9640961231527081,0.2403665468723713,0.887,1.1081712902827776,1000 -Linear,Linear,experimental,False,6,0.95,0.944,1.1487913866938562,0.2403665468723713,0.945,1.2857969535196567,1000 -Linear,Linear,experimental,True,1,0.9,0.7856666666666666,0.24421161220168236,0.07699427764290885,0.725,0.312745321017087,1000 -Linear,Linear,experimental,True,1,0.95,0.866,0.2909960841980021,0.07699427764290885,0.82,0.35353627547158184,1000 -Linear,Linear,experimental,True,4,0.9,0.029333333333333333,0.9658114690308013,1.073411274232068,0.025,1.1072936001699796,1000 -Linear,Linear,experimental,True,4,0.95,0.056,1.1508353473764386,1.073411274232068,0.047,1.2871025490442616,1000 -Linear,Linear,experimental,True,6,0.9,0.8933333333333334,0.964156052938097,0.23997981769673798,0.891,1.1072565217168384,1000 -Linear,Linear,experimental,True,6,0.95,0.944,1.1488627974376686,0.23997981769673798,0.947,1.287096789672995,1000 -Linear,Linear,observational,False,1,0.9,0.889,0.2746570982471215,0.06835594688685424,0.877,0.35201642493170093,1000 -Linear,Linear,observational,False,1,0.95,0.9386666666666666,0.32727411840307125,0.06835594688685424,0.932,0.39803367647348065,1000 -Linear,Linear,observational,False,4,0.9,0.16033333333333336,1.3480635210832488,1.0552310812916714,0.131,1.518276214952089,1000 -Linear,Linear,observational,False,4,0.95,0.24266666666666667,1.6063167608976374,1.0552310812916714,0.211,1.7707505491415911,1000 -Linear,Linear,observational,False,6,0.9,0.8903333333333334,1.0186244057373655,0.2564255464027685,0.88,1.171669804736589,1000 -Linear,Linear,observational,False,6,0.95,0.9423333333333334,1.2137658429333622,0.2564255464027685,0.942,1.359505036566505,1000 -Linear,Linear,observational,True,1,0.9,0.8853333333333334,0.27250071547513943,0.06816094516072957,0.876,0.349158428206522,1000 -Linear,Linear,observational,True,1,0.95,0.9393333333333334,0.3247046298475451,0.06816094516072957,0.927,0.39461799076066073,1000 -Linear,Linear,observational,True,4,0.9,0.15733333333333335,1.348359701155594,1.0540447813311582,0.131,1.518475986344912,1000 -Linear,Linear,observational,True,4,0.95,0.24566666666666664,1.6066696812215027,1.0540447813311582,0.213,1.7697898872953792,1000 -Linear,Linear,observational,True,6,0.9,0.886,1.007087091732094,0.2561924661932343,0.886,1.1588097256348897,1000 -Linear,Linear,observational,True,6,0.95,0.9426666666666667,1.2000182853646246,0.2561924661932343,0.938,1.3446481778510444,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.10485133020344288,0.6641311784095322,0.5823494355664303,0.08450704225352113,0.7881878804378276,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.17683881064162754,0.7913611091980961,0.5823494355664303,0.12206572769953052,0.9120924244627483,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.2222222222222222,0.5457603564040948,0.40420421511646165,0.15023474178403756,0.6619778117977112,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.34585289514866974,0.6503135751503121,0.40420421511646165,0.23943661971830985,0.7592098705244504,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9107981220657277,0.5381868903349744,0.12772384273949355,0.9014084507042254,0.6551761588151264,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9530516431924883,0.6412892337193222,0.12772384273949355,0.9389671361502347,0.7509412548475333,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.10328638497652583,0.6638809210012889,0.5795783394754952,0.09389671361502347,0.7886190860615776,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.17527386541471046,0.7910629091035805,0.5795783394754952,0.1267605633802817,0.9100402277563315,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.2363067292644757,0.5454472863046809,0.40351084017097694,0.15492957746478872,0.6618382122506522,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.34115805946791866,0.6499405291178667,0.40351084017097694,0.2347417840375587,0.760586865832683,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9045383411580594,0.5384698205489944,0.12841236979508242,0.9248826291079812,0.6548573031006936,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9577464788732394,0.6416263658631989,0.12841236979508242,0.9530516431924883,0.7496096842588228,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.917057902973396,2.826267846555917,0.6997630370632157,0.9342723004694836,3.505164210797084,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9624413145539906,3.367705854884923,0.6997630370632157,0.9765258215962441,4.010090570743562,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9061032863849765,3.9292910307842495,1.1032615377470605,0.9248826291079812,4.801480559342949,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9640062597809077,4.682039045253358,1.1032615377470605,0.9765258215962441,5.512445467612302,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9405320813771518,2.020686142877495,0.4287262814527601,0.9577464788732394,2.5196056115761056,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9765258215962441,2.4077960489647223,0.4287262814527601,0.9812206572769953,2.8786465586804595,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9420970266040688,1.0767197139991078,0.25231124461698884,0.9295774647887324,1.337727334792679,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9671361502347418,1.2829906724246045,0.25231124461698884,0.9671361502347418,1.521525908754415,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9389671361502347,1.4992929674517166,0.3404636513294964,0.9530516431924883,1.8343377037938378,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9780907668231612,1.7865177608087823,0.3404636513294964,0.9859154929577465,2.10956901976702,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9139280125195618,0.9226791828166745,0.22256304127174542,0.9248826291079812,1.1499561650632644,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9624413145539906,1.0994400583577786,0.22256304127174542,0.9765258215962441,1.3126410298530595,213 +Linear,Logistic,experimental,False,1,0.9,0.7981220657276995,0.24406856913925595,0.07455391600852629,0.7276995305164319,0.31257176314972324,213 +Linear,Logistic,experimental,False,1,0.95,0.863849765258216,0.29082563787621385,0.07455391600852629,0.8169014084507042,0.3530474954026036,213 +Linear,Logistic,experimental,False,4,0.9,0.046948356807511735,0.9683919238870853,1.0545074196771533,0.04225352112676056,1.1061614805926192,213 +Linear,Logistic,experimental,False,4,0.95,0.06572769953051644,1.153910148987462,1.0545074196771533,0.06103286384976526,1.2911717925367656,213 +Linear,Logistic,experimental,False,6,0.9,0.8982785602503913,0.9628742659936109,0.23137852998349606,0.892018779342723,1.1054779631893865,213 +Linear,Logistic,experimental,False,6,0.95,0.9452269170579031,1.147335454088764,0.23137852998349606,0.9624413145539906,1.289087298578374,213 +Linear,Logistic,experimental,True,1,0.9,0.8059467918622848,0.24408667991439068,0.07429939700420787,0.7370892018779343,0.3135963329097478,213 +Linear,Logistic,experimental,True,1,0.95,0.86697965571205,0.29084721819583287,0.07429939700420787,0.8262910798122066,0.35308221324877676,213 +Linear,Logistic,experimental,True,4,0.9,0.046948356807511735,0.9682481796882342,1.054760155003612,0.03286384976525822,1.1081060346576734,213 +Linear,Logistic,experimental,True,4,0.95,0.06572769953051644,1.1537388672100939,1.054760155003612,0.056338028169014086,1.2880440884321052,213 +Linear,Logistic,experimental,True,6,0.9,0.892018779342723,0.9628043535115562,0.23252849991729144,0.8873239436619719,1.1104069795500415,213 +Linear,Logistic,experimental,True,6,0.95,0.9499217527386542,1.1472521482281988,0.23252849991729144,0.9577464788732394,1.287530785006439,213 +Linear,Logistic,observational,False,1,0.9,0.9014084507042254,0.27469908871557547,0.06651861748549698,0.9014084507042254,0.3520501442016315,213 +Linear,Logistic,observational,False,1,0.95,0.9546165884194053,0.3273241531323111,0.06651861748549698,0.9436619718309859,0.39797250176020077,213 +Linear,Logistic,observational,False,4,0.9,0.18935837245696402,1.353982900128844,1.038997154582461,0.18309859154929578,1.5217737073595556,213 +Linear,Logistic,observational,False,4,0.95,0.27543035993740217,1.6133701360734638,1.038997154582461,0.26291079812206575,1.7800142309978275,213 +Linear,Logistic,observational,False,6,0.9,0.9045383411580594,1.0143473501307676,0.24543300102476093,0.9107981220657277,1.1667504579830554,213 +Linear,Logistic,observational,False,6,0.95,0.9593114241001566,1.208669416837173,0.24543300102476093,0.9577464788732394,1.3535074358284087,213 +Linear,Logistic,observational,True,1,0.9,0.8935837245696401,0.2725905663392203,0.06651898118558668,0.892018779342723,0.3498352468431658,213 +Linear,Logistic,observational,True,1,0.95,0.9530516431924883,0.32481169375566,0.06651898118558668,0.9436619718309859,0.3938902840125929,213 +Linear,Logistic,observational,True,4,0.9,0.19092331768388104,1.3586994912357533,1.029554721826275,0.1784037558685446,1.5283855406123952,213 +Linear,Logistic,observational,True,4,0.95,0.2863849765258216,1.6189903010218047,1.029554721826275,0.26291079812206575,1.7818990446425318,213 +Linear,Logistic,observational,True,6,0.9,0.895148669796557,1.0131038455549137,0.24852464288526532,0.8967136150234741,1.1643867720039867,213 +Linear,Logistic,observational,True,6,0.95,0.9530516431924883,1.2071876897440446,0.24852464288526532,0.9530516431924883,1.3557343370847632,213 diff --git a/results/did/did_pa_multi_config.yml b/results/did/did_pa_multi_config.yml index fa87158..ed4e23a 100644 --- a/results/did/did_pa_multi_config.yml +++ b/results/did/did_pa_multi_config.yml @@ -1,7 +1,8 @@ -confidence_parameters: - level: - - 0.95 - - 0.9 +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 dgp_parameters: DGP: - 1 @@ -9,115 +10,34 @@ dgp_parameters: - 6 n_obs: - 2000 -dml_parameters: - in_sample_normalization: - - true - - false - learners: - - ml_g: !!python/tuple - - Linear - - !!python/object:sklearn.linear_model._base.LinearRegression - _sklearn_version: 1.5.2 - copy_X: true - fit_intercept: true - n_jobs: null - positive: false - ml_m: !!python/tuple - - Linear - - !!python/object:sklearn.linear_model._logistic.LogisticRegression - C: 1.0 - _sklearn_version: 1.5.2 - class_weight: null - dual: false - fit_intercept: true - intercept_scaling: 1 - l1_ratio: null - max_iter: 100 - multi_class: deprecated - n_jobs: null - penalty: l2 - random_state: null - solver: lbfgs - tol: 0.0001 - verbose: 0 - warm_start: false - - ml_g: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMRegressor - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split - learning_rate: 0.02 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 +learner_definitions: + linear: &id001 + name: Linear + logistic: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 - ml_m: !!python/tuple - - LGBM - - !!python/object:lightgbm.sklearn.LGBMClassifier - _Booster: null - _best_iteration: -1 - _best_score: {} - _class_map: null - _class_weight: null - _classes: null - _evals_result: {} - _n_classes: -1 - _n_features: -1 - _n_features_in: -1 - _objective: null - _other_params: - verbose: -1 - boosting_type: gbdt - class_weight: null - colsample_bytree: 1.0 - importance_type: split learning_rate: 0.02 - max_depth: -1 - min_child_samples: 20 - min_child_weight: 0.001 - min_split_gain: 0.0 + lgbmc: &id004 + name: LGBM Clas. + params: n_estimators: 500 - n_jobs: 1 - num_leaves: 31 - objective: null - random_state: null - reg_alpha: 0.0 - reg_lambda: 0.0 - subsample: 1.0 - subsample_for_bin: 200000 - subsample_freq: 0 - verbose: -1 + learning_rate: 0.02 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 score: - observational - experimental -simulation_parameters: - max_runtime: 19800 - n_jobs: -2 - random_seed: 42 - repetitions: 1000 + in_sample_normalization: + - true + - false +confidence_parameters: + level: + - 0.95 + - 0.9 From b5fe71f9143e1deadbc24c1de09df7ea377cfe15 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 10:19:30 +0200 Subject: [PATCH 060/142] fix rdrobust for fuzzy sim --- monte-cover/src/montecover/rdd/rdd.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/monte-cover/src/montecover/rdd/rdd.py b/monte-cover/src/montecover/rdd/rdd.py index b01caa0..8c36d80 100644 --- a/monte-cover/src/montecover/rdd/rdd.py +++ b/monte-cover/src/montecover/rdd/rdd.py @@ -114,7 +114,11 @@ def _rdrobust_benchmark(self, dml_data, dml_params, i_rep): benchmark_results_list = [] for level in self.confidence_parameters["level"]: - rd_model = rdrobust(y=Y, x=score, covs=Z, c=self.cutoff, level=level * 100) + if self.fuzzy: + D = dml_data.data[dml_data.d_cols] + rd_model = rdrobust(y=Y, x=score, fuzzy=D, covs=Z, c=self.cutoff, level=level * 100) + else: + rd_model = rdrobust(y=Y, x=score, covs=Z, c=self.cutoff, level=level * 100) coef_rd = rd_model.coef.loc["Robust", "Coeff"] ci_lower_rd = rd_model.ci.loc["Robust", "CI Lower"] ci_upper_rd = rd_model.ci.loc["Robust", "CI Upper"] From eef4c78c7520370659eee35795ed51dc611575cc Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 10:19:58 +0200 Subject: [PATCH 061/142] update fuzzy config --- scripts/rdd/rdd_fuzzy_config.yml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/scripts/rdd/rdd_fuzzy_config.yml b/scripts/rdd/rdd_fuzzy_config.yml index 830515a..2e9cdc7 100644 --- a/scripts/rdd/rdd_fuzzy_config.yml +++ b/scripts/rdd/rdd_fuzzy_config.yml @@ -7,7 +7,7 @@ simulation_parameters: n_jobs: -2 dgp_parameters: - n_obs: [1000] # Sample size + n_obs: [2000] # Sample size fuzzy: [True] cutoff: [0.0] @@ -16,14 +16,16 @@ learner_definitions: lgbmr: &lgbmr name: "LGBM Regr." params: - n_estimators: 100 - learning_rate: 0.05 + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 lgbmc: &lgbmc name: "LGBM Clas." params: - n_estimators: 100 - learning_rate: 0.05 + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 global_linear: &global_linear name: "Global Linear" @@ -40,14 +42,16 @@ learner_definitions: stacked_reg: &stacked_reg name: "Stacked Regr." params: - n_estimators: 100 - learning_rate: 0.05 + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 stacked_cls: &stacked_cls name: "Stacked Clas." params: - n_estimators: 100 - learning_rate: 0.05 + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 dml_parameters: fs_specification: ["cutoff", "cutoff and score", "interacted cutoff and score"] From 888a88802750364683715c8daf95b331438ece8f Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 10:20:11 +0200 Subject: [PATCH 062/142] rerun fuzzy sim --- results/rdd/rdd_fuzzy_config.yml | 22 +++++++------ results/rdd/rdd_fuzzy_coverage.csv | 52 +++++++++++++++--------------- results/rdd/rdd_fuzzy_metadata.csv | 2 +- 3 files changed, 40 insertions(+), 36 deletions(-) diff --git a/results/rdd/rdd_fuzzy_config.yml b/results/rdd/rdd_fuzzy_config.yml index d8b09c0..1c010bd 100644 --- a/results/rdd/rdd_fuzzy_config.yml +++ b/results/rdd/rdd_fuzzy_config.yml @@ -5,7 +5,7 @@ simulation_parameters: n_jobs: -2 dgp_parameters: n_obs: - - 1000 + - 2000 fuzzy: - true cutoff: @@ -14,13 +14,15 @@ learner_definitions: lgbmr: &id001 name: LGBM Regr. params: - n_estimators: 100 - learning_rate: 0.05 + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 lgbmc: &id002 name: LGBM Clas. params: - n_estimators: 100 - learning_rate: 0.05 + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 global_linear: &id003 name: Global Linear global_logistic: &id004 @@ -32,13 +34,15 @@ learner_definitions: stacked_reg: &id007 name: Stacked Regr. params: - n_estimators: 100 - learning_rate: 0.05 + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 stacked_cls: &id008 name: Stacked Clas. params: - n_estimators: 100 - learning_rate: 0.05 + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 dml_parameters: fs_specification: - cutoff diff --git a/results/rdd/rdd_fuzzy_coverage.csv b/results/rdd/rdd_fuzzy_coverage.csv index 71a7b18..a9a6dea 100644 --- a/results/rdd/rdd_fuzzy_coverage.csv +++ b/results/rdd/rdd_fuzzy_coverage.csv @@ -1,27 +1,27 @@ Method,fs_specification,Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -RDFlex,cutoff,Global Linear,Global Logistic,0.9,0.9363333333333334,61.21542033320797,6.094527516865915,1000 -RDFlex,cutoff,Global Linear,Global Logistic,0.95,0.972,72.942672336101,6.094527516865915,1000 -RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.9,0.9513333333333334,8.933409181593555,1.5599808778760562,1000 -RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.95,0.9876666666666666,10.644813598115608,1.5599808778760562,1000 -RDFlex,cutoff,Linear,Logistic,0.9,0.939,34.93607282259327,5.6843493908942815,1000 -RDFlex,cutoff,Linear,Logistic,0.95,0.973,41.62889838438588,5.6843493908942815,1000 -RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.9,0.9503333333333334,6.7442427655640484,1.3456834189094324,1000 -RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.95,0.9853333333333334,8.036260921282771,1.3456834189094324,1000 -RDFlex,cutoff and score,Global Linear,Global Logistic,0.9,0.9346666666666666,4016.9877724310254,50.8166330459716,1000 -RDFlex,cutoff and score,Global Linear,Global Logistic,0.95,0.9713333333333334,4786.536158171398,50.8166330459716,1000 -RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.951,9.065887957351245,1.5153501497320774,1000 -RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9873333333333334,10.802671795919059,1.5153501497320774,1000 -RDFlex,cutoff and score,Linear,Logistic,0.9,0.94,335.8084886364535,7.708410484814828,1000 -RDFlex,cutoff and score,Linear,Logistic,0.95,0.9746666666666667,400.1404943551824,7.708410484814828,1000 -RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.9496666666666667,7.718643198281012,1.36917558119484,1000 -RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.9866666666666666,9.1973306501346,1.36917558119484,1000 -RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.9,0.939,49.6899424879847,5.516111563740509,1000 -RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.95,0.9723333333333334,59.20921842195623,5.516111563740509,1000 -RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.949,8.869451650244981,1.5644296749591,1000 -RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9866666666666666,10.568603498974065,1.5644296749591,1000 -RDFlex,interacted cutoff and score,Linear,Logistic,0.9,0.939,165.6185238963947,6.482221436992595,1000 -RDFlex,interacted cutoff and score,Linear,Logistic,0.95,0.9733333333333334,197.34664330663676,6.482221436992595,1000 -RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.953,12.965304115439578,1.8427674267462426,1000 -RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.9833333333333334,15.449112734710363,1.8427674267462426,1000 -rdrobust,cutoff,Linear,Logistic,0.9,0.66,2.2540261137473974,0.9256316634723921,1000 -rdrobust,cutoff,Linear,Logistic,0.95,0.768,2.685837773507866,0.9256316634723921,1000 +RDFlex,cutoff,Global Linear,Global Logistic,0.9,0.8943333333333334,9.45138989718295,2.373538922365825,1000 +RDFlex,cutoff,Global Linear,Global Logistic,0.95,0.9466666666666667,11.26202568957878,2.373538922365825,1000 +RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.9,0.9106666666666666,2.098970644289801,0.5229709395139468,1000 +RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.95,0.9606666666666667,2.5010777858935986,0.5229709395139468,1000 +RDFlex,cutoff,Linear,Logistic,0.9,0.898,9.475050602811462,2.38122109508206,1000 +RDFlex,cutoff,Linear,Logistic,0.95,0.9516666666666667,11.290219159271665,2.38122109508206,1000 +RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.9,0.9143333333333333,2.006664818935384,0.4926541115149405,1000 +RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.95,0.9643333333333334,2.3910886109946707,0.4926541115149405,1000 +RDFlex,cutoff and score,Global Linear,Global Logistic,0.9,0.896,9.45192675987028,2.3708700911814633,1000 +RDFlex,cutoff and score,Global Linear,Global Logistic,0.95,0.9483333333333334,11.262665400927295,2.3708700911814633,1000 +RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.9206666666666666,2.137979587602868,0.5310240118035273,1000 +RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9706666666666667,2.547559808801788,0.5310240118035273,1000 +RDFlex,cutoff and score,Linear,Logistic,0.9,0.8993333333333333,9.431787596286874,2.370891486466498,1000 +RDFlex,cutoff and score,Linear,Logistic,0.95,0.9506666666666667,11.238668107395837,2.370891486466498,1000 +RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.9206666666666666,2.021432595475123,0.4848163059226252,1000 +RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.968,2.408685502095107,0.4848163059226252,1000 +RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.9,0.8986666666666666,9.417430458001911,2.3532260082168035,1000 +RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.95,0.9506666666666667,11.221560521955702,2.3532260082168035,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.9203333333333333,2.1443333037007934,0.5343555930536144,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9696666666666667,2.555130728496937,0.5343555930536144,1000 +RDFlex,interacted cutoff and score,Linear,Logistic,0.9,0.8983333333333333,9.463034507707663,2.36467701566644,1000 +RDFlex,interacted cutoff and score,Linear,Logistic,0.95,0.9486666666666667,11.275901098836155,2.36467701566644,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.9233333333333333,2.0607292105190114,0.5038394189514153,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.9763333333333334,2.455510307012918,0.5038394189514153,1000 +rdrobust,cutoff,Linear,Logistic,0.9,0.925,10.188022696252679,2.4726265121800406,1000 +rdrobust,cutoff,Linear,Logistic,0.95,0.97,12.13977780827851,2.4726265121800406,1000 diff --git a/results/rdd/rdd_fuzzy_metadata.csv b/results/rdd/rdd_fuzzy_metadata.csv index 1bee153..0c28df1 100644 --- a/results/rdd/rdd_fuzzy_metadata.csv +++ b/results/rdd/rdd_fuzzy_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,RDDCoverageSimulation,2025-06-02 14:19,128.11025975545246,3.12.3,scripts/rdd/rdd_fuzzy_config.yml +0.10.0,RDDCoverageSimulation,2025-06-03 10:17,24.518820464611053,3.12.9,scripts/rdd/rdd_fuzzy_config.yml From aed57136c69548786ed4a5222d92ab3745bae4f6 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 10:20:17 +0200 Subject: [PATCH 063/142] rerun did sim --- results/did/did_multi_detailed.csv | 96 ++++++++++++++-------------- results/did/did_multi_eventstudy.csv | 96 ++++++++++++++-------------- results/did/did_multi_group.csv | 96 ++++++++++++++-------------- results/did/did_multi_metadata.csv | 2 +- results/did/did_multi_time.csv | 96 ++++++++++++++-------------- 5 files changed, 193 insertions(+), 193 deletions(-) diff --git a/results/did/did_multi_detailed.csv b/results/did/did_multi_detailed.csv index 0792d64..ab7ab8b 100644 --- a/results/did/did_multi_detailed.csv +++ b/results/did/did_multi_detailed.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.4084507042253521,0.6612522092326544,0.44973970228836385,0.10328638497652583,0.9935059914244001,213 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.49178403755868544,0.787930605834864,0.44973970228836385,0.1596244131455399,1.1014902175259917,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.5336463223787168,0.582766759983815,0.32299857116015934,0.18309859154929578,0.8961664076512703,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.6263693270735524,0.694409424790157,0.32299857116015934,0.28169014084507044,0.9867179947950292,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9017996870109547,0.578959671088662,0.13751972629200543,0.8732394366197183,0.8919682440411882,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9491392801251956,0.6898729985707177,0.13751972629200543,0.9342723004694836,0.9817237170113741,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.4107981220657277,0.6610990972056453,0.4476286561990305,0.107981220657277,0.9924537064343187,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.5050860719874805,0.7877481616017598,0.4476286561990305,0.1643192488262911,1.099584135360425,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.5348200312989045,0.5827020149697208,0.32210086748537925,0.20187793427230047,0.8980725212627803,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.6255868544600939,0.6943322763474483,0.32210086748537925,0.29577464788732394,0.9881288275749126,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9021909233176838,0.5789579680053694,0.13548606467162275,0.892018779342723,0.8906297555939263,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9518779342723005,0.6898709692218071,0.13548606467162275,0.9389671361502347,0.9807905334864873,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9197965571205008,2.6943514650786105,0.6839666644937138,0.9765258215962441,4.190030688848515,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9655712050078247,3.210517791199548,0.6839666644937138,0.9859154929577465,4.601967336099581,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9194053208137716,3.4922540819240244,0.9237972600914225,0.9812206572769953,5.388123646746446,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9698748043818467,4.16127740078602,0.9237972600914225,1.0,5.930060622023973,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9354460093896714,2.1911606588763415,0.5011619074030041,0.9624413145539906,3.4237130298632317,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.969092331768388,2.6109289637511237,0.5011619074030041,0.9953051643192489,3.7555769901088496,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9139280125195618,1.109267010415937,0.2755940893225088,0.8685446009389671,1.7291751019525257,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.954225352112676,1.321773168159112,0.2755940893225088,0.9342723004694836,1.8979923185233545,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9205790297339593,1.4158326633799614,0.33401929336661684,0.9107981220657277,2.1920950306133054,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9616588419405321,1.6870686746170975,0.33401929336661684,0.9389671361502347,2.408946885913222,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9123630672926448,1.0199912152288533,0.24510901682198524,0.9248826291079812,1.5958111429274424,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9561815336463223,1.2153944968957262,0.24510901682198524,0.971830985915493,1.7484330943458928,213 -Linear,Logistic,experimental,False,1,0.9,0.8450704225352113,0.29447476044239895,0.08354776001109418,0.7276995305164319,0.4596087013280646,213 -Linear,Logistic,experimental,False,1,0.95,0.9084507042253521,0.35088831940192455,0.08354776001109418,0.8075117370892019,0.5045368833572496,213 -Linear,Logistic,experimental,False,4,0.9,0.3341158059467919,0.9748301672712222,0.7902188560164397,0.056338028169014086,1.4111319523263854,213 -Linear,Logistic,experimental,False,4,0.95,0.4017996870109546,1.1615817891564408,0.7902188560164397,0.07042253521126761,1.5730924328858458,213 -Linear,Logistic,experimental,False,6,0.9,0.9080594679186228,0.9825593405176763,0.23361443805782198,0.9154929577464789,1.4168592399518378,213 -Linear,Logistic,experimental,False,6,0.95,0.956964006259781,1.1707916671328766,0.23361443805782198,0.9483568075117371,1.5807909190964573,213 -Linear,Logistic,experimental,True,1,0.9,0.8438967136150235,0.29448998280268696,0.08353477895677355,0.7183098591549296,0.45943729886831725,213 -Linear,Logistic,experimental,True,1,0.95,0.9088419405320814,0.35090645796297054,0.08353477895677355,0.812206572769953,0.5041114400484898,213 -Linear,Logistic,experimental,True,4,0.9,0.3333333333333333,0.9747975428898821,0.7903965236641811,0.056338028169014086,1.4119051235101507,213 -Linear,Logistic,experimental,True,4,0.95,0.4033646322378717,1.161542914808355,0.7903965236641811,0.07981220657276995,1.5743781294233699,213 -Linear,Logistic,experimental,True,6,0.9,0.9092331768388106,0.9825623304514758,0.2341476257220959,0.92018779342723,1.41979846440565,213 -Linear,Logistic,experimental,True,6,0.95,0.9553990610328639,1.1707952298587427,0.2341476257220959,0.9530516431924883,1.5817945290736959,213 -Linear,Logistic,observational,False,1,0.9,0.894757433489828,0.3183557829503854,0.07809759992541833,0.892018779342723,0.49488785729946616,213 -Linear,Logistic,observational,False,1,0.95,0.9483568075117371,0.3793443128488264,0.07809759992541833,0.9436619718309859,0.5435074166885125,213 -Linear,Logistic,observational,False,4,0.9,0.44405320813771515,1.2415493083413676,0.7711800746228612,0.19718309859154928,1.774858650110625,213 -Linear,Logistic,observational,False,4,0.95,0.5453834115805947,1.4793972481853468,0.7711800746228612,0.2676056338028169,1.9858757227772874,213 -Linear,Logistic,observational,False,6,0.9,0.9115805946791862,1.0304949773365348,0.24398615030125753,0.92018779342723,1.4858759045886074,213 -Linear,Logistic,observational,False,6,0.95,0.9557902973395932,1.2279105014178964,0.24398615030125753,0.9577464788732394,1.6602060040028728,213 -Linear,Logistic,observational,True,1,0.9,0.892018779342723,0.3163792430260323,0.07808090534806102,0.8873239436619719,0.4927677081751961,213 -Linear,Logistic,observational,True,1,0.95,0.9464006259780908,0.37698912026374665,0.07808090534806102,0.9530516431924883,0.5411219121582408,213 -Linear,Logistic,observational,True,4,0.9,0.4409233176838811,1.2414842562609323,0.7671739690013839,0.19718309859154928,1.7725218888802696,213 -Linear,Logistic,observational,True,4,0.95,0.5410798122065728,1.4793197338505248,0.7671739690013839,0.28169014084507044,1.9817316211484592,213 -Linear,Logistic,observational,True,6,0.9,0.9061032863849765,1.027459591935346,0.24734972591149948,0.9154929577464789,1.4817614944804902,213 -Linear,Logistic,observational,True,6,0.95,0.9546165884194053,1.2242936166276337,0.24734972591149948,0.9436619718309859,1.6552966469110102,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.4005833333333333,0.668417462452362,0.4514209317520677,0.069,1.001536224942987,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.49541666666666667,0.7964685316542967,0.4514209317520677,0.119,1.1096223780406622,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.525,0.5836476641555988,0.3357039587486384,0.192,0.8984549944516823,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.6135,0.6954590868526271,0.3357039587486384,0.266,0.9889489428407441,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8913333333333334,0.5798205422267835,0.1436401623087172,0.896,0.8921080477762784,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9469166666666666,0.6908987898012575,0.1436401623087172,0.95,0.9823087136174479,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.403,0.668486737121192,0.4516172220554326,0.064,1.0020517044274269,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4925,0.7965510775135288,0.4516172220554326,0.118,1.110697612751064,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.5244166666666666,0.5834979623893575,0.33563072303718966,0.202,0.8980797806262651,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.6114166666666666,0.6952807061958639,0.33563072303718966,0.275,0.9886661012047989,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8903333333333334,0.5798432460053057,0.1452858251598464,0.888,0.8930518639150258,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9449166666666666,0.690925843021974,0.1452858251598464,0.942,0.9832578157026843,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9115,2.7279550989921355,0.7081663387461643,0.951,4.239219420515267,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9635833333333333,3.250558990696578,0.7081663387461643,0.988,4.6533388042213675,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9074166666666666,3.5225937797559883,0.9757809691235549,0.97,5.426540882685481,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9669166666666666,4.19742938055986,0.9757809691235549,0.992,5.969933156329405,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9271666666666666,2.1769181957500305,0.5048068220768145,0.971,3.397149166606052,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9709166666666667,2.5939580221905385,0.5048068220768145,0.996,3.7281189530691132,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.90375,1.1192914856600868,0.27862527337620824,0.928,1.7467988922140234,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9589166666666666,1.3337180671583386,0.27862527337620824,0.967,1.914692647031146,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9199166666666666,1.4197310386522546,0.32827809352307774,0.935,2.19395277603094,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9664166666666666,1.6917138752639644,0.32827809352307774,0.968,2.4119391624873256,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9005,1.0294284373000027,0.2502841114417097,0.917,1.6092703629556147,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9533333333333334,1.226639640579326,0.2502841114417097,0.971,1.7641639749309233,1000 +Linear,Logistic,experimental,False,1,0.9,0.8521666666666666,0.2947207725579002,0.08125759297583215,0.769,0.45936907943411753,1000 +Linear,Logistic,experimental,False,1,0.95,0.91225,0.3511814609181314,0.08125759297583215,0.857,0.5043035205016457,1000 +Linear,Logistic,experimental,False,4,0.9,0.3186666666666667,0.9766434317991218,0.8093782242316307,0.041,1.4141166689592581,1000 +Linear,Logistic,experimental,False,4,0.95,0.393,1.1637424271067696,0.8093782242316307,0.079,1.5775150069804904,1000 +Linear,Logistic,experimental,False,6,0.9,0.8959166666666666,0.9840677614600047,0.24403762906388674,0.889,1.4217412744627138,1000 +Linear,Logistic,experimental,False,6,0.95,0.9463333333333334,1.1725890615466086,0.24403762906388674,0.94,1.585826837431638,1000 +Linear,Logistic,experimental,True,1,0.9,0.8528333333333333,0.29471605836940884,0.08132561217659459,0.764,0.45923649733243366,1000 +Linear,Logistic,experimental,True,1,0.95,0.9120833333333334,0.351175843616076,0.08132561217659459,0.855,0.5041154397102058,1000 +Linear,Logistic,experimental,True,4,0.9,0.3188333333333333,0.9765337199818319,0.8092231167974461,0.041,1.4131241013020541,1000 +Linear,Logistic,experimental,True,4,0.95,0.39458333333333334,1.1636116974132316,0.8092231167974461,0.076,1.5757045631534141,1000 +Linear,Logistic,experimental,True,6,0.9,0.8968333333333334,0.984151005519869,0.24420883449452355,0.889,1.4208221899399172,1000 +Linear,Logistic,experimental,True,6,0.95,0.94675,1.1726882529619342,0.24420883449452355,0.936,1.5847814464063683,1000 +Linear,Logistic,observational,False,1,0.9,0.9001666666666667,0.3180779030235929,0.0773596882018309,0.88,0.49501077303673774,1000 +Linear,Logistic,observational,False,1,0.95,0.94775,0.3790131984933507,0.0773596882018309,0.947,0.5435398448787098,1000 +Linear,Logistic,observational,False,4,0.9,0.4245,1.237493689045589,0.7914353096522312,0.18,1.76761883251908,1000 +Linear,Logistic,observational,False,4,0.95,0.5209166666666666,1.4745646797278944,0.7914353096522312,0.275,1.9755226904473104,1000 +Linear,Logistic,observational,False,6,0.9,0.8929166666666666,1.0255283640310429,0.255700122939389,0.895,1.4816116459637685,1000 +Linear,Logistic,observational,False,6,0.95,0.9455,1.221992416644637,0.255700122939389,0.934,1.653527148130022,1000 +Linear,Logistic,observational,True,1,0.9,0.8965,0.31619901580629955,0.07736324119662329,0.885,0.49203725267016324,1000 +Linear,Logistic,observational,True,1,0.95,0.9463333333333334,0.3767743662856892,0.07736324119662329,0.947,0.5403636983384068,1000 +Linear,Logistic,observational,True,4,0.9,0.4231666666666667,1.2357474079437374,0.7915034422252056,0.193,1.7654458413619594,1000 +Linear,Logistic,observational,True,4,0.95,0.5213333333333334,1.472483857452629,0.7915034422252056,0.277,1.9735390159048785,1000 +Linear,Logistic,observational,True,6,0.9,0.8928333333333334,1.0212995120870143,0.25694449841811784,0.89,1.4744168456619084,1000 +Linear,Logistic,observational,True,6,0.95,0.9460833333333334,1.216953428755113,0.25694449841811784,0.933,1.6462184670600197,1000 diff --git a/results/did/did_multi_eventstudy.csv b/results/did/did_multi_eventstudy.csv index 2498639..1c294b6 100644 --- a/results/did/did_multi_eventstudy.csv +++ b/results/did/did_multi_eventstudy.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.2793427230046948,0.6538940149561205,0.5211711102717896,0.06103286384976526,0.86055821069107,213 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.3528951486697966,0.7791627765660771,0.5211711102717896,0.1267605633802817,0.9765429620402541,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.39358372456964,0.541925194741234,0.3658723164598346,0.14084507042253522,0.7380373644216336,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4694835680751174,0.6457436981649495,0.3658723164598346,0.30985915492957744,0.8302776266426216,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9014084507042254,0.5382900596052185,0.12834769643838123,0.9014084507042254,0.7329552647921785,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9499217527386542,0.6414121674872129,0.12834769643838123,0.9530516431924883,0.8240621744454719,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.2902973395931142,0.653663670745508,0.5177678460962447,0.07511737089201878,0.8606157129718126,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.36932707355242567,0.7788883045100532,0.5177678460962447,0.14084507042253522,0.978192241517096,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3763693270735525,0.5420271299376794,0.36469586751312316,0.18779342723004694,0.7374141258484136,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4647887323943662,0.645865161443211,0.36469586751312316,0.27230046948356806,0.8307165715799049,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9194053208137716,0.5383523983929166,0.12524713080884226,0.9248826291079812,0.7331206282884405,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9483568075117371,0.6414864487343258,0.12524713080884226,0.9389671361502347,0.8244543573667497,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9131455399061033,2.635762776399446,0.6863198917243725,0.9389671361502347,3.6611895504458305,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9608763693270735,3.1407050626801003,0.6863198917243725,0.9812206572769953,4.095116662293061,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9107981220657277,3.5476693552380327,0.9618718220501209,0.9577464788732394,4.871536434987288,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9733959311424101,4.227308771668667,0.9618718220501209,0.9765258215962441,5.471362486927891,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.94679186228482,2.048525808104845,0.4424199042553949,0.9530516431924883,2.8547596856961075,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9780907668231612,2.4409690561510136,0.4424199042553949,0.9859154929577465,3.191610282696814,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9178403755868545,1.0506825752853373,0.25838130000929665,0.9248826291079812,1.4648011676731838,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9624413145539906,1.2519655080553924,0.25838130000929665,0.9577464788732394,1.6360312921813787,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9225352112676056,1.3999042833283855,0.32349351954396005,0.9248826291079812,1.9287116595218243,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9679186228482003,1.6680888391340973,0.32349351954396005,0.9624413145539906,2.1548062661512533,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9194053208137716,0.941095371039425,0.21448858413067756,0.9530516431924883,1.3188087131097894,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9710485133020345,1.1213843001174537,0.21448858413067756,0.9812206572769953,1.4720050449124056,213 -Linear,Logistic,experimental,False,1,0.9,0.8176838810641627,0.2097616817290772,0.06354647829956948,0.7511737089201878,0.29957865791433536,213 -Linear,Logistic,experimental,False,1,0.95,0.888888888888889,0.24994646015251432,0.06354647829956948,0.8356807511737089,0.3324902033558004,213 -Linear,Logistic,experimental,False,4,0.9,0.20735524256651017,0.9731315969907915,0.9247823933778377,0.051643192488262914,1.2553334876224438,213 -Linear,Logistic,experimental,False,4,0.95,0.26682316118935834,1.1595578178313908,0.9247823933778377,0.06572769953051644,1.427245013596636,213 -Linear,Logistic,experimental,False,6,0.9,0.9162754303599373,0.982583831624362,0.2340222441493123,0.9107981220657277,1.2642250097051084,213 -Linear,Logistic,experimental,False,6,0.95,0.9538341158059468,1.1708208500864592,0.2340222441493123,0.9436619718309859,1.440074754119655,213 -Linear,Logistic,experimental,True,1,0.9,0.8184663536776213,0.209784288558112,0.06346289348873158,0.7511737089201878,0.2994094620604152,213 -Linear,Logistic,experimental,True,1,0.95,0.8896713615023474,0.24997339785079145,0.06346289348873158,0.8497652582159625,0.33304580863290817,213 -Linear,Logistic,experimental,True,4,0.9,0.21048513302034427,0.9730155853528542,0.9248338055294343,0.051643192488262914,1.2540423515599672,213 -Linear,Logistic,experimental,True,4,0.95,0.2699530516431925,1.1594195814385477,0.9248338055294343,0.07042253521126761,1.4266453422038732,213 -Linear,Logistic,experimental,True,6,0.9,0.9139280125195618,0.9825202138375453,0.23446937547502114,0.9061032863849765,1.2635545418793521,213 -Linear,Logistic,experimental,True,6,0.95,0.9522691705790298,1.1707450448178967,0.23446937547502114,0.9389671361502347,1.4364612584863943,213 -Linear,Logistic,observational,False,1,0.9,0.9100156494522692,0.2256652512730398,0.05275781831070359,0.9248826291079812,0.3210767224862521,213 -Linear,Logistic,observational,False,1,0.95,0.960093896713615,0.26889673209225234,0.05275781831070359,0.9483568075117371,0.357572619911957,213 -Linear,Logistic,observational,False,4,0.9,0.3325508607198748,1.2935393301274787,0.9012986658762238,0.20187793427230047,1.6449223740918557,213 -Linear,Logistic,observational,False,4,0.95,0.4460093896713615,1.5413471801346634,0.9012986658762238,0.2863849765258216,1.8802622354415948,213 -Linear,Logistic,observational,False,6,0.9,0.9123630672926448,1.0362716142235429,0.2466341904936733,0.9248826291079812,1.328413177022464,213 -Linear,Logistic,observational,False,6,0.95,0.960093896713615,1.2347937888209737,0.2466341904936733,0.9483568075117371,1.5124625048982703,213 -Linear,Logistic,observational,True,1,0.9,0.906885758998435,0.22449816162535258,0.05285134622236858,0.9107981220657277,0.32006341717518294,213 -Linear,Logistic,observational,True,1,0.95,0.9561815336463223,0.267506059002127,0.05285134622236858,0.9483568075117371,0.355619479598059,213 -Linear,Logistic,observational,True,4,0.9,0.3380281690140845,1.2948063187256469,0.8972215616534344,0.1784037558685446,1.6460425935700733,213 -Linear,Logistic,observational,True,4,0.95,0.430359937402191,1.5428568901663307,0.8972215616534344,0.3051643192488263,1.8803448054869478,213 -Linear,Logistic,observational,True,6,0.9,0.9123630672926448,1.0324801100143304,0.2506321361153765,0.9014084507042254,1.3236751031745002,213 -Linear,Logistic,observational,True,6,0.95,0.9499217527386542,1.2302759329002244,0.2506321361153765,0.9530516431924883,1.510018818061999,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.26816666666666666,0.6628004801492844,0.5217146610039974,0.063,0.8710835347098573,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.356,0.7897754844217385,0.5217146610039974,0.106,0.9881445074099509,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.3793333333333333,0.5430545733393948,0.3833854158756925,0.176,0.73981228970138,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4698333333333333,0.6470894357680017,0.3833854158756925,0.246,0.833246241332189,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8915,0.5395169482604701,0.13534305762469595,0.897,0.7348860485385167,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9451666666666666,0.6428740954897616,0.13534305762469595,0.953,0.8259292882870245,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.265,0.6629226425912405,0.5221091420199984,0.062,0.8722109625410929,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.3551666666666667,0.7899210499496214,0.5221091420199984,0.114,0.9882984410974919,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3763333333333333,0.5429965130173356,0.3828566010032573,0.182,0.739132671094994,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4711666666666667,0.6470202526271421,0.3828566010032573,0.262,0.8314461004262811,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8931666666666667,0.5395318624534728,0.13758915825744059,0.893,0.7341757740643098,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9463333333333334,0.6428918668468384,0.13758915825744059,0.946,0.8261153685402325,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.907,2.635755403048029,0.6906219348022667,0.931,3.658094889963508,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9618333333333333,3.140696276789984,0.6906219348022667,0.969,4.09528459799626,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8978333333333334,3.5932112684720123,1.044176882449884,0.953,4.920160668033086,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9656666666666667,4.2815753083763015,1.044176882449884,0.982,5.521039436439466,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9356666666666666,2.037043783641883,0.45673572364777687,0.967,2.8380713672583395,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9768333333333333,2.4272873801354264,0.45673572364777687,0.99,3.173284984968741,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9186666666666666,1.058073826869023,0.2586744612407186,0.924,1.4747488796573536,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9613333333333334,1.2607727275351879,0.2586744612407186,0.965,1.649868845892826,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9368333333333334,1.4039435411486991,0.3103897362727539,0.943,1.9287327010063178,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9718333333333333,1.6729019116910515,0.3103897362727539,0.973,2.1651520912520748,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9153333333333333,0.9537908163093017,0.2248364423186676,0.927,1.3333350854360233,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9601666666666666,1.1365118562044807,0.2248364423186676,0.974,1.4916507037488054,1000 +Linear,Logistic,experimental,False,1,0.9,0.8085,0.21012919637470698,0.06454170881550668,0.737,0.3000298498259047,1000 +Linear,Logistic,experimental,False,1,0.95,0.8826666666666666,0.2503843808631616,0.06454170881550668,0.83,0.33342829695147896,1000 +Linear,Logistic,experimental,False,4,0.9,0.20066666666666666,0.9748536890898165,0.9456802642466463,0.041,1.2574525229653895,1000 +Linear,Logistic,experimental,False,4,0.95,0.26666666666666666,1.161609817132025,0.9456802642466463,0.074,1.4305039091925136,1000 +Linear,Logistic,experimental,False,6,0.9,0.8906666666666666,0.984266405297522,0.2447629940182398,0.885,1.2654037292644829,1000 +Linear,Logistic,experimental,False,6,0.95,0.9428333333333334,1.1728257602782801,0.2447629940182398,0.939,1.4411880110797295,1000 +Linear,Logistic,experimental,True,1,0.9,0.8095,0.21012765534784542,0.0646279391502723,0.733,0.29993071695819135,1000 +Linear,Logistic,experimental,True,1,0.95,0.8823333333333334,0.25038254461639875,0.0646279391502723,0.831,0.3331089494375711,1000 +Linear,Logistic,experimental,True,4,0.9,0.201,0.9747048561891234,0.9456904408930068,0.042,1.2571661797897207,1000 +Linear,Logistic,experimental,True,4,0.95,0.26666666666666666,1.1614324717924194,0.9456904408930068,0.075,1.4292891253140116,1000 +Linear,Logistic,experimental,True,6,0.9,0.8928333333333334,0.9843540987911897,0.24472186099367751,0.882,1.2667938573542303,1000 +Linear,Logistic,experimental,True,6,0.95,0.942,1.1729302535209924,0.24472186099367751,0.938,1.4425417792737238,1000 +Linear,Logistic,observational,False,1,0.9,0.8958333333333334,0.22595429878581444,0.05556582705974583,0.883,0.32193445273348237,1000 +Linear,Logistic,observational,False,1,0.95,0.9468333333333334,0.26924115344718413,0.05556582705974583,0.944,0.35775078341337774,1000 +Linear,Logistic,observational,False,4,0.9,0.325,1.2886928093204373,0.9238068984287002,0.175,1.6397882387716314,1000 +Linear,Logistic,observational,False,4,0.95,0.41933333333333334,1.535572194399471,0.9238068984287002,0.26,1.8701388333818019,1000 +Linear,Logistic,observational,False,6,0.9,0.8893333333333334,1.0302622288172734,0.2580572852924157,0.882,1.322817867501306,1000 +Linear,Logistic,observational,False,6,0.95,0.9411666666666666,1.2276331644514131,0.2580572852924157,0.934,1.5071984875399793,1000 +Linear,Logistic,observational,True,1,0.9,0.8921666666666667,0.22482298708967266,0.0554326928262382,0.882,0.3206665757666365,1000 +Linear,Logistic,observational,True,1,0.95,0.9446666666666667,0.2678931124158151,0.0554326928262382,0.941,0.3562766006057057,1000 +Linear,Logistic,observational,True,4,0.9,0.3243333333333333,1.2866810812005252,0.9246774960344024,0.177,1.6374108099983478,1000 +Linear,Logistic,observational,True,4,0.95,0.41833333333333333,1.5331750724932363,0.9246774960344024,0.258,1.869004453360348,1000 +Linear,Logistic,observational,True,6,0.9,0.8853333333333334,1.0254952185219397,0.25982703889124587,0.889,1.318157054156258,1000 +Linear,Logistic,observational,True,6,0.95,0.9436666666666667,1.2219529213345213,0.25982703889124587,0.94,1.502504660229367,1000 diff --git a/results/did/did_multi_group.csv b/results/did/did_multi_group.csv index de75e59..e3035bc 100644 --- a/results/did/did_multi_group.csv +++ b/results/did/did_multi_group.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.38341158059467917,0.7010247560032261,0.5045579001393814,0.06572769953051644,0.8747944725382377,213 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.44913928012519555,0.8353225183834784,0.5045579001393814,0.13145539906103287,0.9956978967225759,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.514866979655712,0.6082806742773996,0.35754266882547,0.18309859154929578,0.7739715228608116,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.5884194053208137,0.7248111288084945,0.35754266882547,0.29107981220657275,0.878325999451341,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9045383411580594,0.6032942628400023,0.1416087698948157,0.9061032863849765,0.7672596153857486,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9577464788732394,0.7188694531060122,0.1416087698948157,0.9483568075117371,0.8700719219107395,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.38028169014084506,0.7006624811428777,0.5027623497763666,0.08450704225352113,0.8749076136062413,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.45383411580594674,0.8348908412620905,0.5027623497763666,0.14084507042253522,0.9960800157981575,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.49765258215962443,0.6078684171461785,0.3564700998360187,0.1784037558685446,0.7724813665598308,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.5915492957746479,0.7243198941379295,0.3564700998360187,0.28169014084507044,0.8768342044058519,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9092331768388106,0.6035874382384104,0.13992167424040736,0.9295774647887324,0.7668293165413835,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9577464788732394,0.7192187931400541,0.13992167424040736,0.9483568075117371,0.8695905007790928,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9233176838810642,2.6401625405977405,0.6680316774131236,0.9530516431924883,3.348805972231518,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9687010954616588,3.1459477050817273,0.6680316774131236,0.9812206572769953,3.791143326987578,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9123630672926448,3.4982482043306202,0.9449299713795152,0.9248826291079812,4.416321409189137,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9577464788732394,4.1684198381697195,0.9449299713795152,0.9812206572769953,5.007980964364257,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9389671361502347,2.1556775041672305,0.46296654578958996,0.9483568075117371,2.739619518142511,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9733959311424101,2.568648177091331,0.46296654578958996,0.9906103286384976,3.1020251380422854,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9264475743348983,1.0864056229119294,0.2572919037765861,0.9389671361502347,1.3803957820627104,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9624413145539906,1.2945321447572218,0.2572919037765861,0.9624413145539906,1.5630008344403068,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9405320813771518,1.4335989322710556,0.318773509562249,0.9577464788732394,1.8127247140484581,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9765258215962441,1.7082384897274767,0.318773509562249,0.9859154929577465,2.0590624139128217,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.917057902973396,1.015686570779001,0.23606871293652523,0.9483568075117371,1.2952585886030479,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9640062597809077,1.2102651966651654,0.23606871293652523,0.9812206572769953,1.4663039002495655,213 -Linear,Logistic,experimental,False,1,0.9,0.8169014084507042,0.263859732601683,0.08071876563864448,0.7746478873239436,0.33907438784389654,213 -Linear,Logistic,experimental,False,1,0.95,0.895148669796557,0.31440826368735936,0.08071876563864448,0.8544600938967136,0.38284950361525444,213 -Linear,Logistic,experimental,False,4,0.9,0.3302034428794992,1.077782919659112,0.8937614998777182,0.051643192488262914,1.3561544020534126,213 -Linear,Logistic,experimental,False,4,0.95,0.39749608763693267,1.2842575601084827,0.8937614998777182,0.07511737089201878,1.5423676656010097,213 -Linear,Logistic,experimental,False,6,0.9,0.9092331768388106,1.084908190453934,0.25576007865798384,0.9295774647887324,1.365127434841,213 -Linear,Logistic,experimental,False,6,0.95,0.9593114241001566,1.2927478439301676,0.25576007865798384,0.9577464788732394,1.55476043284721,213 -Linear,Logistic,experimental,True,1,0.9,0.8106416275430359,0.26388645094216934,0.08082008766978688,0.7793427230046949,0.33860699865003,213 -Linear,Logistic,experimental,True,1,0.95,0.8982785602503913,0.31444010055370525,0.08082008766978688,0.8544600938967136,0.38363187019926315,213 -Linear,Logistic,experimental,True,4,0.9,0.32707355242566505,1.0776870925219295,0.8937933391766094,0.051643192488262914,1.3587107289972284,213 -Linear,Logistic,experimental,True,4,0.95,0.40219092331768386,1.284143375031743,0.8937933391766094,0.07981220657276995,1.5423186997471712,213 -Linear,Logistic,experimental,True,6,0.9,0.9123630672926448,1.0847636730976646,0.25673459846880975,0.9295774647887324,1.3684316527340743,213 -Linear,Logistic,experimental,True,6,0.95,0.9530516431924883,1.2925756408789129,0.25673459846880975,0.9530516431924883,1.552030854337275,213 -Linear,Logistic,observational,False,1,0.9,0.895148669796557,0.2840761342590122,0.06969384593021301,0.9154929577464789,0.36506933928947094,213 -Linear,Logistic,observational,False,1,0.95,0.9577464788732394,0.3384975920604852,0.06969384593021301,0.9483568075117371,0.41184024131390085,213 -Linear,Logistic,observational,False,4,0.9,0.42879499217527384,1.3815569998881347,0.8834464565663525,0.19718309859154928,1.7278992279793388,213 -Linear,Logistic,observational,False,4,0.95,0.5226917057902973,1.646226702486907,0.8834464565663525,0.2863849765258216,1.9664187739003602,213 -Linear,Logistic,observational,False,6,0.9,0.9139280125195618,1.1353911192689263,0.2657678059270839,0.92018779342723,1.4244455772241778,213 -Linear,Logistic,observational,False,6,0.95,0.9593114241001566,1.3529019638410478,0.2657678059270839,0.9624413145539906,1.6176444941500485,213 -Linear,Logistic,observational,True,1,0.9,0.8826291079812206,0.2823311571824021,0.06993758010197051,0.9295774647887324,0.3628548286921628,213 -Linear,Logistic,observational,True,1,0.95,0.9561815336463223,0.33641832362713375,0.06993758010197051,0.9577464788732394,0.40938919268144514,213 -Linear,Logistic,observational,True,4,0.9,0.4194053208137715,1.3815154955504438,0.876582736122305,0.2112676056338028,1.7315155396141317,213 -Linear,Logistic,observational,True,4,0.95,0.5273865414710485,1.6461772470181997,0.876582736122305,0.3145539906103286,1.9679400718614783,213 -Linear,Logistic,observational,True,6,0.9,0.9076682316118936,1.1396624657364007,0.2717053464179361,0.9154929577464789,1.430838330810308,213 -Linear,Logistic,observational,True,6,0.95,0.9608763693270735,1.3579915870783799,0.2717053464179361,0.9577464788732394,1.6241526383361697,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.37966666666666665,0.7094842843054401,0.5063966456271116,0.07,0.8833695236671398,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.463,0.8454026680860791,0.5063966456271116,0.119,1.0075828733731322,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.48833333333333334,0.6093983296457081,0.3746967239327951,0.185,0.7748043075861907,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.5676666666666667,0.7261428973215824,0.3746967239327951,0.257,0.8788079154824321,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8953333333333334,0.6039293782365326,0.15156143782863715,0.905,0.7671387444581327,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9506666666666667,0.7196262397785951,0.15156143782863715,0.952,0.8709721345495236,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3783333333333333,0.7096389669594401,0.5063175240399332,0.066,0.8838830720898343,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4603333333333333,0.8455869838366757,0.5063175240399332,0.124,1.0089102464690358,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.48533333333333334,0.609259041148495,0.37470955013293855,0.19,0.7754703791594748,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.5703333333333332,0.7259769248401865,0.37470955013293855,0.27,0.8784156068436955,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8876666666666666,0.6038826619307712,0.15256760709225262,0.904,0.7681471625685046,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.948,0.7195705738668794,0.15256760709225262,0.954,0.8695993470187038,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.915,2.6608678733015485,0.688154090500346,0.931,3.366696329353361,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9656666666666667,3.1706196307305743,0.688154090500346,0.97,3.8192561069995286,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.903,3.556747699127985,0.9996416099478588,0.942,4.472327607652934,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.969,4.238126285623724,0.9996416099478588,0.984,5.088003820636524,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9373333333333334,2.1290784823926696,0.46227527065430596,0.956,2.703189636335836,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9743333333333334,2.5369534877597597,0.46227527065430596,0.991,3.0641146657072404,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.91,1.0977119557447321,0.2651109928804438,0.939,1.3939185973124866,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.968,1.3080044712830703,0.2651109928804438,0.981,1.580610122013623,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9316666666666666,1.4368875613066505,0.30987690101867293,0.952,1.8152404100048158,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.975,1.7121571329201994,0.30987690101867293,0.98,2.059654079760943,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.908,1.0154733246915484,0.23971463199529405,0.929,1.2938281773467855,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.96,1.210011098279508,0.23971463199529405,0.972,1.4652849487780493,1000 +Linear,Logistic,experimental,False,1,0.9,0.8176666666666667,0.2639777067863099,0.07735852107118578,0.764,0.3393389889591518,1000 +Linear,Logistic,experimental,False,1,0.95,0.891,0.3145488385988198,0.07735852107118578,0.839,0.3826999999595859,1000 +Linear,Logistic,experimental,False,4,0.9,0.31,1.0799528007716814,0.9173788544387992,0.045,1.361708244102074,1000 +Linear,Logistic,experimental,False,4,0.95,0.385,1.2868431329288754,0.9173788544387992,0.073,1.5474903461640912,1000 +Linear,Logistic,experimental,False,6,0.9,0.8963333333333334,1.0864824219772902,0.2703183844096557,0.893,1.3666259596934611,1000 +Linear,Logistic,experimental,False,6,0.95,0.949,1.2946236564879237,0.2703183844096557,0.943,1.5549441788053244,1000 +Linear,Logistic,experimental,True,1,0.9,0.8163333333333334,0.2639754882372008,0.07738204276505496,0.765,0.339331857870017,1000 +Linear,Logistic,experimental,True,1,0.95,0.8906666666666666,0.3145461950345047,0.07738204276505496,0.844,0.3833030006646118,1000 +Linear,Logistic,experimental,True,4,0.9,0.3103333333333333,1.0798559231989837,0.9168941023520879,0.046,1.3607552807065624,1000 +Linear,Logistic,experimental,True,4,0.95,0.3873333333333333,1.2867276961810175,0.9168941023520879,0.074,1.5475927725689025,1000 +Linear,Logistic,experimental,True,6,0.9,0.8986666666666666,1.0865640980568139,0.27054317418995893,0.896,1.3676856739628556,1000 +Linear,Logistic,experimental,True,6,0.95,0.95,1.2947209795394352,0.27054317418995893,0.941,1.5556519546992444,1000 +Linear,Logistic,observational,False,1,0.9,0.8956666666666666,0.28367316450513197,0.0700767685399924,0.903,0.3642537051104781,1000 +Linear,Logistic,observational,False,1,0.95,0.9523333333333334,0.3380174239825948,0.0700767685399924,0.948,0.4113211504413545,1000 +Linear,Logistic,observational,False,4,0.9,0.408,1.3776824648934105,0.9052340667640746,0.183,1.7236892476868426,1000 +Linear,Logistic,observational,False,4,0.95,0.5046666666666666,1.641609909282898,0.9052340667640746,0.277,1.964267689737536,1000 +Linear,Logistic,observational,False,6,0.9,0.8903333333333334,1.1309252917212975,0.282843171368907,0.89,1.4213783682706032,1000 +Linear,Logistic,observational,False,6,0.95,0.9493333333333334,1.3475806021033823,0.282843171368907,0.947,1.617450746310541,1000 +Linear,Logistic,observational,True,1,0.9,0.8876666666666666,0.28210363817731876,0.0702387016495634,0.9,0.36227342165859067,1000 +Linear,Logistic,observational,True,1,0.95,0.9513333333333334,0.3361472180111355,0.0702387016495634,0.945,0.40929779552981904,1000 +Linear,Logistic,observational,True,4,0.9,0.4043333333333333,1.3755156336478902,0.904918936330756,0.185,1.7226484388527301,1000 +Linear,Logistic,observational,True,4,0.95,0.497,1.6390279706032433,0.904918936330756,0.286,1.9605550323619565,1000 +Linear,Logistic,observational,True,6,0.9,0.892,1.125633507574361,0.2835718025458131,0.899,1.414839244504656,1000 +Linear,Logistic,observational,True,6,0.95,0.9473333333333334,1.341275052374208,0.2835718025458131,0.949,1.6097715181154,1000 diff --git a/results/did/did_multi_metadata.csv b/results/did/did_multi_metadata.csv index 67772b0..86381a7 100644 --- a/results/did/did_multi_metadata.csv +++ b/results/did/did_multi_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,DIDMultiCoverageSimulation,2025-06-02 17:51,339.9238995909691,3.12.3,scripts/did/did_pa_multi_config.yml +0.10.0,DIDMultiCoverageSimulation,2025-06-03 09:09,162.553562772274,3.12.9,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_time.csv b/results/did/did_multi_time.csv index 8a5c303..3dda54d 100644 --- a/results/did/did_multi_time.csv +++ b/results/did/did_multi_time.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.10485133020344288,0.6641311784095322,0.5823494355664303,0.08450704225352113,0.7881878804378276,213 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.17683881064162754,0.7913611091980961,0.5823494355664303,0.12206572769953052,0.9120924244627483,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.2222222222222222,0.5457603564040948,0.40420421511646165,0.15023474178403756,0.6619778117977112,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.34585289514866974,0.6503135751503121,0.40420421511646165,0.23943661971830985,0.7592098705244504,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9107981220657277,0.5381868903349744,0.12772384273949355,0.9014084507042254,0.6551761588151264,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9530516431924883,0.6412892337193222,0.12772384273949355,0.9389671361502347,0.7509412548475333,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.10328638497652583,0.6638809210012889,0.5795783394754952,0.09389671361502347,0.7886190860615776,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.17527386541471046,0.7910629091035805,0.5795783394754952,0.1267605633802817,0.9100402277563315,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.2363067292644757,0.5454472863046809,0.40351084017097694,0.15492957746478872,0.6618382122506522,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.34115805946791866,0.6499405291178667,0.40351084017097694,0.2347417840375587,0.760586865832683,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9045383411580594,0.5384698205489944,0.12841236979508242,0.9248826291079812,0.6548573031006936,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9577464788732394,0.6416263658631989,0.12841236979508242,0.9530516431924883,0.7496096842588228,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.917057902973396,2.826267846555917,0.6997630370632157,0.9342723004694836,3.505164210797084,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9624413145539906,3.367705854884923,0.6997630370632157,0.9765258215962441,4.010090570743562,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9061032863849765,3.9292910307842495,1.1032615377470605,0.9248826291079812,4.801480559342949,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9640062597809077,4.682039045253358,1.1032615377470605,0.9765258215962441,5.512445467612302,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9405320813771518,2.020686142877495,0.4287262814527601,0.9577464788732394,2.5196056115761056,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9765258215962441,2.4077960489647223,0.4287262814527601,0.9812206572769953,2.8786465586804595,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9420970266040688,1.0767197139991078,0.25231124461698884,0.9295774647887324,1.337727334792679,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9671361502347418,1.2829906724246045,0.25231124461698884,0.9671361502347418,1.521525908754415,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9389671361502347,1.4992929674517166,0.3404636513294964,0.9530516431924883,1.8343377037938378,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9780907668231612,1.7865177608087823,0.3404636513294964,0.9859154929577465,2.10956901976702,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9139280125195618,0.9226791828166745,0.22256304127174542,0.9248826291079812,1.1499561650632644,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9624413145539906,1.0994400583577786,0.22256304127174542,0.9765258215962441,1.3126410298530595,213 -Linear,Logistic,experimental,False,1,0.9,0.7981220657276995,0.24406856913925595,0.07455391600852629,0.7276995305164319,0.31257176314972324,213 -Linear,Logistic,experimental,False,1,0.95,0.863849765258216,0.29082563787621385,0.07455391600852629,0.8169014084507042,0.3530474954026036,213 -Linear,Logistic,experimental,False,4,0.9,0.046948356807511735,0.9683919238870853,1.0545074196771533,0.04225352112676056,1.1061614805926192,213 -Linear,Logistic,experimental,False,4,0.95,0.06572769953051644,1.153910148987462,1.0545074196771533,0.06103286384976526,1.2911717925367656,213 -Linear,Logistic,experimental,False,6,0.9,0.8982785602503913,0.9628742659936109,0.23137852998349606,0.892018779342723,1.1054779631893865,213 -Linear,Logistic,experimental,False,6,0.95,0.9452269170579031,1.147335454088764,0.23137852998349606,0.9624413145539906,1.289087298578374,213 -Linear,Logistic,experimental,True,1,0.9,0.8059467918622848,0.24408667991439068,0.07429939700420787,0.7370892018779343,0.3135963329097478,213 -Linear,Logistic,experimental,True,1,0.95,0.86697965571205,0.29084721819583287,0.07429939700420787,0.8262910798122066,0.35308221324877676,213 -Linear,Logistic,experimental,True,4,0.9,0.046948356807511735,0.9682481796882342,1.054760155003612,0.03286384976525822,1.1081060346576734,213 -Linear,Logistic,experimental,True,4,0.95,0.06572769953051644,1.1537388672100939,1.054760155003612,0.056338028169014086,1.2880440884321052,213 -Linear,Logistic,experimental,True,6,0.9,0.892018779342723,0.9628043535115562,0.23252849991729144,0.8873239436619719,1.1104069795500415,213 -Linear,Logistic,experimental,True,6,0.95,0.9499217527386542,1.1472521482281988,0.23252849991729144,0.9577464788732394,1.287530785006439,213 -Linear,Logistic,observational,False,1,0.9,0.9014084507042254,0.27469908871557547,0.06651861748549698,0.9014084507042254,0.3520501442016315,213 -Linear,Logistic,observational,False,1,0.95,0.9546165884194053,0.3273241531323111,0.06651861748549698,0.9436619718309859,0.39797250176020077,213 -Linear,Logistic,observational,False,4,0.9,0.18935837245696402,1.353982900128844,1.038997154582461,0.18309859154929578,1.5217737073595556,213 -Linear,Logistic,observational,False,4,0.95,0.27543035993740217,1.6133701360734638,1.038997154582461,0.26291079812206575,1.7800142309978275,213 -Linear,Logistic,observational,False,6,0.9,0.9045383411580594,1.0143473501307676,0.24543300102476093,0.9107981220657277,1.1667504579830554,213 -Linear,Logistic,observational,False,6,0.95,0.9593114241001566,1.208669416837173,0.24543300102476093,0.9577464788732394,1.3535074358284087,213 -Linear,Logistic,observational,True,1,0.9,0.8935837245696401,0.2725905663392203,0.06651898118558668,0.892018779342723,0.3498352468431658,213 -Linear,Logistic,observational,True,1,0.95,0.9530516431924883,0.32481169375566,0.06651898118558668,0.9436619718309859,0.3938902840125929,213 -Linear,Logistic,observational,True,4,0.9,0.19092331768388104,1.3586994912357533,1.029554721826275,0.1784037558685446,1.5283855406123952,213 -Linear,Logistic,observational,True,4,0.95,0.2863849765258216,1.6189903010218047,1.029554721826275,0.26291079812206575,1.7818990446425318,213 -Linear,Logistic,observational,True,6,0.9,0.895148669796557,1.0131038455549137,0.24852464288526532,0.8967136150234741,1.1643867720039867,213 -Linear,Logistic,observational,True,6,0.95,0.9530516431924883,1.2071876897440446,0.24852464288526532,0.9530516431924883,1.3557343370847632,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.09633333333333333,0.6730703224735359,0.5813847440636578,0.06,0.7994113182366382,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.163,0.8020127563300868,0.5813847440636578,0.109,0.9222994395169547,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.20866666666666667,0.545809228523173,0.4318166485465945,0.148,0.6621126753160614,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.29,0.6503718098720356,0.4318166485465945,0.226,0.7607781957690535,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8883333333333334,0.539451744339498,0.1374713900065768,0.888,0.6559678253242532,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.943,0.6427964002257806,0.1374713900065768,0.942,0.7532136346784374,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.095,0.673215344660322,0.5816575606523053,0.066,0.7987689454841812,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.16966666666666666,0.8021855609240048,0.5816575606523053,0.116,0.9211448037237728,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.212,0.5457365545641853,0.43118597517736307,0.158,0.662287763310214,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.29633333333333334,0.6502852135087509,0.43118597517736307,0.223,0.7601307241685876,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.882,0.5395052157780649,0.13917064701840512,0.889,0.6561053221874785,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.938,0.6428601153747003,0.13917064701840512,0.947,0.753120590966105,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.8976666666666666,2.8641489580508317,0.7473265850366615,0.92,3.5454942167899373,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.962,3.41284398329212,0.7473265850366615,0.97,4.046408625403042,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8876666666666666,3.9648529818754157,1.1487073320114483,0.918,4.845766161863059,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9593333333333334,4.724413723593485,1.1487073320114483,0.986,5.548216313166135,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.938,2.0148113447449116,0.43840143925357783,0.955,2.5144593978114727,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9783333333333334,2.4007957952232104,0.43840143925357783,0.99,2.861410408432865,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9076666666666666,1.1003301479666492,0.27099358031240817,0.913,1.3627159220412297,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9583333333333334,1.311124239738742,0.27099358031240817,0.97,1.5572874751641161,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9333333333333333,1.4854173027590014,0.3229586888066522,0.95,1.8150130378533484,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.976,1.7699838865395685,0.3229586888066522,0.978,2.0803451880507104,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9163333333333333,0.9353518863595044,0.219408785264352,0.912,1.1653988211882675,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9603333333333334,1.1145405160056325,0.219408785264352,0.959,1.3283422144863115,1000 +Linear,Logistic,experimental,False,1,0.9,0.7966666666666666,0.24428496421942136,0.07478155567895448,0.728,0.3129228235483047,1000 +Linear,Logistic,experimental,False,1,0.95,0.8733333333333334,0.2910834885181229,0.07478155567895448,0.833,0.35375833173558197,1000 +Linear,Logistic,experimental,False,4,0.9,0.038,0.9678137745111298,1.0814213490525186,0.03,1.1087428056263964,1000 +Linear,Logistic,experimental,False,4,0.95,0.06666666666666667,1.1532212415150949,1.0814213490525186,0.054,1.2896096218626036,1000 +Linear,Logistic,experimental,False,6,0.9,0.8883333333333334,0.9645120733919993,0.2398038156236055,0.884,1.1089972839130895,1000 +Linear,Logistic,experimental,False,6,0.95,0.9386666666666666,1.1492870219741105,0.2398038156236055,0.939,1.2860092104213576,1000 +Linear,Logistic,experimental,True,1,0.9,0.7976666666666666,0.244274323547519,0.0748075511921299,0.735,0.31288102428256387,1000 +Linear,Logistic,experimental,True,1,0.95,0.8716666666666666,0.2910708093755182,0.0748075511921299,0.833,0.35371101065661276,1000 +Linear,Logistic,experimental,True,4,0.9,0.03833333333333333,0.9676295529475489,1.0812355403537053,0.03,1.10872071383113,1000 +Linear,Logistic,experimental,True,4,0.95,0.067,1.1530017279827793,1.0812355403537053,0.054,1.289018545293176,1000 +Linear,Logistic,experimental,True,6,0.9,0.885,0.964486553866753,0.23961465238247193,0.887,1.109074934480792,1000 +Linear,Logistic,experimental,True,6,0.95,0.9383333333333334,1.1492566135842297,0.23961465238247193,0.933,1.2873487345102677,1000 +Linear,Logistic,observational,False,1,0.9,0.8873333333333334,0.2738660718613766,0.0672792367714224,0.875,0.35107388214992413,1000 +Linear,Logistic,observational,False,1,0.95,0.9376666666666666,0.32633155232820765,0.0672792367714224,0.938,0.39679498726255896,1000 +Linear,Logistic,observational,False,4,0.9,0.16433333333333333,1.3471569564681332,1.0662036471383771,0.133,1.5189433786007114,1000 +Linear,Logistic,observational,False,4,0.95,0.248,1.6052365225310308,1.0662036471383771,0.203,1.7701614407109725,1000 +Linear,Logistic,observational,False,6,0.9,0.8823333333333334,1.0106046290695898,0.25297949046206,0.886,1.1632254064709615,1000 +Linear,Logistic,observational,False,6,0.95,0.9396666666666667,1.20420968962261,0.25297949046206,0.941,1.3507861334703333,1000 +Linear,Logistic,observational,True,1,0.9,0.8836666666666666,0.27183527948043773,0.06710802675280161,0.87,0.3482504195565255,1000 +Linear,Logistic,observational,True,1,0.95,0.9373333333333334,0.3239117139538379,0.06710802675280161,0.934,0.3934241047155358,1000 +Linear,Logistic,observational,True,4,0.9,0.17166666666666666,1.3476603584428708,1.0647967745035234,0.133,1.5187476579231214,1000 +Linear,Logistic,observational,True,4,0.95,0.247,1.6058363629813088,1.0647967745035234,0.207,1.7714708628832339,1000 +Linear,Logistic,observational,True,6,0.9,0.889,1.0055746633220144,0.25465275272035065,0.884,1.1560383777095113,1000 +Linear,Logistic,observational,True,6,0.95,0.9386666666666666,1.1982161157585394,0.25465275272035065,0.939,1.3436875509579689,1000 From 5a23e12cee0ea58fd123891537749354e4355db6 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 12:38:14 +0200 Subject: [PATCH 064/142] add irm ate coverage class --- monte-cover/src/montecover/irm/__init__.py | 7 ++ monte-cover/src/montecover/irm/irm_ate.py | 118 +++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 monte-cover/src/montecover/irm/__init__.py create mode 100644 monte-cover/src/montecover/irm/irm_ate.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py new file mode 100644 index 0000000..e632c1b --- /dev/null +++ b/monte-cover/src/montecover/irm/__init__.py @@ -0,0 +1,7 @@ +"""Monte Carlo coverage simulations for IRM.""" + +from montecover.irm.irm_ate import IRMATECoverageSimulation + +__all__ = [ + "IRMATECoverageSimulation", +] diff --git a/monte-cover/src/montecover/irm/irm_ate.py b/monte-cover/src/montecover/irm/irm_ate.py new file mode 100644 index 0000000..09b3f83 --- /dev/null +++ b/monte-cover/src/montecover/irm/irm_ate.py @@ -0,0 +1,118 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +from doubleml.datasets import make_irm_data + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class IRMATECoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLIRM for ATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + self.oracle_values = dict() + self.oracle_values["theta"] = self.dgp_parameters["theta"] + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + + # Model + dml_model = dml.DoubleMLIRM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["theta"], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_irm_data( + theta=dgp_params["theta"], + n_obs=dgp_params["n_obs"], + dim_x=dgp_params["dim_x"], + return_type="DataFrame", + ) + dml_data = dml.DoubleMLData(data, "y", "d") + return dml_data From 2fafde5b32d55c12c2711bb0063eb230a18f4f45 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 12:38:45 +0200 Subject: [PATCH 065/142] rerun irm ate simulation --- doc/irm/irm.qmd | 2 +- results/irm/irm_ate_config.yml | 61 ++++++++++++++++++++++++++++ results/irm/irm_ate_coverage.csv | 22 +++++++---- results/irm/irm_ate_metadata.csv | 2 + scripts/irm/irm_ate.py | 13 ++++++ scripts/irm/irm_ate_config.yml | 68 ++++++++++++++++++++++++++++++++ 6 files changed, 159 insertions(+), 9 deletions(-) create mode 100644 results/irm/irm_ate_config.yml create mode 100644 results/irm/irm_ate_metadata.csv create mode 100644 scripts/irm/irm_ate.py create mode 100644 scripts/irm/irm_ate_config.yml diff --git a/doc/irm/irm.qmd b/doc/irm/irm.qmd index 01fae21..8d15128 100644 --- a/doc/irm/irm.qmd +++ b/doc/irm/irm.qmd @@ -24,7 +24,7 @@ init_notebook_mode(all_interactive=True) ## ATE Coverage -The simulations are based on the the [make_irm_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_irm_data.html)-DGP with $500$ observations. Due to the linearity of the DGP, Lasso and Logit Regression are nearly optimal choices for the nuisance estimation. +The simulations are based on the the [make_irm_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_irm_data.html)-DGP with $500$ observations. Due to the linearity of the DGP, Linear and Logit Regression are nearly optimal choices for the nuisance estimation. ::: {.callout-note title="Metadata" collapse="true"} diff --git a/results/irm/irm_ate_config.yml b/results/irm/irm_ate_config.yml new file mode 100644 index 0000000..7518278 --- /dev/null +++ b/results/irm/irm_ate_config.yml @@ -0,0 +1,61 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id001 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id005 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id006 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_ate_coverage.csv b/results/irm/irm_ate_coverage.csv index 9ed9b19..462edd7 100644 --- a/results/irm/irm_ate_coverage.csv +++ b/results/irm/irm_ate_coverage.csv @@ -1,9 +1,15 @@ Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -Lasso,Logistic Regression,0.9,0.875,0.467771360497192,0.12336884150536215,1000 -Lasso,Logistic Regression,0.95,0.935,0.5573839547492131,0.12336884150536215,1000 -Lasso,Random Forest,0.9,0.904,0.5986207495475606,0.14643826768714088,1000 -Lasso,Random Forest,0.95,0.954,0.7133006185396007,0.14643826768714088,1000 -Random Forest,Logistic Regression,0.9,0.802,0.515856329530175,0.1497402299287362,1000 -Random Forest,Logistic Regression,0.95,0.885,0.6146807293424889,0.1497402299287362,1000 -Random Forest,Random Forest,0.9,0.898,0.625184528129902,0.1492705643144829,1000 -Random Forest,Random Forest,0.95,0.948,0.744953313017455,0.1492705643144829,1000 +LGBM Regr.,LGBM Clas.,0.9,0.95,1.2105783233781502,0.27841582729976144,1000 +LGBM Regr.,LGBM Clas.,0.95,0.979,1.4424930433983585,0.27841582729976144,1000 +LGBM Regr.,Logistic,0.9,0.933,0.7690789035796475,0.18588749104517516,1000 +LGBM Regr.,Logistic,0.95,0.97,0.9164140368400898,0.18588749104517516,1000 +Linear,LGBM Clas.,0.9,0.94,1.1169192141705429,0.24520383656786443,1000 +Linear,LGBM Clas.,0.95,0.979,1.3308913313291606,0.24520383656786443,1000 +Linear,Logistic,0.9,0.932,0.6770754464499342,0.16028113473448766,1000 +Linear,Logistic,0.95,0.966,0.8067851559033591,0.16028113473448766,1000 +Linear,RF Clas.,0.9,0.921,0.595264238153569,0.13974712365243164,1000 +Linear,RF Clas.,0.95,0.957,0.7093010885278545,0.13974712365243164,1000 +RF Regr.,Logistic,0.9,0.926,0.729764716101783,0.17826013932279183,1000 +RF Regr.,Logistic,0.95,0.971,0.8695682930757158,0.17826013932279183,1000 +RF Regr.,RF Clas.,0.9,0.906,0.6106587888894832,0.149143817942007,1000 +RF Regr.,RF Clas.,0.95,0.955,0.7276448271476171,0.149143817942007,1000 diff --git a/results/irm/irm_ate_metadata.csv b/results/irm/irm_ate_metadata.csv new file mode 100644 index 0000000..74da4df --- /dev/null +++ b/results/irm/irm_ate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,IRMATECoverageSimulation,2025-06-03 12:23,13.040220391750335,3.12.9,scripts/irm/irm_ate_config.yml diff --git a/scripts/irm/irm_ate.py b/scripts/irm/irm_ate.py new file mode 100644 index 0000000..7b127bd --- /dev/null +++ b/scripts/irm/irm_ate.py @@ -0,0 +1,13 @@ +from montecover.irm import IRMATECoverageSimulation + +# Create and run simulation with config file +sim = IRMATECoverageSimulation( + config_file="scripts/irm/irm_ate_config.yml", + log_level="INFO", + log_file="logs/irm/irm_ate_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="irm_ate") + +# Save config file for reproducibility +sim.save_config("results/irm/irm_ate_config.yml") diff --git a/scripts/irm/irm_ate_config.yml b/scripts/irm/irm_ate_config.yml new file mode 100644 index 0000000..ca96ddc --- /dev/null +++ b/scripts/irm/irm_ate_config.yml @@ -0,0 +1,68 @@ +# Simulation parameters for IRM ATE Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [0.5] # Treatment effect + n_obs: [500] # Sample size + dim_x: [20] # Number of covariates + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logit: &logit + name: "Logistic" + + rfr: &rfr + name: "RF Regr." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + rfc: &rfc + name: "RF Clas." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + +dml_parameters: + learners: + - ml_g: *linear + ml_m: *logit + - ml_g: *rfr + ml_m: *rfc + - ml_g: *linear + ml_m: *rfc + - ml_g: *rfr + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *linear + ml_m: *lgbmc + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From 3ab8c31f4c8608efbc8748df6f85a36fdf6648a0 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 14:00:14 +0200 Subject: [PATCH 066/142] add IRMGATE simulation class --- monte-cover/src/montecover/irm/__init__.py | 2 + monte-cover/src/montecover/irm/irm_gate.py | 156 +++++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 monte-cover/src/montecover/irm/irm_gate.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index e632c1b..adc75ec 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -1,7 +1,9 @@ """Monte Carlo coverage simulations for IRM.""" from montecover.irm.irm_ate import IRMATECoverageSimulation +from montecover.irm.irm_gate import IRMGATECoverageSimulation __all__ = [ "IRMATECoverageSimulation", + "IRMGATECoverageSimulation", ] diff --git a/monte-cover/src/montecover/irm/irm_gate.py b/monte-cover/src/montecover/irm/irm_gate.py new file mode 100644 index 0000000..17b6ad5 --- /dev/null +++ b/monte-cover/src/montecover/irm/irm_gate.py @@ -0,0 +1,156 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.datasets import make_heterogeneous_data + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class IRMGATECoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLIRM for GATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + self.logger.info(f"Oracle values: {self.oracle_values}") + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _generate_groups(self, data): + """Generate groups for the simulation.""" + groups = pd.DataFrame( + np.column_stack( + ( + data["X_0"] <= 0.3, + (data["X_0"] > 0.3) & (data["X_0"] <= 0.7), + data["X_0"] > 0.7, + ) + ), + columns=["Group 1", "Group 2", "Group 3"], + ) + return groups + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + # Oracle values + data_oracle = make_heterogeneous_data( + n_obs=int(1e6), + p=self.dgp_parameters["p"][0], + support_size=self.dgp_parameters["support_size"][0], + n_x=self.dgp_parameters["n_x"][0], + binary_treatment=True, + ) + + self.logger.info("Calculating oracle values") + groups = self._generate_groups(data_oracle["data"]) + oracle_gates = [data_oracle["effects"][groups[group]].mean() for group in groups.columns] + + self.oracle_values = dict() + self.oracle_values["gates"] = oracle_gates + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + + # Model + dml_model = dml.DoubleMLIRM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + ) + dml_model.fit() + + # gate + groups = self._generate_groups(dml_data.data) + gate_model = dml_model.gate(groups=groups) + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + confint = gate_model.confint(level=level) + effects = confint["effect"] + uniform_confint = gate_model.confint(level=0.95, joint=True, n_rep_boot=2000) + level_result["coverage"] = self._compute_coverage( + thetas=effects, + oracle_thetas=self.oracle_values["gates"], + confint=confint.iloc[:, [0, 2]], + joint_confint=uniform_confint.iloc[:, [0, 2]], + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_heterogeneous_data( + n_obs=dgp_params["n_obs"], + p=dgp_params["p"], + support_size=dgp_params["support_size"], + n_x=dgp_params["n_x"], + binary_treatment=True, + ) + dml_data = dml.DoubleMLData(data["data"], "y", "d") + return dml_data From a5abbb0107bee3347df393e2d47930ce1f8d1de8 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 14:00:30 +0200 Subject: [PATCH 067/142] rerun irm simulations --- results/irm/irm_gate_config.yml | 63 ++++++++++++++++++++++++++++ results/irm/irm_gate_coverage.csv | 22 ++++++---- results/irm/irm_gate_metadata.csv | 2 + scripts/irm/irm_gate.py | 13 ++++++ scripts/irm/irm_gate_config.yml | 69 +++++++++++++++++++++++++++++++ 5 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 results/irm/irm_gate_config.yml create mode 100644 results/irm/irm_gate_metadata.csv create mode 100644 scripts/irm/irm_gate.py create mode 100644 scripts/irm/irm_gate_config.yml diff --git a/results/irm/irm_gate_config.yml b/results/irm/irm_gate_config.yml new file mode 100644 index 0000000..c1206fe --- /dev/null +++ b/results/irm/irm_gate_config.yml @@ -0,0 +1,63 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + p: + - 10 + support_size: + - 5 + n_x: + - 1 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id001 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id005 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id006 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_gate_coverage.csv b/results/irm/irm_gate_coverage.csv index 4208c4b..ab738e0 100644 --- a/results/irm/irm_gate_coverage.csv +++ b/results/irm/irm_gate_coverage.csv @@ -1,9 +1,15 @@ Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.941,2.1611526373873855,0.48511146422993706,1.0,5.063646757352436,1000 -LGBM,LGBM,0.95,0.9766666666666667,2.5751722007164304,0.48511146422993706,1.0,5.085406768554818,1000 -LGBM,Logistic Regression,0.9,0.916,0.3904280687581478,0.08854865701618204,0.997,0.9186129412168422,1000 -LGBM,Logistic Regression,0.95,0.9606666666666667,0.4652237383199531,0.08854865701618204,0.998,0.9197763724365766,1000 -Lasso,LGBM,0.9,0.9043333333333333,2.047596498760145,0.49693265710872336,1.0,4.807194790243196,1000 -Lasso,LGBM,0.95,0.959,2.43986171576749,0.49693265710872336,1.0,4.819825928994352,1000 -Lasso,Logistic Regression,0.9,0.9173333333333333,0.400967167206407,0.08997238623406502,0.999,0.9416356317140329,1000 -Lasso,Logistic Regression,0.95,0.9603333333333334,0.4777818486889552,0.08997238623406502,0.999,0.9403831822862944,1000 +LGBM Regr.,LGBM Clas.,0.9,0.9236666666666666,0.851465317065706,0.19722702192668598,1.0,2.011914810456983,1000 +LGBM Regr.,LGBM Clas.,0.95,0.972,1.014583503473648,0.19722702192668598,1.0,2.0031648741801455,1000 +LGBM Regr.,Logistic,0.9,0.9016666666666666,0.40159876476481454,0.09695556310967947,0.999,0.9443179359677094,1000 +LGBM Regr.,Logistic,0.95,0.9473333333333334,0.47853444359887215,0.09695556310967947,0.999,0.9425971024906015,1000 +Linear,LGBM Clas.,0.9,0.923,0.8592796676557775,0.19934007812012308,1.0,2.0230623845143447,1000 +Linear,LGBM Clas.,0.95,0.966,1.023894876515087,0.19934007812012308,1.0,2.0203888246588932,1000 +Linear,Logistic,0.9,0.915,0.4195046438102248,0.09830647800141477,0.999,0.9863092550256803,1000 +Linear,Logistic,0.95,0.9533333333333334,0.49987061446872544,0.09830647800141477,0.999,0.9830466638434444,1000 +Linear,RF Clas.,0.9,0.9206666666666666,0.4437261411849741,0.10126652921113784,0.999,1.0415488911519282,1000 +Linear,RF Clas.,0.95,0.9596666666666667,0.5287323087424741,0.10126652921113784,1.0,1.040804022375608,1000 +RF Regr.,Logistic,0.9,0.897,0.4014791112025455,0.09669425998448095,1.0,0.9423536354277464,1000 +RF Regr.,Logistic,0.95,0.9506666666666667,0.4783918675855257,0.09669425998448095,1.0,0.9449044166570425,1000 +RF Regr.,RF Clas.,0.9,0.8993333333333333,0.4239547202094922,0.10104977503999726,1.0,0.9958597773023945,1000 +RF Regr.,RF Clas.,0.95,0.95,0.5051732075554921,0.10104977503999726,0.999,0.9961472336115996,1000 diff --git a/results/irm/irm_gate_metadata.csv b/results/irm/irm_gate_metadata.csv new file mode 100644 index 0000000..13efdf0 --- /dev/null +++ b/results/irm/irm_gate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,IRMGATECoverageSimulation,2025-06-03 13:48,9.251631820201874,3.12.9,scripts/irm/irm_gate_config.yml diff --git a/scripts/irm/irm_gate.py b/scripts/irm/irm_gate.py new file mode 100644 index 0000000..97fc0f3 --- /dev/null +++ b/scripts/irm/irm_gate.py @@ -0,0 +1,13 @@ +from montecover.irm import IRMGATECoverageSimulation + +# Create and run simulation with config file +sim = IRMGATECoverageSimulation( + config_file="scripts/irm/irm_gate_config.yml", + log_level="INFO", + log_file="logs/irm/irm_gate_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="irm_gate") + +# Save config file for reproducibility +sim.save_config("results/irm/irm_gate_config.yml") diff --git a/scripts/irm/irm_gate_config.yml b/scripts/irm/irm_gate_config.yml new file mode 100644 index 0000000..3143ef1 --- /dev/null +++ b/scripts/irm/irm_gate_config.yml @@ -0,0 +1,69 @@ +# Simulation parameters for IRM ATE Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [500] # Sample size + p: [10] # Number of covariates + support_size: [5] # Number of non-zero coefficients + n_x: [1] + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logit: &logit + name: "Logistic" + + rfr: &rfr + name: "RF Regr." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + rfc: &rfc + name: "RF Clas." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + +dml_parameters: + learners: + - ml_g: *linear + ml_m: *logit + - ml_g: *rfr + ml_m: *rfc + - ml_g: *linear + ml_m: *rfc + - ml_g: *rfr + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *linear + ml_m: *lgbmc + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From 171e94117f99e7a0048cf1695ff3cfe032b65c54 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 14:05:46 +0200 Subject: [PATCH 068/142] update oracle logger values --- monte-cover/src/montecover/irm/irm_gate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monte-cover/src/montecover/irm/irm_gate.py b/monte-cover/src/montecover/irm/irm_gate.py index 17b6ad5..64f72d3 100644 --- a/monte-cover/src/montecover/irm/irm_gate.py +++ b/monte-cover/src/montecover/irm/irm_gate.py @@ -28,7 +28,6 @@ def __init__( # Calculate oracle values self._calculate_oracle_values() - self.logger.info(f"Oracle values: {self.oracle_values}") def _process_config_parameters(self): """Process simulation-specific parameters from config""" @@ -72,6 +71,8 @@ def _calculate_oracle_values(self): self.oracle_values = dict() self.oracle_values["gates"] = oracle_gates + self.logger.info(f"Oracle values: {self.oracle_values}") + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: """Run a single repetition with the given parameters.""" # Extract parameters From 63f3fede3f703760d115cf148970298725fb8fd7 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 14:35:35 +0200 Subject: [PATCH 069/142] add irm cate to monte cover --- monte-cover/src/montecover/irm/__init__.py | 2 + monte-cover/src/montecover/irm/irm_cate.py | 158 +++++++++++++++++++++ 2 files changed, 160 insertions(+) create mode 100644 monte-cover/src/montecover/irm/irm_cate.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index adc75ec..32c3196 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -1,9 +1,11 @@ """Monte Carlo coverage simulations for IRM.""" from montecover.irm.irm_ate import IRMATECoverageSimulation +from montecover.irm.irm_cate import IRMCATECoverageSimulation from montecover.irm.irm_gate import IRMGATECoverageSimulation __all__ = [ "IRMATECoverageSimulation", + "IRMCATECoverageSimulation", "IRMGATECoverageSimulation", ] diff --git a/monte-cover/src/montecover/irm/irm_cate.py b/monte-cover/src/montecover/irm/irm_cate.py new file mode 100644 index 0000000..73d5b97 --- /dev/null +++ b/monte-cover/src/montecover/irm/irm_cate.py @@ -0,0 +1,158 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +import patsy +from doubleml.datasets import make_heterogeneous_data +from sklearn.linear_model import LinearRegression + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class IRMCATECoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLIRM for CATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + # Oracle values + data_oracle = make_heterogeneous_data( + n_obs=int(1e6), + p=self.dgp_parameters["p"][0], + support_size=self.dgp_parameters["support_size"][0], + n_x=self.dgp_parameters["n_x"][0], + binary_treatment=True, + ) + + self.logger.info("Calculating oracle values") + + design_matrix_oracle = patsy.dmatrix("bs(x, df=5, degree=2)", {"x": data_oracle["data"]["X_0"]}) + spline_basis_oracle = pd.DataFrame(design_matrix_oracle) + oracle_model = LinearRegression() + oracle_model.fit(spline_basis_oracle, data_oracle["effects"]) + + # evaluate on grid + grid = {"x": np.linspace(0.1, 0.9, 100)} + spline_grid_oracle = pd.DataFrame(patsy.build_design_matrices([design_matrix_oracle.design_info], grid)[0]) + oracle_cates = oracle_model.predict(spline_grid_oracle) + + self.oracle_values = dict() + self.oracle_values["cates"] = oracle_cates + self.oracle_values["grid"] = grid + + self.logger.info(f"Oracle values: {self.oracle_values}") + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + + # Model + dml_model = dml.DoubleMLIRM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + ) + dml_model.fit() + + # cate + design_matrix = patsy.dmatrix("bs(x, df=5, degree=2)", {"x": dml_data.data["X_0"]}) + spline_basis = pd.DataFrame(design_matrix) + cate_model = dml_model.cate(basis=spline_basis) + + # evaluation spline basis + spline_grid = pd.DataFrame(patsy.build_design_matrices([design_matrix.design_info], self.oracle_values["grid"])[0]) + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + confint = cate_model.confint(basis=spline_grid, level=level) + effects = confint["effect"] + uniform_confint = cate_model.confint(basis=spline_grid, level=0.95, joint=True, n_rep_boot=2000) + level_result["coverage"] = self._compute_coverage( + thetas=effects, + oracle_thetas=self.oracle_values["cates"], + confint=confint.iloc[:, [0, 2]], + joint_confint=uniform_confint.iloc[:, [0, 2]], + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_heterogeneous_data( + n_obs=dgp_params["n_obs"], + p=dgp_params["p"], + support_size=dgp_params["support_size"], + n_x=dgp_params["n_x"], + binary_treatment=True, + ) + dml_data = dml.DoubleMLData(data["data"], "y", "d") + return dml_data From a77905d2f9b0c40c57dd03b99f08f2fa66b0fc8a Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 14:35:44 +0200 Subject: [PATCH 070/142] rerun cate example --- results/irm/irm_cate_config.yml | 63 ++++++++++++++++++++++++++++ results/irm/irm_cate_coverage.csv | 22 ++++++---- results/irm/irm_cate_metadata.csv | 2 + scripts/irm/irm_cate.py | 13 ++++++ scripts/irm/irm_cate_config.yml | 69 +++++++++++++++++++++++++++++++ 5 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 results/irm/irm_cate_config.yml create mode 100644 results/irm/irm_cate_metadata.csv create mode 100644 scripts/irm/irm_cate.py create mode 100644 scripts/irm/irm_cate_config.yml diff --git a/results/irm/irm_cate_config.yml b/results/irm/irm_cate_config.yml new file mode 100644 index 0000000..c1206fe --- /dev/null +++ b/results/irm/irm_cate_config.yml @@ -0,0 +1,63 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + p: + - 10 + support_size: + - 5 + n_x: + - 1 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id001 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id005 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id006 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_cate_coverage.csv b/results/irm/irm_cate_coverage.csv index 788025e..000353f 100644 --- a/results/irm/irm_cate_coverage.csv +++ b/results/irm/irm_cate_coverage.csv @@ -1,9 +1,15 @@ Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.9356475000000001,0.6670555194228769,0.1482947174222056,1.0,1.689294724011131,1000 -LGBM,LGBM,0.95,0.9723379999999999,0.7948456764390678,0.1482947174222056,1.0,1.6897571332817831,1000 -LGBM,Logistic Regression,0.9,0.8889914999999999,0.2354452920928757,0.05850699314525499,0.996,0.5957379206984681,1000 -LGBM,Logistic Regression,0.95,0.942037,0.28055036951027373,0.05850699314525499,0.996,0.5990789624833718,1000 -Lasso,LGBM,0.9,0.896289,0.6428742805642967,0.15829333167540963,1.0,1.6320898187101593,1000 -Lasso,LGBM,0.95,0.9491539999999999,0.7660319531461224,0.15829333167540963,1.0,1.6337799284392311,1000 -Lasso,Logistic Regression,0.9,0.8892920000000001,0.24738399667726244,0.061668240816652016,0.998,0.629839636678611,1000 -Lasso,Logistic Regression,0.95,0.9413365,0.29477621345410787,0.061668240816652016,0.997,0.6288417962868703,1000 +LGBM Regr.,LGBM Clas.,0.9,0.92823,1.0570613395560353,0.24271123774219397,1.0,2.6463187180937235,1000 +LGBM Regr.,LGBM Clas.,0.95,0.96976,1.259566274489309,0.24271123774219397,1.0,2.652748380799862,1000 +LGBM Regr.,Logistic,0.9,0.90431,0.4603024759110742,0.10988090751139157,0.996,1.157310107019297,1000 +LGBM Regr.,Logistic,0.95,0.94966,0.5484842298414058,0.10988090751139157,0.998,1.1595510257286086,1000 +Linear,LGBM Clas.,0.9,0.90906,1.0431407600660088,0.25074855426124026,0.999,2.6288585357985186,1000 +Linear,LGBM Clas.,0.95,0.95858,1.2429788809380993,0.25074855426124026,0.998,2.6131478268009114,1000 +Linear,Logistic,0.9,0.9102100000000001,0.4767188958750692,0.11111755516576532,0.999,1.1958150906203837,1000 +Linear,Logistic,0.95,0.95427,0.5680456007484012,0.11111755516576532,0.999,1.1961020063274401,1000 +Linear,RF Clas.,0.9,0.91604,0.5102732447654866,0.11800460653781775,0.999,1.2834578728038433,1000 +Linear,RF Clas.,0.95,0.95914,0.6080280735182108,0.11800460653781775,0.999,1.2816066988048282,1000 +RF Regr.,Logistic,0.9,0.902,0.4598055139749778,0.10994809691322913,0.999,1.1600848822586207,1000 +RF Regr.,Logistic,0.95,0.9499099999999999,0.5478920631704775,0.10994809691322913,0.998,1.1551525914690834,1000 +RF Regr.,RF Clas.,0.9,0.905,0.49735687162215936,0.11853266588343181,0.999,1.2483681652474525,1000 +RF Regr.,RF Clas.,0.95,0.95178,0.5926372656329394,0.11853266588343181,0.999,1.251522831166833,1000 diff --git a/results/irm/irm_cate_metadata.csv b/results/irm/irm_cate_metadata.csv new file mode 100644 index 0000000..1556fdc --- /dev/null +++ b/results/irm/irm_cate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,IRMCATECoverageSimulation,2025-06-03 14:24,10.22935619354248,3.12.9,scripts/irm/irm_cate_config.yml diff --git a/scripts/irm/irm_cate.py b/scripts/irm/irm_cate.py new file mode 100644 index 0000000..6d265b3 --- /dev/null +++ b/scripts/irm/irm_cate.py @@ -0,0 +1,13 @@ +from montecover.irm import IRMCATECoverageSimulation + +# Create and run simulation with config file +sim = IRMCATECoverageSimulation( + config_file="scripts/irm/irm_cate_config.yml", + log_level="INFO", + log_file="logs/irm/irm_cate_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="irm_cate") + +# Save config file for reproducibility +sim.save_config("results/irm/irm_cate_config.yml") diff --git a/scripts/irm/irm_cate_config.yml b/scripts/irm/irm_cate_config.yml new file mode 100644 index 0000000..c09f225 --- /dev/null +++ b/scripts/irm/irm_cate_config.yml @@ -0,0 +1,69 @@ +# Simulation parameters for IRM CATE Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [500] # Sample size + p: [10] # Number of covariates + support_size: [5] # Number of non-zero coefficients + n_x: [1] + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logit: &logit + name: "Logistic" + + rfr: &rfr + name: "RF Regr." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + rfc: &rfc + name: "RF Clas." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + +dml_parameters: + learners: + - ml_g: *linear + ml_m: *logit + - ml_g: *rfr + ml_m: *rfc + - ml_g: *linear + ml_m: *rfc + - ml_g: *rfr + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *linear + ml_m: *lgbmc + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From df0ea24df2181d4378dd4120b0018ac9c97cdd23 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 16:23:42 +0200 Subject: [PATCH 071/142] add irm atte to monte cover --- monte-cover/src/montecover/irm/__init__.py | 2 + monte-cover/src/montecover/irm/irm_atte.py | 161 +++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 monte-cover/src/montecover/irm/irm_atte.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index 32c3196..215381a 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -1,11 +1,13 @@ """Monte Carlo coverage simulations for IRM.""" from montecover.irm.irm_ate import IRMATECoverageSimulation +from montecover.irm.irm_atte import IRMATTECoverageSimulation from montecover.irm.irm_cate import IRMCATECoverageSimulation from montecover.irm.irm_gate import IRMGATECoverageSimulation __all__ = [ "IRMATECoverageSimulation", + "IRMATTECoverageSimulation", "IRMCATECoverageSimulation", "IRMGATECoverageSimulation", ] diff --git a/monte-cover/src/montecover/irm/irm_atte.py b/monte-cover/src/montecover/irm/irm_atte.py new file mode 100644 index 0000000..4dbb449 --- /dev/null +++ b/monte-cover/src/montecover/irm/irm_atte.py @@ -0,0 +1,161 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +from doubleml.datasets import make_irm_data +from scipy.linalg import toeplitz + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class IRMATTECoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLIRM for ATTE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + theta = self.dgp_parameters["theta"][0] + dim_x = self.dgp_parameters["dim_x"][0] + + n_obs_atte = int(1e6) + R2_d = 0.5 + R2_y = 0.5 + + v = np.random.uniform( + size=[ + n_obs_atte, + ] + ) + zeta = np.random.standard_normal( + size=[ + n_obs_atte, + ] + ) + + cov_mat = toeplitz([np.power(0.5, k) for k in range(dim_x)]) + x = np.random.multivariate_normal( + np.zeros(dim_x), + cov_mat, + size=[ + n_obs_atte, + ], + ) + + beta = [1 / (k**2) for k in range(1, dim_x + 1)] + b_sigma_b = np.dot(np.dot(cov_mat, beta), beta) + c_y = np.sqrt(R2_y / ((1 - R2_y) * b_sigma_b)) + c_d = np.sqrt(np.pi**2 / 3.0 * R2_d / ((1 - R2_d) * b_sigma_b)) + + xx = np.exp(np.dot(x, np.multiply(beta, c_d))) + d = 1.0 * ((xx / (1 + xx)) > v) + + # y = d * theta + d * np.dot(x, np.multiply(beta, c_y)) + zeta + y0 = zeta + y1 = theta + np.dot(x, np.multiply(beta, c_y)) + zeta + + self.oracle_values = dict() + self.oracle_values["theta"] = np.mean(y1[d == 1] - y0[d == 1]) + self.logger.info(f"Oracle ATTE value: {self.oracle_values['theta']}") + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + + # Model + dml_model = dml.DoubleMLIRM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + score="ATTE", + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["theta"], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_irm_data( + theta=dgp_params["theta"], + n_obs=dgp_params["n_obs"], + dim_x=dgp_params["dim_x"], + return_type="DataFrame", + ) + dml_data = dml.DoubleMLData(data, "y", "d") + return dml_data From a08d374999fdfb982042b0f3d063cdc814fb8180 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 16:23:56 +0200 Subject: [PATCH 072/142] add irm atte scripts --- scripts/irm/irm_ate_config.yml | 10 ++--- scripts/irm/irm_atte.py | 13 +++++++ scripts/irm/irm_atte_config.yml | 68 +++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 scripts/irm/irm_atte.py create mode 100644 scripts/irm/irm_atte_config.yml diff --git a/scripts/irm/irm_ate_config.yml b/scripts/irm/irm_ate_config.yml index ca96ddc..6a7a3f5 100644 --- a/scripts/irm/irm_ate_config.yml +++ b/scripts/irm/irm_ate_config.yml @@ -13,8 +13,8 @@ dgp_parameters: # Define reusable learner configurations learner_definitions: - linear: &linear - name: "Linear" + lasso: &lasso + name: "LassoCV" logit: &logit name: "Logistic" @@ -49,11 +49,11 @@ learner_definitions: dml_parameters: learners: - - ml_g: *linear + - ml_g: *lasso ml_m: *logit - ml_g: *rfr ml_m: *rfc - - ml_g: *linear + - ml_g: *lasso ml_m: *rfc - ml_g: *rfr ml_m: *logit @@ -61,7 +61,7 @@ dml_parameters: ml_m: *lgbmc - ml_g: *lgbmr ml_m: *logit - - ml_g: *linear + - ml_g: *lasso ml_m: *lgbmc confidence_parameters: diff --git a/scripts/irm/irm_atte.py b/scripts/irm/irm_atte.py new file mode 100644 index 0000000..829ba0e --- /dev/null +++ b/scripts/irm/irm_atte.py @@ -0,0 +1,13 @@ +from montecover.irm import IRMATTECoverageSimulation + +# Create and run simulation with config file +sim = IRMATTECoverageSimulation( + config_file="scripts/irm/irm_atte_config.yml", + log_level="INFO", + log_file="logs/irm/irm_atte_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="irm_atte") + +# Save config file for reproducibility +sim.save_config("results/irm/irm_atte_config.yml") diff --git a/scripts/irm/irm_atte_config.yml b/scripts/irm/irm_atte_config.yml new file mode 100644 index 0000000..2a3ba63 --- /dev/null +++ b/scripts/irm/irm_atte_config.yml @@ -0,0 +1,68 @@ +# Simulation parameters for IRM ATE Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [0.5] # Treatment effect + n_obs: [500] # Sample size + dim_x: [20] # Number of covariates + +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + logit: &logit + name: "Logistic" + + rfr: &rfr + name: "RF Regr." + params: + n_estimators: 200 + max_features: 20 + max_depth: 20 + min_samples_leaf: 2 + + rfc: &rfc + name: "RF Clas." + params: + n_estimators: 200 + max_features: 20 + max_depth: 20 + min_samples_leaf: 20 + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + +dml_parameters: + learners: + - ml_g: *lasso + ml_m: *logit + - ml_g: *rfr + ml_m: *rfc + - ml_g: *lasso + ml_m: *rfc + - ml_g: *rfr + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *lasso + ml_m: *lgbmc + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From e946088213d757d84034ea95064f31d3ed4d9959 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Tue, 3 Jun 2025 16:24:12 +0200 Subject: [PATCH 073/142] rerun irm ate and atte sim --- doc/irm/irm.qmd | 4 +- results/irm/irm_ate_config.yml | 4 +- results/irm/irm_ate_coverage.csv | 28 +++++++------- results/irm/irm_ate_metadata.csv | 2 +- results/irm/irm_atte_config.yml | 61 +++++++++++++++++++++++++++++++ results/irm/irm_atte_coverage.csv | 22 +++++++---- results/irm/irm_atte_metadata.csv | 2 + 7 files changed, 96 insertions(+), 27 deletions(-) create mode 100644 results/irm/irm_atte_config.yml create mode 100644 results/irm/irm_atte_metadata.csv diff --git a/doc/irm/irm.qmd b/doc/irm/irm.qmd index 8d15128..1fb79e8 100644 --- a/doc/irm/irm.qmd +++ b/doc/irm/irm.qmd @@ -24,7 +24,7 @@ init_notebook_mode(all_interactive=True) ## ATE Coverage -The simulations are based on the the [make_irm_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_irm_data.html)-DGP with $500$ observations. Due to the linearity of the DGP, Linear and Logit Regression are nearly optimal choices for the nuisance estimation. +The simulations are based on the the [make_irm_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_irm_data.html)-DGP with $500$ observations. Due to the linearity of the DGP, Lasso and Logit Regression are nearly optimal choices for the nuisance estimation. ::: {.callout-note title="Metadata" collapse="true"} @@ -86,7 +86,7 @@ As for the ATE, the simulations are based on the the [make_irm_data](https://do ```{python} #| echo: false -metadata_file = '../../results/irm/irm_atte_coverage_metadata.csv' +metadata_file = '../../results/irm/irm_atte_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` diff --git a/results/irm/irm_ate_config.yml b/results/irm/irm_ate_config.yml index 7518278..d19a50a 100644 --- a/results/irm/irm_ate_config.yml +++ b/results/irm/irm_ate_config.yml @@ -11,8 +11,8 @@ dgp_parameters: dim_x: - 20 learner_definitions: - linear: &id001 - name: Linear + lasso: &id001 + name: LassoCV logit: &id002 name: Logistic rfr: &id003 diff --git a/results/irm/irm_ate_coverage.csv b/results/irm/irm_ate_coverage.csv index 462edd7..69935e2 100644 --- a/results/irm/irm_ate_coverage.csv +++ b/results/irm/irm_ate_coverage.csv @@ -1,15 +1,15 @@ Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,0.9,0.95,1.2105783233781502,0.27841582729976144,1000 -LGBM Regr.,LGBM Clas.,0.95,0.979,1.4424930433983585,0.27841582729976144,1000 -LGBM Regr.,Logistic,0.9,0.933,0.7690789035796475,0.18588749104517516,1000 -LGBM Regr.,Logistic,0.95,0.97,0.9164140368400898,0.18588749104517516,1000 -Linear,LGBM Clas.,0.9,0.94,1.1169192141705429,0.24520383656786443,1000 -Linear,LGBM Clas.,0.95,0.979,1.3308913313291606,0.24520383656786443,1000 -Linear,Logistic,0.9,0.932,0.6770754464499342,0.16028113473448766,1000 -Linear,Logistic,0.95,0.966,0.8067851559033591,0.16028113473448766,1000 -Linear,RF Clas.,0.9,0.921,0.595264238153569,0.13974712365243164,1000 -Linear,RF Clas.,0.95,0.957,0.7093010885278545,0.13974712365243164,1000 -RF Regr.,Logistic,0.9,0.926,0.729764716101783,0.17826013932279183,1000 -RF Regr.,Logistic,0.95,0.971,0.8695682930757158,0.17826013932279183,1000 -RF Regr.,RF Clas.,0.9,0.906,0.6106587888894832,0.149143817942007,1000 -RF Regr.,RF Clas.,0.95,0.955,0.7276448271476171,0.149143817942007,1000 +LGBM Regr.,LGBM Clas.,0.9,0.934,1.2170294870742426,0.28949513855358994,1000 +LGBM Regr.,LGBM Clas.,0.95,0.974,1.4501800790686068,0.28949513855358994,1000 +LGBM Regr.,Logistic,0.9,0.909,0.764475766453259,0.1851430173917419,1000 +LGBM Regr.,Logistic,0.95,0.955,0.9109290606478061,0.1851430173917419,1000 +LassoCV,LGBM Clas.,0.9,0.931,1.099023356166903,0.26125287479628606,1000 +LassoCV,LGBM Clas.,0.95,0.973,1.30956710126707,0.26125287479628606,1000 +LassoCV,Logistic,0.9,0.912,0.6518264483447356,0.15950540890700682,1000 +LassoCV,Logistic,0.95,0.962,0.7766991189934198,0.15950540890700682,1000 +LassoCV,RF Clas.,0.9,0.921,0.575659955473877,0.1328787221360119,1000 +LassoCV,RF Clas.,0.95,0.965,0.6859411449040855,0.1328787221360119,1000 +RF Regr.,Logistic,0.9,0.923,0.7334971446280483,0.1805477395572802,1000 +RF Regr.,Logistic,0.95,0.957,0.8740157559784838,0.1805477395572802,1000 +RF Regr.,RF Clas.,0.9,0.908,0.6176696649606507,0.1493303814432326,1000 +RF Regr.,RF Clas.,0.95,0.955,0.7359988012486619,0.1493303814432326,1000 diff --git a/results/irm/irm_ate_metadata.csv b/results/irm/irm_ate_metadata.csv index 74da4df..75d3d5f 100644 --- a/results/irm/irm_ate_metadata.csv +++ b/results/irm/irm_ate_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,IRMATECoverageSimulation,2025-06-03 12:23,13.040220391750335,3.12.9,scripts/irm/irm_ate_config.yml +0.10.0,IRMATECoverageSimulation,2025-06-03 16:21,13.744510825475057,3.12.9,scripts/irm/irm_ate_config.yml diff --git a/results/irm/irm_atte_config.yml b/results/irm/irm_atte_config.yml new file mode 100644 index 0000000..2d3c69a --- /dev/null +++ b/results/irm/irm_atte_config.yml @@ -0,0 +1,61 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 20 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 20 + min_samples_leaf: 20 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id001 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id005 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id006 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_atte_coverage.csv b/results/irm/irm_atte_coverage.csv index 5255488..082860b 100644 --- a/results/irm/irm_atte_coverage.csv +++ b/results/irm/irm_atte_coverage.csv @@ -1,9 +1,15 @@ Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -Lasso,Logistic Regression,0.9,0.891,0.5331759172799808,0.1350391266439693,1000 -Lasso,Logistic Regression,0.95,0.937,0.6353182910443252,0.1350391266439693,1000 -Lasso,Random Forest,0.9,0.897,0.7382774835343612,0.18122786303688493,1000 -Lasso,Random Forest,0.95,0.948,0.8797118811149396,0.18122786303688493,1000 -Random Forest,Logistic Regression,0.9,0.872,0.5528818976331068,0.15060693615944673,1000 -Random Forest,Logistic Regression,0.95,0.918,0.6587994149202312,0.15060693615944673,1000 -Random Forest,Random Forest,0.9,0.899,0.7455843448660364,0.18245405782788798,1000 -Random Forest,Random Forest,0.95,0.948,0.8884185434072277,0.18245405782788798,1000 +LGBM Regr.,LGBM Clas.,0.9,0.935,1.4682839506185927,0.33857239275160667,1000 +LGBM Regr.,LGBM Clas.,0.95,0.974,1.7495682382536595,0.33857239275160667,1000 +LGBM Regr.,Logistic,0.9,0.903,0.827444945949616,0.20284041708199016,1000 +LGBM Regr.,Logistic,0.95,0.957,0.9859614659188063,0.20284041708199016,1000 +LassoCV,LGBM Clas.,0.9,0.916,1.364184861790926,0.3340226877296898,1000 +LassoCV,LGBM Clas.,0.95,0.968,1.625526523183968,0.3340226877296898,1000 +LassoCV,Logistic,0.9,0.913,0.7758018959411505,0.1948636425368796,1000 +LassoCV,Logistic,0.95,0.96,0.9244249763431417,0.1948636425368796,1000 +LassoCV,RF Clas.,0.9,0.892,0.5725347715806113,0.14886905941160222,1000 +LassoCV,RF Clas.,0.95,0.94,0.6822172586107998,0.14886905941160222,1000 +RF Regr.,Logistic,0.9,0.899,0.8139922164772362,0.2045901899504402,1000 +RF Regr.,Logistic,0.95,0.952,0.9699315500481204,0.2045901899504402,1000 +RF Regr.,RF Clas.,0.9,0.885,0.5863252811302729,0.15402934863308917,1000 +RF Regr.,RF Clas.,0.95,0.93,0.6986496642686135,0.15402934863308917,1000 diff --git a/results/irm/irm_atte_metadata.csv b/results/irm/irm_atte_metadata.csv new file mode 100644 index 0000000..92114f4 --- /dev/null +++ b/results/irm/irm_atte_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,IRMATTECoverageSimulation,2025-06-03 16:07,13.51489497423172,3.12.9,scripts/irm/irm_atte_config.yml From 45a7bf13d98be58353133cea7cb09d934f6db6b5 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 09:37:12 +0200 Subject: [PATCH 074/142] add irm ate sensitivity to monte cover --- monte-cover/src/montecover/irm/__init__.py | 2 + .../src/montecover/irm/irm_ate_sensitivity.py | 172 ++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 monte-cover/src/montecover/irm/irm_ate_sensitivity.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index 215381a..6b0319f 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -1,12 +1,14 @@ """Monte Carlo coverage simulations for IRM.""" from montecover.irm.irm_ate import IRMATECoverageSimulation +from montecover.irm.irm_ate_sensitivity import IRMATESensitivityCoverageSimulation from montecover.irm.irm_atte import IRMATTECoverageSimulation from montecover.irm.irm_cate import IRMCATECoverageSimulation from montecover.irm.irm_gate import IRMGATECoverageSimulation __all__ = [ "IRMATECoverageSimulation", + "IRMATESensitivityCoverageSimulation", "IRMATTECoverageSimulation", "IRMCATECoverageSimulation", "IRMGATECoverageSimulation", diff --git a/monte-cover/src/montecover/irm/irm_ate_sensitivity.py b/monte-cover/src/montecover/irm/irm_ate_sensitivity.py new file mode 100644 index 0000000..09ca004 --- /dev/null +++ b/monte-cover/src/montecover/irm/irm_ate_sensitivity.py @@ -0,0 +1,172 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.datasets import make_confounded_irm_data + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class IRMATESensitivityCoverageSimulation(BaseSimulation): + """Simulation class for sensitivity properties of DoubleMLIRM for ATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + dgp_dict = make_confounded_irm_data( + n_obs=int(1e6), + theta=self.dgp_parameters["theta"][0], + gamma_a=self.dgp_parameters["gamma_a"][0], + beta_a=self.dgp_parameters["beta_a"][0], + var_epsilon_y=self.dgp_parameters["var_epsilon_y"][0], + trimming_threshold=self.dgp_parameters["trimming_threshold"][0], + linear=self.dgp_parameters["linear"][0], + ) + + self.oracle_values = { + "theta": self.dgp_parameters["theta"], + "cf_y": dgp_dict["oracle_values"]["cf_y"], + "cf_d": dgp_dict["oracle_values"]["cf_d_ate"], + "rho": dgp_dict["oracle_values"]["rho_ate"], + } + self.logger.info(f"Oracle values: {self.oracle_values}") + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + trimming_threshold = dml_params["trimming_threshold"] + theta = self.oracle_values["theta"][0] + + # Model + dml_model = dml.DoubleMLIRM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + score="ATE", + trimming_threshold=trimming_threshold, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=theta, + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # sensitvity analysis + dml_model.sensitivity_analysis( + cf_y=self.oracle_values["cf_y"], + cf_d=self.oracle_values["cf_d"], + rho=self.oracle_values["rho"], + level=level, + null_hypothesis=theta, + ) + sensitivity_results = { + "Coverage (Lower)": theta >= dml_model.sensitivity_params["ci"]["lower"][0], + "Coverage (Upper)": theta <= dml_model.sensitivity_params["ci"]["upper"][0], + "RV": dml_model.sensitivity_params["rv"][0], + "RVa": dml_model.sensitivity_params["rva"][0], + "Bias (Lower)": abs(theta - dml_model.sensitivity_params["theta"]["lower"][0]), + "Bias (Upper)": abs(theta - dml_model.sensitivity_params["theta"]["upper"][0]), + } + # add sensitivity results to the level result coverage + level_result["coverage"].update(sensitivity_results) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + dgp_dict = make_confounded_irm_data( + n_obs=dgp_params["n_obs"], + theta=dgp_params["theta"], + gamma_a=dgp_params["gamma_a"], + beta_a=dgp_params["beta_a"], + var_epsilon_y=dgp_params["var_epsilon_y"], + trimming_threshold=dgp_params["trimming_threshold"], + linear=dgp_params["linear"], + ) + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + dml_data = dml.DoubleMLData(df, "y", "d") + return dml_data From 93c449a2eb24b774c76f7664b67d145ed43cb3a0 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 09:38:15 +0200 Subject: [PATCH 075/142] update irm ate sensitivity scripts --- scripts/irm/irm_ate_sensitivity.py | 205 +-------------------- scripts/irm/irm_ate_sensitivity_config.yml | 54 ++++++ scripts/irm/irm_ate_sensitivity_old.py | 198 ++++++++++++++++++++ 3 files changed, 262 insertions(+), 195 deletions(-) create mode 100644 scripts/irm/irm_ate_sensitivity_config.yml create mode 100644 scripts/irm/irm_ate_sensitivity_old.py diff --git a/scripts/irm/irm_ate_sensitivity.py b/scripts/irm/irm_ate_sensitivity.py index b53600c..d3651b6 100644 --- a/scripts/irm/irm_ate_sensitivity.py +++ b/scripts/irm/irm_ate_sensitivity.py @@ -1,198 +1,13 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys +from montecover.irm import IRMATESensitivityCoverageSimulation -from sklearn.linear_model import LinearRegression, LogisticRegression -from lightgbm import LGBMRegressor, LGBMClassifier - -import doubleml as dml -from doubleml.datasets import make_confounded_irm_data - -# Number of repetitions -n_rep = 500 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 5000 -theta = 5.0 -trimming_threshold = 0.05 - -dgp_pars = { - "gamma_a": 0.198, - "beta_a": 0.582, - "theta": theta, - "var_epsilon_y": 1.0, - "trimming_threshold": trimming_threshold, - "linear": False, -} - -# test inputs -np.random.seed(42) -dgp_dict = make_confounded_irm_data(n_obs=int(1e6), **dgp_pars) - -oracle_dict = dgp_dict["oracle_values"] -rho = oracle_dict["rho_ate"] -cf_y = oracle_dict["cf_y"] -cf_d = oracle_dict["cf_d_ate"] - -print(f"Confounding factor for Y: {cf_y}") -print(f"Confounding factor for D: {cf_d}") -print(f"Rho: {rho}") - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - dgp_dict = make_confounded_irm_data(n_obs=n_obs, **dgp_pars) - datasets.append(dgp_dict) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Linear Reg.", LinearRegression()), - ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 - ), - ), - ], - "learner_m": [ - ("Logistic Regr.", LogisticRegression()), - ( - "LGBM", - LGBMClassifier( - n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - dgp_dict = datasets[i_rep] - - x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] - df = pd.DataFrame( - np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), - columns=x_cols + ["y", "d"], - ) - obj_dml_data = dml.DoubleMLData(df, "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_irm = dml.DoubleMLIRM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - trimming_threshold=trimming_threshold, - ) - dml_irm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - estimate = dml_irm.coef[0] - confint = dml_irm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - # test sensitivity parameters - dml_irm.sensitivity_analysis( - cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta - ) - cover_lower = theta >= dml_irm.sensitivity_params["ci"]["lower"] - cover_upper = theta <= dml_irm.sensitivity_params["ci"]["upper"] - rv = dml_irm.sensitivity_params["rv"] - rva = dml_irm.sensitivity_params["rva"] - bias_lower = abs(theta - dml_irm.sensitivity_params["theta"]["lower"]) - bias_upper = abs(theta - dml_irm.sensitivity_params["theta"]["upper"]) - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_ate_sensitivity.py" -path = "results/irm/irm_ate_sensitivity" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } +# Create and run simulation with config file +sim = IRMATESensitivityCoverageSimulation( + config_file="scripts/irm/irm_ate_sensitivity_config.yml", + log_level="INFO", + log_file="logs/irm/irm_ate_sensitivity_sim.log", ) -print(metadata) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="irm_ate_sensitivity") -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) +# Save config file for reproducibility +sim.save_config("results/irm/irm_ate_sensitivity_config.yml") diff --git a/scripts/irm/irm_ate_sensitivity_config.yml b/scripts/irm/irm_ate_sensitivity_config.yml new file mode 100644 index 0000000..c0d29d2 --- /dev/null +++ b/scripts/irm/irm_ate_sensitivity_config.yml @@ -0,0 +1,54 @@ +# Simulation parameters for IRM ATE Coverage + +simulation_parameters: + repetitions: 10 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [5.0] # Treatment effect + n_obs: [5000] # Sample size + trimming_threshold: [0.05] # Trimming threshold + var_epsilon_y: [1.0] # Variance of outcome noise + linear: [False] + gamma_a: [0.198] + beta_a: [0.582] + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logit: &logit + name: "Logistic" + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + +dml_parameters: + learners: + - ml_g: *linear + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *linear + ml_m: *lgbmc + + trimming_threshold: [0.05] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/irm/irm_ate_sensitivity_old.py b/scripts/irm/irm_ate_sensitivity_old.py new file mode 100644 index 0000000..b53600c --- /dev/null +++ b/scripts/irm/irm_ate_sensitivity_old.py @@ -0,0 +1,198 @@ +import numpy as np +import pandas as pd +from datetime import datetime +import time +import sys + +from sklearn.linear_model import LinearRegression, LogisticRegression +from lightgbm import LGBMRegressor, LGBMClassifier + +import doubleml as dml +from doubleml.datasets import make_confounded_irm_data + +# Number of repetitions +n_rep = 500 +max_runtime = 5.5 * 3600 # 5.5 hours in seconds + +# DGP pars +n_obs = 5000 +theta = 5.0 +trimming_threshold = 0.05 + +dgp_pars = { + "gamma_a": 0.198, + "beta_a": 0.582, + "theta": theta, + "var_epsilon_y": 1.0, + "trimming_threshold": trimming_threshold, + "linear": False, +} + +# test inputs +np.random.seed(42) +dgp_dict = make_confounded_irm_data(n_obs=int(1e6), **dgp_pars) + +oracle_dict = dgp_dict["oracle_values"] +rho = oracle_dict["rho_ate"] +cf_y = oracle_dict["cf_y"] +cf_d = oracle_dict["cf_d_ate"] + +print(f"Confounding factor for Y: {cf_y}") +print(f"Confounding factor for D: {cf_d}") +print(f"Rho: {rho}") + +# to get the best possible comparison between different learners (and settings) we first simulate all datasets +np.random.seed(42) +datasets = [] +for i in range(n_rep): + dgp_dict = make_confounded_irm_data(n_obs=n_obs, **dgp_pars) + datasets.append(dgp_dict) + +# set up hyperparameters +hyperparam_dict = { + "learner_g": [ + ("Linear Reg.", LinearRegression()), + ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 + ), + ), + ], + "learner_m": [ + ("Logistic Regr.", LogisticRegression()), + ( + "LGBM", + LGBMClassifier( + n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 + ), + ), + ], + "level": [0.95, 0.90], +} + +# set up the results dataframe +df_results_detailed = pd.DataFrame() + +# start simulation +np.random.seed(42) +start_time = time.time() + +for i_rep in range(n_rep): + print(f"Repetition: {i_rep}/{n_rep}", end="\r") + + # Check the elapsed time + elapsed_time = time.time() - start_time + if elapsed_time > max_runtime: + print("Maximum runtime exceeded. Stopping the simulation.") + break + + # define the DoubleML data object + dgp_dict = datasets[i_rep] + + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + obj_dml_data = dml.DoubleMLData(df, "y", "d") + + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): + # Set machine learning methods for g & m + dml_irm = dml.DoubleMLIRM( + obj_dml_data=obj_dml_data, + ml_g=ml_g, + ml_m=ml_m, + trimming_threshold=trimming_threshold, + ) + dml_irm.fit(n_jobs_cv=5) + + for level_idx, level in enumerate(hyperparam_dict["level"]): + estimate = dml_irm.coef[0] + confint = dml_irm.confint(level=level) + coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] + + # test sensitivity parameters + dml_irm.sensitivity_analysis( + cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta + ) + cover_lower = theta >= dml_irm.sensitivity_params["ci"]["lower"] + cover_upper = theta <= dml_irm.sensitivity_params["ci"]["upper"] + rv = dml_irm.sensitivity_params["rv"] + rva = dml_irm.sensitivity_params["rva"] + bias_lower = abs(theta - dml_irm.sensitivity_params["theta"]["lower"]) + bias_upper = abs(theta - dml_irm.sensitivity_params["theta"]["upper"]) + + df_results_detailed = pd.concat( + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], + "Bias": abs(estimate - theta), + "Coverage (Lower)": cover_lower.astype(int), + "Coverage (Upper)": cover_upper.astype(int), + "RV": rv, + "RVa": rva, + "Bias (Lower)": bias_lower, + "Bias (Upper)": bias_upper, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + ) + .reset_index() +) +print(df_results) + +end_time = time.time() +total_runtime = end_time - start_time + +# save results +script_name = "irm_ate_sensitivity.py" +path = "results/irm/irm_ate_sensitivity" + +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) +print(metadata) + +df_results.to_csv(f"{path}.csv", index=False) +metadata.to_csv(f"{path}_metadata.csv", index=False) From 43b40b4a35a4787b4e083d2b1a3ce5e514366e55 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 09:45:38 +0200 Subject: [PATCH 076/142] add atte sensitivity to monte cover --- monte-cover/src/montecover/irm/__init__.py | 2 + .../montecover/irm/irm_atte_sensitivity.py | 172 ++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 monte-cover/src/montecover/irm/irm_atte_sensitivity.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index 6b0319f..e8b399a 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -3,6 +3,7 @@ from montecover.irm.irm_ate import IRMATECoverageSimulation from montecover.irm.irm_ate_sensitivity import IRMATESensitivityCoverageSimulation from montecover.irm.irm_atte import IRMATTECoverageSimulation +from montecover.irm.irm_atte_sensitivity import IRMATTESensitivityCoverageSimulation from montecover.irm.irm_cate import IRMCATECoverageSimulation from montecover.irm.irm_gate import IRMGATECoverageSimulation @@ -10,6 +11,7 @@ "IRMATECoverageSimulation", "IRMATESensitivityCoverageSimulation", "IRMATTECoverageSimulation", + "IRMATTESensitivityCoverageSimulation", "IRMCATECoverageSimulation", "IRMGATECoverageSimulation", ] diff --git a/monte-cover/src/montecover/irm/irm_atte_sensitivity.py b/monte-cover/src/montecover/irm/irm_atte_sensitivity.py new file mode 100644 index 0000000..47ec91f --- /dev/null +++ b/monte-cover/src/montecover/irm/irm_atte_sensitivity.py @@ -0,0 +1,172 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.datasets import make_confounded_irm_data + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class IRMATTESensitivityCoverageSimulation(BaseSimulation): + """Simulation class for sensitivity properties of DoubleMLIRM for ATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + dgp_dict = make_confounded_irm_data( + n_obs=int(1e6), + theta=self.dgp_parameters["theta"][0], + gamma_a=self.dgp_parameters["gamma_a"][0], + beta_a=self.dgp_parameters["beta_a"][0], + var_epsilon_y=self.dgp_parameters["var_epsilon_y"][0], + trimming_threshold=self.dgp_parameters["trimming_threshold"][0], + linear=self.dgp_parameters["linear"][0], + ) + + self.oracle_values = { + "theta": self.dgp_parameters["theta"], + "cf_y": dgp_dict["oracle_values"]["cf_y"], + "cf_d": dgp_dict["oracle_values"]["cf_d_atte"], + "rho": dgp_dict["oracle_values"]["rho_atte"], + } + self.logger.info(f"Oracle values: {self.oracle_values}") + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + trimming_threshold = dml_params["trimming_threshold"] + theta = self.oracle_values["theta"][0] + + # Model + dml_model = dml.DoubleMLIRM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + score="ATTE", + trimming_threshold=trimming_threshold, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=theta, + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # sensitvity analysis + dml_model.sensitivity_analysis( + cf_y=self.oracle_values["cf_y"], + cf_d=self.oracle_values["cf_d"], + rho=self.oracle_values["rho"], + level=level, + null_hypothesis=theta, + ) + sensitivity_results = { + "Coverage (Lower)": theta >= dml_model.sensitivity_params["ci"]["lower"][0], + "Coverage (Upper)": theta <= dml_model.sensitivity_params["ci"]["upper"][0], + "RV": dml_model.sensitivity_params["rv"][0], + "RVa": dml_model.sensitivity_params["rva"][0], + "Bias (Lower)": abs(theta - dml_model.sensitivity_params["theta"]["lower"][0]), + "Bias (Upper)": abs(theta - dml_model.sensitivity_params["theta"]["upper"][0]), + } + # add sensitivity results to the level result coverage + level_result["coverage"].update(sensitivity_results) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.DoubleMLData: + """Generate data for the simulation.""" + dgp_dict = make_confounded_irm_data( + n_obs=dgp_params["n_obs"], + theta=dgp_params["theta"], + gamma_a=dgp_params["gamma_a"], + beta_a=dgp_params["beta_a"], + var_epsilon_y=dgp_params["var_epsilon_y"], + trimming_threshold=dgp_params["trimming_threshold"], + linear=dgp_params["linear"], + ) + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + dml_data = dml.DoubleMLData(df, "y", "d") + return dml_data From 4610d77ffdfedb892d8067ff57f994e200b5236b Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 09:46:03 +0200 Subject: [PATCH 077/142] update atte sensitivity scripts --- scripts/irm/irm_atte_sensitivity.py | 205 +------------------- scripts/irm/irm_atte_sensitivity_config.yml | 54 ++++++ scripts/irm/irm_atte_sensitivity_old.py | 198 +++++++++++++++++++ 3 files changed, 262 insertions(+), 195 deletions(-) create mode 100644 scripts/irm/irm_atte_sensitivity_config.yml create mode 100644 scripts/irm/irm_atte_sensitivity_old.py diff --git a/scripts/irm/irm_atte_sensitivity.py b/scripts/irm/irm_atte_sensitivity.py index 10b5f0d..f28d9c9 100644 --- a/scripts/irm/irm_atte_sensitivity.py +++ b/scripts/irm/irm_atte_sensitivity.py @@ -1,198 +1,13 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys +from montecover.irm import IRMATTESensitivityCoverageSimulation -from sklearn.linear_model import LinearRegression, LogisticRegression -from lightgbm import LGBMRegressor, LGBMClassifier - -import doubleml as dml -from doubleml.datasets import make_confounded_irm_data - -# Number of repetitions -n_rep = 500 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 5000 -theta = 5.0 -trimming_threshold = 0.05 - -dgp_pars = { - "gamma_a": 0.151, - "beta_a": 0.580, - "theta": theta, - "var_epsilon_y": 1.0, - "trimming_threshold": trimming_threshold, - "linear": False, -} - -# test inputs -np.random.seed(42) -dgp_dict = make_confounded_irm_data(n_obs=int(1e6), **dgp_pars) - -oracle_dict = dgp_dict["oracle_values"] -rho = oracle_dict["rho_atte"] -cf_y = oracle_dict["cf_y"] -cf_d = oracle_dict["cf_d_atte"] - -print(f"Confounding factor for Y: {cf_y}") -print(f"Confounding factor for D: {cf_d}") -print(f"Rho: {rho}") - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - dgp_dict = make_confounded_irm_data(n_obs=n_obs, **dgp_pars) - datasets.append(dgp_dict) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Linear Reg.", LinearRegression()), - ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 - ), - ), - ], - "learner_m": [ - ("Logistic Regr.", LogisticRegression()), - ( - "LGBM", - LGBMClassifier( - n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - dgp_dict = datasets[i_rep] - - x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] - df = pd.DataFrame( - np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), - columns=x_cols + ["y", "d"], - ) - obj_dml_data = dml.DoubleMLData(df, "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_irm = dml.DoubleMLIRM( - obj_dml_data=obj_dml_data, - score="ATTE", - ml_g=ml_g, - ml_m=ml_m, - trimming_threshold=trimming_threshold, - ) - dml_irm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - estimate = dml_irm.coef[0] - confint = dml_irm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - # test sensitivity parameters - dml_irm.sensitivity_analysis( - cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta - ) - cover_lower = theta >= dml_irm.sensitivity_params["ci"]["lower"] - cover_upper = theta <= dml_irm.sensitivity_params["ci"]["upper"] - rv = dml_irm.sensitivity_params["rv"] - rva = dml_irm.sensitivity_params["rva"] - bias_lower = abs(theta - dml_irm.sensitivity_params["theta"]["lower"]) - bias_upper = abs(theta - dml_irm.sensitivity_params["theta"]["upper"]) - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_atte_sensitivity.py" -path = "results/irm/irm_atte_sensitivity" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } +# Create and run simulation with config file +sim = IRMATTESensitivityCoverageSimulation( + config_file="scripts/irm/irm_atte_sensitivity_config.yml", + log_level="INFO", + log_file="logs/irm/irm_atte_sensitivity_sim.log", ) -print(metadata) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="irm_atte_sensitivity") -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) +# Save config file for reproducibility +sim.save_config("results/irm/irm_atte_sensitivity_config.yml") diff --git a/scripts/irm/irm_atte_sensitivity_config.yml b/scripts/irm/irm_atte_sensitivity_config.yml new file mode 100644 index 0000000..53d2fc6 --- /dev/null +++ b/scripts/irm/irm_atte_sensitivity_config.yml @@ -0,0 +1,54 @@ +# Simulation parameters for IRM ATTE Coverage + +simulation_parameters: + repetitions: 10 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [5.0] # Treatment effect + n_obs: [5000] # Sample size + trimming_threshold: [0.05] # Trimming threshold + var_epsilon_y: [1.0] # Variance of outcome noise + linear: [False] + gamma_a: [0.151] + beta_a: [0.582] + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logit: &logit + name: "Logistic" + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + +dml_parameters: + learners: + - ml_g: *linear + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *linear + ml_m: *lgbmc + + trimming_threshold: [0.05] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/irm/irm_atte_sensitivity_old.py b/scripts/irm/irm_atte_sensitivity_old.py new file mode 100644 index 0000000..10b5f0d --- /dev/null +++ b/scripts/irm/irm_atte_sensitivity_old.py @@ -0,0 +1,198 @@ +import numpy as np +import pandas as pd +from datetime import datetime +import time +import sys + +from sklearn.linear_model import LinearRegression, LogisticRegression +from lightgbm import LGBMRegressor, LGBMClassifier + +import doubleml as dml +from doubleml.datasets import make_confounded_irm_data + +# Number of repetitions +n_rep = 500 +max_runtime = 5.5 * 3600 # 5.5 hours in seconds + +# DGP pars +n_obs = 5000 +theta = 5.0 +trimming_threshold = 0.05 + +dgp_pars = { + "gamma_a": 0.151, + "beta_a": 0.580, + "theta": theta, + "var_epsilon_y": 1.0, + "trimming_threshold": trimming_threshold, + "linear": False, +} + +# test inputs +np.random.seed(42) +dgp_dict = make_confounded_irm_data(n_obs=int(1e6), **dgp_pars) + +oracle_dict = dgp_dict["oracle_values"] +rho = oracle_dict["rho_atte"] +cf_y = oracle_dict["cf_y"] +cf_d = oracle_dict["cf_d_atte"] + +print(f"Confounding factor for Y: {cf_y}") +print(f"Confounding factor for D: {cf_d}") +print(f"Rho: {rho}") + +# to get the best possible comparison between different learners (and settings) we first simulate all datasets +np.random.seed(42) +datasets = [] +for i in range(n_rep): + dgp_dict = make_confounded_irm_data(n_obs=n_obs, **dgp_pars) + datasets.append(dgp_dict) + +# set up hyperparameters +hyperparam_dict = { + "learner_g": [ + ("Linear Reg.", LinearRegression()), + ( + "LGBM", + LGBMRegressor( + n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 + ), + ), + ], + "learner_m": [ + ("Logistic Regr.", LogisticRegression()), + ( + "LGBM", + LGBMClassifier( + n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 + ), + ), + ], + "level": [0.95, 0.90], +} + +# set up the results dataframe +df_results_detailed = pd.DataFrame() + +# start simulation +np.random.seed(42) +start_time = time.time() + +for i_rep in range(n_rep): + print(f"Repetition: {i_rep}/{n_rep}", end="\r") + + # Check the elapsed time + elapsed_time = time.time() - start_time + if elapsed_time > max_runtime: + print("Maximum runtime exceeded. Stopping the simulation.") + break + + # define the DoubleML data object + dgp_dict = datasets[i_rep] + + x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] + df = pd.DataFrame( + np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), + columns=x_cols + ["y", "d"], + ) + obj_dml_data = dml.DoubleMLData(df, "y", "d") + + for learner_g_idx, (learner_g_name, ml_g) in enumerate( + hyperparam_dict["learner_g"] + ): + for learner_m_idx, (learner_m_name, ml_m) in enumerate( + hyperparam_dict["learner_m"] + ): + # Set machine learning methods for g & m + dml_irm = dml.DoubleMLIRM( + obj_dml_data=obj_dml_data, + score="ATTE", + ml_g=ml_g, + ml_m=ml_m, + trimming_threshold=trimming_threshold, + ) + dml_irm.fit(n_jobs_cv=5) + + for level_idx, level in enumerate(hyperparam_dict["level"]): + estimate = dml_irm.coef[0] + confint = dml_irm.confint(level=level) + coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) + ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] + + # test sensitivity parameters + dml_irm.sensitivity_analysis( + cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta + ) + cover_lower = theta >= dml_irm.sensitivity_params["ci"]["lower"] + cover_upper = theta <= dml_irm.sensitivity_params["ci"]["upper"] + rv = dml_irm.sensitivity_params["rv"] + rva = dml_irm.sensitivity_params["rva"] + bias_lower = abs(theta - dml_irm.sensitivity_params["theta"]["lower"]) + bias_upper = abs(theta - dml_irm.sensitivity_params["theta"]["upper"]) + + df_results_detailed = pd.concat( + ( + df_results_detailed, + pd.DataFrame( + { + "Coverage": coverage.astype(int), + "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], + "Bias": abs(estimate - theta), + "Coverage (Lower)": cover_lower.astype(int), + "Coverage (Upper)": cover_upper.astype(int), + "RV": rv, + "RVa": rva, + "Bias (Lower)": bias_lower, + "Bias (Upper)": bias_upper, + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + "repetition": i_rep, + }, + index=[0], + ), + ), + ignore_index=True, + ) + +df_results = ( + df_results_detailed.groupby(["Learner g", "Learner m", "level"]) + .agg( + { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Coverage (Lower)": "mean", + "Coverage (Upper)": "mean", + "RV": "mean", + "RVa": "mean", + "Bias (Lower)": "mean", + "Bias (Upper)": "mean", + "repetition": "count", + } + ) + .reset_index() +) +print(df_results) +end_time = time.time() +total_runtime = end_time - start_time + +# save results +script_name = "irm_atte_sensitivity.py" +path = "results/irm/irm_atte_sensitivity" + +metadata = pd.DataFrame( + { + "DoubleML Version": [dml.__version__], + "Script": [script_name], + "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], + "Total Runtime (seconds)": [total_runtime], + "Python Version": [ + f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" + ], + } +) +print(metadata) + +df_results.to_csv(f"{path}.csv", index=False) +metadata.to_csv(f"{path}_metadata.csv", index=False) From 0613db08bf0e7ef1414b3acdc570f60e76fe178a Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 09:57:54 +0200 Subject: [PATCH 078/142] update irm qmd and workflow --- .github/workflows/irm_sim.yml | 31 ++++++++++++++++++++----------- doc/irm/irm.qmd | 6 +++--- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/.github/workflows/irm_sim.yml b/.github/workflows/irm_sim.yml index dcd0d4c..5d26a1b 100644 --- a/.github/workflows/irm_sim.yml +++ b/.github/workflows/irm_sim.yml @@ -17,10 +17,10 @@ jobs: strategy: matrix: script: [ - 'scripts/irm/irm_ate_coverage.py', - 'scripts/irm/irm_atte_coverage.py', - 'scripts/irm/irm_cate_coverage.py', - 'scripts/irm/irm_gate_coverage.py', + 'scripts/irm/irm_ate.py', + 'scripts/irm/irm_atte.py', + 'scripts/irm/irm_cate.py', + 'scripts/irm/irm_gate.py', 'scripts/irm/irm_ate_sensitivity.py', 'scripts/irm/irm_atte_sensitivity.py', ] @@ -52,20 +52,27 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.7.8" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + cd monte-cover + uv venv + uv sync - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -73,7 +80,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | diff --git a/doc/irm/irm.qmd b/doc/irm/irm.qmd index 1fb79e8..f30fe75 100644 --- a/doc/irm/irm.qmd +++ b/doc/irm/irm.qmd @@ -135,7 +135,7 @@ generate_and_show_styled_table( ## Sensitivity -The simulations are based on the the ADD-DGP with $10,000$ observations. As the DGP is nonlinear, we will only use corresponding learners. Since the DGP includes an unobserved confounder, we would expect a bias in the ATE estimates, leading to low coverage of the true parameter. +The simulations are based on the the [make_confounded_irm_data](https://docs.doubleml.org/stable/api/generated/doubleml.datasets.make_confounded_irm_data.html#doubleml.datasets.make_confounded_irm_data)-DGP with $5,000$ observations. Since the DGP includes an unobserved confounder, we would expect a bias in the ATE estimates, leading to low coverage of the true parameter. The confounding is set such that both sensitivity parameters are approximately $cf_y=cf_d=0.1$, such that the robustness value $RV$ should be approximately $10\%$. Further, the corresponding confidence intervals are one-sided (since the direction of the bias is unkown), such that only one side should approximate the corresponding coverage level (here only the lower coverage is relevant since the bias is positive). Remark that for the coverage level the value of $\rho$ has to be correctly specified, such that the coverage level will be generally (significantly) larger than the nominal level under the conservative choice of $|\rho|=1$. @@ -157,7 +157,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df_ate_sens = pd.read_csv("../../results/irm/irm_ate_sensitivity.csv", index_col=None) +df_ate_sens = pd.read_csv("../../results/irm/irm_ate_sensitivity_coverage.csv", index_col=None) assert df_ate_sens["repetition"].nunique() == 1 n_rep_ate_sens = df_ate_sens["repetition"].unique()[0] @@ -211,7 +211,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data -df_atte_sens = pd.read_csv("../../results/irm/irm_atte_sensitivity.csv", index_col=None) +df_atte_sens = pd.read_csv("../../results/irm/irm_atte_sensitivity_coverage.csv", index_col=None) assert df_atte_sens["repetition"].nunique() == 1 n_rep_atte_sens = df_atte_sens["repetition"].unique()[0] From 74cacc4dddbf2e292911d73fa271fc8dd9ab2c97 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 11:00:53 +0200 Subject: [PATCH 079/142] rerun ate sensitivity simulation --- results/irm/irm_ate_sensitivity.csv | 9 ---- results/irm/irm_ate_sensitivity_config.yml | 53 ++++++++++++++++++++ results/irm/irm_ate_sensitivity_coverage.csv | 9 ++++ results/irm/irm_ate_sensitivity_metadata.csv | 4 +- scripts/irm/irm_ate_sensitivity_config.yml | 4 +- 5 files changed, 66 insertions(+), 13 deletions(-) delete mode 100644 results/irm/irm_ate_sensitivity.csv create mode 100644 results/irm/irm_ate_sensitivity_config.yml create mode 100644 results/irm/irm_ate_sensitivity_coverage.csv diff --git a/results/irm/irm_ate_sensitivity.csv b/results/irm/irm_ate_sensitivity.csv deleted file mode 100644 index 6e10770..0000000 --- a/results/irm/irm_ate_sensitivity.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition -LGBM,LGBM,0.9,0.112,0.266748233354866,0.17891290135375168,0.962,1.0,0.12379347892727971,0.05409589192160397,0.04254708028278409,0.32210978560617337,500 -LGBM,LGBM,0.95,0.318,0.31785012462427936,0.17891290135375168,0.998,1.0,0.12379347892727971,0.03441021667548556,0.04254708028278409,0.32210978560617337,500 -LGBM,Logistic Regr.,0.9,0.292,0.2577778025822409,0.14922926552528684,1.0,1.0,0.10066571951295798,0.03493291437943745,0.029012990398602386,0.2979424530565633,500 -LGBM,Logistic Regr.,0.95,0.548,0.30716119707955875,0.14922926552528684,1.0,1.0,0.10066571951295798,0.01869752301454861,0.029012990398602386,0.2979424530565633,500 -Linear Reg.,LGBM,0.9,0.122,0.2675665174758639,0.17873104426193565,0.964,1.0,0.12647219547900976,0.05512739569620471,0.04513946154555041,0.31857328180879246,500 -Linear Reg.,LGBM,0.95,0.314,0.31882517029399604,0.17873104426193565,0.998,1.0,0.12647219547900976,0.035017588858111126,0.04513946154555041,0.31857328180879246,500 -Linear Reg.,Logistic Regr.,0.9,0.86,0.2592281409673473,0.08970251629543106,1.0,1.0,0.06300567732617765,0.006719868195974334,0.05720312141493262,0.23496869651774063,500 -Linear Reg.,Logistic Regr.,0.95,0.974,0.30888938185760084,0.08970251629543106,1.0,1.0,0.06300567732617765,0.0014945204694376396,0.05720312141493262,0.23496869651774063,500 diff --git a/results/irm/irm_ate_sensitivity_config.yml b/results/irm/irm_ate_sensitivity_config.yml new file mode 100644 index 0000000..74143aa --- /dev/null +++ b/results/irm/irm_ate_sensitivity_config.yml @@ -0,0 +1,53 @@ +simulation_parameters: + repetitions: 500 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 5.0 + n_obs: + - 5000 + trimming_threshold: + - 0.05 + var_epsilon_y: + - 1.0 + linear: + - false + gamma_a: + - 0.198 + beta_a: + - 0.582 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 + trimming_threshold: + - 0.05 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_ate_sensitivity_coverage.csv b/results/irm/irm_ate_sensitivity_coverage.csv new file mode 100644 index 0000000..4a63af0 --- /dev/null +++ b/results/irm/irm_ate_sensitivity_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition +LGBM Regr.,LGBM Clas.,0.9,0.104,0.2668157568060522,0.18026525524152154,0.966,1.0,0.12473788062439613,0.05508904509343494,0.04380159419714633,0.3234512135135403,500 +LGBM Regr.,LGBM Clas.,0.95,0.276,0.31793058377898364,0.18026525524152154,1.0,1.0,0.12473788062439613,0.03540613542014128,0.04380159419714633,0.3234512135135403,500 +LGBM Regr.,Logistic,0.9,0.248,0.25763009474845106,0.14980027719730954,0.998,1.0,0.10093696287018208,0.03536055959101725,0.027371865522670537,0.2987135019044584,500 +LGBM Regr.,Logistic,0.95,0.552,0.306985192339855,0.14980027719730954,1.0,1.0,0.10093696287018208,0.01878662839660344,0.027371865522670537,0.2987135019044584,500 +Linear,LGBM Clas.,0.9,0.112,0.26715210077204105,0.17865402724192433,0.962,1.0,0.12630248546657805,0.055046351043189806,0.04436057060203107,0.31869461365134216,500 +Linear,LGBM Clas.,0.95,0.282,0.318331362333959,0.17865402724192433,0.998,1.0,0.12630248546657805,0.03487837647302397,0.04436057060203107,0.31869461365134216,500 +Linear,Logistic,0.9,0.852,0.2589605314211221,0.09016543407251673,1.0,1.0,0.06325807709105473,0.00696464260372732,0.05686871205333632,0.23561615221802584,500 +Linear,Logistic,0.95,0.978,0.30857050541538944,0.09016543407251673,1.0,1.0,0.06325807709105473,0.0015852998947931969,0.05686871205333632,0.23561615221802584,500 diff --git a/results/irm/irm_ate_sensitivity_metadata.csv b/results/irm/irm_ate_sensitivity_metadata.csv index 327aa8c..d859488 100644 --- a/results/irm/irm_ate_sensitivity_metadata.csv +++ b/results/irm/irm_ate_sensitivity_metadata.csv @@ -1,2 +1,2 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,irm_ate_sensitivity.py,2025-05-22 14:48:09,6858.955473899841,3.12.10 +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,IRMATESensitivityCoverageSimulation,2025-06-04 10:16,29.540068797270457,3.12.3,scripts/irm/irm_ate_sensitivity_config.yml diff --git a/scripts/irm/irm_ate_sensitivity_config.yml b/scripts/irm/irm_ate_sensitivity_config.yml index c0d29d2..c051ac0 100644 --- a/scripts/irm/irm_ate_sensitivity_config.yml +++ b/scripts/irm/irm_ate_sensitivity_config.yml @@ -1,7 +1,7 @@ -# Simulation parameters for IRM ATE Coverage +# Simulation parameters for IRM ATE Sensitivity Coverage simulation_parameters: - repetitions: 10 + repetitions: 500 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 From 7a9e2c1f081297cd0667ad4fc7ecad25219a21c4 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 11:01:09 +0200 Subject: [PATCH 080/142] rerun irm atte sensitivity simulation --- results/irm/irm_atte_sensitivity.csv | 9 ---- results/irm/irm_atte_sensitivity_config.yml | 53 +++++++++++++++++++ results/irm/irm_atte_sensitivity_coverage.csv | 9 ++++ results/irm/irm_atte_sensitivity_metadata.csv | 4 +- scripts/irm/irm_atte_sensitivity_config.yml | 4 +- 5 files changed, 66 insertions(+), 13 deletions(-) delete mode 100644 results/irm/irm_atte_sensitivity.csv create mode 100644 results/irm/irm_atte_sensitivity_config.yml create mode 100644 results/irm/irm_atte_sensitivity_coverage.csv diff --git a/results/irm/irm_atte_sensitivity.csv b/results/irm/irm_atte_sensitivity.csv deleted file mode 100644 index 7737483..0000000 --- a/results/irm/irm_atte_sensitivity.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition -LGBM,LGBM,0.9,0.702,0.348892741328716,0.1353547312940485,0.95,1.0,0.10509293446782589,0.024288450266824572,0.06499582700735684,0.25876253126104387,500 -LGBM,LGBM,0.95,0.826,0.41573134306126747,0.1353547312940485,0.982,1.0,0.10509293446782589,0.012452066983782116,0.06499582700735684,0.25876253126104387,500 -LGBM,Logistic Regr.,0.9,0.714,0.34666910502599596,0.13078975736827733,0.964,1.0,0.0981701852821437,0.022246998237972524,0.06545442330246612,0.2589976808508975,500 -LGBM,Logistic Regr.,0.95,0.834,0.41308171698108886,0.13078975736827733,0.984,1.0,0.0981701852821437,0.010949342084431735,0.06545442330246612,0.2589976808508975,500 -Linear Reg.,LGBM,0.9,0.754,0.3496967006881292,0.12455057551341779,0.962,1.0,0.09867724125956995,0.0202175935504151,0.06504946816195568,0.2439341901457105,500 -Linear Reg.,LGBM,0.95,0.858,0.4166893197247619,0.12455057551341779,0.986,1.0,0.09867724125956995,0.009856683129418066,0.06504946816195568,0.2439341901457105,500 -Linear Reg.,Logistic Regr.,0.9,0.948,0.3502540540945954,0.07444772768321123,0.996,1.0,0.05840145836627322,0.004181143741279689,0.09544484272838333,0.17545346180009289,500 -Linear Reg.,Logistic Regr.,0.95,0.976,0.41735344727108903,0.07444772768321123,0.998,1.0,0.05840145836627322,0.0015739249195781788,0.09544484272838333,0.17545346180009289,500 diff --git a/results/irm/irm_atte_sensitivity_config.yml b/results/irm/irm_atte_sensitivity_config.yml new file mode 100644 index 0000000..bf06bc6 --- /dev/null +++ b/results/irm/irm_atte_sensitivity_config.yml @@ -0,0 +1,53 @@ +simulation_parameters: + repetitions: 500 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 5.0 + n_obs: + - 5000 + trimming_threshold: + - 0.05 + var_epsilon_y: + - 1.0 + linear: + - false + gamma_a: + - 0.151 + beta_a: + - 0.582 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 + trimming_threshold: + - 0.05 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_atte_sensitivity_coverage.csv b/results/irm/irm_atte_sensitivity_coverage.csv new file mode 100644 index 0000000..075e58b --- /dev/null +++ b/results/irm/irm_atte_sensitivity_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition +LGBM Regr.,LGBM Clas.,0.9,0.724,0.3490468150328256,0.1335281439881145,0.95,1.0,0.1038722101661171,0.023169595411329586,0.06489839293328352,0.2564847068835367,500 +LGBM Regr.,LGBM Clas.,0.95,0.848,0.4159149332033151,0.1335281439881145,0.984,1.0,0.1038722101661171,0.011313984709802882,0.06489839293328352,0.2564847068835367,500 +LGBM Regr.,Logistic,0.9,0.712,0.34686964803507303,0.13021401649938852,0.968,1.0,0.09785329627117717,0.02088828773212853,0.06357450466836227,0.25752793576799426,500 +LGBM Regr.,Logistic,0.95,0.862,0.4133206787152529,0.13021401649938852,0.986,1.0,0.09785329627117717,0.010006537111844464,0.06357450466836227,0.25752793576799426,500 +Linear,LGBM Clas.,0.9,0.778,0.34985166701129805,0.12304199369830472,0.968,1.0,0.09780901861894682,0.018644199845226802,0.06344115655765417,0.24215873513324584,500 +Linear,LGBM Clas.,0.95,0.88,0.41687397348802135,0.12304199369830472,0.988,1.0,0.09780901861894682,0.008642793757112277,0.06344115655765417,0.24215873513324584,500 +Linear,Logistic,0.9,0.956,0.35055289955459806,0.0738271575494762,0.996,1.0,0.05790900052274957,0.004015909139992085,0.0975242247284002,0.17368819501662186,500 +Linear,Logistic,0.95,0.98,0.41770954360024026,0.0738271575494762,0.998,1.0,0.05790900052274957,0.0013840310375437,0.0975242247284002,0.17368819501662186,500 diff --git a/results/irm/irm_atte_sensitivity_metadata.csv b/results/irm/irm_atte_sensitivity_metadata.csv index 2fc4ba5..e0ae81f 100644 --- a/results/irm/irm_atte_sensitivity_metadata.csv +++ b/results/irm/irm_atte_sensitivity_metadata.csv @@ -1,2 +1,2 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,irm_atte_sensitivity.py,2025-05-22 14:47:30,6819.7349536418915,3.12.10 +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,IRMATTESensitivityCoverageSimulation,2025-06-04 10:49,30.47395207484563,3.12.3,scripts/irm/irm_atte_sensitivity_config.yml diff --git a/scripts/irm/irm_atte_sensitivity_config.yml b/scripts/irm/irm_atte_sensitivity_config.yml index 53d2fc6..e6df9c4 100644 --- a/scripts/irm/irm_atte_sensitivity_config.yml +++ b/scripts/irm/irm_atte_sensitivity_config.yml @@ -1,7 +1,7 @@ -# Simulation parameters for IRM ATTE Coverage +# Simulation parameters for IRM ATTE Sensitivity Coverage simulation_parameters: - repetitions: 10 + repetitions: 500 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 From d59eaf772093647a091114d2b08bd5021b27fa33 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 13:59:45 +0200 Subject: [PATCH 081/142] add apo to monte cover --- monte-cover/src/montecover/irm/__init__.py | 2 + monte-cover/src/montecover/irm/apo.py | 151 +++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 monte-cover/src/montecover/irm/apo.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index e8b399a..d23563e 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -1,5 +1,6 @@ """Monte Carlo coverage simulations for IRM.""" +from montecover.irm.apo import APOCoverageSimulation from montecover.irm.irm_ate import IRMATECoverageSimulation from montecover.irm.irm_ate_sensitivity import IRMATESensitivityCoverageSimulation from montecover.irm.irm_atte import IRMATTECoverageSimulation @@ -8,6 +9,7 @@ from montecover.irm.irm_gate import IRMGATECoverageSimulation __all__ = [ + "APOCoverageSimulation", "IRMATECoverageSimulation", "IRMATESensitivityCoverageSimulation", "IRMATTECoverageSimulation", diff --git a/monte-cover/src/montecover/irm/apo.py b/monte-cover/src/montecover/irm/apo.py new file mode 100644 index 0000000..a2b2366 --- /dev/null +++ b/monte-cover/src/montecover/irm/apo.py @@ -0,0 +1,151 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.datasets import make_irm_data_discrete_treatments + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class APOCoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLAPOs for APO estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + n_levels = self.dgp_parameters["n_levels"][0] + data_apo_oracle = make_irm_data_discrete_treatments( + n_obs=int(1e6), n_levels=n_levels, linear=self.dgp_parameters["linear"][0] + ) + + y0 = data_apo_oracle["oracle_values"]["y0"] + ite = data_apo_oracle["oracle_values"]["ite"] + d = data_apo_oracle["d"] + + average_ites = np.full(n_levels + 1, np.nan) + apos = np.full(n_levels + 1, np.nan) + for i in range(n_levels + 1): + average_ites[i] = np.mean(ite[d == i]) * (i > 0) + apos[i] = np.mean(y0) + average_ites[i] + + ates = np.full(n_levels, np.nan) + for i in range(n_levels): + ates[i] = apos[i + 1] - apos[0] + + self.logger.info(f"Levels and their counts:\n{np.unique(d, return_counts=True)}") + self.logger.info(f"True APOs: {apos}") + self.logger.info(f"True ATEs: {ates}") + + self.oracle_values = dict() + self.oracle_values["apos"] = apos + self.oracle_values["ates"] = ates + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + treatment_level = dml_params["treatment_level"] + trimming_threshold = dml_params["trimming_threshold"] + + # Model + dml_model = dml.DoubleMLAPO( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + treatment_level=treatment_level, + trimming_threshold=trimming_threshold, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["apos"][treatment_level], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_irm_data_discrete_treatments( + n_obs=dgp_params["n_obs"], + n_levels=dgp_params["n_levels"], + linear=dgp_params["linear"], + ) + df_apo = pd.DataFrame( + np.column_stack((data["y"], data["d"], data["x"])), + columns=["y", "d"] + ["x" + str(i) for i in range(data["x"].shape[1])], + ) + dml_data = dml.DoubleMLData(df_apo, "y", "d") + return dml_data From a68492346e5a335b6ee8e3642ec5643da381ab0c Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 14:05:43 +0200 Subject: [PATCH 082/142] add treatment level to apo simulation --- monte-cover/src/montecover/irm/apo.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monte-cover/src/montecover/irm/apo.py b/monte-cover/src/montecover/irm/apo.py index a2b2366..b887b7d 100644 --- a/monte-cover/src/montecover/irm/apo.py +++ b/monte-cover/src/montecover/irm/apo.py @@ -107,6 +107,7 @@ def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) { "Learner g": learner_g_name, "Learner m": learner_m_name, + "Treatment Level": treatment_level, "level": level, } ) @@ -120,7 +121,7 @@ def summarize_results(self): self.logger.info("Summarizing simulation results") # Group by parameter combinations - groupby_cols = ["Learner g", "Learner m", "level"] + groupby_cols = ["Learner g", "Learner m", "Treatment Level", "level"] aggregation_dict = { "Coverage": "mean", "CI Length": "mean", From d3158b1171b6f570fa406b5d1b0cfc6feaa6596e Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 14:18:27 +0200 Subject: [PATCH 083/142] add apos to monte cover --- monte-cover/src/montecover/irm/__init__.py | 2 + monte-cover/src/montecover/irm/apos.py | 164 +++++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 monte-cover/src/montecover/irm/apos.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index d23563e..e4686f6 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -1,6 +1,7 @@ """Monte Carlo coverage simulations for IRM.""" from montecover.irm.apo import APOCoverageSimulation +from montecover.irm.apos import APOSCoverageSimulation from montecover.irm.irm_ate import IRMATECoverageSimulation from montecover.irm.irm_ate_sensitivity import IRMATESensitivityCoverageSimulation from montecover.irm.irm_atte import IRMATTECoverageSimulation @@ -10,6 +11,7 @@ __all__ = [ "APOCoverageSimulation", + "APOSCoverageSimulation", "IRMATECoverageSimulation", "IRMATESensitivityCoverageSimulation", "IRMATTECoverageSimulation", diff --git a/monte-cover/src/montecover/irm/apos.py b/monte-cover/src/montecover/irm/apos.py new file mode 100644 index 0000000..4b19deb --- /dev/null +++ b/monte-cover/src/montecover/irm/apos.py @@ -0,0 +1,164 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.datasets import make_irm_data_discrete_treatments + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class APOSCoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLAPOs for APO estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + n_levels = self.dgp_parameters["n_levels"][0] + data_apo_oracle = make_irm_data_discrete_treatments( + n_obs=int(1e6), n_levels=n_levels, linear=self.dgp_parameters["linear"][0] + ) + + y0 = data_apo_oracle["oracle_values"]["y0"] + ite = data_apo_oracle["oracle_values"]["ite"] + d = data_apo_oracle["d"] + + average_ites = np.full(n_levels + 1, np.nan) + apos = np.full(n_levels + 1, np.nan) + for i in range(n_levels + 1): + average_ites[i] = np.mean(ite[d == i]) * (i > 0) + apos[i] = np.mean(y0) + average_ites[i] + + ates = np.full(n_levels, np.nan) + for i in range(n_levels): + ates[i] = apos[i + 1] - apos[0] + + self.logger.info(f"Levels and their counts:\n{np.unique(d, return_counts=True)}") + self.logger.info(f"True APOs: {apos}") + self.logger.info(f"True ATEs: {ates}") + + self.oracle_values = dict() + self.oracle_values["apos"] = apos + self.oracle_values["ates"] = ates + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + treatment_levels = dml_params["treatment_levels"] + trimming_threshold = dml_params["trimming_threshold"] + + # Model + dml_model = dml.DoubleMLAPOS( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + treatment_levels=treatment_levels, + trimming_threshold=trimming_threshold, + ) + dml_model.fit() + dml_model.bootstrap(n_rep_boot=2000) + + causal_contrast_model = dml_model.causal_contrast(reference_levels=0) + causal_contrast_model.bootstrap(n_rep_boot=2000) + + result = { + "coverage": [], + "causal_contrast": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["apos"], + confint=dml_model.confint(level=level), + joint_confint=dml_model.confint(level=level, joint=True), + ) + level_result["causal_contrast"] = self._compute_coverage( + thetas=causal_contrast_model.thetas, + oracle_thetas=self.oracle_values["ates"], + confint=causal_contrast_model.confint(level=level), + joint_confint=causal_contrast_model.confint(level=level, joint=True), + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_irm_data_discrete_treatments( + n_obs=dgp_params["n_obs"], + n_levels=dgp_params["n_levels"], + linear=dgp_params["linear"], + ) + df_apo = pd.DataFrame( + np.column_stack((data["y"], data["d"], data["x"])), + columns=["y", "d"] + ["x" + str(i) for i in range(data["x"].shape[1])], + ) + dml_data = dml.DoubleMLData(df_apo, "y", "d") + return dml_data From 2f53537aefb1328b9fc522b4abeb6bd39c4cc908 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 4 Jun 2025 14:21:04 +0200 Subject: [PATCH 084/142] update apo qmd file and workflow --- .github/workflows/apo_sim.yml | 26 ++++++++++++++++++-------- doc/irm/apo.qmd | 12 ++++++------ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/workflows/apo_sim.yml b/.github/workflows/apo_sim.yml index a86186c..31ee1cb 100644 --- a/.github/workflows/apo_sim.yml +++ b/.github/workflows/apo_sim.yml @@ -17,7 +17,8 @@ jobs: strategy: matrix: script: [ - 'scripts/irm/irm_apo_coverage.py', + 'scripts/irm/apo.py', + 'scripts/irm/apos.py', ] steps: @@ -47,20 +48,27 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.7.8" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + cd monte-cover + uv venv + uv sync - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -68,7 +76,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | diff --git a/doc/irm/apo.qmd b/doc/irm/apo.qmd index 3b8607a..376f083 100644 --- a/doc/irm/apo.qmd +++ b/doc/irm/apo.qmd @@ -30,7 +30,7 @@ The simulations are based on the the [make_irm_data_discrete_treatments](https: ```{python} #| echo: false -metadata_file = '../../results/irm/irm_apo_coverage_metadata.csv' +metadata_file = '../../results/irm/apo_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -41,7 +41,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data -df_apo = pd.read_csv("../../results/irm/irm_apo_coverage_apo.csv", index_col=None) +df_apo = pd.read_csv("../../results/irm/apo_coverage.csv", index_col=None) assert df_apo["repetition"].nunique() == 1 n_rep_apo = df_apo["repetition"].unique()[0] @@ -88,7 +88,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/irm/irm_apo_coverage_metadata.csv' +metadata_file = '../../results/irm/apos_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -99,7 +99,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data -df_apos = pd.read_csv("../../results/irm/irm_apo_coverage_apos.csv", index_col=None) +df_apos = pd.read_csv("../../results/irm/apos_coverage.csv", index_col=None) assert df_apos["repetition"].nunique() == 1 n_rep_apos = df_apos["repetition"].unique()[0] @@ -144,7 +144,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/irm/irm_apo_coverage_metadata.csv' +metadata_file = '../../results/irm/apos_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -155,7 +155,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data -df_contrast = pd.read_csv("../../results/irm/irm_apo_coverage_apos_contrast.csv", index_col=None) +df_contrast = pd.read_csv("../../results/irm/apos_causal_contrast.csv", index_col=None) assert df_contrast["repetition"].nunique() == 1 n_rep_contrast = df_contrast["repetition"].unique()[0] From 11afbed4714ed35af969357e66206a8a451a1877 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 07:29:32 +0200 Subject: [PATCH 085/142] update apo scripts --- scripts/irm/apo.py | 13 ++++++++++ scripts/irm/apo_config.yml | 51 +++++++++++++++++++++++++++++++++++++ scripts/irm/apos.py | 13 ++++++++++ scripts/irm/apos_config.yml | 51 +++++++++++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+) create mode 100644 scripts/irm/apo.py create mode 100644 scripts/irm/apo_config.yml create mode 100644 scripts/irm/apos.py create mode 100644 scripts/irm/apos_config.yml diff --git a/scripts/irm/apo.py b/scripts/irm/apo.py new file mode 100644 index 0000000..2821336 --- /dev/null +++ b/scripts/irm/apo.py @@ -0,0 +1,13 @@ +from montecover.irm import APOCoverageSimulation + +# Create and run simulation with config file +sim = APOCoverageSimulation( + config_file="scripts/irm/apo_config.yml", + log_level="INFO", + log_file="logs/irm/apo_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="apo") + +# Save config file for reproducibility +sim.save_config("results/irm/apo_config.yml") diff --git a/scripts/irm/apo_config.yml b/scripts/irm/apo_config.yml new file mode 100644 index 0000000..511907a --- /dev/null +++ b/scripts/irm/apo_config.yml @@ -0,0 +1,51 @@ +# Simulation parameters for APO Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [500] # Sample size + n_levels: [2] + linear: [True] + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logit: &logit + name: "Logistic" + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + +dml_parameters: + treatment_level: [0, 1, 2] + trimming_threshold: [0.01] + learners: + - ml_g: *linear + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *linear + ml_m: *lgbmc + + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/irm/apos.py b/scripts/irm/apos.py new file mode 100644 index 0000000..e26657c --- /dev/null +++ b/scripts/irm/apos.py @@ -0,0 +1,13 @@ +from montecover.irm import APOSCoverageSimulation + +# Create and run simulation with config file +sim = APOSCoverageSimulation( + config_file="scripts/irm/apos_config.yml", + log_level="INFO", + log_file="logs/irm/apos_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="apos") + +# Save config file for reproducibility +sim.save_config("results/irm/apos_config.yml") diff --git a/scripts/irm/apos_config.yml b/scripts/irm/apos_config.yml new file mode 100644 index 0000000..e7102c5 --- /dev/null +++ b/scripts/irm/apos_config.yml @@ -0,0 +1,51 @@ +# Simulation parameters for APOS Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [500] # Sample size + n_levels: [2] + linear: [True] + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logit: &logit + name: "Logistic" + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + +dml_parameters: + treatment_levels: [[0, 1, 2]] + trimming_threshold: [0.01] + learners: + - ml_g: *linear + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *linear + ml_m: *lgbmc + + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From 157d43f0ddc46a7c62148364c9714477df549f31 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 07:29:54 +0200 Subject: [PATCH 086/142] rerun apo sim --- results/irm/apo_config.yml | 49 ++++++++++++++++++++++++++++ results/irm/apo_coverage.csv | 25 ++++++++++++++ results/irm/apo_metadata.csv | 2 ++ results/irm/apos_causal_contrast.csv | 9 +++++ results/irm/apos_config.yml | 49 ++++++++++++++++++++++++++++ results/irm/apos_coverage.csv | 9 +++++ results/irm/apos_metadata.csv | 2 ++ 7 files changed, 145 insertions(+) create mode 100644 results/irm/apo_config.yml create mode 100644 results/irm/apo_coverage.csv create mode 100644 results/irm/apo_metadata.csv create mode 100644 results/irm/apos_causal_contrast.csv create mode 100644 results/irm/apos_config.yml create mode 100644 results/irm/apos_coverage.csv create mode 100644 results/irm/apos_metadata.csv diff --git a/results/irm/apo_config.yml b/results/irm/apo_config.yml new file mode 100644 index 0000000..5f31101 --- /dev/null +++ b/results/irm/apo_config.yml @@ -0,0 +1,49 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + n_levels: + - 2 + linear: + - true +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 +dml_parameters: + treatment_level: + - 0 + - 1 + - 2 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/apo_coverage.csv b/results/irm/apo_coverage.csv new file mode 100644 index 0000000..c352967 --- /dev/null +++ b/results/irm/apo_coverage.csv @@ -0,0 +1,25 @@ +Learner g,Learner m,Treatment Level,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,0,0.9,0.923,8.535462056273152,2.0255827803361752,1000 +LGBM Regr.,LGBM Clas.,0,0.95,0.968,10.170630351290903,2.0255827803361752,1000 +LGBM Regr.,LGBM Clas.,1,0.9,0.915,34.31276092012859,8.463655678765429,1000 +LGBM Regr.,LGBM Clas.,1,0.95,0.969,40.886176442476604,8.463655678765429,1000 +LGBM Regr.,LGBM Clas.,2,0.9,0.901,33.644464659560505,8.44195706768521,1000 +LGBM Regr.,LGBM Clas.,2,0.95,0.953,40.08985233177513,8.44195706768521,1000 +LGBM Regr.,Logistic,0,0.9,0.913,5.611262078064704,1.3129445023644262,1000 +LGBM Regr.,Logistic,0,0.95,0.96,6.686231164049146,1.3129445023644262,1000 +LGBM Regr.,Logistic,1,0.9,0.906,7.131142409013338,1.601689163860689,1000 +LGBM Regr.,Logistic,1,0.95,0.952,8.497280281526653,1.601689163860689,1000 +LGBM Regr.,Logistic,2,0.9,0.926,7.123330875617923,1.5793207930346633,1000 +LGBM Regr.,Logistic,2,0.95,0.961,8.487972265379696,1.5793207930346633,1000 +Linear,LGBM Clas.,0,0.9,0.91,5.450702479855432,1.2788345107461965,1000 +Linear,LGBM Clas.,0,0.95,0.953,6.494912602502952,1.2788345107461965,1000 +Linear,LGBM Clas.,1,0.9,0.934,9.871742629461385,2.0208159577876965,1000 +Linear,LGBM Clas.,1,0.95,0.977,11.762906863787386,2.0208159577876965,1000 +Linear,LGBM Clas.,2,0.9,0.935,7.196139854742809,1.5705772035604926,1000 +Linear,LGBM Clas.,2,0.95,0.971,8.574729515081229,1.5705772035604926,1000 +Linear,Logistic,0,0.9,0.915,5.333252473490304,1.262628265253654,1000 +Linear,Logistic,0,0.95,0.951,6.354962287965668,1.262628265253654,1000 +Linear,Logistic,1,0.9,0.907,5.409257288463179,1.2841258169966927,1000 +Linear,Logistic,1,0.95,0.947,6.445527610957087,1.2841258169966927,1000 +Linear,Logistic,2,0.9,0.909,5.362180231077127,1.2686475779103141,1000 +Linear,Logistic,2,0.95,0.949,6.389431837167295,1.2686475779103141,1000 diff --git a/results/irm/apo_metadata.csv b/results/irm/apo_metadata.csv new file mode 100644 index 0000000..601c446 --- /dev/null +++ b/results/irm/apo_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,APOCoverageSimulation,2025-06-04 15:38,79.44047049681346,3.12.3,scripts/irm/apo_config.yml diff --git a/results/irm/apos_causal_contrast.csv b/results/irm/apos_causal_contrast.csv new file mode 100644 index 0000000..77e8050 --- /dev/null +++ b/results/irm/apos_causal_contrast.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,0.9,0.95,31.91721104409269,7.529968087228317,1.0,37.4636413071499,10 +LGBM Regr.,LGBM Clas.,0.95,1.0,38.03170270495524,7.529968087228317,1.0,43.241464165962284,10 +LGBM Regr.,Logistic,0.9,0.95,5.304714488934599,1.027836049470268,0.9,6.251613923340696,10 +LGBM Regr.,Logistic,0.95,1.0,6.320957181976872,1.027836049470268,1.0,7.198738181726997,10 +Linear,LGBM Clas.,0.9,1.0,6.438241354759464,1.314536189350619,1.0,7.653944769218363,10 +Linear,LGBM Clas.,0.95,1.0,7.671637750826568,1.314536189350619,1.0,8.702704094524151,10 +Linear,Logistic,0.9,0.85,1.1652765429848944,0.3017518264953267,0.9,1.3833080428519742,10 +Linear,Logistic,0.95,0.95,1.388512642618938,0.3017518264953267,0.9,1.5824304649513923,10 diff --git a/results/irm/apos_config.yml b/results/irm/apos_config.yml new file mode 100644 index 0000000..e9411a5 --- /dev/null +++ b/results/irm/apos_config.yml @@ -0,0 +1,49 @@ +simulation_parameters: + repetitions: 10 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + n_levels: + - 2 + linear: + - true +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 +dml_parameters: + treatment_levels: + - - 0 + - 1 + - 2 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/apos_coverage.csv b/results/irm/apos_coverage.csv new file mode 100644 index 0000000..9250404 --- /dev/null +++ b/results/irm/apos_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,0.9,0.9666666666666666,24.23829065815574,5.364818286446242,1.0,30.821279617475888,10 +LGBM Regr.,LGBM Clas.,0.95,1.0,28.88170470514485,5.364818286446242,1.0,34.908362344740716,10 +LGBM Regr.,Logistic,0.9,0.9333333333333333,6.661576667942033,1.3024704354536263,1.0,8.197479425135544,10 +LGBM Regr.,Logistic,0.95,1.0,7.937758190445909,1.3024704354536263,1.0,9.401107266465424,10 +Linear,LGBM Clas.,0.9,1.0,7.396692188822489,1.5391733226732347,1.0,9.104167961217458,10 +Linear,LGBM Clas.,0.95,1.0,8.813702360671227,1.5391733226732347,1.0,10.378182198628407,10 +Linear,Logistic,0.9,0.9666666666666666,5.385540707553376,1.002895084709317,0.9,5.849824289521431,10 +Linear,Logistic,0.95,1.0,6.417267561760002,1.002895084709317,1.0,6.847571899501526,10 diff --git a/results/irm/apos_metadata.csv b/results/irm/apos_metadata.csv new file mode 100644 index 0000000..acaf8cf --- /dev/null +++ b/results/irm/apos_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,APOSCoverageSimulation,2025-06-04 14:15,0.6359844247500102,3.12.3,scripts/irm/apos_config.yml From 0c8ec4d7e4583ca70402eaa5a9b765ae60269617 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 09:24:19 +0200 Subject: [PATCH 087/142] rerun apos simulation --- results/irm/apos_causal_contrast.csv | 16 ++++++++-------- results/irm/apos_config.yml | 2 +- results/irm/apos_coverage.csv | 16 ++++++++-------- results/irm/apos_metadata.csv | 2 +- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/results/irm/apos_causal_contrast.csv b/results/irm/apos_causal_contrast.csv index 77e8050..5bc012d 100644 --- a/results/irm/apos_causal_contrast.csv +++ b/results/irm/apos_causal_contrast.csv @@ -1,9 +1,9 @@ Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,0.9,0.95,31.91721104409269,7.529968087228317,1.0,37.4636413071499,10 -LGBM Regr.,LGBM Clas.,0.95,1.0,38.03170270495524,7.529968087228317,1.0,43.241464165962284,10 -LGBM Regr.,Logistic,0.9,0.95,5.304714488934599,1.027836049470268,0.9,6.251613923340696,10 -LGBM Regr.,Logistic,0.95,1.0,6.320957181976872,1.027836049470268,1.0,7.198738181726997,10 -Linear,LGBM Clas.,0.9,1.0,6.438241354759464,1.314536189350619,1.0,7.653944769218363,10 -Linear,LGBM Clas.,0.95,1.0,7.671637750826568,1.314536189350619,1.0,8.702704094524151,10 -Linear,Logistic,0.9,0.85,1.1652765429848944,0.3017518264953267,0.9,1.3833080428519742,10 -Linear,Logistic,0.95,0.95,1.388512642618938,0.3017518264953267,0.9,1.5824304649513923,10 +LGBM Regr.,LGBM Clas.,0.9,0.9035,33.48965631859352,8.5048896967406,0.918,39.64896208370754,1000 +LGBM Regr.,LGBM Clas.,0.95,0.9575,39.905386815920046,8.5048896967406,0.967,45.48932863359306,1000 +LGBM Regr.,Logistic,0.9,0.951,5.329365839934695,1.0762013117643536,0.951,6.300702382026109,1000 +LGBM Regr.,Logistic,0.95,0.9775,6.3503310784371845,1.0762013117643536,0.979,7.232560605885723,1000 +Linear,LGBM Clas.,0.9,0.965,6.721615473453926,1.3234802376469883,0.977,7.963378099405947,1000 +Linear,LGBM Clas.,0.95,0.989,8.009298839747467,1.3234802376469883,0.996,9.138185238253229,1000 +Linear,Logistic,0.9,0.8675,1.146829074707023,0.30695471324696894,0.836,1.3542396130508736,1000 +Linear,Logistic,0.95,0.918,1.366531128374668,0.30695471324696894,0.912,1.5554413731229015,1000 diff --git a/results/irm/apos_config.yml b/results/irm/apos_config.yml index e9411a5..40be90e 100644 --- a/results/irm/apos_config.yml +++ b/results/irm/apos_config.yml @@ -1,5 +1,5 @@ simulation_parameters: - repetitions: 10 + repetitions: 1000 max_runtime: 19800 random_seed: 42 n_jobs: -2 diff --git a/results/irm/apos_coverage.csv b/results/irm/apos_coverage.csv index 9250404..4e630ec 100644 --- a/results/irm/apos_coverage.csv +++ b/results/irm/apos_coverage.csv @@ -1,9 +1,9 @@ Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,0.9,0.9666666666666666,24.23829065815574,5.364818286446242,1.0,30.821279617475888,10 -LGBM Regr.,LGBM Clas.,0.95,1.0,28.88170470514485,5.364818286446242,1.0,34.908362344740716,10 -LGBM Regr.,Logistic,0.9,0.9333333333333333,6.661576667942033,1.3024704354536263,1.0,8.197479425135544,10 -LGBM Regr.,Logistic,0.95,1.0,7.937758190445909,1.3024704354536263,1.0,9.401107266465424,10 -Linear,LGBM Clas.,0.9,1.0,7.396692188822489,1.5391733226732347,1.0,9.104167961217458,10 -Linear,LGBM Clas.,0.95,1.0,8.813702360671227,1.5391733226732347,1.0,10.378182198628407,10 -Linear,Logistic,0.9,0.9666666666666666,5.385540707553376,1.002895084709317,0.9,5.849824289521431,10 -Linear,Logistic,0.95,1.0,6.417267561760002,1.002895084709317,1.0,6.847571899501526,10 +LGBM Regr.,LGBM Clas.,0.9,0.9216666666666666,25.302332120467288,6.206005134767613,0.926,32.42413576207192,1000 +LGBM Regr.,LGBM Clas.,0.95,0.9623333333333334,30.149588308899382,6.206005134767613,0.975,36.66314428285753,1000 +LGBM Regr.,Logistic,0.9,0.9166666666666666,6.604807969876808,1.492507532099351,0.925,8.124328671640002,1000 +LGBM Regr.,Logistic,0.95,0.963,7.870114114502647,1.492507532099351,0.963,9.2992358185068,1000 +Linear,LGBM Clas.,0.9,0.927,7.536037974003498,1.6449388088327628,0.936,9.335529567192953,1000 +Linear,LGBM Clas.,0.95,0.968,8.979743104891375,1.6449388088327628,0.974,10.660074664816488,1000 +Linear,Logistic,0.9,0.9056666666666666,5.378673132414481,1.2747688188643604,0.907,5.79782063135373,1000 +Linear,Logistic,0.95,0.9536666666666667,6.409084341251623,1.2747688188643604,0.953,6.82033780870828,1000 diff --git a/results/irm/apos_metadata.csv b/results/irm/apos_metadata.csv index acaf8cf..f463b04 100644 --- a/results/irm/apos_metadata.csv +++ b/results/irm/apos_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,APOSCoverageSimulation,2025-06-04 14:15,0.6359844247500102,3.12.3,scripts/irm/apos_config.yml +0.10.0,APOSCoverageSimulation,2025-06-05 07:37,6.892837846279145,3.12.9,scripts/irm/apos_config.yml From 04fbeef599bc6f04da5787a28911b44e70fc26df Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 11:13:53 +0200 Subject: [PATCH 088/142] add ssm models to monte cover --- monte-cover/src/montecover/ssm/__init__.py | 9 ++ monte-cover/src/montecover/ssm/ssm_mar_ate.py | 123 +++++++++++++++++ .../src/montecover/ssm/ssm_nonig_ate.py | 125 ++++++++++++++++++ 3 files changed, 257 insertions(+) create mode 100644 monte-cover/src/montecover/ssm/__init__.py create mode 100644 monte-cover/src/montecover/ssm/ssm_mar_ate.py create mode 100644 monte-cover/src/montecover/ssm/ssm_nonig_ate.py diff --git a/monte-cover/src/montecover/ssm/__init__.py b/monte-cover/src/montecover/ssm/__init__.py new file mode 100644 index 0000000..86d02b5 --- /dev/null +++ b/monte-cover/src/montecover/ssm/__init__.py @@ -0,0 +1,9 @@ +"""Monte Carlo coverage simulations for SSM.""" + +from montecover.ssm.ssm_mar_ate import SSMMarATECoverageSimulation +from montecover.ssm.ssm_nonig_ate import SSMNonIgnorableATECoverageSimulation + +__all__ = [ + "SSMMarATECoverageSimulation", + "SSMNonIgnorableATECoverageSimulation", +] diff --git a/monte-cover/src/montecover/ssm/ssm_mar_ate.py b/monte-cover/src/montecover/ssm/ssm_mar_ate.py new file mode 100644 index 0000000..ef86363 --- /dev/null +++ b/monte-cover/src/montecover/ssm/ssm_mar_ate.py @@ -0,0 +1,123 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +from doubleml.datasets import make_ssm_data + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class SSMMarATECoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLSSM with missing at random for ATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m", "ml_pi"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + self.oracle_values = dict() + self.oracle_values["theta"] = self.dgp_parameters["theta"] + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + learner_pi_name, ml_pi = create_learner_from_config(learner_config["ml_pi"]) + + # Model + dml_model = dml.DoubleMLSSM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + ml_pi=ml_pi, + score="missing-at-random", + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["theta"], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Learner pi": learner_pi_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "Learner pi", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_ssm_data( + theta=dgp_params["theta"], + n_obs=dgp_params["n_obs"], + dim_x=dgp_params["dim_x"], + mar=True, + return_type="DataFrame", + ) + dml_data = dml.DoubleMLData(data, "y", "d", s_col="s") + return dml_data diff --git a/monte-cover/src/montecover/ssm/ssm_nonig_ate.py b/monte-cover/src/montecover/ssm/ssm_nonig_ate.py new file mode 100644 index 0000000..8c82f29 --- /dev/null +++ b/monte-cover/src/montecover/ssm/ssm_nonig_ate.py @@ -0,0 +1,125 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +from doubleml.datasets import make_ssm_data + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class SSMNonIgnorableATECoverageSimulation(BaseSimulation): + """ + Simulation class for coverage properties of DoubleMLSSM with nonignorable nonresponse for ATE estimation. + """ + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m", "ml_pi"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + self.oracle_values = dict() + self.oracle_values["theta"] = self.dgp_parameters["theta"] + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + learner_pi_name, ml_pi = create_learner_from_config(learner_config["ml_pi"]) + + # Model + dml_model = dml.DoubleMLSSM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + ml_pi=ml_pi, + score="nonignorable", + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["theta"], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Learner pi": learner_pi_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "Learner pi", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_ssm_data( + theta=dgp_params["theta"], + n_obs=dgp_params["n_obs"], + dim_x=dgp_params["dim_x"], + mar=False, + return_type="DataFrame", + ) + dml_data = dml.DoubleMLData(data, "y", "d", z_cols="z", s_col="s") + return dml_data From e5638df066fb05cc79a0a9df6215fc40c9276bac Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 11:14:07 +0200 Subject: [PATCH 089/142] add ssm scripts --- scripts/ssm/ssm_mar_ate.py | 13 +++++ scripts/ssm/ssm_mar_ate_config.yml | 82 ++++++++++++++++++++++++++++ scripts/ssm/ssm_nonig_ate.py | 13 +++++ scripts/ssm/ssm_nonig_ate_config.yml | 82 ++++++++++++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 scripts/ssm/ssm_mar_ate.py create mode 100644 scripts/ssm/ssm_mar_ate_config.yml create mode 100644 scripts/ssm/ssm_nonig_ate.py create mode 100644 scripts/ssm/ssm_nonig_ate_config.yml diff --git a/scripts/ssm/ssm_mar_ate.py b/scripts/ssm/ssm_mar_ate.py new file mode 100644 index 0000000..d22c31c --- /dev/null +++ b/scripts/ssm/ssm_mar_ate.py @@ -0,0 +1,13 @@ +from montecover.ssm import SSMMarATECoverageSimulation + +# Create and run simulation with config file +sim = SSMMarATECoverageSimulation( + config_file="scripts/ssm/ssm_mar_ate_config.yml", + log_level="INFO", + log_file="logs/ssm/ssm_mar_ate_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/ssm/", file_prefix="ssm_mar_ate") + +# Save config file for reproducibility +sim.save_config("results/ssm/ssm_mar_ate_config.yml") diff --git a/scripts/ssm/ssm_mar_ate_config.yml b/scripts/ssm/ssm_mar_ate_config.yml new file mode 100644 index 0000000..ca85751 --- /dev/null +++ b/scripts/ssm/ssm_mar_ate_config.yml @@ -0,0 +1,82 @@ +# Simulation parameters for IRM ATE Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [1.0] # Treatment effect + n_obs: [500] # Sample size + dim_x: [20] # Number of covariates + +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + logit: &logit + name: "Logistic" + + rfr: &rfr + name: "RF Regr." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + rfc: &rfc + name: "RF Clas." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + +dml_parameters: + learners: + - ml_g: *lasso + ml_m: *logit + ml_pi: *logit + - ml_g: *rfr + ml_m: *rfc + ml_pi: *rfc + - ml_g: *lasso + ml_m: *rfc + ml_pi: *rfc + - ml_g: *rfr + ml_m: *logit + ml_pi: *rfc + - ml_g: *rfr + ml_m: *rfc + ml_pi: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + ml_pi: *lgbmc + - ml_g: *lasso + ml_m: *lgbmc + ml_pi: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + ml_pi: *lgbmc + - ml_g: *lgbmr + ml_m: *lgbmc + ml_pi: *logit + + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/ssm/ssm_nonig_ate.py b/scripts/ssm/ssm_nonig_ate.py new file mode 100644 index 0000000..2609915 --- /dev/null +++ b/scripts/ssm/ssm_nonig_ate.py @@ -0,0 +1,13 @@ +from montecover.ssm import SSMNonIgnorableATECoverageSimulation + +# Create and run simulation with config file +sim = SSMNonIgnorableATECoverageSimulation( + config_file="scripts/ssm/ssm_nonig_ate_config.yml", + log_level="INFO", + log_file="logs/ssm/ssm_nonig_ate_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/ssm/", file_prefix="ssm_nonig_ate") + +# Save config file for reproducibility +sim.save_config("results/ssm/ssm_nonig_ate_config.yml") diff --git a/scripts/ssm/ssm_nonig_ate_config.yml b/scripts/ssm/ssm_nonig_ate_config.yml new file mode 100644 index 0000000..ca85751 --- /dev/null +++ b/scripts/ssm/ssm_nonig_ate_config.yml @@ -0,0 +1,82 @@ +# Simulation parameters for IRM ATE Coverage + +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [1.0] # Treatment effect + n_obs: [500] # Sample size + dim_x: [20] # Number of covariates + +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + logit: &logit + name: "Logistic" + + rfr: &rfr + name: "RF Regr." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + rfc: &rfc + name: "RF Clas." + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 500 + learning_rate: 0.01 + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 500 + learning_rate: 0.01 + +dml_parameters: + learners: + - ml_g: *lasso + ml_m: *logit + ml_pi: *logit + - ml_g: *rfr + ml_m: *rfc + ml_pi: *rfc + - ml_g: *lasso + ml_m: *rfc + ml_pi: *rfc + - ml_g: *rfr + ml_m: *logit + ml_pi: *rfc + - ml_g: *rfr + ml_m: *rfc + ml_pi: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + ml_pi: *lgbmc + - ml_g: *lasso + ml_m: *lgbmc + ml_pi: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + ml_pi: *lgbmc + - ml_g: *lgbmr + ml_m: *lgbmc + ml_pi: *logit + + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From 5d842f017f0872ab677b572543b17f6bae687e8a Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 11:14:20 +0200 Subject: [PATCH 090/142] update ssm qmd and workflows --- .github/workflows/ssm_sim.yml | 6 +++--- doc/ssm/ssm_mar.qmd | 4 ++-- doc/ssm/ssm_nonignorable.qmd | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ssm_sim.yml b/.github/workflows/ssm_sim.yml index ae59bca..cdef61c 100644 --- a/.github/workflows/ssm_sim.yml +++ b/.github/workflows/ssm_sim.yml @@ -17,8 +17,8 @@ jobs: strategy: matrix: script: [ - 'scripts/irm/ssm_mar_ate_coverage.py', - 'scripts/irm/ssm_nonignorable_ate_coverage.py', + 'scripts/ssm/ssm_mar_ate.py', + 'scripts/ssm/ssm_nonig_ate.py', ] steps: @@ -73,7 +73,7 @@ jobs: - name: Commit any existing changes run: | - git add results/irm + git add results/ssm git commit -m "Update results from script: ${{ matrix.script }}" || echo "No changed results to commit" - name: Wait random time diff --git a/doc/ssm/ssm_mar.qmd b/doc/ssm/ssm_mar.qmd index 65a1871..a396fa4 100644 --- a/doc/ssm/ssm_mar.qmd +++ b/doc/ssm/ssm_mar.qmd @@ -30,7 +30,7 @@ The simulations are based on the [make_ssm_data](https://docs.doubleml.org/stabl ```{python} #| echo: false -metadata_file = '../../results/irm/ssm_mar_ate_coverage_metadata.csv' +metadata_file = '../../results/ssm/ssm_mar_ate_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -42,7 +42,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/irm/ssm_mar_ate_coverage.csv", index_col=None) +df = pd.read_csv("../../results/ssm/ssm_mar_ate_coverage.csv", index_col=None) assert df["repetition"].nunique() == 1 n_rep = df["repetition"].unique()[0] diff --git a/doc/ssm/ssm_nonignorable.qmd b/doc/ssm/ssm_nonignorable.qmd index f0a807d..8eff76b 100644 --- a/doc/ssm/ssm_nonignorable.qmd +++ b/doc/ssm/ssm_nonignorable.qmd @@ -31,7 +31,7 @@ The simulations are based on the [make_ssm_data](https://docs.doubleml.org/stabl ```{python} #| echo: false #| collapse: true -metadata_file = '../../results/irm/ssm_nonignorable_ate_coverage_metadata.csv' +metadata_file = '../../results/ssm/ssm_nonig_ate_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -42,7 +42,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data and rename columns -df = pd.read_csv("../../results/irm/ssm_nonignorable_ate_coverage.csv", index_col=None) +df = pd.read_csv("../../results/ssm/ssm_nonig_ate_coverage.csv", index_col=None) assert df["repetition"].nunique() == 1 n_rep = df["repetition"].unique()[0] From dcfef4c4b816f10b2cd79a32dd61f8de7db5d5d9 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 11:14:30 +0200 Subject: [PATCH 091/142] rerun ssm simulations --- results/ssm/ssm_mar_ate_config.yml | 74 ++++++++++++++++++++++++++ results/ssm/ssm_mar_ate_coverage.csv | 19 +++++++ results/ssm/ssm_mar_ate_metadata.csv | 2 + results/ssm/ssm_nonig_ate_config.yml | 74 ++++++++++++++++++++++++++ results/ssm/ssm_nonig_ate_coverage.csv | 19 +++++++ results/ssm/ssm_nonig_ate_metadata.csv | 2 + 6 files changed, 190 insertions(+) create mode 100644 results/ssm/ssm_mar_ate_config.yml create mode 100644 results/ssm/ssm_mar_ate_coverage.csv create mode 100644 results/ssm/ssm_mar_ate_metadata.csv create mode 100644 results/ssm/ssm_nonig_ate_config.yml create mode 100644 results/ssm/ssm_nonig_ate_coverage.csv create mode 100644 results/ssm/ssm_nonig_ate_metadata.csv diff --git a/results/ssm/ssm_mar_ate_config.yml b/results/ssm/ssm_mar_ate_config.yml new file mode 100644 index 0000000..6c5f926 --- /dev/null +++ b/results/ssm/ssm_mar_ate_config.yml @@ -0,0 +1,74 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 1.0 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + ml_pi: *id002 + - ml_g: *id003 + ml_m: *id004 + ml_pi: *id004 + - ml_g: *id001 + ml_m: *id004 + ml_pi: *id004 + - ml_g: *id003 + ml_m: *id002 + ml_pi: *id004 + - ml_g: *id003 + ml_m: *id004 + ml_pi: *id002 + - ml_g: *id005 + ml_m: *id006 + ml_pi: *id006 + - ml_g: *id001 + ml_m: *id006 + ml_pi: *id006 + - ml_g: *id005 + ml_m: *id002 + ml_pi: *id006 + - ml_g: *id005 + ml_m: *id006 + ml_pi: *id002 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/ssm/ssm_mar_ate_coverage.csv b/results/ssm/ssm_mar_ate_coverage.csv new file mode 100644 index 0000000..91f8e89 --- /dev/null +++ b/results/ssm/ssm_mar_ate_coverage.csv @@ -0,0 +1,19 @@ +Learner g,Learner m,Learner pi,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.937,1.1020474646866227,0.25225717557270916,1000 +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.976,1.3131705488242713,0.25225717557270916,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.9,0.925,0.9396009375831231,0.21523318689504592,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.95,0.967,1.1196035728213285,0.21523318689504592,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.9,0.927,0.7652547530061172,0.16892900789678272,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.95,0.976,0.9118572803769212,0.16892900789678272,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.94,1.0416524703569756,0.23136599807480204,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.979,1.2412054743683776,0.23136599807480204,1000 +LassoCV,Logistic,Logistic,0.9,0.918,0.5983979591318811,0.13819869402679225,1000 +LassoCV,Logistic,Logistic,0.95,0.961,0.7130351473854032,0.13819869402679225,1000 +LassoCV,RF Clas.,RF Clas.,0.9,0.915,0.5159726010062256,0.11685996635828219,1000 +LassoCV,RF Clas.,RF Clas.,0.95,0.966,0.6148192753515406,0.11685996635828219,1000 +RF Regr.,Logistic,RF Clas.,0.9,0.914,0.5740315353572116,0.13374033079721487,1000 +RF Regr.,Logistic,RF Clas.,0.95,0.967,0.6840007626548271,0.13374033079721487,1000 +RF Regr.,RF Clas.,Logistic,0.9,0.916,0.5717174746911912,0.13251444813486235,1000 +RF Regr.,RF Clas.,Logistic,0.95,0.964,0.6812433893000642,0.13251444813486235,1000 +RF Regr.,RF Clas.,RF Clas.,0.9,0.917,0.5204895028483878,0.12032384089569902,1000 +RF Regr.,RF Clas.,RF Clas.,0.95,0.957,0.6202014958648324,0.12032384089569902,1000 diff --git a/results/ssm/ssm_mar_ate_metadata.csv b/results/ssm/ssm_mar_ate_metadata.csv new file mode 100644 index 0000000..b21daf8 --- /dev/null +++ b/results/ssm/ssm_mar_ate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,SSMMarATECoverageSimulation,2025-06-05 10:19,32.703589328130086,3.12.9,scripts/ssm/ssm_mar_ate_config.yml diff --git a/results/ssm/ssm_nonig_ate_config.yml b/results/ssm/ssm_nonig_ate_config.yml new file mode 100644 index 0000000..6c5f926 --- /dev/null +++ b/results/ssm/ssm_nonig_ate_config.yml @@ -0,0 +1,74 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 1.0 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + ml_pi: *id002 + - ml_g: *id003 + ml_m: *id004 + ml_pi: *id004 + - ml_g: *id001 + ml_m: *id004 + ml_pi: *id004 + - ml_g: *id003 + ml_m: *id002 + ml_pi: *id004 + - ml_g: *id003 + ml_m: *id004 + ml_pi: *id002 + - ml_g: *id005 + ml_m: *id006 + ml_pi: *id006 + - ml_g: *id001 + ml_m: *id006 + ml_pi: *id006 + - ml_g: *id005 + ml_m: *id002 + ml_pi: *id006 + - ml_g: *id005 + ml_m: *id006 + ml_pi: *id002 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/ssm/ssm_nonig_ate_coverage.csv b/results/ssm/ssm_nonig_ate_coverage.csv new file mode 100644 index 0000000..3fe8260 --- /dev/null +++ b/results/ssm/ssm_nonig_ate_coverage.csv @@ -0,0 +1,19 @@ +Learner g,Learner m,Learner pi,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.906,1.5821140101993176,0.39941487645605,1000 +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.958,1.8852051201504163,0.39941487645605,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.9,0.935,2.3216975230755064,0.6217489058523816,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.95,0.974,2.7664732312123816,0.6217489058523816,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.9,0.834,1.1194612001997861,0.31096250226975036,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.95,0.904,1.3339202945055102,0.31096250226975036,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.907,1.4773761863865273,0.3819267464776803,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.957,1.760402305402313,0.3819267464776803,1000 +LassoCV,Logistic,Logistic,0.9,0.857,1.8486984724368598,0.524196741214989,1000 +LassoCV,Logistic,Logistic,0.95,0.92,2.202860099452095,0.524196741214989,1000 +LassoCV,RF Clas.,RF Clas.,0.9,0.78,0.6505940752158618,0.20476023599261262,1000 +LassoCV,RF Clas.,RF Clas.,0.95,0.872,0.7752306558374706,0.20476023599261262,1000 +RF Regr.,Logistic,RF Clas.,0.9,0.708,0.7687129167631139,0.2667490928514026,1000 +RF Regr.,Logistic,RF Clas.,0.95,0.814,0.9159779366500982,0.2667490928514026,1000 +RF Regr.,RF Clas.,Logistic,0.9,0.892,1.437280071189879,0.396115809059242,1000 +RF Regr.,RF Clas.,Logistic,0.95,0.949,1.7126248372934632,0.396115809059242,1000 +RF Regr.,RF Clas.,RF Clas.,0.9,0.779,0.6653233603546214,0.20524894117905498,1000 +RF Regr.,RF Clas.,RF Clas.,0.95,0.857,0.7927816816047267,0.20524894117905498,1000 diff --git a/results/ssm/ssm_nonig_ate_metadata.csv b/results/ssm/ssm_nonig_ate_metadata.csv new file mode 100644 index 0000000..f8e47b8 --- /dev/null +++ b/results/ssm/ssm_nonig_ate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,SSMNonIgnorableATECoverageSimulation,2025-06-05 10:40,19.940552759170533,3.12.9,scripts/ssm/ssm_nonig_ate_config.yml From 0e94461b8cb3c03f4b5f4183934666e016c3513f Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 13:51:47 +0200 Subject: [PATCH 092/142] add quantile models to monte cover --- monte-cover/src/montecover/irm/__init__.py | 6 + monte-cover/src/montecover/irm/cvar.py | 214 +++++++++++++++++++ monte-cover/src/montecover/irm/lpq.py | 233 +++++++++++++++++++++ monte-cover/src/montecover/irm/pq.py | 212 +++++++++++++++++++ 4 files changed, 665 insertions(+) create mode 100644 monte-cover/src/montecover/irm/cvar.py create mode 100644 monte-cover/src/montecover/irm/lpq.py create mode 100644 monte-cover/src/montecover/irm/pq.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index e4686f6..57050ae 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -2,20 +2,26 @@ from montecover.irm.apo import APOCoverageSimulation from montecover.irm.apos import APOSCoverageSimulation +from montecover.irm.cvar import CVARCoverageSimulation from montecover.irm.irm_ate import IRMATECoverageSimulation from montecover.irm.irm_ate_sensitivity import IRMATESensitivityCoverageSimulation from montecover.irm.irm_atte import IRMATTECoverageSimulation from montecover.irm.irm_atte_sensitivity import IRMATTESensitivityCoverageSimulation from montecover.irm.irm_cate import IRMCATECoverageSimulation from montecover.irm.irm_gate import IRMGATECoverageSimulation +from montecover.irm.lpq import LPQCoverageSimulation +from montecover.irm.pq import PQCoverageSimulation __all__ = [ "APOCoverageSimulation", "APOSCoverageSimulation", + "CVARCoverageSimulation", "IRMATECoverageSimulation", "IRMATESensitivityCoverageSimulation", "IRMATTECoverageSimulation", "IRMATTESensitivityCoverageSimulation", "IRMCATECoverageSimulation", "IRMGATECoverageSimulation", + "LPQCoverageSimulation", + "PQCoverageSimulation", ] diff --git a/monte-cover/src/montecover/irm/cvar.py b/monte-cover/src/montecover/irm/cvar.py new file mode 100644 index 0000000..19180c0 --- /dev/null +++ b/monte-cover/src/montecover/irm/cvar.py @@ -0,0 +1,214 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +# define loc-scale model +def f_loc(D, X): + loc = 0.5 * D + 2 * D * X[:, 4] + 2.0 * (X[:, 1] > 0.1) - 1.7 * (X[:, 0] * X[:, 2] > 0) - 3 * X[:, 3] + return loc + + +def f_scale(D, X): + scale = np.sqrt(0.5 * D + 0.3 * D * X[:, 1] + 2) + return scale + + +def dgp(n=200, p=5): + X = np.random.uniform(-1, 1, size=[n, p]) + D = ((X[:, 1] - X[:, 3] + 1.5 * (X[:, 0] > 0) + np.random.normal(size=n)) > 0) * 1.0 + epsilon = np.random.normal(size=n) + + Y = f_loc(D, X) + f_scale(D, X) * epsilon + return Y, X, D, epsilon + + +class CVARCoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLCVAR for Conditional Value at Risk estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + # Parameters + n_true = int(10e6) + tau_vec = self.dml_parameters["tau_vec"][0] + p = self.dgp_parameters["dim_x"][0] + + _, X_true, _, epsilon_true = dgp(n=n_true, p=p) + D1 = np.ones(n_true) + D0 = np.zeros(n_true) + + Y1 = f_loc(D1, X_true) + f_scale(D1, X_true) * epsilon_true + Y0 = f_loc(D0, X_true) + f_scale(D0, X_true) * epsilon_true + + Y1_quant = np.quantile(Y1, q=tau_vec) + Y0_quant = np.quantile(Y0, q=tau_vec) + Y1_cvar = [Y1[Y1 >= quant].mean() for quant in Y1_quant] + Y0_cvar = [Y0[Y0 >= quant].mean() for quant in Y0_quant] + effect_cvar = np.array(Y1_cvar) - np.array(Y0_cvar) + + self.oracle_values = dict() + self.oracle_values["effect_cvar"] = effect_cvar + self.oracle_values["Y1_cvar"] = Y1_cvar + self.oracle_values["Y0_cvar"] = Y0_cvar + + self.logger.info(f"Oracle values: {self.oracle_values}") + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + tau_vec = dml_params["tau_vec"] + trimming_threshold = dml_params["trimming_threshold"] + Y0_cvar = self.oracle_values["Y0_cvar"] + Y1_cvar = self.oracle_values["Y1_cvar"] + effect_cvar = self.oracle_values["effect_cvar"] + + # Model + dml_model = dml.DoubleMLQTE( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + score="CVaR", + quantiles=tau_vec, + trimming_threshold=trimming_threshold, + ) + dml_model.fit() + dml_model.bootstrap(n_rep_boot=2000) + + result = { + "Y0_coverage": [], + "Y1_coverage": [], + "effect_coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["effect_coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=effect_cvar, + confint=dml_model.confint(level=level), + joint_confint=dml_model.confint(level=level, joint=True), + ) + + Y0_estimates = np.full(len(tau_vec), np.nan) + Y1_estimates = np.full(len(tau_vec), np.nan) + + Y0_confint = np.full((len(tau_vec), 2), np.nan) + Y1_confint = np.full((len(tau_vec), 2), np.nan) + + for tau_idx in range(len(tau_vec)): + model_Y0 = dml_model.modellist_0[tau_idx] + model_Y1 = dml_model.modellist_1[tau_idx] + + Y0_estimates[tau_idx] = model_Y0.coef + Y1_estimates[tau_idx] = model_Y1.coef + + Y0_confint[tau_idx, :] = model_Y0.confint(level=level) + Y1_confint[tau_idx, :] = model_Y1.confint(level=level) + + Y0_confint_df = pd.DataFrame(Y0_confint, columns=["lower", "upper"]) + Y1_confint_df = pd.DataFrame(Y1_confint, columns=["lower", "upper"]) + + level_result["Y0_coverage"] = self._compute_coverage( + thetas=Y0_estimates, + oracle_thetas=Y0_cvar, + confint=Y0_confint_df, + joint_confint=None, + ) + + level_result["Y1_coverage"] = self._compute_coverage( + thetas=Y1_estimates, + oracle_thetas=Y1_cvar, + confint=Y1_confint_df, + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + result_summary = dict() + # Aggregate results for Y0 and Y1 + for result_name in ["Y0_coverage", "Y1_coverage"]: + df = self.results[result_name] + result_summary[result_name] = df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + uniform_aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + result_summary["effect_coverage"] = ( + self.results["effect_coverage"].groupby(groupby_cols).agg(uniform_aggregation_dict).reset_index() + ) + self.logger.debug("Summarized effect_coverage results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + Y, X, D, _ = dgp(n=dgp_params["n_obs"], p=dgp_params["dim_x"]) + dml_data = dml.DoubleMLData.from_arrays(X, Y, D) + return dml_data diff --git a/monte-cover/src/montecover/irm/lpq.py b/monte-cover/src/montecover/irm/lpq.py new file mode 100644 index 0000000..86b66f3 --- /dev/null +++ b/monte-cover/src/montecover/irm/lpq.py @@ -0,0 +1,233 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +# define loc-scale model +def f_loc(D, X, X_conf): + loc = 0.5 * D + 2 * D * X[:, 4] + 2.0 * (X[:, 1] > 0.1) - 1.7 * (X[:, 0] * X[:, 2] > 0) - 3 * X[:, 3] - 2 * X_conf[:, 0] + return loc + + +def f_scale(D, X, X_conf): + scale = np.sqrt(0.5 * D + 3 * D * X[:, 0] + 0.4 * X_conf[:, 0] + 2) + return scale + + +def generate_treatment(Z, X, X_conf): + eta = np.random.normal(size=len(Z)) + d = ((0.5 * Z - 0.3 * X[:, 0] + 0.7 * X_conf[:, 0] + eta) > 0) * 1.0 + return d + + +def dgp(n=200, p=5): + X = np.random.uniform(0, 1, size=[n, p]) + X_conf = np.random.uniform(-1, 1, size=[n, 1]) + Z = np.random.binomial(1, p=0.5, size=n) + D = generate_treatment(Z, X, X_conf) + epsilon = np.random.normal(size=n) + + Y = f_loc(D, X, X_conf) + f_scale(D, X, X_conf) * epsilon + + return Y, X, D, Z + + +class LPQCoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLQTE for local potential quantile estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + # Parameters + n_true = int(10e6) + tau_vec = self.dml_parameters["tau_vec"][0] + p = self.dgp_parameters["dim_x"][0] + + X_true = np.random.uniform(0, 1, size=[n_true, p]) + X_conf_true = np.random.uniform(-1, 1, size=[n_true, 1]) + Z_true = np.random.binomial(1, p=0.5, size=n_true) + D1_true = generate_treatment(np.ones_like(Z_true), X_true, X_conf_true) + D0_true = generate_treatment(np.zeros_like(Z_true), X_true, X_conf_true) + epsilon_true = np.random.normal(size=n_true) + + compliers = (D1_true == 1) * (D0_true == 0) + self.logger.info(f"Compliance probability: {str(compliers.mean())}") + n_compliers = compliers.sum() + Y1 = ( + f_loc(np.ones(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) + + f_scale(np.ones(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) * epsilon_true[compliers] + ) + Y0 = ( + f_loc(np.zeros(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) + + f_scale(np.zeros(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) * epsilon_true[compliers] + ) + + Y0_quant = np.quantile(Y0, q=tau_vec) + Y1_quant = np.quantile(Y1, q=tau_vec) + effect_quant = Y1_quant - Y0_quant + + self.oracle_values = dict() + self.oracle_values["Y0_quant"] = Y0_quant + self.oracle_values["Y1_quant"] = Y1_quant + self.oracle_values["effect_quant"] = effect_quant + + self.logger.info(f"Oracle values: {self.oracle_values}") + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + tau_vec = dml_params["tau_vec"] + trimming_threshold = dml_params["trimming_threshold"] + Y0_quant = self.oracle_values["Y0_quant"] + Y1_quant = self.oracle_values["Y1_quant"] + effect_quant = self.oracle_values["effect_quant"] + + # Model + dml_model = dml.DoubleMLQTE( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + score="LPQ", + quantiles=tau_vec, + trimming_threshold=trimming_threshold, + ) + dml_model.fit() + dml_model.bootstrap(n_rep_boot=2000) + + result = { + "Y0_coverage": [], + "Y1_coverage": [], + "effect_coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["effect_coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=effect_quant, + confint=dml_model.confint(level=level), + joint_confint=dml_model.confint(level=level, joint=True), + ) + + Y0_estimates = np.full(len(tau_vec), np.nan) + Y1_estimates = np.full(len(tau_vec), np.nan) + + Y0_confint = np.full((len(tau_vec), 2), np.nan) + Y1_confint = np.full((len(tau_vec), 2), np.nan) + + for tau_idx in range(len(tau_vec)): + model_Y0 = dml_model.modellist_0[tau_idx] + model_Y1 = dml_model.modellist_1[tau_idx] + + Y0_estimates[tau_idx] = model_Y0.coef + Y1_estimates[tau_idx] = model_Y1.coef + + Y0_confint[tau_idx, :] = model_Y0.confint(level=level) + Y1_confint[tau_idx, :] = model_Y1.confint(level=level) + + Y0_confint_df = pd.DataFrame(Y0_confint, columns=["lower", "upper"]) + Y1_confint_df = pd.DataFrame(Y1_confint, columns=["lower", "upper"]) + + level_result["Y0_coverage"] = self._compute_coverage( + thetas=Y0_estimates, + oracle_thetas=Y0_quant, + confint=Y0_confint_df, + joint_confint=None, + ) + + level_result["Y1_coverage"] = self._compute_coverage( + thetas=Y1_estimates, + oracle_thetas=Y1_quant, + confint=Y1_confint_df, + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + result_summary = dict() + # Aggregate results for Y0 and Y1 + for result_name in ["Y0_coverage", "Y1_coverage"]: + df = self.results[result_name] + result_summary[result_name] = df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + uniform_aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + result_summary["effect_coverage"] = ( + self.results["effect_coverage"].groupby(groupby_cols).agg(uniform_aggregation_dict).reset_index() + ) + self.logger.debug("Summarized effect_coverage results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + Y, X, D, Z = dgp(n=dgp_params["n_obs"], p=dgp_params["dim_x"]) + dml_data = dml.DoubleMLData.from_arrays(X, Y, D, Z) + return dml_data diff --git a/monte-cover/src/montecover/irm/pq.py b/monte-cover/src/montecover/irm/pq.py new file mode 100644 index 0000000..f935dc3 --- /dev/null +++ b/monte-cover/src/montecover/irm/pq.py @@ -0,0 +1,212 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +# define loc-scale model +def f_loc(D, X): + loc = 0.5 * D + 2 * D * X[:, 4] + 2.0 * (X[:, 1] > 0.1) - 1.7 * (X[:, 0] * X[:, 2] > 0) - 3 * X[:, 3] + return loc + + +def f_scale(D, X): + scale = np.sqrt(0.5 * D + 0.3 * D * X[:, 1] + 2) + return scale + + +def dgp(n=200, p=5): + X = np.random.uniform(-1, 1, size=[n, p]) + D = ((X[:, 1] - X[:, 3] + 1.5 * (X[:, 0] > 0) + np.random.normal(size=n)) > 0) * 1.0 + epsilon = np.random.normal(size=n) + + Y = f_loc(D, X) + f_scale(D, X) * epsilon + return Y, X, D, epsilon + + +class PQCoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLPQ for potential quantile estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + # Parameters + n_true = int(10e6) + tau_vec = self.dml_parameters["tau_vec"][0] + p = self.dgp_parameters["dim_x"][0] + + _, X_true, _, epsilon_true = dgp(n=n_true, p=p) + D1 = np.ones(n_true) + D0 = np.zeros(n_true) + + Y1 = f_loc(D1, X_true) + f_scale(D1, X_true) * epsilon_true + Y0 = f_loc(D0, X_true) + f_scale(D0, X_true) * epsilon_true + + Y1_quant = np.quantile(Y1, q=tau_vec) + Y0_quant = np.quantile(Y0, q=tau_vec) + effect_quant = Y1_quant - Y0_quant + + self.oracle_values = dict() + self.oracle_values["Y0_quant"] = Y0_quant + self.oracle_values["Y1_quant"] = Y1_quant + self.oracle_values["effect_quant"] = effect_quant + + self.logger.info(f"Oracle values: {self.oracle_values}") + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + tau_vec = dml_params["tau_vec"] + trimming_threshold = dml_params["trimming_threshold"] + Y0_quant = self.oracle_values["Y0_quant"] + Y1_quant = self.oracle_values["Y1_quant"] + effect_quant = self.oracle_values["effect_quant"] + + # Model + dml_model = dml.DoubleMLQTE( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + score="PQ", + quantiles=tau_vec, + trimming_threshold=trimming_threshold, + ) + dml_model.fit() + dml_model.bootstrap(n_rep_boot=2000) + + result = { + "Y0_coverage": [], + "Y1_coverage": [], + "effect_coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["effect_coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=effect_quant, + confint=dml_model.confint(level=level), + joint_confint=dml_model.confint(level=level, joint=True), + ) + + Y0_estimates = np.full(len(tau_vec), np.nan) + Y1_estimates = np.full(len(tau_vec), np.nan) + + Y0_confint = np.full((len(tau_vec), 2), np.nan) + Y1_confint = np.full((len(tau_vec), 2), np.nan) + + for tau_idx in range(len(tau_vec)): + model_Y0 = dml_model.modellist_0[tau_idx] + model_Y1 = dml_model.modellist_1[tau_idx] + + Y0_estimates[tau_idx] = model_Y0.coef + Y1_estimates[tau_idx] = model_Y1.coef + + Y0_confint[tau_idx, :] = model_Y0.confint(level=level) + Y1_confint[tau_idx, :] = model_Y1.confint(level=level) + + Y0_confint_df = pd.DataFrame(Y0_confint, columns=["lower", "upper"]) + Y1_confint_df = pd.DataFrame(Y1_confint, columns=["lower", "upper"]) + + level_result["Y0_coverage"] = self._compute_coverage( + thetas=Y0_estimates, + oracle_thetas=Y0_quant, + confint=Y0_confint_df, + joint_confint=None, + ) + + level_result["Y1_coverage"] = self._compute_coverage( + thetas=Y1_estimates, + oracle_thetas=Y1_quant, + confint=Y1_confint_df, + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + result_summary = dict() + # Aggregate results for Y0 and Y1 + for result_name in ["Y0_coverage", "Y1_coverage"]: + df = self.results[result_name] + result_summary[result_name] = df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + uniform_aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + result_summary["effect_coverage"] = ( + self.results["effect_coverage"].groupby(groupby_cols).agg(uniform_aggregation_dict).reset_index() + ) + self.logger.debug("Summarized effect_coverage results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + Y, X, D, _ = dgp(n=dgp_params["n_obs"], p=dgp_params["dim_x"]) + dml_data = dml.DoubleMLData.from_arrays(X, Y, D) + return dml_data From 493e3237b129646435f216742c66ae925b9f20ce Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 13:52:11 +0200 Subject: [PATCH 093/142] update quantile scripts --- scripts/irm/cvar.py | 13 ++++++++ scripts/irm/cvar_config.yml | 63 +++++++++++++++++++++++++++++++++++++ scripts/irm/lpq.py | 13 ++++++++ scripts/irm/lpq_config.yml | 46 +++++++++++++++++++++++++++ scripts/irm/pq.py | 13 ++++++++ scripts/irm/pq_config.yml | 46 +++++++++++++++++++++++++++ 6 files changed, 194 insertions(+) create mode 100644 scripts/irm/cvar.py create mode 100644 scripts/irm/cvar_config.yml create mode 100644 scripts/irm/lpq.py create mode 100644 scripts/irm/lpq_config.yml create mode 100644 scripts/irm/pq.py create mode 100644 scripts/irm/pq_config.yml diff --git a/scripts/irm/cvar.py b/scripts/irm/cvar.py new file mode 100644 index 0000000..2195294 --- /dev/null +++ b/scripts/irm/cvar.py @@ -0,0 +1,13 @@ +from montecover.irm import CVARCoverageSimulation + +# Create and run simulation with config file +sim = CVARCoverageSimulation( + config_file="scripts/irm/cvar_config.yml", + log_level="INFO", + log_file="logs/irm/cvar_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="cvar") + +# Save config file for reproducibility +sim.save_config("results/irm/cvar_config.yml") diff --git a/scripts/irm/cvar_config.yml b/scripts/irm/cvar_config.yml new file mode 100644 index 0000000..f3531b4 --- /dev/null +++ b/scripts/irm/cvar_config.yml @@ -0,0 +1,63 @@ +# Simulation parameters for CVAR Coverage + +simulation_parameters: + repetitions: 200 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [5000] # Sample size + dim_x: [5] # Number of covariates + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logit: &logit + name: "Logistic" + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 200 # Fewer trees — faster + learning_rate: 0.05 # Balanced speed and stability + num_leaves: 15 # Modest complexity for smaller data + max_depth: 5 # Limit tree depth to avoid overfitting + min_child_samples: 10 # Minimum samples per leaf — conservative + subsample: 0.9 # Slightly randomized rows + colsample_bytree: 0.9 # Slightly randomized features + reg_alpha: 0.0 # No L1 regularization (faster) + reg_lambda: 0.1 # Light L2 regularization + random_state: 42 # Reproducible + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 200 # Fewer trees — faster + learning_rate: 0.05 # Balanced speed and stability + num_leaves: 15 # Modest complexity for smaller data + max_depth: 5 # Limit tree depth to avoid overfitting + min_child_samples: 10 # Minimum samples per leaf — conservative + subsample: 0.9 # Slightly randomized rows + colsample_bytree: 0.9 # Slightly randomized features + reg_alpha: 0.0 # No L1 regularization (faster) + reg_lambda: 0.1 # Light L2 regularization + random_state: 42 # Reproducible + +dml_parameters: + tau_vec: [[0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]] # Quantiles + trimming_threshold: [0.01] + learners: + - ml_g: *linear + ml_m: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + - ml_g: *linear + ml_m: *lgbmc + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/irm/lpq.py b/scripts/irm/lpq.py new file mode 100644 index 0000000..220aeab --- /dev/null +++ b/scripts/irm/lpq.py @@ -0,0 +1,13 @@ +from montecover.irm import LPQCoverageSimulation + +# Create and run simulation with config file +sim = LPQCoverageSimulation( + config_file="scripts/irm/lpq_config.yml", + log_level="INFO", + log_file="logs/irm/lpq_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="lpq") + +# Save config file for reproducibility +sim.save_config("results/irm/lpq_config.yml") diff --git a/scripts/irm/lpq_config.yml b/scripts/irm/lpq_config.yml new file mode 100644 index 0000000..ba717e4 --- /dev/null +++ b/scripts/irm/lpq_config.yml @@ -0,0 +1,46 @@ +# Simulation parameters for LPQ Coverage + +simulation_parameters: + repetitions: 200 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [5000] # Sample size + dim_x: [5] # Number of covariates + +# Define reusable learner configurations +learner_definitions: + logit: &logit + name: "Logistic" + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 200 # Fewer trees — faster + learning_rate: 0.05 # Balanced speed and stability + num_leaves: 15 # Modest complexity for smaller data + max_depth: 5 # Limit tree depth to avoid overfitting + min_child_samples: 10 # Minimum samples per leaf — conservative + subsample: 0.9 # Slightly randomized rows + colsample_bytree: 0.9 # Slightly randomized features + reg_alpha: 0.0 # No L1 regularization (faster) + reg_lambda: 0.1 # Light L2 regularization + random_state: 42 # Reproducible + +dml_parameters: + tau_vec: [[0.3, 0.4, 0.5, 0.6, 0.7]] # Quantiles + trimming_threshold: [0.01] + learners: + - ml_g: *logit + ml_m: *logit + - ml_g: *lgbmc + ml_m: *lgbmc + - ml_g: *lgbmc + ml_m: *logit + - ml_g: *logit + ml_m: *lgbmc + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels diff --git a/scripts/irm/pq.py b/scripts/irm/pq.py new file mode 100644 index 0000000..61237c0 --- /dev/null +++ b/scripts/irm/pq.py @@ -0,0 +1,13 @@ +from montecover.irm import PQCoverageSimulation + +# Create and run simulation with config file +sim = PQCoverageSimulation( + config_file="scripts/irm/pq_config.yml", + log_level="INFO", + log_file="logs/irm/pq_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="pq") + +# Save config file for reproducibility +sim.save_config("results/irm/pq_config.yml") diff --git a/scripts/irm/pq_config.yml b/scripts/irm/pq_config.yml new file mode 100644 index 0000000..fcc566f --- /dev/null +++ b/scripts/irm/pq_config.yml @@ -0,0 +1,46 @@ +# Simulation parameters for PQ Coverage + +simulation_parameters: + repetitions: 200 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + n_obs: [5000] # Sample size + dim_x: [5] # Number of covariates + +# Define reusable learner configurations +learner_definitions: + logit: &logit + name: "Logistic" + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 200 # Fewer trees — faster + learning_rate: 0.05 # Balanced speed and stability + num_leaves: 15 # Modest complexity for smaller data + max_depth: 5 # Limit tree depth to avoid overfitting + min_child_samples: 10 # Minimum samples per leaf — conservative + subsample: 0.9 # Slightly randomized rows + colsample_bytree: 0.9 # Slightly randomized features + reg_alpha: 0.0 # No L1 regularization (faster) + reg_lambda: 0.1 # Light L2 regularization + random_state: 42 # Reproducible + +dml_parameters: + tau_vec: [[0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]] # Quantiles + trimming_threshold: [0.01] + learners: + - ml_g: *logit + ml_m: *logit + - ml_g: *lgbmc + ml_m: *lgbmc + - ml_g: *lgbmc + ml_m: *logit + - ml_g: *logit + ml_m: *lgbmc + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From 363306251cd5971cf746315709e767e9f77cf47c Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 13:54:19 +0200 Subject: [PATCH 094/142] update qmd and workflow for quantiles --- .github/workflows/quant_sim.yml | 29 +++++++++++++++++++---------- doc/irm/qte.qmd | 26 +++++++++++++------------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/.github/workflows/quant_sim.yml b/.github/workflows/quant_sim.yml index a4d1ad5..8304a93 100644 --- a/.github/workflows/quant_sim.yml +++ b/.github/workflows/quant_sim.yml @@ -17,9 +17,9 @@ jobs: strategy: matrix: script: [ - 'scripts/irm/cvar_coverage.py', - 'scripts/irm/pq_coverage.py', - 'scripts/irm/lpq_coverage.py', + 'scripts/irm/cvar.py', + 'scripts/irm/pq.py', + 'scripts/irm/lpq.py', ] steps: @@ -49,20 +49,27 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.7.8" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + cd monte-cover + uv venv + uv sync - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -70,7 +77,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | diff --git a/doc/irm/qte.qmd b/doc/irm/qte.qmd index afce285..4b60ccc 100644 --- a/doc/irm/qte.qmd +++ b/doc/irm/qte.qmd @@ -31,7 +31,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/irm/pq_coverage_metadata.csv' +metadata_file = '../../results/irm/pq_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -42,7 +42,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data -df_qte = pd.read_csv("../../results/irm/pq_coverage_qte.csv", index_col=None) +df_qte = pd.read_csv("../../results/irm/pq_effect_coverage.csv", index_col=None) assert df_qte["repetition"].nunique() == 1 n_rep_qte = df_qte["repetition"].unique()[0] @@ -85,7 +85,7 @@ generate_and_show_styled_table( #| echo: false # set up data -df_pq0 = pd.read_csv("../../results/irm/pq_coverage_pq0.csv", index_col=None) +df_pq0 = pd.read_csv("../../results/irm/pq_Y0_coverage.csv", index_col=None) assert df_pq0["repetition"].nunique() == 1 n_rep_pq0 = df_pq0["repetition"].unique()[0] @@ -125,7 +125,7 @@ generate_and_show_styled_table( #| echo: false # set up data and rename columns -df_pq1 = pd.read_csv("../../results/irm/pq_coverage_pq1.csv", index_col=None) +df_pq1 = pd.read_csv("../../results/irm/pq_Y1_coverage.csv", index_col=None) assert df_pq1["repetition"].nunique() == 1 n_rep_pq1 = df_pq1["repetition"].unique()[0] @@ -161,7 +161,7 @@ generate_and_show_styled_table( ## LQTE -The results are based on a location-scale model as described the corresponding [Example](https://docs.doubleml.org/stable/examples/py_double_ml_pq.html#Local-Potential-Quantiles-(LPQs)) with $10,000$ observations. +The results are based on a location-scale model as described the corresponding [Example](https://docs.doubleml.org/stable/examples/py_double_ml_pq.html#Local-Potential-Quantiles-(LPQs)) with $5,000$ observations. The non-uniform results (coverage, ci length and bias) refer to averaged values over all quantiles (point-wise confidende intervals). @@ -169,7 +169,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/irm/lpq_coverage_metadata.csv' +metadata_file = '../../results/irm/lpq_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -180,7 +180,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data -df_lqte = pd.read_csv("../../results/irm/lpq_coverage_lqte.csv", index_col=None) +df_lqte = pd.read_csv("../../results/irm/lpq_effect_coverage.csv", index_col=None) assert df_lqte["repetition"].nunique() == 1 n_rep_lqte = df_lqte["repetition"].unique()[0] @@ -222,7 +222,7 @@ generate_and_show_styled_table( #| echo: false # set up data -df_lpq0 = pd.read_csv("../../results/irm/lpq_coverage_lpq0.csv", index_col=None) +df_lpq0 = pd.read_csv("../../results/irm/lpq_Y0_coverage.csv", index_col=None) assert df_lpq0["repetition"].nunique() == 1 n_rep_lpq0 = df_lpq0["repetition"].unique()[0] @@ -262,7 +262,7 @@ generate_and_show_styled_table( #| echo: false # set up data -df_lpq1 = pd.read_csv("../../results/irm/lpq_coverage_lpq1.csv", index_col=None) +df_lpq1 = pd.read_csv("../../results/irm/lpq_Y1_coverage.csv", index_col=None) assert df_lpq1["repetition"].nunique() == 1 n_rep_lpq1 = df_lpq1["repetition"].unique()[0] @@ -306,7 +306,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/irm/cvar_coverage_metadata.csv' +metadata_file = '../../results/irm/cvar_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -317,7 +317,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data -df_cvar_qte = pd.read_csv("../../results/irm/cvar_coverage_qte.csv", index_col=None) +df_cvar_qte = pd.read_csv("../../results/irm/cvar_effect_coverage.csv", index_col=None) assert df_cvar_qte["repetition"].nunique() == 1 n_rep_cvar_qte = df_cvar_qte["repetition"].unique()[0] @@ -359,7 +359,7 @@ generate_and_show_styled_table( #| echo: false # set up data -df_cvar_pq0 = pd.read_csv("../../results/irm/cvar_coverage_pq0.csv", index_col=None) +df_cvar_pq0 = pd.read_csv("../../results/irm/cvar_Y0_coverage.csv", index_col=None) assert df_cvar_pq0["repetition"].nunique() == 1 n_rep_cvar_pq0 = df_cvar_pq0["repetition"].unique()[0] @@ -399,7 +399,7 @@ generate_and_show_styled_table( #| echo: false # set up data -df_cvar_pq1 = pd.read_csv("../../results/irm/cvar_coverage_pq1.csv", index_col=None) +df_cvar_pq1 = pd.read_csv("../../results/irm/cvar_Y1_coverage.csv", index_col=None) assert df_cvar_pq1["repetition"].nunique() == 1 n_rep_cvar_pq1 = df_cvar_pq1["repetition"].unique()[0] From c3119f4f079e6ffd0731b0b75bd36ebf280423c1 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 13:54:32 +0200 Subject: [PATCH 095/142] rerun quantile simulations --- results/irm/cvar_Y0_coverage.csv | 9 ++++ results/irm/cvar_Y1_coverage.csv | 9 ++++ results/irm/cvar_config.yml | 65 ++++++++++++++++++++++++++++ results/irm/cvar_effect_coverage.csv | 9 ++++ results/irm/cvar_metadata.csv | 2 + results/irm/lpq_Y0_coverage.csv | 9 ++++ results/irm/lpq_Y1_coverage.csv | 9 ++++ results/irm/lpq_config.yml | 48 ++++++++++++++++++++ results/irm/lpq_effect_coverage.csv | 9 ++++ results/irm/lpq_metadata.csv | 2 + results/irm/pq_Y0_coverage.csv | 9 ++++ results/irm/pq_Y1_coverage.csv | 9 ++++ results/irm/pq_config.yml | 50 +++++++++++++++++++++ results/irm/pq_effect_coverage.csv | 9 ++++ results/irm/pq_metadata.csv | 2 + 15 files changed, 250 insertions(+) create mode 100644 results/irm/cvar_Y0_coverage.csv create mode 100644 results/irm/cvar_Y1_coverage.csv create mode 100644 results/irm/cvar_config.yml create mode 100644 results/irm/cvar_effect_coverage.csv create mode 100644 results/irm/cvar_metadata.csv create mode 100644 results/irm/lpq_Y0_coverage.csv create mode 100644 results/irm/lpq_Y1_coverage.csv create mode 100644 results/irm/lpq_config.yml create mode 100644 results/irm/lpq_effect_coverage.csv create mode 100644 results/irm/lpq_metadata.csv create mode 100644 results/irm/pq_Y0_coverage.csv create mode 100644 results/irm/pq_Y1_coverage.csv create mode 100644 results/irm/pq_config.yml create mode 100644 results/irm/pq_effect_coverage.csv create mode 100644 results/irm/pq_metadata.csv diff --git a/results/irm/cvar_Y0_coverage.csv b/results/irm/cvar_Y0_coverage.csv new file mode 100644 index 0000000..4c2e567 --- /dev/null +++ b/results/irm/cvar_Y0_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,0.9,0.85,0.5670142676988336,0.15380806524383983,200 +LGBM Regr.,LGBM Clas.,0.95,0.917142857142857,0.6756391725078731,0.15380806524383983,200 +LGBM Regr.,Logistic,0.9,0.7985714285714286,0.4385225256106473,0.13981066432860312,200 +LGBM Regr.,Logistic,0.95,0.8857142857142857,0.5225318183474872,0.13981066432860312,200 +Linear,LGBM Clas.,0.9,0.807142857142857,0.5780831437073561,0.16505729067291136,200 +Linear,LGBM Clas.,0.95,0.8778571428571429,0.6888285517757731,0.16505729067291136,200 +Linear,Logistic,0.9,0.7535714285714286,0.46127673668330255,0.14620789056223912,200 +Linear,Logistic,0.95,0.8271428571428571,0.5496451331545211,0.14620789056223912,200 diff --git a/results/irm/cvar_Y1_coverage.csv b/results/irm/cvar_Y1_coverage.csv new file mode 100644 index 0000000..5319243 --- /dev/null +++ b/results/irm/cvar_Y1_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,0.9,0.9214285714285714,0.1913460262511472,0.0431261794473061,200 +LGBM Regr.,LGBM Clas.,0.95,0.9592857142857143,0.22800285319744668,0.0431261794473061,200 +LGBM Regr.,Logistic,0.9,0.9192857142857143,0.18097901112163345,0.041041888975454605,200 +LGBM Regr.,Logistic,0.95,0.9614285714285714,0.2156497927499421,0.041041888975454605,200 +Linear,LGBM Clas.,0.9,0.9164285714285714,0.2132575331275393,0.046942310613367344,200 +Linear,LGBM Clas.,0.95,0.9621428571428571,0.2541120240203392,0.046942310613367344,200 +Linear,Logistic,0.9,0.9228571428571429,0.1968307741542601,0.04490834814057729,200 +Linear,Logistic,0.95,0.9557142857142857,0.23453833342391914,0.04490834814057729,200 diff --git a/results/irm/cvar_config.yml b/results/irm/cvar_config.yml new file mode 100644 index 0000000..5157d7e --- /dev/null +++ b/results/irm/cvar_config.yml @@ -0,0 +1,65 @@ +simulation_parameters: + repetitions: 200 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 5000 + dim_x: + - 5 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 200 + learning_rate: 0.05 + num_leaves: 15 + max_depth: 5 + min_child_samples: 10 + subsample: 0.9 + colsample_bytree: 0.9 + reg_alpha: 0.0 + reg_lambda: 0.1 + random_state: 42 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 200 + learning_rate: 0.05 + num_leaves: 15 + max_depth: 5 + min_child_samples: 10 + subsample: 0.9 + colsample_bytree: 0.9 + reg_alpha: 0.0 + reg_lambda: 0.1 + random_state: 42 +dml_parameters: + tau_vec: + - - 0.2 + - 0.3 + - 0.4 + - 0.5 + - 0.6 + - 0.7 + - 0.8 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/cvar_effect_coverage.csv b/results/irm/cvar_effect_coverage.csv new file mode 100644 index 0000000..c54c59b --- /dev/null +++ b/results/irm/cvar_effect_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,0.9,0.85,0.5796241888849147,0.15567372871154336,0.87,0.7009270285655491,200 +LGBM Regr.,LGBM Clas.,0.95,0.9292857142857143,0.6906648203634905,0.15567372871154336,0.92,0.8074443628687097,200 +LGBM Regr.,Logistic,0.9,0.8207142857142857,0.4505521904112434,0.1384841777144103,0.795,0.5426740272513005,200 +LGBM Regr.,Logistic,0.95,0.8928571428571429,0.5368660480740288,0.1384841777144103,0.88,0.6261735233895037,200 +Linear,LGBM Clas.,0.9,0.825,0.604031305594578,0.17336373457185203,0.78,0.7151775160876557,200 +Linear,LGBM Clas.,0.95,0.8971428571428571,0.719747693716827,0.17336373457185203,0.85,0.8269744576928215,200 +Linear,Logistic,0.9,0.775,0.4860331654639814,0.1489380406801104,0.74,0.5698020622218235,200 +Linear,Logistic,0.95,0.85,0.5791442375130592,0.1489380406801104,0.81,0.6599452421128806,200 diff --git a/results/irm/cvar_metadata.csv b/results/irm/cvar_metadata.csv new file mode 100644 index 0000000..63df236 --- /dev/null +++ b/results/irm/cvar_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,CVARCoverageSimulation,2025-06-05 12:27,9.002358218034109,3.12.9,scripts/irm/cvar_config.yml diff --git a/results/irm/lpq_Y0_coverage.csv b/results/irm/lpq_Y0_coverage.csv new file mode 100644 index 0000000..81556c0 --- /dev/null +++ b/results/irm/lpq_Y0_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Clas.,LGBM Clas.,0.9,0.935,1.1830884138959616,0.24363577628567012,200 +LGBM Clas.,LGBM Clas.,0.95,0.966,1.4097367958876215,0.24363577628567012,200 +LGBM Clas.,Logistic,0.9,0.9470000000000001,1.1413178140016869,0.21854310075124617,200 +LGBM Clas.,Logistic,0.95,0.971,1.3599640561957957,0.21854310075124617,200 +Logistic,LGBM Clas.,0.9,0.932,1.1519919205445956,0.2330721806385721,200 +Logistic,LGBM Clas.,0.95,0.965,1.3726830386319526,0.2330721806385721,200 +Logistic,Logistic,0.9,0.9359999999999999,1.1121705811298108,0.21974489145697174,200 +Logistic,Logistic,0.95,0.9670000000000001,1.3252329860617573,0.21974489145697174,200 diff --git a/results/irm/lpq_Y1_coverage.csv b/results/irm/lpq_Y1_coverage.csv new file mode 100644 index 0000000..5f9e93b --- /dev/null +++ b/results/irm/lpq_Y1_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Clas.,LGBM Clas.,0.9,0.927,1.6166365116884824,0.31220031423527045,200 +LGBM Clas.,LGBM Clas.,0.95,0.963,1.9263412178957202,0.31220031423527045,200 +LGBM Clas.,Logistic,0.9,0.943,1.563138831397548,0.2947145026308053,200 +LGBM Clas.,Logistic,0.95,0.971,1.8625948000329942,0.2947145026308053,200 +Logistic,LGBM Clas.,0.9,0.9420000000000001,1.567514402933319,0.2888227334203665,200 +Logistic,LGBM Clas.,0.95,0.971,1.867808615099192,0.2888227334203665,200 +Logistic,Logistic,0.9,0.94,1.514063009772447,0.28729535217904684,200 +Logistic,Logistic,0.95,0.9690000000000001,1.8041173517537936,0.28729535217904684,200 diff --git a/results/irm/lpq_config.yml b/results/irm/lpq_config.yml new file mode 100644 index 0000000..85abd3f --- /dev/null +++ b/results/irm/lpq_config.yml @@ -0,0 +1,48 @@ +simulation_parameters: + repetitions: 200 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 5000 + dim_x: + - 5 +learner_definitions: + logit: &id001 + name: Logistic + lgbmc: &id002 + name: LGBM Clas. + params: + n_estimators: 200 + learning_rate: 0.05 + num_leaves: 15 + max_depth: 5 + min_child_samples: 10 + subsample: 0.9 + colsample_bytree: 0.9 + reg_alpha: 0.0 + reg_lambda: 0.1 + random_state: 42 +dml_parameters: + tau_vec: + - - 0.3 + - 0.4 + - 0.5 + - 0.6 + - 0.7 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id002 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/lpq_effect_coverage.csv b/results/irm/lpq_effect_coverage.csv new file mode 100644 index 0000000..b4f076b --- /dev/null +++ b/results/irm/lpq_effect_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Clas.,LGBM Clas.,0.9,0.872,1.6181705726529205,0.40951487126584607,0.845,2.1354108341964264,200 +LGBM Clas.,LGBM Clas.,0.95,0.9159999999999999,1.928169164280202,0.40951487126584607,0.9,2.415503519370637,200 +LGBM Clas.,Logistic,0.9,0.8740000000000001,1.5610121253821851,0.3740351656285603,0.85,2.0636125204752434,200 +LGBM Clas.,Logistic,0.95,0.922,1.860060673514064,0.3740351656285603,0.9,2.3356640837390916,200 +Logistic,LGBM Clas.,0.9,0.88,1.5741042679593236,0.3725851701898653,0.85,2.068634959359497,200 +Logistic,LGBM Clas.,0.95,0.924,1.8756609235978434,0.3725851701898653,0.9,2.3413181297561683,200 +Logistic,Logistic,0.9,0.867,1.517966599775595,0.37223450094097055,0.85,1.9954916237204523,200 +Logistic,Logistic,0.95,0.92,1.808768766135729,0.37223450094097055,0.92,2.260577010587138,200 diff --git a/results/irm/lpq_metadata.csv b/results/irm/lpq_metadata.csv new file mode 100644 index 0000000..1ef72ff --- /dev/null +++ b/results/irm/lpq_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,LPQCoverageSimulation,2025-06-05 13:42,14.852794400850932,3.12.9,scripts/irm/lpq_config.yml diff --git a/results/irm/pq_Y0_coverage.csv b/results/irm/pq_Y0_coverage.csv new file mode 100644 index 0000000..904a016 --- /dev/null +++ b/results/irm/pq_Y0_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Clas.,LGBM Clas.,0.9,0.8721428571428571,0.5855383193027298,0.15439049862379853,200 +LGBM Clas.,LGBM Clas.,0.95,0.932142857142857,0.6977119414135707,0.15439049862379853,200 +LGBM Clas.,Logistic,0.9,0.8607142857142857,0.4157006469047894,0.1135304583367824,200 +LGBM Clas.,Logistic,0.95,0.9264285714285714,0.4953378725822799,0.1135304583367824,200 +Logistic,LGBM Clas.,0.9,0.9007142857142857,0.57746009123863,0.1320561476852036,200 +Logistic,LGBM Clas.,0.95,0.9614285714285714,0.6880861389682303,0.1320561476852036,200 +Logistic,Logistic,0.9,0.8892857142857143,0.40888219424763206,0.10270056266342995,200 +Logistic,Logistic,0.95,0.9335714285714286,0.4872131851211298,0.10270056266342995,200 diff --git a/results/irm/pq_Y1_coverage.csv b/results/irm/pq_Y1_coverage.csv new file mode 100644 index 0000000..59ce777 --- /dev/null +++ b/results/irm/pq_Y1_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Clas.,LGBM Clas.,0.9,0.9135714285714286,0.2547786121622827,0.06025439826660347,200 +LGBM Clas.,LGBM Clas.,0.95,0.9635714285714286,0.30358744126957204,0.06025439826660347,200 +LGBM Clas.,Logistic,0.9,0.925,0.23468112272452962,0.055254012231200356,200 +LGBM Clas.,Logistic,0.95,0.9621428571428571,0.27963980554548934,0.055254012231200356,200 +Logistic,LGBM Clas.,0.9,0.9292857142857143,0.25306018928392865,0.05756351160374336,200 +Logistic,LGBM Clas.,0.95,0.9728571428571429,0.30153981411503566,0.05756351160374336,200 +Logistic,Logistic,0.9,0.9235714285714286,0.23576437773394143,0.05403824556407575,200 +Logistic,Logistic,0.95,0.9721428571428571,0.2809305835027078,0.05403824556407575,200 diff --git a/results/irm/pq_config.yml b/results/irm/pq_config.yml new file mode 100644 index 0000000..e106878 --- /dev/null +++ b/results/irm/pq_config.yml @@ -0,0 +1,50 @@ +simulation_parameters: + repetitions: 200 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 5000 + dim_x: + - 5 +learner_definitions: + logit: &id001 + name: Logistic + lgbmc: &id002 + name: LGBM Clas. + params: + n_estimators: 200 + learning_rate: 0.05 + num_leaves: 15 + max_depth: 5 + min_child_samples: 10 + subsample: 0.9 + colsample_bytree: 0.9 + reg_alpha: 0.0 + reg_lambda: 0.1 + random_state: 42 +dml_parameters: + tau_vec: + - - 0.2 + - 0.3 + - 0.4 + - 0.5 + - 0.6 + - 0.7 + - 0.8 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id002 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/pq_effect_coverage.csv b/results/irm/pq_effect_coverage.csv new file mode 100644 index 0000000..2723ea4 --- /dev/null +++ b/results/irm/pq_effect_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Clas.,LGBM Clas.,0.9,0.8721428571428571,0.6250811142351042,0.16391196246394876,0.83,0.8938663559093165,200 +LGBM Clas.,LGBM Clas.,0.95,0.9328571428571428,0.74483008776143,0.16391196246394876,0.91,0.9951285879711892,200 +LGBM Clas.,Logistic,0.9,0.8664285714285714,0.4563475824127607,0.1242769519340373,0.825,0.6552349151667995,200 +LGBM Clas.,Logistic,0.95,0.927142857142857,0.5437716835744456,0.1242769519340373,0.905,0.7290641682104055,200 +Logistic,LGBM Clas.,0.9,0.92,0.6192520613043571,0.14050842467602845,0.905,0.873815817039262,200 +Logistic,LGBM Clas.,0.95,0.9585714285714286,0.7378843427899359,0.14050842467602845,0.94,0.97537292218002,200 +Logistic,Logistic,0.9,0.8907142857142857,0.4547624845968767,0.11573164990154354,0.88,0.6436547419121843,200 +Logistic,Logistic,0.95,0.9385714285714286,0.541882923030528,0.11573164990154354,0.94,0.7176332662822544,200 diff --git a/results/irm/pq_metadata.csv b/results/irm/pq_metadata.csv new file mode 100644 index 0000000..ccb611e --- /dev/null +++ b/results/irm/pq_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,PQCoverageSimulation,2025-06-05 12:51,16.240616850058238,3.12.9,scripts/irm/pq_config.yml From 381e5b29d5c2290f09327b951ac9fd83a27fc77e Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 14:02:59 +0200 Subject: [PATCH 096/142] remove old scripts --- scripts/irm/cvar_coverage.py | 304 ----------------- scripts/irm/iivm_late_coverage.py | 143 -------- scripts/irm/irm_apo_coverage.py | 295 ----------------- scripts/irm/irm_ate_coverage.py | 139 -------- scripts/irm/irm_ate_sensitivity_old.py | 198 ----------- scripts/irm/irm_atte_coverage.py | 182 ---------- scripts/irm/irm_atte_sensitivity_old.py | 198 ----------- scripts/irm/irm_cate_coverage.py | 161 --------- scripts/irm/irm_gate_coverage.py | 167 ---------- scripts/irm/lpq_coverage.py | 328 ------------------- scripts/irm/pq_coverage.py | 299 ----------------- scripts/irm/ssm_mar_ate_coverage.py | 148 --------- scripts/irm/ssm_nonignorable_ate_coverage.py | 148 --------- scripts/plm/pliv_late_coverage.py | 178 ---------- scripts/plm/plr_ate_coverage.py | 160 --------- scripts/plm/plr_ate_sensitivity_old.py | 240 -------------- scripts/plm/plr_cate_coverage.py | 161 --------- scripts/plm/plr_gate_coverage.py | 167 ---------- scripts/rdd/rdd_fuzzy_coverage.py | 241 -------------- scripts/rdd/rdd_sharp_coverage.py | 202 ------------ 20 files changed, 4059 deletions(-) delete mode 100644 scripts/irm/cvar_coverage.py delete mode 100644 scripts/irm/iivm_late_coverage.py delete mode 100644 scripts/irm/irm_apo_coverage.py delete mode 100644 scripts/irm/irm_ate_coverage.py delete mode 100644 scripts/irm/irm_ate_sensitivity_old.py delete mode 100644 scripts/irm/irm_atte_coverage.py delete mode 100644 scripts/irm/irm_atte_sensitivity_old.py delete mode 100644 scripts/irm/irm_cate_coverage.py delete mode 100644 scripts/irm/irm_gate_coverage.py delete mode 100644 scripts/irm/lpq_coverage.py delete mode 100644 scripts/irm/pq_coverage.py delete mode 100644 scripts/irm/ssm_mar_ate_coverage.py delete mode 100644 scripts/irm/ssm_nonignorable_ate_coverage.py delete mode 100644 scripts/plm/pliv_late_coverage.py delete mode 100644 scripts/plm/plr_ate_coverage.py delete mode 100644 scripts/plm/plr_ate_sensitivity_old.py delete mode 100644 scripts/plm/plr_cate_coverage.py delete mode 100644 scripts/plm/plr_gate_coverage.py delete mode 100644 scripts/rdd/rdd_fuzzy_coverage.py delete mode 100644 scripts/rdd/rdd_sharp_coverage.py diff --git a/scripts/irm/cvar_coverage.py b/scripts/irm/cvar_coverage.py deleted file mode 100644 index 10b4e71..0000000 --- a/scripts/irm/cvar_coverage.py +++ /dev/null @@ -1,304 +0,0 @@ -import numpy as np -import pandas as pd -import multiprocessing -from datetime import datetime -import time -import sys - -from sklearn.linear_model import LogisticRegressionCV, LinearRegression -from lightgbm import LGBMClassifier, LGBMRegressor - -import doubleml as dml - -# set up parallelization -n_cores = multiprocessing.cpu_count() -print(f"Number of Cores: {n_cores}") -cores_used = n_cores - 1 - -# Number of repetitions -n_rep = 100 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 5000 -tau_vec = np.arange(0.2, 0.85, 0.05) -p = 5 - - -# define loc-scale model -def f_loc(D, X): - loc = ( - 0.5 * D - + 2 * D * X[:, 4] - + 2.0 * (X[:, 1] > 0.1) - - 1.7 * (X[:, 0] * X[:, 2] > 0) - - 3 * X[:, 3] - ) - return loc - - -def f_scale(D, X): - scale = np.sqrt(0.5 * D + 0.3 * D * X[:, 1] + 2) - return scale - - -def dgp(n=200, p=5): - X = np.random.uniform(-1, 1, size=[n, p]) - D = ((X[:, 1] - X[:, 3] + 1.5 * (X[:, 0] > 0) + np.random.normal(size=n)) > 0) * 1.0 - epsilon = np.random.normal(size=n) - - Y = f_loc(D, X) + f_scale(D, X) * epsilon - return Y, X, D, epsilon - - -# Estimate true and QTE with counterfactuals on large sample -n_true = int(10e6) - -_, X_true, _, epsilon_true = dgp(n=n_true, p=p) -D1 = np.ones(n_true) -D0 = np.zeros(n_true) - -Y1 = f_loc(D1, X_true) + f_scale(D1, X_true) * epsilon_true -Y0 = f_loc(D0, X_true) + f_scale(D0, X_true) * epsilon_true - -Y1_quant = np.quantile(Y1, q=tau_vec) -Y0_quant = np.quantile(Y0, q=tau_vec) -Y1_cvar = [Y1[Y1 >= quant].mean() for quant in Y1_quant] -Y0_cvar = [Y0[Y0 >= quant].mean() for quant in Y0_quant] -CVAR = np.array(Y1_cvar) - np.array(Y0_cvar) - -print(f"Conditional Value at Risk Y(0): {Y0_cvar}") -print(f"Conditional Value at Risk Y(1): {Y1_cvar}") -print(f"Conditional Value at Risk Effect: {CVAR}") - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - Y, X, D, _ = dgp(n=n_obs, p=p) - data = dml.DoubleMLData.from_arrays(X, Y, D) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Linear", LinearRegression()), - ( - "LGBM", - LGBMRegressor( - n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 - ), - ), - ], - "learner_m": [ - ("Logistic Regression", LogisticRegressionCV()), - ( - "LGBM", - LGBMClassifier( - n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed_qte = pd.DataFrame() -df_results_detailed_pq0 = pd.DataFrame() -df_results_detailed_pq1 = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep + 1}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = datasets[i_rep] - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_qte = dml.DoubleMLQTE( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - score="CVaR", - quantiles=tau_vec, - ) - dml_qte.fit(n_jobs_models=cores_used) - effects = dml_qte.coef - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_qte.confint(level=level) - coverage = np.mean( - (confint.iloc[:, 0] < CVAR) & (CVAR < confint.iloc[:, 1]) - ) - ci_length = np.mean(confint.iloc[:, 1] - confint.iloc[:, 0]) - - dml_qte.bootstrap(n_rep_boot=2000) - confint_uniform = dml_qte.confint(level=level, joint=True) - coverage_uniform = all( - (confint_uniform.iloc[:, 0] < CVAR) - & (CVAR < confint_uniform.iloc[:, 1]) - ) - ci_length_uniform = np.mean( - confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0] - ) - df_results_detailed_qte = pd.concat( - ( - df_results_detailed_qte, - pd.DataFrame( - { - "Coverage": coverage, - "CI Length": ci_length, - "Bias": np.mean(abs(effects - CVAR)), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - # evaluate each model - coverage_0 = np.zeros(len(tau_vec)) - coverage_1 = np.zeros(len(tau_vec)) - - ci_length_0 = np.zeros(len(tau_vec)) - ci_length_1 = np.zeros(len(tau_vec)) - - bias_0 = np.zeros(len(tau_vec)) - bias_1 = np.zeros(len(tau_vec)) - for tau_idx, tau in enumerate(tau_vec): - model_0 = dml_qte.modellist_0[tau_idx] - model_1 = dml_qte.modellist_1[tau_idx] - - confint_0 = model_0.confint(level=level) - confint_1 = model_1.confint(level=level) - - coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_cvar[tau_idx]) & ( - Y0_cvar[tau_idx] < confint_0.iloc[0, 1] - ) - coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_cvar[tau_idx]) & ( - Y1_cvar[tau_idx] < confint_1.iloc[0, 1] - ) - - ci_length_0[tau_idx] = confint_0.iloc[0, 1] - confint_0.iloc[0, 0] - ci_length_1[tau_idx] = confint_1.iloc[0, 1] - confint_1.iloc[0, 0] - - bias_0[tau_idx] = abs(model_0.coef[0] - Y0_cvar[tau_idx]) - bias_1[tau_idx] = abs(model_1.coef[0] - Y1_cvar[tau_idx]) - - df_results_detailed_pq0 = pd.concat( - ( - df_results_detailed_pq0, - pd.DataFrame( - { - "Coverage": np.mean(coverage_0), - "CI Length": np.mean(ci_length_0), - "Bias": np.mean(bias_0), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - df_results_detailed_pq1 = pd.concat( - ( - df_results_detailed_pq1, - pd.DataFrame( - { - "Coverage": np.mean(coverage_1), - "CI Length": np.mean(ci_length_1), - "Bias": np.mean(bias_1), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results_qte = ( - df_results_detailed_qte.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results_qte) - -df_results_pq0 = ( - df_results_detailed_pq0.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results_pq0) - -df_results_pq1 = ( - df_results_detailed_pq1.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results_pq1) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "cvar_coverage.py" -path = "results/irm/cvar_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results_qte.to_csv(f"{path}_qte.csv", index=False) -df_results_pq0.to_csv(f"{path}_pq0.csv", index=False) -df_results_pq1.to_csv(f"{path}_pq1.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/iivm_late_coverage.py b/scripts/irm/iivm_late_coverage.py deleted file mode 100644 index 52a2fd9..0000000 --- a/scripts/irm/iivm_late_coverage.py +++ /dev/null @@ -1,143 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier -from sklearn.linear_model import LassoCV, LogisticRegressionCV - -import doubleml as dml -from doubleml.datasets import make_iivm_data - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -theta = 0.5 -n_obs = 500 -dim_x = 20 -alpha_x = 1.0 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - data = make_iivm_data( - theta=theta, n_obs=n_obs, dim_x=dim_x, alpha_x=alpha_x, return_type="DataFrame" - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Lasso", LassoCV()), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "learner_m": [ - ("Logistic Regression", LogisticRegressionCV()), - ( - "Random Forest", - RandomForestClassifier( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d", z_cols="z") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_iivm = dml.DoubleMLIIVM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - ml_r=ml_m, - ) - dml_iivm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_iivm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_iivm.coef[0] - theta), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "iivm_late_coverage.py" -path = "results/irm/iivm_late_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/irm_apo_coverage.py b/scripts/irm/irm_apo_coverage.py deleted file mode 100644 index 692e9e9..0000000 --- a/scripts/irm/irm_apo_coverage.py +++ /dev/null @@ -1,295 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from lightgbm import LGBMRegressor, LGBMClassifier -from sklearn.linear_model import LinearRegression, LogisticRegression - -import doubleml as dml -from doubleml.datasets import make_irm_data_discrete_treatments - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 500 -n_levels = 2 - -# generate the APOs true values -data_apo_large = make_irm_data_discrete_treatments( - n_obs=int(1e6), n_levels=n_levels, linear=True -) -y0 = data_apo_large["oracle_values"]["y0"] -ite = data_apo_large["oracle_values"]["ite"] -d = data_apo_large["d"] - -average_ites = np.full(n_levels + 1, np.nan) -apos = np.full(n_levels + 1, np.nan) -for i in range(n_levels + 1): - average_ites[i] = np.mean(ite[d == i]) * (i > 0) - apos[i] = np.mean(y0) + average_ites[i] - -ates = np.full(n_levels, np.nan) -for i in range(n_levels): - ates[i] = apos[i + 1] - apos[0] - -print(f"Levels and their counts:\n{np.unique(d, return_counts=True)}") -print(f"True APOs: {apos}") -print(f"True ATEs: {ates}") - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - data_apo = make_irm_data_discrete_treatments( - n_obs=n_obs, n_levels=n_levels, linear=True - ) - df_apo = pd.DataFrame( - np.column_stack((data_apo["y"], data_apo["d"], data_apo["x"])), - columns=["y", "d"] + ["x" + str(i) for i in range(data_apo["x"].shape[1])], - ) - datasets.append(df_apo) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [("Linear", LinearRegression()), ("LGBM", LGBMRegressor(verbose=-1))], - "learner_m": [ - ("Logistic", LogisticRegression()), - ("LGBM", LGBMClassifier(verbose=-1)), - ], - "treatment_levels": [0.0, 1.0, 2.0], - "level": [0.95, 0.90], - "trimming_threshold": 0.01, -} - -# set up the results dataframe -df_results_detailed_apo = pd.DataFrame() -df_results_detailed_apos = pd.DataFrame() -df_results_detailed_apos_constrast = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - for treatment_idx, treatment_level in enumerate( - hyperparam_dict["treatment_levels"] - ): - dml_apo = dml.DoubleMLAPO( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - treatment_level=treatment_level, - trimming_threshold=hyperparam_dict["trimming_threshold"], - ) - dml_apo.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_apo.confint(level=level) - coverage = (confint.iloc[0, 0] < apos[treatment_idx]) & ( - apos[treatment_idx] < confint.iloc[0, 1] - ) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - df_results_detailed_apo = pd.concat( - ( - df_results_detailed_apo, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - - confint.iloc[0, 0], - "Bias": abs(dml_apo.coef[0] - apos[treatment_idx]), - "Treatment Level": treatment_level, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - # calculate the APOs - dml_apos = dml.DoubleMLAPOS( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - treatment_levels=hyperparam_dict["treatment_levels"], - trimming_threshold=hyperparam_dict["trimming_threshold"], - ) - dml_apos.fit(n_jobs_cv=5) - effects = dml_apos.coef - - causal_contrast_model = dml_apos.causal_contrast(reference_levels=0) - est_ates = causal_contrast_model.thetas - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_apos.confint(level=level) - coverage = np.mean( - (confint.iloc[:, 0] < apos) & (apos < confint.iloc[:, 1]) - ) - ci_length = np.mean(confint.iloc[:, 1] - confint.iloc[:, 0]) - - dml_apos.bootstrap(n_rep_boot=2000) - confint_uniform = dml_apos.confint(level=level, joint=True) - coverage_uniform = all( - (confint_uniform.iloc[:, 0] < apos) - & (apos < confint_uniform.iloc[:, 1]) - ) - ci_length_uniform = np.mean( - confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0] - ) - df_results_detailed_apos = pd.concat( - ( - df_results_detailed_apos, - pd.DataFrame( - { - "Coverage": coverage, - "CI Length": ci_length, - "Bias": np.mean(abs(effects - apos)), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - # calculate the ATEs - confint_contrast = causal_contrast_model.confint(level=level) - coverage_contrast = np.mean( - (confint_contrast.iloc[:, 0] < ates) - & (ates < confint_contrast.iloc[:, 1]) - ) - ci_length_contrast = np.mean( - confint_contrast.iloc[:, 1] - confint_contrast.iloc[:, 0] - ) - - causal_contrast_model.bootstrap(n_rep_boot=2000) - confint_contrast_uniform = causal_contrast_model.confint( - level=level, joint=True - ) - coverage_contrast_uniform = all( - (confint_contrast_uniform.iloc[:, 0] < ates) - & (ates < confint_contrast_uniform.iloc[:, 1]) - ) - ci_length_contrast_uniform = np.mean( - confint_contrast_uniform.iloc[:, 1] - - confint_contrast_uniform.iloc[:, 0] - ) - df_results_detailed_apos_constrast = pd.concat( - ( - df_results_detailed_apos_constrast, - pd.DataFrame( - { - "Coverage": coverage_contrast, - "CI Length": ci_length_contrast, - "Bias": np.mean(abs(est_ates - ates)), - "Uniform Coverage": coverage_contrast_uniform, - "Uniform CI Length": ci_length_contrast_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results_apo = ( - df_results_detailed_apo.groupby( - ["Learner g", "Learner m", "Treatment Level", "level"] - ) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results_apo) - -df_results_apos = ( - df_results_detailed_apos.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results_apos) - -df_results_apos_contrast = ( - df_results_detailed_apos_constrast.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results_apos_contrast) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_apo_coverage.py" -path = "results/irm/irm_apo_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results_apo.to_csv(f"{path}_apo.csv", index=False) -df_results_apos.to_csv(f"{path}_apos.csv", index=False) -df_results_apos_contrast.to_csv(f"{path}_apos_contrast.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/irm_ate_coverage.py b/scripts/irm/irm_ate_coverage.py deleted file mode 100644 index 318bded..0000000 --- a/scripts/irm/irm_ate_coverage.py +++ /dev/null @@ -1,139 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier -from sklearn.linear_model import LassoCV, LogisticRegressionCV - -import doubleml as dml -from doubleml.datasets import make_irm_data - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -theta = 0.5 -n_obs = 500 -dim_x = 20 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - data = make_irm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, return_type="DataFrame") - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Lasso", LassoCV()), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "learner_m": [ - ("Logistic Regression", LogisticRegressionCV()), - ( - "Random Forest", - RandomForestClassifier( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_irm = dml.DoubleMLIRM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - ) - dml_irm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_irm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_irm.coef[0] - theta), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_ate_coverage.py" -path = "results/irm/irm_ate_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/irm_ate_sensitivity_old.py b/scripts/irm/irm_ate_sensitivity_old.py deleted file mode 100644 index b53600c..0000000 --- a/scripts/irm/irm_ate_sensitivity_old.py +++ /dev/null @@ -1,198 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from sklearn.linear_model import LinearRegression, LogisticRegression -from lightgbm import LGBMRegressor, LGBMClassifier - -import doubleml as dml -from doubleml.datasets import make_confounded_irm_data - -# Number of repetitions -n_rep = 500 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 5000 -theta = 5.0 -trimming_threshold = 0.05 - -dgp_pars = { - "gamma_a": 0.198, - "beta_a": 0.582, - "theta": theta, - "var_epsilon_y": 1.0, - "trimming_threshold": trimming_threshold, - "linear": False, -} - -# test inputs -np.random.seed(42) -dgp_dict = make_confounded_irm_data(n_obs=int(1e6), **dgp_pars) - -oracle_dict = dgp_dict["oracle_values"] -rho = oracle_dict["rho_ate"] -cf_y = oracle_dict["cf_y"] -cf_d = oracle_dict["cf_d_ate"] - -print(f"Confounding factor for Y: {cf_y}") -print(f"Confounding factor for D: {cf_d}") -print(f"Rho: {rho}") - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - dgp_dict = make_confounded_irm_data(n_obs=n_obs, **dgp_pars) - datasets.append(dgp_dict) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Linear Reg.", LinearRegression()), - ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 - ), - ), - ], - "learner_m": [ - ("Logistic Regr.", LogisticRegression()), - ( - "LGBM", - LGBMClassifier( - n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - dgp_dict = datasets[i_rep] - - x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] - df = pd.DataFrame( - np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), - columns=x_cols + ["y", "d"], - ) - obj_dml_data = dml.DoubleMLData(df, "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_irm = dml.DoubleMLIRM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - trimming_threshold=trimming_threshold, - ) - dml_irm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - estimate = dml_irm.coef[0] - confint = dml_irm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - # test sensitivity parameters - dml_irm.sensitivity_analysis( - cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta - ) - cover_lower = theta >= dml_irm.sensitivity_params["ci"]["lower"] - cover_upper = theta <= dml_irm.sensitivity_params["ci"]["upper"] - rv = dml_irm.sensitivity_params["rv"] - rva = dml_irm.sensitivity_params["rva"] - bias_lower = abs(theta - dml_irm.sensitivity_params["theta"]["lower"]) - bias_upper = abs(theta - dml_irm.sensitivity_params["theta"]["upper"]) - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_ate_sensitivity.py" -path = "results/irm/irm_ate_sensitivity" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/irm_atte_coverage.py b/scripts/irm/irm_atte_coverage.py deleted file mode 100644 index 53d38bc..0000000 --- a/scripts/irm/irm_atte_coverage.py +++ /dev/null @@ -1,182 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier -from sklearn.linear_model import LassoCV, LogisticRegressionCV - -import doubleml as dml -from doubleml.datasets import make_irm_data -from scipy.linalg import toeplitz - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -theta = 0.5 -n_obs = 500 -dim_x = 20 - -# We can simulate the ATTE from the function via MC-samples -n_obs_atte = 50000 - -# manual make irm data with default params -R2_d = 0.5 -R2_y = 0.5 - -v = np.random.uniform( - size=[ - n_obs_atte, - ] -) -zeta = np.random.standard_normal( - size=[ - n_obs_atte, - ] -) - -cov_mat = toeplitz([np.power(0.5, k) for k in range(dim_x)]) -x = np.random.multivariate_normal( - np.zeros(dim_x), - cov_mat, - size=[ - n_obs_atte, - ], -) - -beta = [1 / (k**2) for k in range(1, dim_x + 1)] -b_sigma_b = np.dot(np.dot(cov_mat, beta), beta) -c_y = np.sqrt(R2_y / ((1 - R2_y) * b_sigma_b)) -c_d = np.sqrt(np.pi**2 / 3.0 * R2_d / ((1 - R2_d) * b_sigma_b)) - -xx = np.exp(np.dot(x, np.multiply(beta, c_d))) -d = 1.0 * ((xx / (1 + xx)) > v) - -y = d * theta + d * np.dot(x, np.multiply(beta, c_y)) + zeta -y0 = zeta -y1 = theta + np.dot(x, np.multiply(beta, c_y)) + zeta - -ATTE = np.mean(y1[d == 1] - y0[d == 1]) -print(ATTE) - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - data = make_irm_data(theta=theta, n_obs=n_obs, dim_x=dim_x, return_type="DataFrame") - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Lasso", LassoCV()), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "learner_m": [ - ("Logistic Regression", LogisticRegressionCV()), - ( - "Random Forest", - RandomForestClassifier( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_irm = dml.DoubleMLIRM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - score="ATTE", - ) - dml_irm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_irm.confint(level=level) - coverage = (confint.iloc[0, 0] < ATTE) & (ATTE < confint.iloc[0, 1]) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(dml_irm.coef[0] - ATTE), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_atte_coverage.py" -path = "results/irm/irm_atte_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/irm_atte_sensitivity_old.py b/scripts/irm/irm_atte_sensitivity_old.py deleted file mode 100644 index 10b5f0d..0000000 --- a/scripts/irm/irm_atte_sensitivity_old.py +++ /dev/null @@ -1,198 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from sklearn.linear_model import LinearRegression, LogisticRegression -from lightgbm import LGBMRegressor, LGBMClassifier - -import doubleml as dml -from doubleml.datasets import make_confounded_irm_data - -# Number of repetitions -n_rep = 500 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 5000 -theta = 5.0 -trimming_threshold = 0.05 - -dgp_pars = { - "gamma_a": 0.151, - "beta_a": 0.580, - "theta": theta, - "var_epsilon_y": 1.0, - "trimming_threshold": trimming_threshold, - "linear": False, -} - -# test inputs -np.random.seed(42) -dgp_dict = make_confounded_irm_data(n_obs=int(1e6), **dgp_pars) - -oracle_dict = dgp_dict["oracle_values"] -rho = oracle_dict["rho_atte"] -cf_y = oracle_dict["cf_y"] -cf_d = oracle_dict["cf_d_atte"] - -print(f"Confounding factor for Y: {cf_y}") -print(f"Confounding factor for D: {cf_d}") -print(f"Rho: {rho}") - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - dgp_dict = make_confounded_irm_data(n_obs=n_obs, **dgp_pars) - datasets.append(dgp_dict) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Linear Reg.", LinearRegression()), - ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 - ), - ), - ], - "learner_m": [ - ("Logistic Regr.", LogisticRegression()), - ( - "LGBM", - LGBMClassifier( - n_estimators=500, learning_rate=0.01, min_child_samples=10, verbose=-1 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - dgp_dict = datasets[i_rep] - - x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] - df = pd.DataFrame( - np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), - columns=x_cols + ["y", "d"], - ) - obj_dml_data = dml.DoubleMLData(df, "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_irm = dml.DoubleMLIRM( - obj_dml_data=obj_dml_data, - score="ATTE", - ml_g=ml_g, - ml_m=ml_m, - trimming_threshold=trimming_threshold, - ) - dml_irm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - estimate = dml_irm.coef[0] - confint = dml_irm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & (theta < confint.iloc[0, 1]) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - # test sensitivity parameters - dml_irm.sensitivity_analysis( - cf_y=cf_y, cf_d=cf_d, rho=rho, level=level, null_hypothesis=theta - ) - cover_lower = theta >= dml_irm.sensitivity_params["ci"]["lower"] - cover_upper = theta <= dml_irm.sensitivity_params["ci"]["upper"] - rv = dml_irm.sensitivity_params["rv"] - rva = dml_irm.sensitivity_params["rva"] - bias_lower = abs(theta - dml_irm.sensitivity_params["theta"]["lower"]) - bias_upper = abs(theta - dml_irm.sensitivity_params["theta"]["upper"]) - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_atte_sensitivity.py" -path = "results/irm/irm_atte_sensitivity" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/irm_cate_coverage.py b/scripts/irm/irm_cate_coverage.py deleted file mode 100644 index 85e5dfc..0000000 --- a/scripts/irm/irm_cate_coverage.py +++ /dev/null @@ -1,161 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys -import patsy - -from lightgbm import LGBMRegressor, LGBMClassifier -from sklearn.linear_model import LassoCV, LogisticRegressionCV - -import doubleml as dml -from doubleml.datasets import make_heterogeneous_data - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 2000 -p = 10 -support_size = 5 -n_x = 1 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - data = make_heterogeneous_data( - n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=True - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), - ], - "learner_m": [ - ("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=200, learning_rate=0.05, verbose=-1)), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - data = datasets[i_rep]["data"] - design_matrix = patsy.dmatrix("bs(x, df=5, degree=2)", {"x": data["X_0"]}) - spline_basis = pd.DataFrame(design_matrix) - - true_effects = datasets[i_rep]["effects"] - - obj_dml_data = dml.DoubleMLData(data, "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_irm = dml.DoubleMLIRM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - ) - dml_irm.fit(n_jobs_cv=5) - cate = dml_irm.cate(spline_basis) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = cate.confint(basis=spline_basis, level=level) - effects = confint["effect"] - coverage = (confint.iloc[:, 0] < true_effects) & ( - true_effects < confint.iloc[:, 2] - ) - ci_length = confint.iloc[:, 2] - confint.iloc[:, 0] - confint_uniform = cate.confint( - basis=spline_basis, level=0.95, joint=True, n_rep_boot=2000 - ) - coverage_uniform = all( - (confint_uniform.iloc[:, 0] < true_effects) - & (true_effects < confint_uniform.iloc[:, 2]) - ) - ci_length_uniform = ( - confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] - ) - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.mean(), - "CI Length": ci_length.mean(), - "Bias": abs(effects - true_effects).mean(), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform.mean(), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_cate_coverage.py" -path = "results/irm/irm_cate_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/irm_gate_coverage.py b/scripts/irm/irm_gate_coverage.py deleted file mode 100644 index 4588172..0000000 --- a/scripts/irm/irm_gate_coverage.py +++ /dev/null @@ -1,167 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from lightgbm import LGBMRegressor, LGBMClassifier -from sklearn.linear_model import LassoCV, LogisticRegressionCV - -import doubleml as dml -from doubleml.datasets import make_heterogeneous_data - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 500 -p = 10 -support_size = 5 -n_x = 1 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - data = make_heterogeneous_data( - n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=True - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), - ], - "learner_m": [ - ("Logistic Regression", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(n_estimators=200, learning_rate=0.05, verbose=-1)), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - data = datasets[i_rep]["data"] - ite = datasets[i_rep]["effects"] - - groups = pd.DataFrame( - np.column_stack( - ( - data["X_0"] <= 0.3, - (data["X_0"] > 0.3) & (data["X_0"] <= 0.7), - data["X_0"] > 0.7, - ) - ), - columns=["Group 1", "Group 2", "Group 3"], - ) - true_effects = [ite[groups[group]].mean() for group in groups.columns] - - obj_dml_data = dml.DoubleMLData(data, "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_irm = dml.DoubleMLIRM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - ) - dml_irm.fit(n_jobs_cv=5) - gate = dml_irm.gate(groups=groups) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = gate.confint(level=level) - effects = confint["effect"] - coverage = (confint.iloc[:, 0] < true_effects) & ( - true_effects < confint.iloc[:, 2] - ) - ci_length = confint.iloc[:, 2] - confint.iloc[:, 0] - confint_uniform = gate.confint(level=0.95, joint=True, n_rep_boot=2000) - coverage_uniform = all( - (confint_uniform.iloc[:, 0] < true_effects) - & (true_effects < confint_uniform.iloc[:, 2]) - ) - ci_length_uniform = ( - confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] - ) - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.mean(), - "CI Length": ci_length.mean(), - "Bias": abs(effects - true_effects).mean(), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform.mean(), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "irm_gate_coverage.py" -path = "results/irm/irm_gate_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/lpq_coverage.py b/scripts/irm/lpq_coverage.py deleted file mode 100644 index 796053c..0000000 --- a/scripts/irm/lpq_coverage.py +++ /dev/null @@ -1,328 +0,0 @@ -import numpy as np -import pandas as pd -import multiprocessing -from datetime import datetime -import time -import sys - -from sklearn.linear_model import LogisticRegressionCV -from lightgbm import LGBMClassifier - -import doubleml as dml - -# set up parallelization -n_cores = multiprocessing.cpu_count() -print(f"Number of Cores: {n_cores}") -cores_used = n_cores - 1 - -# Number of repetitions -n_rep = 100 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 5000 -tau_vec = np.arange(0.3, 0.75, 0.05) -p = 5 - - -# define loc-scale model -def f_loc(D, X, X_conf): - loc = ( - 0.5 * D - + 2 * D * X[:, 4] - + 2.0 * (X[:, 1] > 0.1) - - 1.7 * (X[:, 0] * X[:, 2] > 0) - - 3 * X[:, 3] - - 2 * X_conf[:, 0] - ) - return loc - - -def f_scale(D, X, X_conf): - scale = np.sqrt(0.5 * D + 3 * D * X[:, 0] + 0.4 * X_conf[:, 0] + 2) - return scale - - -def generate_treatment(Z, X, X_conf): - eta = np.random.normal(size=len(Z)) - d = ((0.5 * Z - 0.3 * X[:, 0] + 0.7 * X_conf[:, 0] + eta) > 0) * 1.0 - return d - - -def dgp(n=200, p=5): - X = np.random.uniform(0, 1, size=[n, p]) - X_conf = np.random.uniform(-1, 1, size=[n, 1]) - Z = np.random.binomial(1, p=0.5, size=n) - D = generate_treatment(Z, X, X_conf) - epsilon = np.random.normal(size=n) - - Y = f_loc(D, X, X_conf) + f_scale(D, X, X_conf) * epsilon - - return Y, X, D, Z - - -# Estimate true LPQ and LQTE with counterfactuals on large sample - -n_true = int(10e6) - -X_true = np.random.uniform(0, 1, size=[n_true, p]) -X_conf_true = np.random.uniform(-1, 1, size=[n_true, 1]) -Z_true = np.random.binomial(1, p=0.5, size=n_true) -eta_true = np.random.normal(size=n_true) -D1_true = generate_treatment(np.ones_like(Z_true), X_true, X_conf_true) -D0_true = generate_treatment(np.zeros_like(Z_true), X_true, X_conf_true) -epsilon_true = np.random.normal(size=n_true) - -compliers = (D1_true == 1) * (D0_true == 0) -print(f"Compliance probability: {str(compliers.mean())}") -n_compliers = compliers.sum() -Y1 = ( - f_loc(np.ones(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) - + f_scale(np.ones(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) - * epsilon_true[compliers] -) -Y0 = ( - f_loc(np.zeros(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) - + f_scale(np.zeros(n_compliers), X_true[compliers, :], X_conf_true[compliers, :]) - * epsilon_true[compliers] -) - -Y0_quant = np.quantile(Y0, q=tau_vec) -Y1_quant = np.quantile(Y1, q=tau_vec) -print(f"Local Potential Quantile Y(0): {Y0_quant}") -print(f"Local Potential Quantile Y(1): {Y1_quant}") -LQTE = Y1_quant - Y0_quant -print(f"Local Quantile Treatment Effect: {LQTE}") - - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - Y, X, D, Z = dgp(n=n_obs, p=p) - data = dml.DoubleMLData.from_arrays(X, Y, D, Z) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Logistic Regression", LogisticRegressionCV()), - ( - "LGBM", - LGBMClassifier( - n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 - ), - ), - ], - "learner_m": [ - ("Logistic Regression", LogisticRegressionCV()), - ( - "LGBM", - LGBMClassifier( - n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed_qte = pd.DataFrame() -df_results_detailed_pq0 = pd.DataFrame() -df_results_detailed_pq1 = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = datasets[i_rep] - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_qte = dml.DoubleMLQTE( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - score="LPQ", - quantiles=tau_vec, - ) - dml_qte.fit(n_jobs_models=cores_used) - effects = dml_qte.coef - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_qte.confint(level=level) - coverage = np.mean( - (confint.iloc[:, 0] < LQTE) & (LQTE < confint.iloc[:, 1]) - ) - ci_length = np.mean(confint.iloc[:, 1] - confint.iloc[:, 0]) - - dml_qte.bootstrap(n_rep_boot=2000) - confint_uniform = dml_qte.confint(level=level, joint=True) - coverage_uniform = all( - (confint_uniform.iloc[:, 0] < LQTE) - & (LQTE < confint_uniform.iloc[:, 1]) - ) - ci_length_uniform = np.mean( - confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0] - ) - df_results_detailed_qte = pd.concat( - ( - df_results_detailed_qte, - pd.DataFrame( - { - "Coverage": coverage, - "CI Length": ci_length, - "Bias": np.mean(abs(effects - LQTE)), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - # evaluate each model - coverage_0 = np.zeros(len(tau_vec)) - coverage_1 = np.zeros(len(tau_vec)) - - ci_length_0 = np.zeros(len(tau_vec)) - ci_length_1 = np.zeros(len(tau_vec)) - - bias_0 = np.zeros(len(tau_vec)) - bias_1 = np.zeros(len(tau_vec)) - for tau_idx, tau in enumerate(tau_vec): - model_0 = dml_qte.modellist_0[tau_idx] - model_1 = dml_qte.modellist_1[tau_idx] - - confint_0 = model_0.confint(level=level) - confint_1 = model_1.confint(level=level) - - coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_quant[tau_idx]) & ( - Y0_quant[tau_idx] < confint_0.iloc[0, 1] - ) - coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_quant[tau_idx]) & ( - Y1_quant[tau_idx] < confint_1.iloc[0, 1] - ) - - ci_length_0[tau_idx] = confint_0.iloc[0, 1] - confint_0.iloc[0, 0] - ci_length_1[tau_idx] = confint_1.iloc[0, 1] - confint_1.iloc[0, 0] - - bias_0[tau_idx] = abs(model_0.coef[0] - Y0_quant[tau_idx]) - bias_1[tau_idx] = abs(model_1.coef[0] - Y1_quant[tau_idx]) - - df_results_detailed_pq0 = pd.concat( - ( - df_results_detailed_pq0, - pd.DataFrame( - { - "Coverage": np.mean(coverage_0), - "CI Length": np.mean(ci_length_0), - "Bias": np.mean(bias_0), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - df_results_detailed_pq1 = pd.concat( - ( - df_results_detailed_pq1, - pd.DataFrame( - { - "Coverage": np.mean(coverage_1), - "CI Length": np.mean(ci_length_1), - "Bias": np.mean(bias_1), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results_qte = ( - df_results_detailed_qte.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results_qte) - -df_results_pq0 = ( - df_results_detailed_pq0.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results_pq0) - -df_results_pq1 = ( - df_results_detailed_pq1.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results_pq1) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "lpq_coverage.py" -path = "results/irm/lpq_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results_qte.to_csv(f"{path}_lqte.csv", index=False) -df_results_pq0.to_csv(f"{path}_lpq0.csv", index=False) -df_results_pq1.to_csv(f"{path}_lpq1.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/pq_coverage.py b/scripts/irm/pq_coverage.py deleted file mode 100644 index 480bef9..0000000 --- a/scripts/irm/pq_coverage.py +++ /dev/null @@ -1,299 +0,0 @@ -import numpy as np -import pandas as pd -import multiprocessing -from datetime import datetime -import time -import sys - -from sklearn.linear_model import LogisticRegressionCV -from lightgbm import LGBMClassifier - -import doubleml as dml - -# set up parallelization -n_cores = multiprocessing.cpu_count() -print(f"Number of Cores: {n_cores}") -cores_used = n_cores - 1 - -# Number of repetitions -n_rep = 100 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 5000 -tau_vec = np.arange(0.2, 0.85, 0.05) -p = 5 - - -# define loc-scale model -def f_loc(D, X): - loc = ( - 0.5 * D - + 2 * D * X[:, 4] - + 2.0 * (X[:, 1] > 0.1) - - 1.7 * (X[:, 0] * X[:, 2] > 0) - - 3 * X[:, 3] - ) - return loc - - -def f_scale(D, X): - scale = np.sqrt(0.5 * D + 0.3 * D * X[:, 1] + 2) - return scale - - -def dgp(n=200, p=5): - X = np.random.uniform(-1, 1, size=[n, p]) - D = ((X[:, 1] - X[:, 3] + 1.5 * (X[:, 0] > 0) + np.random.normal(size=n)) > 0) * 1.0 - epsilon = np.random.normal(size=n) - - Y = f_loc(D, X) + f_scale(D, X) * epsilon - return Y, X, D, epsilon - - -# Estimate true PQ and QTE with counterfactuals on large sample -n_true = int(10e6) - -_, X_true, _, epsilon_true = dgp(n=n_true, p=p) -D1 = np.ones(n_true) -D0 = np.zeros(n_true) - -Y1 = f_loc(D1, X_true) + f_scale(D1, X_true) * epsilon_true -Y0 = f_loc(D0, X_true) + f_scale(D0, X_true) * epsilon_true - -Y1_quant = np.quantile(Y1, q=tau_vec) -Y0_quant = np.quantile(Y0, q=tau_vec) -QTE = Y1_quant - Y0_quant - - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - Y, X, D, _ = dgp(n=n_obs, p=p) - data = dml.DoubleMLData.from_arrays(X, Y, D) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Logistic Regression", LogisticRegressionCV()), - ( - "LGBM", - LGBMClassifier( - n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 - ), - ), - ], - "learner_m": [ - ("Logistic Regression", LogisticRegressionCV()), - ( - "LGBM", - LGBMClassifier( - n_estimators=300, learning_rate=0.05, num_leaves=10, verbose=-1 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed_qte = pd.DataFrame() -df_results_detailed_pq0 = pd.DataFrame() -df_results_detailed_pq1 = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = datasets[i_rep] - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_qte = dml.DoubleMLQTE( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - score="PQ", - quantiles=tau_vec, - ) - dml_qte.fit(n_jobs_models=cores_used) - effects = dml_qte.coef - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_qte.confint(level=level) - coverage = np.mean( - (confint.iloc[:, 0] < QTE) & (QTE < confint.iloc[:, 1]) - ) - ci_length = np.mean(confint.iloc[:, 1] - confint.iloc[:, 0]) - - dml_qte.bootstrap(n_rep_boot=2000) - confint_uniform = dml_qte.confint(level=level, joint=True) - coverage_uniform = all( - (confint_uniform.iloc[:, 0] < QTE) - & (QTE < confint_uniform.iloc[:, 1]) - ) - ci_length_uniform = np.mean( - confint_uniform.iloc[:, 1] - confint_uniform.iloc[:, 0] - ) - df_results_detailed_qte = pd.concat( - ( - df_results_detailed_qte, - pd.DataFrame( - { - "Coverage": coverage, - "CI Length": ci_length, - "Bias": np.mean(abs(effects - QTE)), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - # evaluate each model - coverage_0 = np.zeros(len(tau_vec)) - coverage_1 = np.zeros(len(tau_vec)) - - ci_length_0 = np.zeros(len(tau_vec)) - ci_length_1 = np.zeros(len(tau_vec)) - - bias_0 = np.zeros(len(tau_vec)) - bias_1 = np.zeros(len(tau_vec)) - for tau_idx, tau in enumerate(tau_vec): - model_0 = dml_qte.modellist_0[tau_idx] - model_1 = dml_qte.modellist_1[tau_idx] - - confint_0 = model_0.confint(level=level) - confint_1 = model_1.confint(level=level) - - coverage_0[tau_idx] = (confint_0.iloc[0, 0] < Y0_quant[tau_idx]) & ( - Y0_quant[tau_idx] < confint_0.iloc[0, 1] - ) - coverage_1[tau_idx] = (confint_1.iloc[0, 0] < Y1_quant[tau_idx]) & ( - Y1_quant[tau_idx] < confint_1.iloc[0, 1] - ) - - ci_length_0[tau_idx] = confint_0.iloc[0, 1] - confint_0.iloc[0, 0] - ci_length_1[tau_idx] = confint_1.iloc[0, 1] - confint_1.iloc[0, 0] - - bias_0[tau_idx] = abs(model_0.coef[0] - Y0_quant[tau_idx]) - bias_1[tau_idx] = abs(model_1.coef[0] - Y1_quant[tau_idx]) - - df_results_detailed_pq0 = pd.concat( - ( - df_results_detailed_pq0, - pd.DataFrame( - { - "Coverage": np.mean(coverage_0), - "CI Length": np.mean(ci_length_0), - "Bias": np.mean(bias_0), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - df_results_detailed_pq1 = pd.concat( - ( - df_results_detailed_pq1, - pd.DataFrame( - { - "Coverage": np.mean(coverage_1), - "CI Length": np.mean(ci_length_1), - "Bias": np.mean(bias_1), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results_qte = ( - df_results_detailed_qte.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results_qte) - -df_results_pq0 = ( - df_results_detailed_pq0.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results_pq0) - -df_results_pq1 = ( - df_results_detailed_pq1.groupby(["Learner g", "Learner m", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results_pq1) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "pq_coverage.py" -path = "results/irm/pq_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results_qte.to_csv(f"{path}_qte.csv", index=False) -df_results_pq0.to_csv(f"{path}_pq0.csv", index=False) -df_results_pq1.to_csv(f"{path}_pq1.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/ssm_mar_ate_coverage.py b/scripts/irm/ssm_mar_ate_coverage.py deleted file mode 100644 index ac073d2..0000000 --- a/scripts/irm/ssm_mar_ate_coverage.py +++ /dev/null @@ -1,148 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from lightgbm import LGBMRegressor, LGBMClassifier -from sklearn.linear_model import LassoCV, LogisticRegressionCV - -import doubleml as dml -from doubleml.datasets import make_ssm_data - - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -theta = 1.0 -n_obs = 500 -dim_x = 20 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) - -datasets = [] -for i in range(n_rep): - data = make_ssm_data( - theta=theta, n_obs=n_obs, dim_x=dim_x, mar=True, return_type="DataFrame" - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "score": ["missing-at-random"], - "learner_g": [("Lasso", LassoCV()), ("LGBM", LGBMRegressor(verbose=-1))], - "learner_m": [ - ("Logistic", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(verbose=-1)), - ], - "learner_pi": [ - ("Logistic", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(verbose=-1)), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d", s_col="s") - - for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - for learner_pi_idx, (learner_pi_name, ml_pi) in enumerate( - hyperparam_dict["learner_pi"] - ): - - dml_ssm = dml.DoubleMLSSM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - ml_pi=ml_pi, - score=score, - ) - dml_ssm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_ssm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & ( - theta < confint.iloc[0, 1] - ) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - - confint.iloc[0, 0], - "Bias": abs(dml_ssm.coef[0] - theta), - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Learner pi": learner_pi_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby( - ["Learner g", "Learner m", "Learner pi", "score", "level"] - ) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "ssm_mar_ate_coverage.py" -path = "results/irm/ssm_mar_ate_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/irm/ssm_nonignorable_ate_coverage.py b/scripts/irm/ssm_nonignorable_ate_coverage.py deleted file mode 100644 index fa57b3e..0000000 --- a/scripts/irm/ssm_nonignorable_ate_coverage.py +++ /dev/null @@ -1,148 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from lightgbm import LGBMRegressor, LGBMClassifier -from sklearn.linear_model import LassoCV, LogisticRegressionCV - -import doubleml as dml -from doubleml.datasets import make_ssm_data - - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -theta = 1.0 -n_obs = 500 -dim_x = 20 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) - -datasets = [] -for i in range(n_rep): - data = make_ssm_data( - theta=theta, n_obs=n_obs, dim_x=dim_x, mar=False, return_type="DataFrame" - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "score": ["nonignorable"], - "learner_g": [("Lasso", LassoCV()), ("LGBM", LGBMRegressor(verbose=-1))], - "learner_m": [ - ("Logistic", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(verbose=-1)), - ], - "learner_pi": [ - ("Logistic", LogisticRegressionCV()), - ("LGBM", LGBMClassifier(verbose=-1)), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d", z_cols="z", s_col="s") - - for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - for learner_pi_idx, (learner_pi_name, ml_pi) in enumerate( - hyperparam_dict["learner_pi"] - ): - - dml_ssm = dml.DoubleMLSSM( - obj_dml_data=obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - ml_pi=ml_pi, - score=score, - ) - dml_ssm.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_ssm.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & ( - theta < confint.iloc[0, 1] - ) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - - confint.iloc[0, 0], - "Bias": abs(dml_ssm.coef[0] - theta), - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Learner pi": learner_pi_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby( - ["Learner g", "Learner m", "Learner pi", "score", "level"] - ) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "ssm_nonignorable_ate_coverage.py" -path = "results/irm/ssm_nonignorable_ate_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/plm/pliv_late_coverage.py b/scripts/plm/pliv_late_coverage.py deleted file mode 100644 index ee25015..0000000 --- a/scripts/plm/pliv_late_coverage.py +++ /dev/null @@ -1,178 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from sklearn.ensemble import RandomForestRegressor -from sklearn.linear_model import LassoCV - -import doubleml as dml -from doubleml.datasets import make_pliv_CHS2015 - - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -theta = 0.5 -n_obs = 500 -dim_x = 20 -dim_z = 1 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) - -datasets = [] -for i in range(n_rep): - data = make_pliv_CHS2015( - alpha=theta, n_obs=n_obs, dim_x=dim_x, dim_z=dim_z, return_type="DataFrame" - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "score": ["partialling out", "IV-type"], - "learner_g": [ - ("Lasso", LassoCV()), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "learner_m": [ - ("Lasso", LassoCV()), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "learner_r": [ - ("Lasso", LassoCV()), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d", z_cols="Z1") - - for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - for learner_r_idx, (learner_r_name, ml_r) in enumerate( - hyperparam_dict["learner_r"] - ): - if score == "IV-type": - # Set machine learning methods for g & m - dml_pliv = dml.DoubleMLPLIV( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - ml_g=ml_g, - ml_r=ml_r, - score="IV-type", - ) - else: - # Set machine learning methods for g & m - dml_pliv = dml.DoubleMLPLIV( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - ml_r=ml_r, - score=score, - ) - dml_pliv.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_pliv.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & ( - theta < confint.iloc[0, 1] - ) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - - confint.iloc[0, 0], - "Bias": abs(dml_pliv.coef[0] - theta), - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Learner r": learner_r_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby( - ["Learner g", "Learner m", "Learner r", "score", "level"] - ) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "pliv_late_coverage.py" -path = "results/plm/pliv_late_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/plm/plr_ate_coverage.py b/scripts/plm/plr_ate_coverage.py deleted file mode 100644 index f0dec11..0000000 --- a/scripts/plm/plr_ate_coverage.py +++ /dev/null @@ -1,160 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from sklearn.ensemble import RandomForestRegressor -from sklearn.linear_model import LassoCV - -import doubleml as dml -from doubleml.datasets import make_plr_CCDDHNR2018 - - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -theta = 0.5 -n_obs = 500 -dim_x = 20 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) - -datasets = [] -for i in range(n_rep): - data = make_plr_CCDDHNR2018( - alpha=theta, n_obs=n_obs, dim_x=dim_x, return_type="DataFrame" - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "score": ["partialling out", "IV-type"], - "learner_g": [ - ("Lasso", LassoCV()), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "learner_m": [ - ("Lasso", LassoCV()), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData(datasets[i_rep], "y", "d") - - for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - if score == "IV-type": - # Set machine learning methods for g & m - dml_plr = dml.DoubleMLPLR( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - ml_g=ml_g, - score="IV-type", - ) - else: - # Set machine learning methods for g & m - dml_plr = dml.DoubleMLPLR( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - score=score, - ) - dml_plr.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = dml_plr.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & ( - theta < confint.iloc[0, 1] - ) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - - confint.iloc[0, 0], - "Bias": abs(dml_plr.coef[0] - theta), - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "score", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "plr_ate_coverage.py" -path = "results/plm/plr_ate_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/plm/plr_ate_sensitivity_old.py b/scripts/plm/plr_ate_sensitivity_old.py deleted file mode 100644 index 7557435..0000000 --- a/scripts/plm/plr_ate_sensitivity_old.py +++ /dev/null @@ -1,240 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from sklearn.ensemble import RandomForestRegressor -from lightgbm import LGBMRegressor - -import doubleml as dml -from doubleml.datasets import make_confounded_plr_data - - -# Number of repetitions -n_rep = 500 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 1000 -cf_y = 0.1 -cf_d = 0.1 -theta = 5.0 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) - -# test inputs -dgp_dict = make_confounded_plr_data(n_obs=int(1e6), cf_y=cf_y, cf_d=cf_d) -oracle_dict = dgp_dict["oracle_values"] - -cf_y_test = np.mean( - np.square(oracle_dict["g_long"] - oracle_dict["g_short"]) -) / np.mean(np.square(dgp_dict["y"] - oracle_dict["g_short"])) -print(f"Input cf_y:{cf_y} \nCalculated cf_y: {round(cf_y_test, 5)}") - -rr_long = (dgp_dict["d"] - oracle_dict["m_long"]) / np.mean( - np.square(dgp_dict["d"] - oracle_dict["m_long"]) -) -rr_short = (dgp_dict["d"] - oracle_dict["m_short"]) / np.mean( - np.square(dgp_dict["d"] - oracle_dict["m_short"]) -) -C2_D = (np.mean(np.square(rr_long)) - np.mean(np.square(rr_short))) / np.mean( - np.square(rr_short) -) -cf_d_test = C2_D / (1 + C2_D) -print(f"Input cf_d:{cf_d}\nCalculated cf_d: {round(cf_d_test, 5)}") - -# compute the value for rho -rho = np.corrcoef( - (oracle_dict["g_long"] - oracle_dict["g_short"]), (rr_long - rr_short) -)[0, 1] -print(f"Correlation rho: {round(rho, 5)}") - -datasets = [] -for i in range(n_rep): - data = make_confounded_plr_data(n_obs=n_obs, cf_y=cf_y, cf_d=cf_d, theta=theta) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "score": ["partialling out", "IV-type"], - "learner_g": [ - ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.05, min_child_samples=5, verbose=-1 - ), - ), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "learner_m": [ - ( - "LGBM", - LGBMRegressor( - n_estimators=500, learning_rate=0.05, min_child_samples=2, verbose=-1 - ), - ), - ( - "Random Forest", - RandomForestRegressor( - n_estimators=100, max_features=20, max_depth=5, min_samples_leaf=2 - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep + 1}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - dgp_dict = datasets[i_rep] - x_cols = [f"X{i + 1}" for i in np.arange(dgp_dict["x"].shape[1])] - df = pd.DataFrame( - np.column_stack((dgp_dict["x"], dgp_dict["y"], dgp_dict["d"])), - columns=x_cols + ["y", "d"], - ) - obj_dml_data = dml.DoubleMLData(df, "y", "d") - - for score_idx, score in enumerate(hyperparam_dict["score"]): - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - if score == "IV-type": - # Set machine learning methods for g & m - dml_plr = dml.DoubleMLPLR( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - ml_g=ml_g, - score="IV-type", - ) - else: - # Set machine learning methods for g & m - dml_plr = dml.DoubleMLPLR( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - score=score, - ) - dml_plr.fit(n_jobs_cv=5) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - - estimate = dml_plr.coef[0] - confint = dml_plr.confint(level=level) - coverage = (confint.iloc[0, 0] < theta) & ( - theta < confint.iloc[0, 1] - ) - ci_length = confint.iloc[0, 1] - confint.iloc[0, 0] - - # test sensitivity parameters - dml_plr.sensitivity_analysis( - cf_y=cf_y, - cf_d=cf_d, - rho=rho, - level=level, - null_hypothesis=theta, - ) - cover_lower = theta >= dml_plr.sensitivity_params["ci"]["lower"] - cover_upper = theta <= dml_plr.sensitivity_params["ci"]["upper"] - rv = dml_plr.sensitivity_params["rv"] - rva = dml_plr.sensitivity_params["rva"] - bias_lower = abs( - theta - dml_plr.sensitivity_params["theta"]["lower"] - ) - bias_upper = abs( - theta - dml_plr.sensitivity_params["theta"]["upper"] - ) - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": confint.iloc[0, 1] - - confint.iloc[0, 0], - "Bias": abs(estimate - theta), - "Coverage (Lower)": cover_lower.astype(int), - "Coverage (Upper)": cover_upper.astype(int), - "RV": rv, - "RVa": rva, - "Bias (Lower)": bias_lower, - "Bias (Upper)": bias_upper, - "score": score, - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "score", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Coverage (Lower)": "mean", - "Coverage (Upper)": "mean", - "RV": "mean", - "RVa": "mean", - "Bias (Lower)": "mean", - "Bias (Upper)": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "plr_ate_sensitivity.py" -path = "results/plm/plr_ate_sensitivity" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/plm/plr_cate_coverage.py b/scripts/plm/plr_cate_coverage.py deleted file mode 100644 index 0009040..0000000 --- a/scripts/plm/plr_cate_coverage.py +++ /dev/null @@ -1,161 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys -import patsy - -from lightgbm import LGBMRegressor -from sklearn.linear_model import LassoCV - -import doubleml as dml -from doubleml.datasets import make_heterogeneous_data - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 2000 -p = 10 -support_size = 5 -n_x = 1 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - data = make_heterogeneous_data( - n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=False - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), - ], - "learner_m": [ - ("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - data = datasets[i_rep]["data"] - design_matrix = patsy.dmatrix("bs(x, df=5, degree=2)", {"x": data["X_0"]}) - spline_basis = pd.DataFrame(design_matrix) - - true_effects = datasets[i_rep]["effects"] - - obj_dml_data = dml.DoubleMLData(data, "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_plr = dml.DoubleMLPLR( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - ) - dml_plr.fit(n_jobs_cv=5) - cate = dml_plr.cate(spline_basis) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = cate.confint(basis=spline_basis, level=level) - effects = confint["effect"] - coverage = (confint.iloc[:, 0] < true_effects) & ( - true_effects < confint.iloc[:, 2] - ) - ci_length = confint.iloc[:, 2] - confint.iloc[:, 0] - confint_uniform = cate.confint( - basis=spline_basis, level=0.95, joint=True, n_rep_boot=2000 - ) - coverage_uniform = all( - (confint_uniform.iloc[:, 0] < true_effects) - & (true_effects < confint_uniform.iloc[:, 2]) - ) - ci_length_uniform = ( - confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] - ) - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.mean(), - "CI Length": ci_length.mean(), - "Bias": abs(effects - true_effects).mean(), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform.mean(), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "plr_cate_coverage.py" -path = "results/plm/plr_cate_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/plm/plr_gate_coverage.py b/scripts/plm/plr_gate_coverage.py deleted file mode 100644 index 6709ccd..0000000 --- a/scripts/plm/plr_gate_coverage.py +++ /dev/null @@ -1,167 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from lightgbm import LGBMRegressor -from sklearn.linear_model import LassoCV - -import doubleml as dml -from doubleml.datasets import make_heterogeneous_data - -# Number of repetitions -n_rep = 1000 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 500 -p = 10 -support_size = 5 -n_x = 1 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) -datasets = [] -for i in range(n_rep): - data = make_heterogeneous_data( - n_obs=n_obs, p=p, support_size=support_size, n_x=n_x, binary_treatment=False - ) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "learner_g": [ - ("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), - ], - "learner_m": [ - ("Lasso", LassoCV()), - ("LGBM", LGBMRegressor(n_estimators=200, learning_rate=0.05, verbose=-1)), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - # define the DoubleML data object - data = datasets[i_rep]["data"] - ite = datasets[i_rep]["effects"] - - groups = pd.DataFrame( - np.column_stack( - ( - data["X_0"] <= 0.3, - (data["X_0"] > 0.3) & (data["X_0"] <= 0.7), - data["X_0"] > 0.7, - ) - ), - columns=["Group 1", "Group 2", "Group 3"], - ) - true_effects = [ite[groups[group]].mean() for group in groups.columns] - - obj_dml_data = dml.DoubleMLData(data, "y", "d") - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - # Set machine learning methods for g & m - dml_plr = dml.DoubleMLPLR( - obj_dml_data=obj_dml_data, - ml_l=ml_g, - ml_m=ml_m, - ) - dml_plr.fit(n_jobs_cv=5) - gate = dml_plr.gate(groups=groups) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = gate.confint(level=level) - effects = confint["effect"] - coverage = (confint.iloc[:, 0] < true_effects) & ( - true_effects < confint.iloc[:, 2] - ) - ci_length = confint.iloc[:, 2] - confint.iloc[:, 0] - confint_uniform = gate.confint(level=0.95, joint=True, n_rep_boot=2000) - coverage_uniform = all( - (confint_uniform.iloc[:, 0] < true_effects) - & (true_effects < confint_uniform.iloc[:, 2]) - ) - ci_length_uniform = ( - confint_uniform.iloc[:, 2] - confint_uniform.iloc[:, 0] - ) - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.mean(), - "CI Length": ci_length.mean(), - "Bias": abs(effects - true_effects).mean(), - "Uniform Coverage": coverage_uniform, - "Uniform CI Length": ci_length_uniform.mean(), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Learner g", "Learner m", "level"]) - .agg( - { - "Coverage": "mean", - "CI Length": "mean", - "Bias": "mean", - "Uniform Coverage": "mean", - "Uniform CI Length": "mean", - "repetition": "count", - } - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "plr_gate_coverage.py" -path = "results/plm/plr_gate_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/rdd/rdd_fuzzy_coverage.py b/scripts/rdd/rdd_fuzzy_coverage.py deleted file mode 100644 index 20b49ff..0000000 --- a/scripts/rdd/rdd_fuzzy_coverage.py +++ /dev/null @@ -1,241 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from lightgbm import LGBMRegressor, LGBMClassifier -from sklearn.ensemble import StackingRegressor, StackingClassifier -from sklearn.linear_model import LinearRegression, Ridge, LogisticRegression -from rdrobust import rdrobust - -import doubleml as dml -from doubleml.rdd import RDFlex -from doubleml.rdd.datasets import make_simple_rdd_data -from doubleml.utils import GlobalRegressor, GlobalClassifier - -from statsmodels.nonparametric.kernel_regression import KernelReg - - -# Number of repetitions -n_rep = 500 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 2000 -cutoff = 0 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) - -datasets = [] -for i in range(n_rep): - data = make_simple_rdd_data(n_obs=n_obs, fuzzy=True, cutoff=cutoff) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "fs_specification": ["cutoff", "cutoff and score", "interacted cutoff and score"], - "learner_g": [ - ("Linear", LinearRegression()), - ( - "LGBM", - LGBMRegressor(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1), - ), - ("Global linear", GlobalRegressor(LinearRegression())), - ( - "Stacked", - StackingRegressor( - estimators=[ - ("lr", LinearRegression()), - ( - "lgbm", - LGBMRegressor( - n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1 - ), - ), - ("glr", GlobalRegressor(LinearRegression())), - ], - final_estimator=Ridge(), - ), - ), - ], - "learner_m": [ - ("Linear", LogisticRegression()), - ( - "LGBM", - LGBMClassifier( - n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1 - ), - ), - ("Global linear", GlobalClassifier(LogisticRegression())), - ( - "Stacked", - StackingClassifier( - estimators=[ - ("lr", LogisticRegression()), - ( - "lgbm", - LGBMClassifier( - n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1 - ), - ), - ("glr", GlobalClassifier(LogisticRegression())), - ], - final_estimator=LogisticRegression(), - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - data = datasets[i_rep] - # get oracle value - score = data["score"] - complier_mask = ((data["D"] == 0) & (data["score"] < cutoff)) | ( - (data["D"] == 1) & (data["score"] > cutoff) - ) - - ite = data["oracle_values"]["Y1"] - data["oracle_values"]["Y0"] - kernel_reg = KernelReg( - endog=ite[complier_mask], exog=score[complier_mask], var_type="c", reg_type="ll" - ) - effect_at_cutoff, _ = kernel_reg.fit(np.array([cutoff])) - oracle_effect = effect_at_cutoff[0] - - Y = data["Y"] - Z = data["X"].reshape(n_obs, -1) - D = data["D"] - - # baseline - for level_idx, level in enumerate(hyperparam_dict["level"]): - res = rdrobust(y=Y, x=score, fuzzy=D, covs=Z, c=cutoff, level=level * 100) - coef = res.coef.loc["Robust", "Coeff"] - ci_lower = res.ci.loc["Robust", "CI Lower"] - ci_upper = res.ci.loc["Robust", "CI Upper"] - - coverage = (ci_lower < oracle_effect) & (oracle_effect < ci_upper) - ci_length = ci_upper - ci_lower - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": ci_length, - "Bias": abs(coef - oracle_effect), - "Learner g": "linear", - "Learner m": "linear", - "Method": "rdrobust", - "fs specification": "cutoff", - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData.from_arrays(y=Y, d=D, x=Z, s=score) - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for learner_m_idx, (learner_m_name, ml_m) in enumerate( - hyperparam_dict["learner_m"] - ): - for fs_specification_idx, fs_specification in enumerate( - hyperparam_dict["fs_specification"] - ): - rdflex_model = RDFlex( - obj_dml_data, - ml_g=ml_g, - ml_m=ml_m, - n_folds=5, - n_rep=1, - cutoff=cutoff, - fuzzy=True, - fs_specification=fs_specification, - ) - rdflex_model.fit(n_iterations=2) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = rdflex_model.confint(level=level) - coverage = (confint.iloc[2, 0] < oracle_effect) & ( - oracle_effect < confint.iloc[2, 1] - ) - ci_length = confint.iloc[2, 1] - confint.iloc[2, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": ci_length, - "Bias": abs(rdflex_model.coef[2] - oracle_effect), - "Learner g": learner_g_name, - "Learner m": learner_m_name, - "Method": "rdflex", - "fs specification": fs_specification, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby( - ["Method", "fs specification", "Learner g", "Learner m", "level"] - ) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "rdd_fuzzy_coverage.py" -path = "results/rdd/rdd_fuzzy_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) diff --git a/scripts/rdd/rdd_sharp_coverage.py b/scripts/rdd/rdd_sharp_coverage.py deleted file mode 100644 index 1f33a5e..0000000 --- a/scripts/rdd/rdd_sharp_coverage.py +++ /dev/null @@ -1,202 +0,0 @@ -import numpy as np -import pandas as pd -from datetime import datetime -import time -import sys - -from lightgbm import LGBMRegressor -from sklearn.ensemble import StackingRegressor -from sklearn.linear_model import LinearRegression, Ridge -from rdrobust import rdrobust - -import doubleml as dml -from doubleml.rdd import RDFlex -from doubleml.rdd.datasets import make_simple_rdd_data -from doubleml.utils import GlobalRegressor - -from statsmodels.nonparametric.kernel_regression import KernelReg - - -# Number of repetitions -n_rep = 500 -max_runtime = 5.5 * 3600 # 5.5 hours in seconds - -# DGP pars -n_obs = 1000 -cutoff = 0 - -# to get the best possible comparison between different learners (and settings) we first simulate all datasets -np.random.seed(42) - -datasets = [] -for i in range(n_rep): - data = make_simple_rdd_data(n_obs=n_obs, fuzzy=False, cutoff=cutoff) - datasets.append(data) - -# set up hyperparameters -hyperparam_dict = { - "fs_specification": ["cutoff", "cutoff and score", "interacted cutoff and score"], - "learner_g": [ - ("Linear", LinearRegression()), - ( - "LGBM", - LGBMRegressor(n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1), - ), - ("Global linear", GlobalRegressor(LinearRegression())), - ( - "Stacked", - StackingRegressor( - estimators=[ - ("lr", LinearRegression()), - ( - "lgbm", - LGBMRegressor( - n_estimators=100, max_depth=5, learning_rate=0.1, verbose=-1 - ), - ), - ("glr", GlobalRegressor(LinearRegression())), - ], - final_estimator=Ridge(), - ), - ), - ], - "level": [0.95, 0.90], -} - -# set up the results dataframe -df_results_detailed = pd.DataFrame() - -# start simulation -np.random.seed(42) -start_time = time.time() - -for i_rep in range(n_rep): - print(f"Repetition: {i_rep}/{n_rep}", end="\r") - - # Check the elapsed time - elapsed_time = time.time() - start_time - if elapsed_time > max_runtime: - print("Maximum runtime exceeded. Stopping the simulation.") - break - - data = datasets[i_rep] - # get oracle value - score = data["score"] - ite = data["oracle_values"]["Y1"] - data["oracle_values"]["Y0"] - - kernel_reg = KernelReg(endog=ite, exog=score, var_type="c", reg_type="ll") - effect_at_cutoff, _ = kernel_reg.fit(np.array([cutoff])) - oracle_effect = effect_at_cutoff[0] - - Y = data["Y"] - Z = data["X"].reshape(n_obs, -1) - D = data["D"] - - # baseline - for level_idx, level in enumerate(hyperparam_dict["level"]): - res = rdrobust(y=Y, x=score, covs=Z, c=cutoff, level=level * 100) - coef = res.coef.loc["Robust", "Coeff"] - ci_lower = res.ci.loc["Robust", "CI Lower"] - ci_upper = res.ci.loc["Robust", "CI Upper"] - - coverage = (ci_lower < oracle_effect) & (oracle_effect < ci_upper) - ci_length = ci_upper - ci_lower - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": ci_length, - "Bias": abs(coef - oracle_effect), - "Learner g": "linear", - "Method": "rdrobust", - "fs specification": "cutoff", - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - - # define the DoubleML data object - obj_dml_data = dml.DoubleMLData.from_arrays(y=Y, d=D, x=Z, s=score) - - for learner_g_idx, (learner_g_name, ml_g) in enumerate( - hyperparam_dict["learner_g"] - ): - for fs_specification_idx, fs_specification in enumerate( - hyperparam_dict["fs_specification"] - ): - rdflex_model = RDFlex( - obj_dml_data, - ml_g=ml_g, - n_folds=5, - n_rep=1, - cutoff=cutoff, - fuzzy=False, - fs_specification=fs_specification, - ) - rdflex_model.fit(n_iterations=2) - - for level_idx, level in enumerate(hyperparam_dict["level"]): - confint = rdflex_model.confint(level=level) - coverage = (confint.iloc[2, 0] < oracle_effect) & ( - oracle_effect < confint.iloc[2, 1] - ) - ci_length = confint.iloc[2, 1] - confint.iloc[2, 0] - - df_results_detailed = pd.concat( - ( - df_results_detailed, - pd.DataFrame( - { - "Coverage": coverage.astype(int), - "CI Length": ci_length, - "Bias": abs(rdflex_model.coef[2] - oracle_effect), - "Learner g": learner_g_name, - "Method": "rdflex", - "fs specification": fs_specification, - "level": level, - "repetition": i_rep, - }, - index=[0], - ), - ), - ignore_index=True, - ) - -df_results = ( - df_results_detailed.groupby(["Method", "fs specification", "Learner g", "level"]) - .agg( - {"Coverage": "mean", "CI Length": "mean", "Bias": "mean", "repetition": "count"} - ) - .reset_index() -) -print(df_results) - -end_time = time.time() -total_runtime = end_time - start_time - -# save results -script_name = "rdd_sharp_coverage.py" -path = "results/rdd/rdd_sharp_coverage" - -metadata = pd.DataFrame( - { - "DoubleML Version": [dml.__version__], - "Script": [script_name], - "Date": [datetime.now().strftime("%Y-%m-%d %H:%M:%S")], - "Total Runtime (seconds)": [total_runtime], - "Python Version": [ - f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}" - ], - } -) -print(metadata) - -df_results.to_csv(f"{path}.csv", index=False) -metadata.to_csv(f"{path}_metadata.csv", index=False) From d891567c902ca4f1babe5e8555b7e28eb1903757 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 14:05:50 +0200 Subject: [PATCH 097/142] remove results --- results/did/did_cs_atte_coverage.csv | 49 ------------ results/did/did_cs_atte_coverage_metadata.csv | 2 - results/did/did_multi_detailed.csv | 49 ------------ results/did/did_multi_eventstudy.csv | 49 ------------ results/did/did_multi_group.csv | 49 ------------ results/did/did_multi_metadata.csv | 2 - results/did/did_multi_time.csv | 49 ------------ results/did/did_pa_atte_coverage.csv | 49 ------------ results/did/did_pa_atte_coverage_metadata.csv | 2 - results/did/did_pa_multi_config.yml | 43 ----------- results/did/did_pa_multi_coverage.csv | 25 ------- .../did/did_pa_multi_coverage_metadata.csv | 2 - results/irm/apo_config.yml | 49 ------------ results/irm/apo_coverage.csv | 25 ------- results/irm/apo_metadata.csv | 2 - results/irm/apos_causal_contrast.csv | 9 --- results/irm/apos_config.yml | 49 ------------ results/irm/apos_coverage.csv | 9 --- results/irm/apos_metadata.csv | 2 - results/irm/cvar_Y0_coverage.csv | 9 --- results/irm/cvar_Y1_coverage.csv | 9 --- results/irm/cvar_config.yml | 65 ---------------- results/irm/cvar_coverage_metadata.csv | 2 - results/irm/cvar_coverage_pq0.csv | 9 --- results/irm/cvar_coverage_pq1.csv | 9 --- results/irm/cvar_coverage_qte.csv | 9 --- results/irm/cvar_effect_coverage.csv | 9 --- results/irm/cvar_metadata.csv | 2 - results/irm/iivm_late_coverage.csv | 9 --- results/irm/iivm_late_coverage_metadata.csv | 2 - results/irm/irm_apo_coverage_apo.csv | 25 ------- results/irm/irm_apo_coverage_apos.csv | 9 --- .../irm/irm_apo_coverage_apos_contrast.csv | 9 --- results/irm/irm_apo_coverage_metadata.csv | 2 - results/irm/irm_ate_config.yml | 61 --------------- results/irm/irm_ate_coverage.csv | 15 ---- results/irm/irm_ate_coverage_metadata.csv | 2 - results/irm/irm_ate_metadata.csv | 2 - results/irm/irm_ate_sensitivity_config.yml | 53 ------------- results/irm/irm_ate_sensitivity_coverage.csv | 9 --- results/irm/irm_ate_sensitivity_metadata.csv | 2 - results/irm/irm_atte_config.yml | 61 --------------- results/irm/irm_atte_coverage.csv | 15 ---- results/irm/irm_atte_coverage_metadata.csv | 2 - results/irm/irm_atte_metadata.csv | 2 - results/irm/irm_atte_sensitivity_config.yml | 53 ------------- results/irm/irm_atte_sensitivity_coverage.csv | 9 --- results/irm/irm_atte_sensitivity_metadata.csv | 2 - results/irm/irm_cate_config.yml | 63 ---------------- results/irm/irm_cate_coverage.csv | 15 ---- results/irm/irm_cate_coverage_metadata.csv | 2 - results/irm/irm_cate_metadata.csv | 2 - results/irm/irm_gate_config.yml | 63 ---------------- results/irm/irm_gate_coverage.csv | 15 ---- results/irm/irm_gate_coverage_metadata.csv | 2 - results/irm/irm_gate_metadata.csv | 2 - results/irm/lpq_Y0_coverage.csv | 9 --- results/irm/lpq_Y1_coverage.csv | 9 --- results/irm/lpq_config.yml | 48 ------------ results/irm/lpq_coverage_lpq0.csv | 9 --- results/irm/lpq_coverage_lpq1.csv | 9 --- results/irm/lpq_coverage_lqte.csv | 9 --- results/irm/lpq_coverage_metadata.csv | 2 - results/irm/lpq_effect_coverage.csv | 9 --- results/irm/lpq_metadata.csv | 2 - results/irm/pq_Y0_coverage.csv | 9 --- results/irm/pq_Y1_coverage.csv | 9 --- results/irm/pq_config.yml | 50 ------------- results/irm/pq_coverage_metadata.csv | 2 - results/irm/pq_coverage_pq0.csv | 9 --- results/irm/pq_coverage_pq1.csv | 9 --- results/irm/pq_coverage_qte.csv | 9 --- results/irm/pq_effect_coverage.csv | 9 --- results/irm/pq_metadata.csv | 2 - results/irm/ssm_mar_ate_coverage.csv | 17 ----- results/irm/ssm_mar_ate_coverage_metadata.csv | 2 - results/irm/ssm_nonignorable_ate_coverage.csv | 17 ----- ...ssm_nonignorable_ate_coverage_metadata.csv | 2 - results/plm/pliv_late_config.yml | 57 -------------- results/plm/pliv_late_coverage.csv | 33 --------- results/plm/pliv_late_coverage_metadata.csv | 2 - results/plm/pliv_late_metadata.csv | 2 - results/plm/plr_ate_config.yml | 50 ------------- results/plm/plr_ate_coverage.csv | 29 -------- results/plm/plr_ate_coverage_metadata.csv | 2 - results/plm/plr_ate_metadata.csv | 2 - results/plm/plr_ate_sensitivity_config.yml | 49 ------------ results/plm/plr_ate_sensitivity_coverage.csv | 29 -------- results/plm/plr_ate_sensitivity_metadata.csv | 2 - results/plm/plr_cate_config.yml | 52 ------------- results/plm/plr_cate_coverage.csv | 29 -------- results/plm/plr_cate_coverage_metadata.csv | 2 - results/plm/plr_cate_metadata.csv | 2 - results/plm/plr_gate_config.yml | 52 ------------- results/plm/plr_gate_coverage.csv | 29 -------- results/plm/plr_gate_coverage_metadata.csv | 2 - results/plm/plr_gate_metadata.csv | 2 - results/rdd/rdd_fuzzy_config.yml | 63 ---------------- results/rdd/rdd_fuzzy_coverage.csv | 27 ------- results/rdd/rdd_fuzzy_coverage_metadata.csv | 2 - results/rdd/rdd_fuzzy_metadata.csv | 2 - results/rdd/rdd_sharp_config.yml | 41 ---------- results/rdd/rdd_sharp_coverage.csv | 27 ------- results/rdd/rdd_sharp_coverage_metadata.csv | 2 - results/rdd/rdd_sharp_metadata.csv | 2 - results/ssm/ssm_mar_ate_config.yml | 74 ------------------- results/ssm/ssm_mar_ate_coverage.csv | 19 ----- results/ssm/ssm_mar_ate_metadata.csv | 2 - results/ssm/ssm_nonig_ate_config.yml | 74 ------------------- results/ssm/ssm_nonig_ate_coverage.csv | 19 ----- results/ssm/ssm_nonig_ate_metadata.csv | 2 - 111 files changed, 2181 deletions(-) delete mode 100644 results/did/did_cs_atte_coverage.csv delete mode 100644 results/did/did_cs_atte_coverage_metadata.csv delete mode 100644 results/did/did_multi_detailed.csv delete mode 100644 results/did/did_multi_eventstudy.csv delete mode 100644 results/did/did_multi_group.csv delete mode 100644 results/did/did_multi_metadata.csv delete mode 100644 results/did/did_multi_time.csv delete mode 100644 results/did/did_pa_atte_coverage.csv delete mode 100644 results/did/did_pa_atte_coverage_metadata.csv delete mode 100644 results/did/did_pa_multi_config.yml delete mode 100644 results/did/did_pa_multi_coverage.csv delete mode 100644 results/did/did_pa_multi_coverage_metadata.csv delete mode 100644 results/irm/apo_config.yml delete mode 100644 results/irm/apo_coverage.csv delete mode 100644 results/irm/apo_metadata.csv delete mode 100644 results/irm/apos_causal_contrast.csv delete mode 100644 results/irm/apos_config.yml delete mode 100644 results/irm/apos_coverage.csv delete mode 100644 results/irm/apos_metadata.csv delete mode 100644 results/irm/cvar_Y0_coverage.csv delete mode 100644 results/irm/cvar_Y1_coverage.csv delete mode 100644 results/irm/cvar_config.yml delete mode 100644 results/irm/cvar_coverage_metadata.csv delete mode 100644 results/irm/cvar_coverage_pq0.csv delete mode 100644 results/irm/cvar_coverage_pq1.csv delete mode 100644 results/irm/cvar_coverage_qte.csv delete mode 100644 results/irm/cvar_effect_coverage.csv delete mode 100644 results/irm/cvar_metadata.csv delete mode 100644 results/irm/iivm_late_coverage.csv delete mode 100644 results/irm/iivm_late_coverage_metadata.csv delete mode 100644 results/irm/irm_apo_coverage_apo.csv delete mode 100644 results/irm/irm_apo_coverage_apos.csv delete mode 100644 results/irm/irm_apo_coverage_apos_contrast.csv delete mode 100644 results/irm/irm_apo_coverage_metadata.csv delete mode 100644 results/irm/irm_ate_config.yml delete mode 100644 results/irm/irm_ate_coverage.csv delete mode 100644 results/irm/irm_ate_coverage_metadata.csv delete mode 100644 results/irm/irm_ate_metadata.csv delete mode 100644 results/irm/irm_ate_sensitivity_config.yml delete mode 100644 results/irm/irm_ate_sensitivity_coverage.csv delete mode 100644 results/irm/irm_ate_sensitivity_metadata.csv delete mode 100644 results/irm/irm_atte_config.yml delete mode 100644 results/irm/irm_atte_coverage.csv delete mode 100644 results/irm/irm_atte_coverage_metadata.csv delete mode 100644 results/irm/irm_atte_metadata.csv delete mode 100644 results/irm/irm_atte_sensitivity_config.yml delete mode 100644 results/irm/irm_atte_sensitivity_coverage.csv delete mode 100644 results/irm/irm_atte_sensitivity_metadata.csv delete mode 100644 results/irm/irm_cate_config.yml delete mode 100644 results/irm/irm_cate_coverage.csv delete mode 100644 results/irm/irm_cate_coverage_metadata.csv delete mode 100644 results/irm/irm_cate_metadata.csv delete mode 100644 results/irm/irm_gate_config.yml delete mode 100644 results/irm/irm_gate_coverage.csv delete mode 100644 results/irm/irm_gate_coverage_metadata.csv delete mode 100644 results/irm/irm_gate_metadata.csv delete mode 100644 results/irm/lpq_Y0_coverage.csv delete mode 100644 results/irm/lpq_Y1_coverage.csv delete mode 100644 results/irm/lpq_config.yml delete mode 100644 results/irm/lpq_coverage_lpq0.csv delete mode 100644 results/irm/lpq_coverage_lpq1.csv delete mode 100644 results/irm/lpq_coverage_lqte.csv delete mode 100644 results/irm/lpq_coverage_metadata.csv delete mode 100644 results/irm/lpq_effect_coverage.csv delete mode 100644 results/irm/lpq_metadata.csv delete mode 100644 results/irm/pq_Y0_coverage.csv delete mode 100644 results/irm/pq_Y1_coverage.csv delete mode 100644 results/irm/pq_config.yml delete mode 100644 results/irm/pq_coverage_metadata.csv delete mode 100644 results/irm/pq_coverage_pq0.csv delete mode 100644 results/irm/pq_coverage_pq1.csv delete mode 100644 results/irm/pq_coverage_qte.csv delete mode 100644 results/irm/pq_effect_coverage.csv delete mode 100644 results/irm/pq_metadata.csv delete mode 100644 results/irm/ssm_mar_ate_coverage.csv delete mode 100644 results/irm/ssm_mar_ate_coverage_metadata.csv delete mode 100644 results/irm/ssm_nonignorable_ate_coverage.csv delete mode 100644 results/irm/ssm_nonignorable_ate_coverage_metadata.csv delete mode 100644 results/plm/pliv_late_config.yml delete mode 100644 results/plm/pliv_late_coverage.csv delete mode 100644 results/plm/pliv_late_coverage_metadata.csv delete mode 100644 results/plm/pliv_late_metadata.csv delete mode 100644 results/plm/plr_ate_config.yml delete mode 100644 results/plm/plr_ate_coverage.csv delete mode 100644 results/plm/plr_ate_coverage_metadata.csv delete mode 100644 results/plm/plr_ate_metadata.csv delete mode 100644 results/plm/plr_ate_sensitivity_config.yml delete mode 100644 results/plm/plr_ate_sensitivity_coverage.csv delete mode 100644 results/plm/plr_ate_sensitivity_metadata.csv delete mode 100644 results/plm/plr_cate_config.yml delete mode 100644 results/plm/plr_cate_coverage.csv delete mode 100644 results/plm/plr_cate_coverage_metadata.csv delete mode 100644 results/plm/plr_cate_metadata.csv delete mode 100644 results/plm/plr_gate_config.yml delete mode 100644 results/plm/plr_gate_coverage.csv delete mode 100644 results/plm/plr_gate_coverage_metadata.csv delete mode 100644 results/plm/plr_gate_metadata.csv delete mode 100644 results/rdd/rdd_fuzzy_config.yml delete mode 100644 results/rdd/rdd_fuzzy_coverage.csv delete mode 100644 results/rdd/rdd_fuzzy_coverage_metadata.csv delete mode 100644 results/rdd/rdd_fuzzy_metadata.csv delete mode 100644 results/rdd/rdd_sharp_config.yml delete mode 100644 results/rdd/rdd_sharp_coverage.csv delete mode 100644 results/rdd/rdd_sharp_coverage_metadata.csv delete mode 100644 results/rdd/rdd_sharp_metadata.csv delete mode 100644 results/ssm/ssm_mar_ate_config.yml delete mode 100644 results/ssm/ssm_mar_ate_coverage.csv delete mode 100644 results/ssm/ssm_mar_ate_metadata.csv delete mode 100644 results/ssm/ssm_nonig_ate_config.yml delete mode 100644 results/ssm/ssm_nonig_ate_coverage.csv delete mode 100644 results/ssm/ssm_nonig_ate_metadata.csv diff --git a/results/did/did_cs_atte_coverage.csv b/results/did/did_cs_atte_coverage.csv deleted file mode 100644 index 53cf347..0000000 --- a/results/did/did_cs_atte_coverage.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,experimental,False,1,0.9,0.714,10.421426989395727,3.905582429463871,1000 -LGBM,LGBM,experimental,False,1,0.95,0.796,12.417896177537456,3.905582429463871,1000 -LGBM,LGBM,experimental,False,2,0.9,0.747,11.153655901082034,3.716762206006709,1000 -LGBM,LGBM,experimental,False,2,0.95,0.83,13.290400740757454,3.716762206006709,1000 -LGBM,LGBM,experimental,False,3,0.9,0.826,10.129500599367143,2.9806910089316485,1000 -LGBM,LGBM,experimental,False,3,0.95,0.9,12.070044428775317,2.9806910089316485,1000 -LGBM,LGBM,experimental,False,4,0.9,0.709,10.248410164509226,3.911148948219506,1000 -LGBM,LGBM,experimental,False,4,0.95,0.788,12.211733914865182,3.911148948219506,1000 -LGBM,LGBM,experimental,False,5,0.9,0.897,11.953436462004694,2.904688869350282,1000 -LGBM,LGBM,experimental,False,5,0.95,0.95,14.243398058730905,2.904688869350282,1000 -LGBM,LGBM,experimental,False,6,0.9,0.901,10.409876930645252,2.475898589693061,1000 -LGBM,LGBM,experimental,False,6,0.95,0.951,12.40413343366814,2.475898589693061,1000 -LGBM,LGBM,experimental,True,1,0.9,0.695,10.441642571924747,3.98549935766534,1000 -LGBM,LGBM,experimental,True,1,0.95,0.774,12.441984529859,3.98549935766534,1000 -LGBM,LGBM,experimental,True,2,0.9,0.769,11.14737947150305,3.7228962496196263,1000 -LGBM,LGBM,experimental,True,2,0.95,0.832,13.282921913629773,3.7228962496196263,1000 -LGBM,LGBM,experimental,True,3,0.9,0.822,10.139719900553855,2.993567832780566,1000 -LGBM,LGBM,experimental,True,3,0.95,0.896,12.082221477203783,2.993567832780566,1000 -LGBM,LGBM,experimental,True,4,0.9,0.707,10.258140130646604,3.9509918046955974,1000 -LGBM,LGBM,experimental,True,4,0.95,0.782,12.223327884618827,3.9509918046955974,1000 -LGBM,LGBM,experimental,True,5,0.9,0.894,11.981860540543671,2.9439981898378322,1000 -LGBM,LGBM,experimental,True,5,0.95,0.949,14.277267437329282,2.9439981898378322,1000 -LGBM,LGBM,experimental,True,6,0.9,0.894,10.42424549288115,2.562430198965583,1000 -LGBM,LGBM,experimental,True,6,0.95,0.955,12.421254631585413,2.562430198965583,1000 -LGBM,LGBM,observational,False,1,0.9,0.94,50.01837238134115,11.670635965681225,1000 -LGBM,LGBM,observational,False,1,0.95,0.973,59.600566777747616,11.670635965681225,1000 -LGBM,LGBM,observational,False,2,0.9,0.929,59.19235508827008,13.470175038952636,1000 -LGBM,LGBM,observational,False,2,0.95,0.977,70.53204141217991,13.470175038952636,1000 -LGBM,LGBM,observational,False,3,0.9,0.945,56.62260255116421,12.634763113659828,1000 -LGBM,LGBM,observational,False,3,0.95,0.989,67.46999240102099,12.634763113659828,1000 -LGBM,LGBM,observational,False,4,0.9,0.945,70.02798665966547,16.708878014378698,1000 -LGBM,LGBM,observational,False,4,0.95,0.982,83.44349279101235,16.708878014378698,1000 -LGBM,LGBM,observational,False,5,0.9,0.932,32.68395008367948,7.535531362351606,1000 -LGBM,LGBM,observational,False,5,0.95,0.973,38.945328621880215,7.535531362351606,1000 -LGBM,LGBM,observational,False,6,0.9,0.922,31.254676611393744,7.328062886784694,1000 -LGBM,LGBM,observational,False,6,0.95,0.96,37.24224423562365,7.328062886784694,1000 -LGBM,LGBM,observational,True,1,0.9,0.903,17.911052050251026,4.470376853620159,1000 -LGBM,LGBM,observational,True,1,0.95,0.954,21.342334885309523,4.470376853620159,1000 -LGBM,LGBM,observational,True,2,0.9,0.928,20.466840035852762,4.861276719991755,1000 -LGBM,LGBM,observational,True,2,0.95,0.965,24.387744107030723,4.861276719991755,1000 -LGBM,LGBM,observational,True,3,0.9,0.916,20.087760624155962,4.7945055222830755,1000 -LGBM,LGBM,observational,True,3,0.95,0.958,23.93604312766554,4.7945055222830755,1000 -LGBM,LGBM,observational,True,4,0.9,0.913,23.82669034521118,5.634290832938362,1000 -LGBM,LGBM,observational,True,4,0.95,0.956,28.391252681829,5.634290832938362,1000 -LGBM,LGBM,observational,True,5,0.9,0.89,16.373740873746755,4.117691170125128,1000 -LGBM,LGBM,observational,True,5,0.95,0.943,19.51051563427767,4.117691170125128,1000 -LGBM,LGBM,observational,True,6,0.9,0.891,14.987930087831806,3.7336563054022593,1000 -LGBM,LGBM,observational,True,6,0.95,0.957,17.85922023310908,3.7336563054022593,1000 diff --git a/results/did/did_cs_atte_coverage_metadata.csv b/results/did/did_cs_atte_coverage_metadata.csv deleted file mode 100644 index c055b9e..0000000 --- a/results/did/did_cs_atte_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.11.dev0,did_cs_atte_coverage.py,2025-06-02 15:42:26,12669.156663179398,3.12.3 diff --git a/results/did/did_multi_detailed.csv b/results/did/did_multi_detailed.csv deleted file mode 100644 index ab7ab8b..0000000 --- a/results/did/did_multi_detailed.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.4005833333333333,0.668417462452362,0.4514209317520677,0.069,1.001536224942987,1000 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.49541666666666667,0.7964685316542967,0.4514209317520677,0.119,1.1096223780406622,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.525,0.5836476641555988,0.3357039587486384,0.192,0.8984549944516823,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.6135,0.6954590868526271,0.3357039587486384,0.266,0.9889489428407441,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8913333333333334,0.5798205422267835,0.1436401623087172,0.896,0.8921080477762784,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9469166666666666,0.6908987898012575,0.1436401623087172,0.95,0.9823087136174479,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.403,0.668486737121192,0.4516172220554326,0.064,1.0020517044274269,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4925,0.7965510775135288,0.4516172220554326,0.118,1.110697612751064,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.5244166666666666,0.5834979623893575,0.33563072303718966,0.202,0.8980797806262651,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.6114166666666666,0.6952807061958639,0.33563072303718966,0.275,0.9886661012047989,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8903333333333334,0.5798432460053057,0.1452858251598464,0.888,0.8930518639150258,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9449166666666666,0.690925843021974,0.1452858251598464,0.942,0.9832578157026843,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9115,2.7279550989921355,0.7081663387461643,0.951,4.239219420515267,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9635833333333333,3.250558990696578,0.7081663387461643,0.988,4.6533388042213675,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9074166666666666,3.5225937797559883,0.9757809691235549,0.97,5.426540882685481,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9669166666666666,4.19742938055986,0.9757809691235549,0.992,5.969933156329405,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9271666666666666,2.1769181957500305,0.5048068220768145,0.971,3.397149166606052,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9709166666666667,2.5939580221905385,0.5048068220768145,0.996,3.7281189530691132,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.90375,1.1192914856600868,0.27862527337620824,0.928,1.7467988922140234,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9589166666666666,1.3337180671583386,0.27862527337620824,0.967,1.914692647031146,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9199166666666666,1.4197310386522546,0.32827809352307774,0.935,2.19395277603094,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9664166666666666,1.6917138752639644,0.32827809352307774,0.968,2.4119391624873256,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9005,1.0294284373000027,0.2502841114417097,0.917,1.6092703629556147,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9533333333333334,1.226639640579326,0.2502841114417097,0.971,1.7641639749309233,1000 -Linear,Logistic,experimental,False,1,0.9,0.8521666666666666,0.2947207725579002,0.08125759297583215,0.769,0.45936907943411753,1000 -Linear,Logistic,experimental,False,1,0.95,0.91225,0.3511814609181314,0.08125759297583215,0.857,0.5043035205016457,1000 -Linear,Logistic,experimental,False,4,0.9,0.3186666666666667,0.9766434317991218,0.8093782242316307,0.041,1.4141166689592581,1000 -Linear,Logistic,experimental,False,4,0.95,0.393,1.1637424271067696,0.8093782242316307,0.079,1.5775150069804904,1000 -Linear,Logistic,experimental,False,6,0.9,0.8959166666666666,0.9840677614600047,0.24403762906388674,0.889,1.4217412744627138,1000 -Linear,Logistic,experimental,False,6,0.95,0.9463333333333334,1.1725890615466086,0.24403762906388674,0.94,1.585826837431638,1000 -Linear,Logistic,experimental,True,1,0.9,0.8528333333333333,0.29471605836940884,0.08132561217659459,0.764,0.45923649733243366,1000 -Linear,Logistic,experimental,True,1,0.95,0.9120833333333334,0.351175843616076,0.08132561217659459,0.855,0.5041154397102058,1000 -Linear,Logistic,experimental,True,4,0.9,0.3188333333333333,0.9765337199818319,0.8092231167974461,0.041,1.4131241013020541,1000 -Linear,Logistic,experimental,True,4,0.95,0.39458333333333334,1.1636116974132316,0.8092231167974461,0.076,1.5757045631534141,1000 -Linear,Logistic,experimental,True,6,0.9,0.8968333333333334,0.984151005519869,0.24420883449452355,0.889,1.4208221899399172,1000 -Linear,Logistic,experimental,True,6,0.95,0.94675,1.1726882529619342,0.24420883449452355,0.936,1.5847814464063683,1000 -Linear,Logistic,observational,False,1,0.9,0.9001666666666667,0.3180779030235929,0.0773596882018309,0.88,0.49501077303673774,1000 -Linear,Logistic,observational,False,1,0.95,0.94775,0.3790131984933507,0.0773596882018309,0.947,0.5435398448787098,1000 -Linear,Logistic,observational,False,4,0.9,0.4245,1.237493689045589,0.7914353096522312,0.18,1.76761883251908,1000 -Linear,Logistic,observational,False,4,0.95,0.5209166666666666,1.4745646797278944,0.7914353096522312,0.275,1.9755226904473104,1000 -Linear,Logistic,observational,False,6,0.9,0.8929166666666666,1.0255283640310429,0.255700122939389,0.895,1.4816116459637685,1000 -Linear,Logistic,observational,False,6,0.95,0.9455,1.221992416644637,0.255700122939389,0.934,1.653527148130022,1000 -Linear,Logistic,observational,True,1,0.9,0.8965,0.31619901580629955,0.07736324119662329,0.885,0.49203725267016324,1000 -Linear,Logistic,observational,True,1,0.95,0.9463333333333334,0.3767743662856892,0.07736324119662329,0.947,0.5403636983384068,1000 -Linear,Logistic,observational,True,4,0.9,0.4231666666666667,1.2357474079437374,0.7915034422252056,0.193,1.7654458413619594,1000 -Linear,Logistic,observational,True,4,0.95,0.5213333333333334,1.472483857452629,0.7915034422252056,0.277,1.9735390159048785,1000 -Linear,Logistic,observational,True,6,0.9,0.8928333333333334,1.0212995120870143,0.25694449841811784,0.89,1.4744168456619084,1000 -Linear,Logistic,observational,True,6,0.95,0.9460833333333334,1.216953428755113,0.25694449841811784,0.933,1.6462184670600197,1000 diff --git a/results/did/did_multi_eventstudy.csv b/results/did/did_multi_eventstudy.csv deleted file mode 100644 index 1c294b6..0000000 --- a/results/did/did_multi_eventstudy.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.26816666666666666,0.6628004801492844,0.5217146610039974,0.063,0.8710835347098573,1000 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.356,0.7897754844217385,0.5217146610039974,0.106,0.9881445074099509,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.3793333333333333,0.5430545733393948,0.3833854158756925,0.176,0.73981228970138,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4698333333333333,0.6470894357680017,0.3833854158756925,0.246,0.833246241332189,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8915,0.5395169482604701,0.13534305762469595,0.897,0.7348860485385167,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9451666666666666,0.6428740954897616,0.13534305762469595,0.953,0.8259292882870245,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.265,0.6629226425912405,0.5221091420199984,0.062,0.8722109625410929,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.3551666666666667,0.7899210499496214,0.5221091420199984,0.114,0.9882984410974919,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3763333333333333,0.5429965130173356,0.3828566010032573,0.182,0.739132671094994,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4711666666666667,0.6470202526271421,0.3828566010032573,0.262,0.8314461004262811,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8931666666666667,0.5395318624534728,0.13758915825744059,0.893,0.7341757740643098,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9463333333333334,0.6428918668468384,0.13758915825744059,0.946,0.8261153685402325,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.907,2.635755403048029,0.6906219348022667,0.931,3.658094889963508,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9618333333333333,3.140696276789984,0.6906219348022667,0.969,4.09528459799626,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8978333333333334,3.5932112684720123,1.044176882449884,0.953,4.920160668033086,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9656666666666667,4.2815753083763015,1.044176882449884,0.982,5.521039436439466,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9356666666666666,2.037043783641883,0.45673572364777687,0.967,2.8380713672583395,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9768333333333333,2.4272873801354264,0.45673572364777687,0.99,3.173284984968741,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9186666666666666,1.058073826869023,0.2586744612407186,0.924,1.4747488796573536,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9613333333333334,1.2607727275351879,0.2586744612407186,0.965,1.649868845892826,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9368333333333334,1.4039435411486991,0.3103897362727539,0.943,1.9287327010063178,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9718333333333333,1.6729019116910515,0.3103897362727539,0.973,2.1651520912520748,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9153333333333333,0.9537908163093017,0.2248364423186676,0.927,1.3333350854360233,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9601666666666666,1.1365118562044807,0.2248364423186676,0.974,1.4916507037488054,1000 -Linear,Logistic,experimental,False,1,0.9,0.8085,0.21012919637470698,0.06454170881550668,0.737,0.3000298498259047,1000 -Linear,Logistic,experimental,False,1,0.95,0.8826666666666666,0.2503843808631616,0.06454170881550668,0.83,0.33342829695147896,1000 -Linear,Logistic,experimental,False,4,0.9,0.20066666666666666,0.9748536890898165,0.9456802642466463,0.041,1.2574525229653895,1000 -Linear,Logistic,experimental,False,4,0.95,0.26666666666666666,1.161609817132025,0.9456802642466463,0.074,1.4305039091925136,1000 -Linear,Logistic,experimental,False,6,0.9,0.8906666666666666,0.984266405297522,0.2447629940182398,0.885,1.2654037292644829,1000 -Linear,Logistic,experimental,False,6,0.95,0.9428333333333334,1.1728257602782801,0.2447629940182398,0.939,1.4411880110797295,1000 -Linear,Logistic,experimental,True,1,0.9,0.8095,0.21012765534784542,0.0646279391502723,0.733,0.29993071695819135,1000 -Linear,Logistic,experimental,True,1,0.95,0.8823333333333334,0.25038254461639875,0.0646279391502723,0.831,0.3331089494375711,1000 -Linear,Logistic,experimental,True,4,0.9,0.201,0.9747048561891234,0.9456904408930068,0.042,1.2571661797897207,1000 -Linear,Logistic,experimental,True,4,0.95,0.26666666666666666,1.1614324717924194,0.9456904408930068,0.075,1.4292891253140116,1000 -Linear,Logistic,experimental,True,6,0.9,0.8928333333333334,0.9843540987911897,0.24472186099367751,0.882,1.2667938573542303,1000 -Linear,Logistic,experimental,True,6,0.95,0.942,1.1729302535209924,0.24472186099367751,0.938,1.4425417792737238,1000 -Linear,Logistic,observational,False,1,0.9,0.8958333333333334,0.22595429878581444,0.05556582705974583,0.883,0.32193445273348237,1000 -Linear,Logistic,observational,False,1,0.95,0.9468333333333334,0.26924115344718413,0.05556582705974583,0.944,0.35775078341337774,1000 -Linear,Logistic,observational,False,4,0.9,0.325,1.2886928093204373,0.9238068984287002,0.175,1.6397882387716314,1000 -Linear,Logistic,observational,False,4,0.95,0.41933333333333334,1.535572194399471,0.9238068984287002,0.26,1.8701388333818019,1000 -Linear,Logistic,observational,False,6,0.9,0.8893333333333334,1.0302622288172734,0.2580572852924157,0.882,1.322817867501306,1000 -Linear,Logistic,observational,False,6,0.95,0.9411666666666666,1.2276331644514131,0.2580572852924157,0.934,1.5071984875399793,1000 -Linear,Logistic,observational,True,1,0.9,0.8921666666666667,0.22482298708967266,0.0554326928262382,0.882,0.3206665757666365,1000 -Linear,Logistic,observational,True,1,0.95,0.9446666666666667,0.2678931124158151,0.0554326928262382,0.941,0.3562766006057057,1000 -Linear,Logistic,observational,True,4,0.9,0.3243333333333333,1.2866810812005252,0.9246774960344024,0.177,1.6374108099983478,1000 -Linear,Logistic,observational,True,4,0.95,0.41833333333333333,1.5331750724932363,0.9246774960344024,0.258,1.869004453360348,1000 -Linear,Logistic,observational,True,6,0.9,0.8853333333333334,1.0254952185219397,0.25982703889124587,0.889,1.318157054156258,1000 -Linear,Logistic,observational,True,6,0.95,0.9436666666666667,1.2219529213345213,0.25982703889124587,0.94,1.502504660229367,1000 diff --git a/results/did/did_multi_group.csv b/results/did/did_multi_group.csv deleted file mode 100644 index e3035bc..0000000 --- a/results/did/did_multi_group.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.37966666666666665,0.7094842843054401,0.5063966456271116,0.07,0.8833695236671398,1000 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.463,0.8454026680860791,0.5063966456271116,0.119,1.0075828733731322,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.48833333333333334,0.6093983296457081,0.3746967239327951,0.185,0.7748043075861907,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.5676666666666667,0.7261428973215824,0.3746967239327951,0.257,0.8788079154824321,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8953333333333334,0.6039293782365326,0.15156143782863715,0.905,0.7671387444581327,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9506666666666667,0.7196262397785951,0.15156143782863715,0.952,0.8709721345495236,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3783333333333333,0.7096389669594401,0.5063175240399332,0.066,0.8838830720898343,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4603333333333333,0.8455869838366757,0.5063175240399332,0.124,1.0089102464690358,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.48533333333333334,0.609259041148495,0.37470955013293855,0.19,0.7754703791594748,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.5703333333333332,0.7259769248401865,0.37470955013293855,0.27,0.8784156068436955,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8876666666666666,0.6038826619307712,0.15256760709225262,0.904,0.7681471625685046,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.948,0.7195705738668794,0.15256760709225262,0.954,0.8695993470187038,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.915,2.6608678733015485,0.688154090500346,0.931,3.366696329353361,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9656666666666667,3.1706196307305743,0.688154090500346,0.97,3.8192561069995286,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.903,3.556747699127985,0.9996416099478588,0.942,4.472327607652934,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.969,4.238126285623724,0.9996416099478588,0.984,5.088003820636524,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9373333333333334,2.1290784823926696,0.46227527065430596,0.956,2.703189636335836,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9743333333333334,2.5369534877597597,0.46227527065430596,0.991,3.0641146657072404,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.91,1.0977119557447321,0.2651109928804438,0.939,1.3939185973124866,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.968,1.3080044712830703,0.2651109928804438,0.981,1.580610122013623,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9316666666666666,1.4368875613066505,0.30987690101867293,0.952,1.8152404100048158,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.975,1.7121571329201994,0.30987690101867293,0.98,2.059654079760943,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.908,1.0154733246915484,0.23971463199529405,0.929,1.2938281773467855,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.96,1.210011098279508,0.23971463199529405,0.972,1.4652849487780493,1000 -Linear,Logistic,experimental,False,1,0.9,0.8176666666666667,0.2639777067863099,0.07735852107118578,0.764,0.3393389889591518,1000 -Linear,Logistic,experimental,False,1,0.95,0.891,0.3145488385988198,0.07735852107118578,0.839,0.3826999999595859,1000 -Linear,Logistic,experimental,False,4,0.9,0.31,1.0799528007716814,0.9173788544387992,0.045,1.361708244102074,1000 -Linear,Logistic,experimental,False,4,0.95,0.385,1.2868431329288754,0.9173788544387992,0.073,1.5474903461640912,1000 -Linear,Logistic,experimental,False,6,0.9,0.8963333333333334,1.0864824219772902,0.2703183844096557,0.893,1.3666259596934611,1000 -Linear,Logistic,experimental,False,6,0.95,0.949,1.2946236564879237,0.2703183844096557,0.943,1.5549441788053244,1000 -Linear,Logistic,experimental,True,1,0.9,0.8163333333333334,0.2639754882372008,0.07738204276505496,0.765,0.339331857870017,1000 -Linear,Logistic,experimental,True,1,0.95,0.8906666666666666,0.3145461950345047,0.07738204276505496,0.844,0.3833030006646118,1000 -Linear,Logistic,experimental,True,4,0.9,0.3103333333333333,1.0798559231989837,0.9168941023520879,0.046,1.3607552807065624,1000 -Linear,Logistic,experimental,True,4,0.95,0.3873333333333333,1.2867276961810175,0.9168941023520879,0.074,1.5475927725689025,1000 -Linear,Logistic,experimental,True,6,0.9,0.8986666666666666,1.0865640980568139,0.27054317418995893,0.896,1.3676856739628556,1000 -Linear,Logistic,experimental,True,6,0.95,0.95,1.2947209795394352,0.27054317418995893,0.941,1.5556519546992444,1000 -Linear,Logistic,observational,False,1,0.9,0.8956666666666666,0.28367316450513197,0.0700767685399924,0.903,0.3642537051104781,1000 -Linear,Logistic,observational,False,1,0.95,0.9523333333333334,0.3380174239825948,0.0700767685399924,0.948,0.4113211504413545,1000 -Linear,Logistic,observational,False,4,0.9,0.408,1.3776824648934105,0.9052340667640746,0.183,1.7236892476868426,1000 -Linear,Logistic,observational,False,4,0.95,0.5046666666666666,1.641609909282898,0.9052340667640746,0.277,1.964267689737536,1000 -Linear,Logistic,observational,False,6,0.9,0.8903333333333334,1.1309252917212975,0.282843171368907,0.89,1.4213783682706032,1000 -Linear,Logistic,observational,False,6,0.95,0.9493333333333334,1.3475806021033823,0.282843171368907,0.947,1.617450746310541,1000 -Linear,Logistic,observational,True,1,0.9,0.8876666666666666,0.28210363817731876,0.0702387016495634,0.9,0.36227342165859067,1000 -Linear,Logistic,observational,True,1,0.95,0.9513333333333334,0.3361472180111355,0.0702387016495634,0.945,0.40929779552981904,1000 -Linear,Logistic,observational,True,4,0.9,0.4043333333333333,1.3755156336478902,0.904918936330756,0.185,1.7226484388527301,1000 -Linear,Logistic,observational,True,4,0.95,0.497,1.6390279706032433,0.904918936330756,0.286,1.9605550323619565,1000 -Linear,Logistic,observational,True,6,0.9,0.892,1.125633507574361,0.2835718025458131,0.899,1.414839244504656,1000 -Linear,Logistic,observational,True,6,0.95,0.9473333333333334,1.341275052374208,0.2835718025458131,0.949,1.6097715181154,1000 diff --git a/results/did/did_multi_metadata.csv b/results/did/did_multi_metadata.csv deleted file mode 100644 index 86381a7..0000000 --- a/results/did/did_multi_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,DIDMultiCoverageSimulation,2025-06-03 09:09,162.553562772274,3.12.9,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_time.csv b/results/did/did_multi_time.csv deleted file mode 100644 index 3dda54d..0000000 --- a/results/did/did_multi_time.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.09633333333333333,0.6730703224735359,0.5813847440636578,0.06,0.7994113182366382,1000 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.163,0.8020127563300868,0.5813847440636578,0.109,0.9222994395169547,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.20866666666666667,0.545809228523173,0.4318166485465945,0.148,0.6621126753160614,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.29,0.6503718098720356,0.4318166485465945,0.226,0.7607781957690535,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8883333333333334,0.539451744339498,0.1374713900065768,0.888,0.6559678253242532,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.943,0.6427964002257806,0.1374713900065768,0.942,0.7532136346784374,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.095,0.673215344660322,0.5816575606523053,0.066,0.7987689454841812,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.16966666666666666,0.8021855609240048,0.5816575606523053,0.116,0.9211448037237728,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.212,0.5457365545641853,0.43118597517736307,0.158,0.662287763310214,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.29633333333333334,0.6502852135087509,0.43118597517736307,0.223,0.7601307241685876,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.882,0.5395052157780649,0.13917064701840512,0.889,0.6561053221874785,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.938,0.6428601153747003,0.13917064701840512,0.947,0.753120590966105,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.8976666666666666,2.8641489580508317,0.7473265850366615,0.92,3.5454942167899373,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.962,3.41284398329212,0.7473265850366615,0.97,4.046408625403042,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8876666666666666,3.9648529818754157,1.1487073320114483,0.918,4.845766161863059,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9593333333333334,4.724413723593485,1.1487073320114483,0.986,5.548216313166135,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.938,2.0148113447449116,0.43840143925357783,0.955,2.5144593978114727,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9783333333333334,2.4007957952232104,0.43840143925357783,0.99,2.861410408432865,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9076666666666666,1.1003301479666492,0.27099358031240817,0.913,1.3627159220412297,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9583333333333334,1.311124239738742,0.27099358031240817,0.97,1.5572874751641161,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9333333333333333,1.4854173027590014,0.3229586888066522,0.95,1.8150130378533484,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.976,1.7699838865395685,0.3229586888066522,0.978,2.0803451880507104,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9163333333333333,0.9353518863595044,0.219408785264352,0.912,1.1653988211882675,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9603333333333334,1.1145405160056325,0.219408785264352,0.959,1.3283422144863115,1000 -Linear,Logistic,experimental,False,1,0.9,0.7966666666666666,0.24428496421942136,0.07478155567895448,0.728,0.3129228235483047,1000 -Linear,Logistic,experimental,False,1,0.95,0.8733333333333334,0.2910834885181229,0.07478155567895448,0.833,0.35375833173558197,1000 -Linear,Logistic,experimental,False,4,0.9,0.038,0.9678137745111298,1.0814213490525186,0.03,1.1087428056263964,1000 -Linear,Logistic,experimental,False,4,0.95,0.06666666666666667,1.1532212415150949,1.0814213490525186,0.054,1.2896096218626036,1000 -Linear,Logistic,experimental,False,6,0.9,0.8883333333333334,0.9645120733919993,0.2398038156236055,0.884,1.1089972839130895,1000 -Linear,Logistic,experimental,False,6,0.95,0.9386666666666666,1.1492870219741105,0.2398038156236055,0.939,1.2860092104213576,1000 -Linear,Logistic,experimental,True,1,0.9,0.7976666666666666,0.244274323547519,0.0748075511921299,0.735,0.31288102428256387,1000 -Linear,Logistic,experimental,True,1,0.95,0.8716666666666666,0.2910708093755182,0.0748075511921299,0.833,0.35371101065661276,1000 -Linear,Logistic,experimental,True,4,0.9,0.03833333333333333,0.9676295529475489,1.0812355403537053,0.03,1.10872071383113,1000 -Linear,Logistic,experimental,True,4,0.95,0.067,1.1530017279827793,1.0812355403537053,0.054,1.289018545293176,1000 -Linear,Logistic,experimental,True,6,0.9,0.885,0.964486553866753,0.23961465238247193,0.887,1.109074934480792,1000 -Linear,Logistic,experimental,True,6,0.95,0.9383333333333334,1.1492566135842297,0.23961465238247193,0.933,1.2873487345102677,1000 -Linear,Logistic,observational,False,1,0.9,0.8873333333333334,0.2738660718613766,0.0672792367714224,0.875,0.35107388214992413,1000 -Linear,Logistic,observational,False,1,0.95,0.9376666666666666,0.32633155232820765,0.0672792367714224,0.938,0.39679498726255896,1000 -Linear,Logistic,observational,False,4,0.9,0.16433333333333333,1.3471569564681332,1.0662036471383771,0.133,1.5189433786007114,1000 -Linear,Logistic,observational,False,4,0.95,0.248,1.6052365225310308,1.0662036471383771,0.203,1.7701614407109725,1000 -Linear,Logistic,observational,False,6,0.9,0.8823333333333334,1.0106046290695898,0.25297949046206,0.886,1.1632254064709615,1000 -Linear,Logistic,observational,False,6,0.95,0.9396666666666667,1.20420968962261,0.25297949046206,0.941,1.3507861334703333,1000 -Linear,Logistic,observational,True,1,0.9,0.8836666666666666,0.27183527948043773,0.06710802675280161,0.87,0.3482504195565255,1000 -Linear,Logistic,observational,True,1,0.95,0.9373333333333334,0.3239117139538379,0.06710802675280161,0.934,0.3934241047155358,1000 -Linear,Logistic,observational,True,4,0.9,0.17166666666666666,1.3476603584428708,1.0647967745035234,0.133,1.5187476579231214,1000 -Linear,Logistic,observational,True,4,0.95,0.247,1.6058363629813088,1.0647967745035234,0.207,1.7714708628832339,1000 -Linear,Logistic,observational,True,6,0.9,0.889,1.0055746633220144,0.25465275272035065,0.884,1.1560383777095113,1000 -Linear,Logistic,observational,True,6,0.95,0.9386666666666666,1.1982161157585394,0.25465275272035065,0.939,1.3436875509579689,1000 diff --git a/results/did/did_pa_atte_coverage.csv b/results/did/did_pa_atte_coverage.csv deleted file mode 100644 index 9119e34..0000000 --- a/results/did/did_pa_atte_coverage.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,experimental,False,1,0.9,0.051,2.1624651397785515,2.1697505905302976,1000 -LGBM,LGBM,experimental,False,1,0.95,0.094,2.576736143777478,2.1697505905302976,1000 -LGBM,LGBM,experimental,False,2,0.9,0.378,2.1294819852681166,1.3213007503499328,1000 -LGBM,LGBM,experimental,False,2,0.95,0.475,2.537434291091179,1.3213007503499328,1000 -LGBM,LGBM,experimental,False,3,0.9,0.47,1.8796188347464011,1.0014962844281858,1000 -LGBM,LGBM,experimental,False,3,0.95,0.583,2.239703983626731,1.0014962844281858,1000 -LGBM,LGBM,experimental,False,4,0.9,0.078,1.8830006248174618,1.9173419242712182,1000 -LGBM,LGBM,experimental,False,4,0.95,0.122,2.243733635040054,1.9173419242712182,1000 -LGBM,LGBM,experimental,False,5,0.9,0.889,2.0642395778601936,0.5210006870170777,1000 -LGBM,LGBM,experimental,False,5,0.95,0.951,2.459693167693339,0.5210006870170777,1000 -LGBM,LGBM,experimental,False,6,0.9,0.908,1.8086231900602612,0.4337431389507495,1000 -LGBM,LGBM,experimental,False,6,0.95,0.948,2.1551074551794365,0.4337431389507495,1000 -LGBM,LGBM,experimental,True,1,0.9,0.049,2.159654648685151,2.17137681706751,1000 -LGBM,LGBM,experimental,True,1,0.95,0.099,2.573387237083486,2.17137681706751,1000 -LGBM,LGBM,experimental,True,2,0.9,0.373,2.129643042411216,1.319771507009933,1000 -LGBM,LGBM,experimental,True,2,0.95,0.47,2.537626202514028,1.319771507009933,1000 -LGBM,LGBM,experimental,True,3,0.9,0.477,1.8791031704354346,1.0000542552199656,1000 -LGBM,LGBM,experimental,True,3,0.95,0.598,2.23908953170162,1.0000542552199656,1000 -LGBM,LGBM,experimental,True,4,0.9,0.084,1.8855456999420728,1.9240618121414252,1000 -LGBM,LGBM,experimental,True,4,0.95,0.127,2.2467662791005663,1.9240618121414252,1000 -LGBM,LGBM,experimental,True,5,0.9,0.891,2.063666189492902,0.5200351889316859,1000 -LGBM,LGBM,experimental,True,5,0.95,0.947,2.459009933312703,0.5200351889316859,1000 -LGBM,LGBM,experimental,True,6,0.9,0.897,1.8093537325759845,0.43669034939483387,1000 -LGBM,LGBM,experimental,True,6,0.95,0.944,2.1559779502779253,0.43669034939483387,1000 -LGBM,LGBM,observational,False,1,0.9,0.893,12.590652453419517,3.3787304616783773,1000 -LGBM,LGBM,observational,False,1,0.95,0.953,15.002687744501154,3.3787304616783773,1000 -LGBM,LGBM,observational,False,2,0.9,0.914,14.716645515368727,3.622038823656133,1000 -LGBM,LGBM,observational,False,2,0.95,0.966,17.535964727040476,3.622038823656133,1000 -LGBM,LGBM,observational,False,3,0.9,0.933,14.387879061625718,3.413516510279929,1000 -LGBM,LGBM,observational,False,3,0.95,0.977,17.14421533481309,3.413516510279929,1000 -LGBM,LGBM,observational,False,4,0.9,0.843,18.129751335736472,5.765050835726839,1000 -LGBM,LGBM,observational,False,4,0.95,0.932,21.602931157204278,5.765050835726839,1000 -LGBM,LGBM,observational,False,5,0.9,0.917,7.704465948378402,1.901185439754437,1000 -LGBM,LGBM,observational,False,5,0.95,0.96,9.180437414922883,1.901185439754437,1000 -LGBM,LGBM,observational,False,6,0.9,0.922,7.569553123736534,1.7987428999886972,1000 -LGBM,LGBM,observational,False,6,0.95,0.971,9.019678868984235,1.7987428999886972,1000 -LGBM,LGBM,observational,True,1,0.9,0.906,4.1677645580041025,1.0303464962408189,1000 -LGBM,LGBM,observational,True,1,0.95,0.967,4.966197779476664,1.0303464962408189,1000 -LGBM,LGBM,observational,True,2,0.9,0.917,5.020279353776863,1.2235227285733399,1000 -LGBM,LGBM,observational,True,2,0.95,0.963,5.982031813960893,1.2235227285733399,1000 -LGBM,LGBM,observational,True,3,0.9,0.921,4.904759478369554,1.1326648179240986,1000 -LGBM,LGBM,observational,True,3,0.95,0.969,5.84438139231425,1.1326648179240986,1000 -LGBM,LGBM,observational,True,4,0.9,0.925,5.958922268906894,1.370042866021869,1000 -LGBM,LGBM,observational,True,4,0.95,0.971,7.1004938326197875,1.370042866021869,1000 -LGBM,LGBM,observational,True,5,0.9,0.92,3.449425982629519,0.8277123141255975,1000 -LGBM,LGBM,observational,True,5,0.95,0.965,4.110244572838216,0.8277123141255975,1000 -LGBM,LGBM,observational,True,6,0.9,0.925,3.40159548571924,0.8004114911308209,1000 -LGBM,LGBM,observational,True,6,0.95,0.97,4.053251020481494,0.8004114911308209,1000 diff --git a/results/did/did_pa_atte_coverage_metadata.csv b/results/did/did_pa_atte_coverage_metadata.csv deleted file mode 100644 index 961444b..0000000 --- a/results/did/did_pa_atte_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.11.dev0,did_pa_atte_coverage.py,2025-06-02 15:10:48,10769.977479457855,3.12.3 diff --git a/results/did/did_pa_multi_config.yml b/results/did/did_pa_multi_config.yml deleted file mode 100644 index ed4e23a..0000000 --- a/results/did/did_pa_multi_config.yml +++ /dev/null @@ -1,43 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - DGP: - - 1 - - 4 - - 6 - n_obs: - - 2000 -learner_definitions: - linear: &id001 - name: Linear - logistic: &id002 - name: Logistic - lgbmr: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.02 - lgbmc: &id004 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.02 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - score: - - observational - - experimental - in_sample_normalization: - - true - - false -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/did/did_pa_multi_coverage.csv b/results/did/did_pa_multi_coverage.csv deleted file mode 100644 index 8276aac..0000000 --- a/results/did/did_pa_multi_coverage.csv +++ /dev/null @@ -1,25 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -Linear,Linear,experimental,False,1,0.9,0.8875,0.589658704307476,0.14271881238392356,0.85,0.9184713776325004,20 -Linear,Linear,experimental,False,1,0.95,0.9458333333333334,0.7026216829731943,0.14271881238392356,0.9,1.0088572704968817,20 -Linear,Linear,experimental,False,4,0.9,0.7041666666666667,2.0297642964886093,0.9047675553035617,0.55,2.9260160123442596,20 -Linear,Linear,experimental,False,4,0.95,0.7708333333333333,2.418613336188561,0.9047675553035617,0.65,3.265541044699371,20 -Linear,Linear,experimental,False,6,0.9,0.9375,1.9858835644872976,0.4370880265956636,0.9,2.8747704680291024,20 -Linear,Linear,experimental,False,6,0.95,0.975,2.3663262190076697,0.4370880265956636,0.9,3.2067165503022985,20 -Linear,Linear,experimental,True,1,0.9,0.9041666666666666,0.5893929319394263,0.1419165948760371,0.9,0.9179189354368003,20 -Linear,Linear,experimental,True,1,0.95,0.9458333333333334,0.7023049956638021,0.1419165948760371,0.9,1.0086412447991253,20 -Linear,Linear,experimental,True,4,0.9,0.7041666666666667,2.031873164323966,0.9059623323417508,0.6,2.943810800692373,20 -Linear,Linear,experimental,True,4,0.95,0.7833333333333333,2.4211262072050013,0.9059623323417508,0.6,3.2739360531515684,20 -Linear,Linear,experimental,True,6,0.9,0.9458333333333334,1.9877755956053036,0.4386853538456557,0.9,2.8801526124840118,20 -Linear,Linear,experimental,True,6,0.95,0.975,2.3685807131390373,0.4386853538456557,0.9,3.2111476829248415,20 -Linear,Linear,observational,False,1,0.9,0.9125,0.6827078489949769,0.15467502808332462,0.9,1.0590069349882765,20 -Linear,Linear,observational,False,1,0.95,0.9583333333333334,0.8134965774875249,0.15467502808332462,1.0,1.1738447754301748,20 -Linear,Linear,observational,False,4,0.9,0.8,2.7854153587870214,0.8355183226583197,0.7,4.0015833335633415,20 -Linear,Linear,observational,False,4,0.95,0.8416666666666666,3.3190271132668636,0.8355183226583197,0.8,4.483472762454467,20 -Linear,Linear,observational,False,6,0.9,0.9333333333333333,2.5337718344427866,0.5967437923241619,0.9,3.6412755250672886,20 -Linear,Linear,observational,False,6,0.95,0.9708333333333334,3.0191753595448407,0.5967437923241619,0.95,4.081839476947988,20 -Linear,Linear,observational,True,1,0.9,0.9041666666666666,0.6620805479575324,0.15571526121686724,0.85,1.0317138682400495,20 -Linear,Linear,observational,True,1,0.95,0.9541666666666666,0.7889176323040639,0.15571526121686724,0.95,1.1316182486711308,20 -Linear,Linear,observational,True,4,0.9,0.7916666666666667,2.631108576842307,0.8079463860509168,0.7,3.77565721661986,20 -Linear,Linear,observational,True,4,0.95,0.8416666666666666,3.1351592418487586,0.8079463860509168,0.75,4.24016752287414,20 -Linear,Linear,observational,True,6,0.9,0.9333333333333333,2.3368968698600474,0.5421819294976428,0.9,3.361076606239287,20 -Linear,Linear,observational,True,6,0.95,0.9791666666666666,2.784584369977626,0.5421819294976428,0.95,3.7810902213750666,20 diff --git a/results/did/did_pa_multi_coverage_metadata.csv b/results/did/did_pa_multi_coverage_metadata.csv deleted file mode 100644 index 0cb88dc..0000000 --- a/results/did/did_pa_multi_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,did_pa_multi_coverage.py,2025-03-18 07:37:01,120.99546647071838,3.11.9 diff --git a/results/irm/apo_config.yml b/results/irm/apo_config.yml deleted file mode 100644 index 5f31101..0000000 --- a/results/irm/apo_config.yml +++ /dev/null @@ -1,49 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 500 - n_levels: - - 2 - linear: - - true -learner_definitions: - linear: &id001 - name: Linear - logit: &id002 - name: Logistic - lgbmr: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - min_child_samples: 10 - lgbmc: &id004 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 - min_child_samples: 10 -dml_parameters: - treatment_level: - - 0 - - 1 - - 2 - trimming_threshold: - - 0.01 - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id004 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/apo_coverage.csv b/results/irm/apo_coverage.csv deleted file mode 100644 index c352967..0000000 --- a/results/irm/apo_coverage.csv +++ /dev/null @@ -1,25 +0,0 @@ -Learner g,Learner m,Treatment Level,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,0,0.9,0.923,8.535462056273152,2.0255827803361752,1000 -LGBM Regr.,LGBM Clas.,0,0.95,0.968,10.170630351290903,2.0255827803361752,1000 -LGBM Regr.,LGBM Clas.,1,0.9,0.915,34.31276092012859,8.463655678765429,1000 -LGBM Regr.,LGBM Clas.,1,0.95,0.969,40.886176442476604,8.463655678765429,1000 -LGBM Regr.,LGBM Clas.,2,0.9,0.901,33.644464659560505,8.44195706768521,1000 -LGBM Regr.,LGBM Clas.,2,0.95,0.953,40.08985233177513,8.44195706768521,1000 -LGBM Regr.,Logistic,0,0.9,0.913,5.611262078064704,1.3129445023644262,1000 -LGBM Regr.,Logistic,0,0.95,0.96,6.686231164049146,1.3129445023644262,1000 -LGBM Regr.,Logistic,1,0.9,0.906,7.131142409013338,1.601689163860689,1000 -LGBM Regr.,Logistic,1,0.95,0.952,8.497280281526653,1.601689163860689,1000 -LGBM Regr.,Logistic,2,0.9,0.926,7.123330875617923,1.5793207930346633,1000 -LGBM Regr.,Logistic,2,0.95,0.961,8.487972265379696,1.5793207930346633,1000 -Linear,LGBM Clas.,0,0.9,0.91,5.450702479855432,1.2788345107461965,1000 -Linear,LGBM Clas.,0,0.95,0.953,6.494912602502952,1.2788345107461965,1000 -Linear,LGBM Clas.,1,0.9,0.934,9.871742629461385,2.0208159577876965,1000 -Linear,LGBM Clas.,1,0.95,0.977,11.762906863787386,2.0208159577876965,1000 -Linear,LGBM Clas.,2,0.9,0.935,7.196139854742809,1.5705772035604926,1000 -Linear,LGBM Clas.,2,0.95,0.971,8.574729515081229,1.5705772035604926,1000 -Linear,Logistic,0,0.9,0.915,5.333252473490304,1.262628265253654,1000 -Linear,Logistic,0,0.95,0.951,6.354962287965668,1.262628265253654,1000 -Linear,Logistic,1,0.9,0.907,5.409257288463179,1.2841258169966927,1000 -Linear,Logistic,1,0.95,0.947,6.445527610957087,1.2841258169966927,1000 -Linear,Logistic,2,0.9,0.909,5.362180231077127,1.2686475779103141,1000 -Linear,Logistic,2,0.95,0.949,6.389431837167295,1.2686475779103141,1000 diff --git a/results/irm/apo_metadata.csv b/results/irm/apo_metadata.csv deleted file mode 100644 index 601c446..0000000 --- a/results/irm/apo_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,APOCoverageSimulation,2025-06-04 15:38,79.44047049681346,3.12.3,scripts/irm/apo_config.yml diff --git a/results/irm/apos_causal_contrast.csv b/results/irm/apos_causal_contrast.csv deleted file mode 100644 index 5bc012d..0000000 --- a/results/irm/apos_causal_contrast.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,0.9,0.9035,33.48965631859352,8.5048896967406,0.918,39.64896208370754,1000 -LGBM Regr.,LGBM Clas.,0.95,0.9575,39.905386815920046,8.5048896967406,0.967,45.48932863359306,1000 -LGBM Regr.,Logistic,0.9,0.951,5.329365839934695,1.0762013117643536,0.951,6.300702382026109,1000 -LGBM Regr.,Logistic,0.95,0.9775,6.3503310784371845,1.0762013117643536,0.979,7.232560605885723,1000 -Linear,LGBM Clas.,0.9,0.965,6.721615473453926,1.3234802376469883,0.977,7.963378099405947,1000 -Linear,LGBM Clas.,0.95,0.989,8.009298839747467,1.3234802376469883,0.996,9.138185238253229,1000 -Linear,Logistic,0.9,0.8675,1.146829074707023,0.30695471324696894,0.836,1.3542396130508736,1000 -Linear,Logistic,0.95,0.918,1.366531128374668,0.30695471324696894,0.912,1.5554413731229015,1000 diff --git a/results/irm/apos_config.yml b/results/irm/apos_config.yml deleted file mode 100644 index 40be90e..0000000 --- a/results/irm/apos_config.yml +++ /dev/null @@ -1,49 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 500 - n_levels: - - 2 - linear: - - true -learner_definitions: - linear: &id001 - name: Linear - logit: &id002 - name: Logistic - lgbmr: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - min_child_samples: 10 - lgbmc: &id004 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 - min_child_samples: 10 -dml_parameters: - treatment_levels: - - - 0 - - 1 - - 2 - trimming_threshold: - - 0.01 - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id004 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/apos_coverage.csv b/results/irm/apos_coverage.csv deleted file mode 100644 index 4e630ec..0000000 --- a/results/irm/apos_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,0.9,0.9216666666666666,25.302332120467288,6.206005134767613,0.926,32.42413576207192,1000 -LGBM Regr.,LGBM Clas.,0.95,0.9623333333333334,30.149588308899382,6.206005134767613,0.975,36.66314428285753,1000 -LGBM Regr.,Logistic,0.9,0.9166666666666666,6.604807969876808,1.492507532099351,0.925,8.124328671640002,1000 -LGBM Regr.,Logistic,0.95,0.963,7.870114114502647,1.492507532099351,0.963,9.2992358185068,1000 -Linear,LGBM Clas.,0.9,0.927,7.536037974003498,1.6449388088327628,0.936,9.335529567192953,1000 -Linear,LGBM Clas.,0.95,0.968,8.979743104891375,1.6449388088327628,0.974,10.660074664816488,1000 -Linear,Logistic,0.9,0.9056666666666666,5.378673132414481,1.2747688188643604,0.907,5.79782063135373,1000 -Linear,Logistic,0.95,0.9536666666666667,6.409084341251623,1.2747688188643604,0.953,6.82033780870828,1000 diff --git a/results/irm/apos_metadata.csv b/results/irm/apos_metadata.csv deleted file mode 100644 index f463b04..0000000 --- a/results/irm/apos_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,APOSCoverageSimulation,2025-06-05 07:37,6.892837846279145,3.12.9,scripts/irm/apos_config.yml diff --git a/results/irm/cvar_Y0_coverage.csv b/results/irm/cvar_Y0_coverage.csv deleted file mode 100644 index 4c2e567..0000000 --- a/results/irm/cvar_Y0_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,0.9,0.85,0.5670142676988336,0.15380806524383983,200 -LGBM Regr.,LGBM Clas.,0.95,0.917142857142857,0.6756391725078731,0.15380806524383983,200 -LGBM Regr.,Logistic,0.9,0.7985714285714286,0.4385225256106473,0.13981066432860312,200 -LGBM Regr.,Logistic,0.95,0.8857142857142857,0.5225318183474872,0.13981066432860312,200 -Linear,LGBM Clas.,0.9,0.807142857142857,0.5780831437073561,0.16505729067291136,200 -Linear,LGBM Clas.,0.95,0.8778571428571429,0.6888285517757731,0.16505729067291136,200 -Linear,Logistic,0.9,0.7535714285714286,0.46127673668330255,0.14620789056223912,200 -Linear,Logistic,0.95,0.8271428571428571,0.5496451331545211,0.14620789056223912,200 diff --git a/results/irm/cvar_Y1_coverage.csv b/results/irm/cvar_Y1_coverage.csv deleted file mode 100644 index 5319243..0000000 --- a/results/irm/cvar_Y1_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,0.9,0.9214285714285714,0.1913460262511472,0.0431261794473061,200 -LGBM Regr.,LGBM Clas.,0.95,0.9592857142857143,0.22800285319744668,0.0431261794473061,200 -LGBM Regr.,Logistic,0.9,0.9192857142857143,0.18097901112163345,0.041041888975454605,200 -LGBM Regr.,Logistic,0.95,0.9614285714285714,0.2156497927499421,0.041041888975454605,200 -Linear,LGBM Clas.,0.9,0.9164285714285714,0.2132575331275393,0.046942310613367344,200 -Linear,LGBM Clas.,0.95,0.9621428571428571,0.2541120240203392,0.046942310613367344,200 -Linear,Logistic,0.9,0.9228571428571429,0.1968307741542601,0.04490834814057729,200 -Linear,Logistic,0.95,0.9557142857142857,0.23453833342391914,0.04490834814057729,200 diff --git a/results/irm/cvar_config.yml b/results/irm/cvar_config.yml deleted file mode 100644 index 5157d7e..0000000 --- a/results/irm/cvar_config.yml +++ /dev/null @@ -1,65 +0,0 @@ -simulation_parameters: - repetitions: 200 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 5000 - dim_x: - - 5 -learner_definitions: - linear: &id001 - name: Linear - logit: &id002 - name: Logistic - lgbmr: &id003 - name: LGBM Regr. - params: - n_estimators: 200 - learning_rate: 0.05 - num_leaves: 15 - max_depth: 5 - min_child_samples: 10 - subsample: 0.9 - colsample_bytree: 0.9 - reg_alpha: 0.0 - reg_lambda: 0.1 - random_state: 42 - lgbmc: &id004 - name: LGBM Clas. - params: - n_estimators: 200 - learning_rate: 0.05 - num_leaves: 15 - max_depth: 5 - min_child_samples: 10 - subsample: 0.9 - colsample_bytree: 0.9 - reg_alpha: 0.0 - reg_lambda: 0.1 - random_state: 42 -dml_parameters: - tau_vec: - - - 0.2 - - 0.3 - - 0.4 - - 0.5 - - 0.6 - - 0.7 - - 0.8 - trimming_threshold: - - 0.01 - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id004 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/cvar_coverage_metadata.csv b/results/irm/cvar_coverage_metadata.csv deleted file mode 100644 index f14d35e..0000000 --- a/results/irm/cvar_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,cvar_coverage.py,2025-05-22 15:47:04,15261.781089544296,3.12.10 diff --git a/results/irm/cvar_coverage_pq0.csv b/results/irm/cvar_coverage_pq0.csv deleted file mode 100644 index f94d6bb..0000000 --- a/results/irm/cvar_coverage_pq0.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,0.9,0.8892307692307692,0.5699689541680535,0.13916120902511853,100 -LGBM,LGBM,0.95,0.9461538461538461,0.6791598985897508,0.13916120902511853,100 -LGBM,Logistic Regression,0.9,0.8207692307692308,0.4060171336908242,0.11838313391016886,100 -LGBM,Logistic Regression,0.95,0.8907692307692308,0.4837992549009209,0.11838313391016886,100 -Linear,LGBM,0.9,0.7707692307692308,0.5801661718639771,0.1746635044255932,100 -Linear,LGBM,0.95,0.8630769230769231,0.691310632915921,0.1746635044255932,100 -Linear,Logistic Regression,0.9,0.69,0.4294697114538,0.1539651338207486,100 -Linear,Logistic Regression,0.95,0.7792307692307692,0.5117447249457237,0.1539651338207486,100 diff --git a/results/irm/cvar_coverage_pq1.csv b/results/irm/cvar_coverage_pq1.csv deleted file mode 100644 index 321647f..0000000 --- a/results/irm/cvar_coverage_pq1.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,0.9,0.9323076923076923,0.1908311409902022,0.04341246693737058,100 -LGBM,LGBM,0.95,0.9792307692307692,0.22738932956769187,0.04341246693737058,100 -LGBM,Logistic Regression,0.9,0.9130769230769231,0.1776451248637835,0.04403267398281018,100 -LGBM,Logistic Regression,0.95,0.963076923076923,0.21167722225073635,0.04403267398281018,100 -Linear,LGBM,0.9,0.9307692307692308,0.21584587388672186,0.047576051617349686,100 -Linear,LGBM,0.95,0.9776923076923077,0.25719622226423833,0.047576051617349686,100 -Linear,Logistic Regression,0.9,0.8884615384615384,0.1934218436107483,0.04906705213284509,100 -Linear,Logistic Regression,0.95,0.943076923076923,0.23047634214298993,0.04906705213284509,100 diff --git a/results/irm/cvar_coverage_qte.csv b/results/irm/cvar_coverage_qte.csv deleted file mode 100644 index 7abdfa2..0000000 --- a/results/irm/cvar_coverage_qte.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.9007692307692308,0.5818966962059838,0.14389616733672375,0.88,0.7055777033989438,100 -LGBM,LGBM,0.95,0.9492307692307692,0.693372679853793,0.14389616733672375,0.95,0.8113769406399532,100 -LGBM,Logistic Regression,0.9,0.81,0.41715844354328135,0.12275759703405408,0.78,0.5062794648957274,100 -LGBM,Logistic Regression,0.95,0.8692307692307693,0.49707494441737266,0.12275759703405408,0.86,0.5835121707560351,100 -Linear,LGBM,0.9,0.8007692307692308,0.6065907561805581,0.1798354817301676,0.8,0.7182897195756133,100 -Linear,LGBM,0.95,0.8638461538461538,0.7227974671960807,0.1798354817301676,0.85,0.8301176550726784,100 -Linear,Logistic Regression,0.9,0.7084615384615384,0.45417244635105875,0.15263121995044057,0.69,0.5341807534621331,100 -Linear,Logistic Regression,0.95,0.8123076923076923,0.5411798490959508,0.15263121995044057,0.8,0.6185753871641957,100 diff --git a/results/irm/cvar_effect_coverage.csv b/results/irm/cvar_effect_coverage.csv deleted file mode 100644 index c54c59b..0000000 --- a/results/irm/cvar_effect_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,0.9,0.85,0.5796241888849147,0.15567372871154336,0.87,0.7009270285655491,200 -LGBM Regr.,LGBM Clas.,0.95,0.9292857142857143,0.6906648203634905,0.15567372871154336,0.92,0.8074443628687097,200 -LGBM Regr.,Logistic,0.9,0.8207142857142857,0.4505521904112434,0.1384841777144103,0.795,0.5426740272513005,200 -LGBM Regr.,Logistic,0.95,0.8928571428571429,0.5368660480740288,0.1384841777144103,0.88,0.6261735233895037,200 -Linear,LGBM Clas.,0.9,0.825,0.604031305594578,0.17336373457185203,0.78,0.7151775160876557,200 -Linear,LGBM Clas.,0.95,0.8971428571428571,0.719747693716827,0.17336373457185203,0.85,0.8269744576928215,200 -Linear,Logistic,0.9,0.775,0.4860331654639814,0.1489380406801104,0.74,0.5698020622218235,200 -Linear,Logistic,0.95,0.85,0.5791442375130592,0.1489380406801104,0.81,0.6599452421128806,200 diff --git a/results/irm/cvar_metadata.csv b/results/irm/cvar_metadata.csv deleted file mode 100644 index 63df236..0000000 --- a/results/irm/cvar_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,CVARCoverageSimulation,2025-06-05 12:27,9.002358218034109,3.12.9,scripts/irm/cvar_config.yml diff --git a/results/irm/iivm_late_coverage.csv b/results/irm/iivm_late_coverage.csv deleted file mode 100644 index c234ac0..0000000 --- a/results/irm/iivm_late_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -Lasso,Logistic Regression,0.9,0.902,0.9293147641314788,0.2241721725234453,1000 -Lasso,Logistic Regression,0.95,0.956,1.10734684117444,0.2241721725234453,1000 -Lasso,Random Forest,0.9,0.903,0.9550141700093412,0.23077333095440236,1000 -Lasso,Random Forest,0.95,0.957,1.1379695720480933,0.23077333095440236,1000 -Random Forest,Logistic Regression,0.9,0.9,0.9629145290806888,0.23355881870984344,1000 -Random Forest,Logistic Regression,0.95,0.951,1.1473834305161408,0.23355881870984344,1000 -Random Forest,Random Forest,0.9,0.904,0.9912410494922755,0.23401096266112748,1000 -Random Forest,Random Forest,0.95,0.959,1.1811365614357268,0.23401096266112748,1000 diff --git a/results/irm/iivm_late_coverage_metadata.csv b/results/irm/iivm_late_coverage_metadata.csv deleted file mode 100644 index e737bef..0000000 --- a/results/irm/iivm_late_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,iivm_late_coverage.py,2025-05-22 13:10:22,5866.210592031479,3.12.10 diff --git a/results/irm/irm_apo_coverage_apo.csv b/results/irm/irm_apo_coverage_apo.csv deleted file mode 100644 index e830e1b..0000000 --- a/results/irm/irm_apo_coverage_apo.csv +++ /dev/null @@ -1,25 +0,0 @@ -Learner g,Learner m,Treatment Level,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,0.0,0.9,0.912,8.657690136121921,2.076508232578001,1000 -LGBM,LGBM,0.0,0.95,0.966,10.316274091547035,2.076508232578001,1000 -LGBM,LGBM,1.0,0.9,0.914,38.23339285821166,9.211992345283987,1000 -LGBM,LGBM,1.0,0.95,0.967,45.55789754237906,9.211992345283987,1000 -LGBM,LGBM,2.0,0.9,0.891,37.49194764946096,9.582632590363396,1000 -LGBM,LGBM,2.0,0.95,0.952,44.67441108385784,9.582632590363396,1000 -LGBM,Logistic,0.0,0.9,0.904,5.625897101886533,1.3388185183680807,1000 -LGBM,Logistic,0.0,0.95,0.954,6.7036698705295725,1.3388185183680807,1000 -LGBM,Logistic,1.0,0.9,0.923,7.423300143143785,1.6937126309587676,1000 -LGBM,Logistic,1.0,0.95,0.968,8.84540769378873,1.6937126309587676,1000 -LGBM,Logistic,2.0,0.9,0.92,7.321275660150268,1.66124252169416,1000 -LGBM,Logistic,2.0,0.95,0.969,8.723838024042964,1.66124252169416,1000 -Linear,LGBM,0.0,0.9,0.901,5.498257423071024,1.309688195531907,1000 -Linear,LGBM,0.0,0.95,0.95,6.551577812380716,1.309688195531907,1000 -Linear,LGBM,1.0,0.9,0.949,10.700720020780512,2.128644427723186,1000 -Linear,LGBM,1.0,0.95,0.983,12.75069435099058,2.128644427723186,1000 -Linear,LGBM,2.0,0.9,0.933,7.513644049429104,1.6358873525441715,1000 -Linear,LGBM,2.0,0.95,0.968,8.953059097926168,1.6358873525441715,1000 -Linear,Logistic,0.0,0.9,0.902,5.335670092717667,1.2884949290748537,1000 -Linear,Logistic,0.0,0.95,0.953,6.357843058957276,1.2884949290748537,1000 -Linear,Logistic,1.0,0.9,0.908,5.417512107920403,1.280308177753247,1000 -Linear,Logistic,1.0,0.95,0.956,6.455363835025866,1.280308177753247,1000 -Linear,Logistic,2.0,0.9,0.906,5.366403391397197,1.28401173581695,1000 -Linear,Logistic,2.0,0.95,0.957,6.3944640430685675,1.28401173581695,1000 diff --git a/results/irm/irm_apo_coverage_apos.csv b/results/irm/irm_apo_coverage_apos.csv deleted file mode 100644 index 3531ab7..0000000 --- a/results/irm/irm_apo_coverage_apos.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.9066666666666666,28.21021843292038,7.119697418816689,0.925,36.1943517986729,1000 -LGBM,LGBM,0.95,0.958,33.61454856442563,7.119697418816689,0.973,40.868020474452145,1000 -LGBM,Logistic,0.9,0.9126666666666666,6.789316986971467,1.5725415986639164,0.922,8.394070597867524,1000 -LGBM,Logistic,0.95,0.9626666666666667,8.089970168806186,1.5725415986639164,0.96,9.592284619044477,1000 -Linear,LGBM,0.9,0.927,7.903418354805325,1.7282923156600922,0.937,9.850445774370156,1000 -Linear,LGBM,0.95,0.9676666666666667,9.41750382912841,1.7282923156600922,0.974,11.234392064837424,1000 -Linear,Logistic,0.9,0.9043333333333333,5.372532806955153,1.2820240087685983,0.901,5.7964894175017925,1000 -Linear,Logistic,0.95,0.9566666666666667,6.4017676921854445,1.2820240087685983,0.952,6.8182385960659,1000 diff --git a/results/irm/irm_apo_coverage_apos_contrast.csv b/results/irm/irm_apo_coverage_apos_contrast.csv deleted file mode 100644 index 2c98fb5..0000000 --- a/results/irm/irm_apo_coverage_apos_contrast.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.8885,37.87536523730769,9.788862143523833,0.898,44.828925781533165,1000 -LGBM,LGBM,0.95,0.9485,45.13128131893863,9.788862143523833,0.965,51.42387403222799,1000 -LGBM,Logistic,0.9,0.9275,5.725128733165455,1.2673279809901974,0.927,6.774304315459575,1000 -LGBM,Logistic,0.95,0.9635,6.821911652197591,1.2673279809901974,0.963,7.7654094416927215,1000 -Linear,LGBM,0.9,0.958,7.430953406859927,1.5064252052940996,0.975,8.798628447594016,1000 -Linear,LGBM,0.95,0.989,8.85452711998085,1.5064252052940996,0.992,10.090116294778499,1000 -Linear,Logistic,0.9,0.8735,1.1425883251377777,0.29465524587422715,0.87,1.3505222299078565,1000 -Linear,Logistic,0.95,0.9355,1.3614779635902856,0.29465524587422715,0.92,1.5496710496635275,1000 diff --git a/results/irm/irm_apo_coverage_metadata.csv b/results/irm/irm_apo_coverage_metadata.csv deleted file mode 100644 index 1e26249..0000000 --- a/results/irm/irm_apo_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,irm_apo_coverage.py,2025-05-22 13:10:29,5871.5619258880615,3.12.10 diff --git a/results/irm/irm_ate_config.yml b/results/irm/irm_ate_config.yml deleted file mode 100644 index d19a50a..0000000 --- a/results/irm/irm_ate_config.yml +++ /dev/null @@ -1,61 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 0.5 - n_obs: - - 500 - dim_x: - - 20 -learner_definitions: - lasso: &id001 - name: LassoCV - logit: &id002 - name: Logistic - rfr: &id003 - name: RF Regr. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - rfc: &id004 - name: RF Clas. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - lgbmr: &id005 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - lgbmc: &id006 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id001 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id005 - ml_m: *id006 - - ml_g: *id005 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id006 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/irm_ate_coverage.csv b/results/irm/irm_ate_coverage.csv deleted file mode 100644 index 69935e2..0000000 --- a/results/irm/irm_ate_coverage.csv +++ /dev/null @@ -1,15 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,0.9,0.934,1.2170294870742426,0.28949513855358994,1000 -LGBM Regr.,LGBM Clas.,0.95,0.974,1.4501800790686068,0.28949513855358994,1000 -LGBM Regr.,Logistic,0.9,0.909,0.764475766453259,0.1851430173917419,1000 -LGBM Regr.,Logistic,0.95,0.955,0.9109290606478061,0.1851430173917419,1000 -LassoCV,LGBM Clas.,0.9,0.931,1.099023356166903,0.26125287479628606,1000 -LassoCV,LGBM Clas.,0.95,0.973,1.30956710126707,0.26125287479628606,1000 -LassoCV,Logistic,0.9,0.912,0.6518264483447356,0.15950540890700682,1000 -LassoCV,Logistic,0.95,0.962,0.7766991189934198,0.15950540890700682,1000 -LassoCV,RF Clas.,0.9,0.921,0.575659955473877,0.1328787221360119,1000 -LassoCV,RF Clas.,0.95,0.965,0.6859411449040855,0.1328787221360119,1000 -RF Regr.,Logistic,0.9,0.923,0.7334971446280483,0.1805477395572802,1000 -RF Regr.,Logistic,0.95,0.957,0.8740157559784838,0.1805477395572802,1000 -RF Regr.,RF Clas.,0.9,0.908,0.6176696649606507,0.1493303814432326,1000 -RF Regr.,RF Clas.,0.95,0.955,0.7359988012486619,0.1493303814432326,1000 diff --git a/results/irm/irm_ate_coverage_metadata.csv b/results/irm/irm_ate_coverage_metadata.csv deleted file mode 100644 index 5ed7ac7..0000000 --- a/results/irm/irm_ate_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,irm_ate_coverage.py,2025-05-22 12:32:44,3604.067242860794,3.12.10 diff --git a/results/irm/irm_ate_metadata.csv b/results/irm/irm_ate_metadata.csv deleted file mode 100644 index 75d3d5f..0000000 --- a/results/irm/irm_ate_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,IRMATECoverageSimulation,2025-06-03 16:21,13.744510825475057,3.12.9,scripts/irm/irm_ate_config.yml diff --git a/results/irm/irm_ate_sensitivity_config.yml b/results/irm/irm_ate_sensitivity_config.yml deleted file mode 100644 index 74143aa..0000000 --- a/results/irm/irm_ate_sensitivity_config.yml +++ /dev/null @@ -1,53 +0,0 @@ -simulation_parameters: - repetitions: 500 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 5.0 - n_obs: - - 5000 - trimming_threshold: - - 0.05 - var_epsilon_y: - - 1.0 - linear: - - false - gamma_a: - - 0.198 - beta_a: - - 0.582 -learner_definitions: - linear: &id001 - name: Linear - logit: &id002 - name: Logistic - lgbmr: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - min_child_samples: 10 - lgbmc: &id004 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 - min_child_samples: 10 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id004 - trimming_threshold: - - 0.05 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/irm_ate_sensitivity_coverage.csv b/results/irm/irm_ate_sensitivity_coverage.csv deleted file mode 100644 index 4a63af0..0000000 --- a/results/irm/irm_ate_sensitivity_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition -LGBM Regr.,LGBM Clas.,0.9,0.104,0.2668157568060522,0.18026525524152154,0.966,1.0,0.12473788062439613,0.05508904509343494,0.04380159419714633,0.3234512135135403,500 -LGBM Regr.,LGBM Clas.,0.95,0.276,0.31793058377898364,0.18026525524152154,1.0,1.0,0.12473788062439613,0.03540613542014128,0.04380159419714633,0.3234512135135403,500 -LGBM Regr.,Logistic,0.9,0.248,0.25763009474845106,0.14980027719730954,0.998,1.0,0.10093696287018208,0.03536055959101725,0.027371865522670537,0.2987135019044584,500 -LGBM Regr.,Logistic,0.95,0.552,0.306985192339855,0.14980027719730954,1.0,1.0,0.10093696287018208,0.01878662839660344,0.027371865522670537,0.2987135019044584,500 -Linear,LGBM Clas.,0.9,0.112,0.26715210077204105,0.17865402724192433,0.962,1.0,0.12630248546657805,0.055046351043189806,0.04436057060203107,0.31869461365134216,500 -Linear,LGBM Clas.,0.95,0.282,0.318331362333959,0.17865402724192433,0.998,1.0,0.12630248546657805,0.03487837647302397,0.04436057060203107,0.31869461365134216,500 -Linear,Logistic,0.9,0.852,0.2589605314211221,0.09016543407251673,1.0,1.0,0.06325807709105473,0.00696464260372732,0.05686871205333632,0.23561615221802584,500 -Linear,Logistic,0.95,0.978,0.30857050541538944,0.09016543407251673,1.0,1.0,0.06325807709105473,0.0015852998947931969,0.05686871205333632,0.23561615221802584,500 diff --git a/results/irm/irm_ate_sensitivity_metadata.csv b/results/irm/irm_ate_sensitivity_metadata.csv deleted file mode 100644 index d859488..0000000 --- a/results/irm/irm_ate_sensitivity_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,IRMATESensitivityCoverageSimulation,2025-06-04 10:16,29.540068797270457,3.12.3,scripts/irm/irm_ate_sensitivity_config.yml diff --git a/results/irm/irm_atte_config.yml b/results/irm/irm_atte_config.yml deleted file mode 100644 index 2d3c69a..0000000 --- a/results/irm/irm_atte_config.yml +++ /dev/null @@ -1,61 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 0.5 - n_obs: - - 500 - dim_x: - - 20 -learner_definitions: - lasso: &id001 - name: LassoCV - logit: &id002 - name: Logistic - rfr: &id003 - name: RF Regr. - params: - n_estimators: 200 - max_features: 20 - max_depth: 20 - min_samples_leaf: 2 - rfc: &id004 - name: RF Clas. - params: - n_estimators: 200 - max_features: 20 - max_depth: 20 - min_samples_leaf: 20 - lgbmr: &id005 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - lgbmc: &id006 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id001 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id005 - ml_m: *id006 - - ml_g: *id005 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id006 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/irm_atte_coverage.csv b/results/irm/irm_atte_coverage.csv deleted file mode 100644 index 082860b..0000000 --- a/results/irm/irm_atte_coverage.csv +++ /dev/null @@ -1,15 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,0.9,0.935,1.4682839506185927,0.33857239275160667,1000 -LGBM Regr.,LGBM Clas.,0.95,0.974,1.7495682382536595,0.33857239275160667,1000 -LGBM Regr.,Logistic,0.9,0.903,0.827444945949616,0.20284041708199016,1000 -LGBM Regr.,Logistic,0.95,0.957,0.9859614659188063,0.20284041708199016,1000 -LassoCV,LGBM Clas.,0.9,0.916,1.364184861790926,0.3340226877296898,1000 -LassoCV,LGBM Clas.,0.95,0.968,1.625526523183968,0.3340226877296898,1000 -LassoCV,Logistic,0.9,0.913,0.7758018959411505,0.1948636425368796,1000 -LassoCV,Logistic,0.95,0.96,0.9244249763431417,0.1948636425368796,1000 -LassoCV,RF Clas.,0.9,0.892,0.5725347715806113,0.14886905941160222,1000 -LassoCV,RF Clas.,0.95,0.94,0.6822172586107998,0.14886905941160222,1000 -RF Regr.,Logistic,0.9,0.899,0.8139922164772362,0.2045901899504402,1000 -RF Regr.,Logistic,0.95,0.952,0.9699315500481204,0.2045901899504402,1000 -RF Regr.,RF Clas.,0.9,0.885,0.5863252811302729,0.15402934863308917,1000 -RF Regr.,RF Clas.,0.95,0.93,0.6986496642686135,0.15402934863308917,1000 diff --git a/results/irm/irm_atte_coverage_metadata.csv b/results/irm/irm_atte_coverage_metadata.csv deleted file mode 100644 index 99c4def..0000000 --- a/results/irm/irm_atte_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,irm_atte_coverage.py,2025-05-22 13:53:23,3572.697674512863,3.12.10 diff --git a/results/irm/irm_atte_metadata.csv b/results/irm/irm_atte_metadata.csv deleted file mode 100644 index 92114f4..0000000 --- a/results/irm/irm_atte_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,IRMATTECoverageSimulation,2025-06-03 16:07,13.51489497423172,3.12.9,scripts/irm/irm_atte_config.yml diff --git a/results/irm/irm_atte_sensitivity_config.yml b/results/irm/irm_atte_sensitivity_config.yml deleted file mode 100644 index bf06bc6..0000000 --- a/results/irm/irm_atte_sensitivity_config.yml +++ /dev/null @@ -1,53 +0,0 @@ -simulation_parameters: - repetitions: 500 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 5.0 - n_obs: - - 5000 - trimming_threshold: - - 0.05 - var_epsilon_y: - - 1.0 - linear: - - false - gamma_a: - - 0.151 - beta_a: - - 0.582 -learner_definitions: - linear: &id001 - name: Linear - logit: &id002 - name: Logistic - lgbmr: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - min_child_samples: 10 - lgbmc: &id004 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 - min_child_samples: 10 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id004 - trimming_threshold: - - 0.05 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/irm_atte_sensitivity_coverage.csv b/results/irm/irm_atte_sensitivity_coverage.csv deleted file mode 100644 index 075e58b..0000000 --- a/results/irm/irm_atte_sensitivity_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition -LGBM Regr.,LGBM Clas.,0.9,0.724,0.3490468150328256,0.1335281439881145,0.95,1.0,0.1038722101661171,0.023169595411329586,0.06489839293328352,0.2564847068835367,500 -LGBM Regr.,LGBM Clas.,0.95,0.848,0.4159149332033151,0.1335281439881145,0.984,1.0,0.1038722101661171,0.011313984709802882,0.06489839293328352,0.2564847068835367,500 -LGBM Regr.,Logistic,0.9,0.712,0.34686964803507303,0.13021401649938852,0.968,1.0,0.09785329627117717,0.02088828773212853,0.06357450466836227,0.25752793576799426,500 -LGBM Regr.,Logistic,0.95,0.862,0.4133206787152529,0.13021401649938852,0.986,1.0,0.09785329627117717,0.010006537111844464,0.06357450466836227,0.25752793576799426,500 -Linear,LGBM Clas.,0.9,0.778,0.34985166701129805,0.12304199369830472,0.968,1.0,0.09780901861894682,0.018644199845226802,0.06344115655765417,0.24215873513324584,500 -Linear,LGBM Clas.,0.95,0.88,0.41687397348802135,0.12304199369830472,0.988,1.0,0.09780901861894682,0.008642793757112277,0.06344115655765417,0.24215873513324584,500 -Linear,Logistic,0.9,0.956,0.35055289955459806,0.0738271575494762,0.996,1.0,0.05790900052274957,0.004015909139992085,0.0975242247284002,0.17368819501662186,500 -Linear,Logistic,0.95,0.98,0.41770954360024026,0.0738271575494762,0.998,1.0,0.05790900052274957,0.0013840310375437,0.0975242247284002,0.17368819501662186,500 diff --git a/results/irm/irm_atte_sensitivity_metadata.csv b/results/irm/irm_atte_sensitivity_metadata.csv deleted file mode 100644 index e0ae81f..0000000 --- a/results/irm/irm_atte_sensitivity_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,IRMATTESensitivityCoverageSimulation,2025-06-04 10:49,30.47395207484563,3.12.3,scripts/irm/irm_atte_sensitivity_config.yml diff --git a/results/irm/irm_cate_config.yml b/results/irm/irm_cate_config.yml deleted file mode 100644 index c1206fe..0000000 --- a/results/irm/irm_cate_config.yml +++ /dev/null @@ -1,63 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 500 - p: - - 10 - support_size: - - 5 - n_x: - - 1 -learner_definitions: - linear: &id001 - name: Linear - logit: &id002 - name: Logistic - rfr: &id003 - name: RF Regr. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - rfc: &id004 - name: RF Clas. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - lgbmr: &id005 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - lgbmc: &id006 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id001 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id005 - ml_m: *id006 - - ml_g: *id005 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id006 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/irm_cate_coverage.csv b/results/irm/irm_cate_coverage.csv deleted file mode 100644 index 000353f..0000000 --- a/results/irm/irm_cate_coverage.csv +++ /dev/null @@ -1,15 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,0.9,0.92823,1.0570613395560353,0.24271123774219397,1.0,2.6463187180937235,1000 -LGBM Regr.,LGBM Clas.,0.95,0.96976,1.259566274489309,0.24271123774219397,1.0,2.652748380799862,1000 -LGBM Regr.,Logistic,0.9,0.90431,0.4603024759110742,0.10988090751139157,0.996,1.157310107019297,1000 -LGBM Regr.,Logistic,0.95,0.94966,0.5484842298414058,0.10988090751139157,0.998,1.1595510257286086,1000 -Linear,LGBM Clas.,0.9,0.90906,1.0431407600660088,0.25074855426124026,0.999,2.6288585357985186,1000 -Linear,LGBM Clas.,0.95,0.95858,1.2429788809380993,0.25074855426124026,0.998,2.6131478268009114,1000 -Linear,Logistic,0.9,0.9102100000000001,0.4767188958750692,0.11111755516576532,0.999,1.1958150906203837,1000 -Linear,Logistic,0.95,0.95427,0.5680456007484012,0.11111755516576532,0.999,1.1961020063274401,1000 -Linear,RF Clas.,0.9,0.91604,0.5102732447654866,0.11800460653781775,0.999,1.2834578728038433,1000 -Linear,RF Clas.,0.95,0.95914,0.6080280735182108,0.11800460653781775,0.999,1.2816066988048282,1000 -RF Regr.,Logistic,0.9,0.902,0.4598055139749778,0.10994809691322913,0.999,1.1600848822586207,1000 -RF Regr.,Logistic,0.95,0.9499099999999999,0.5478920631704775,0.10994809691322913,0.998,1.1551525914690834,1000 -RF Regr.,RF Clas.,0.9,0.905,0.49735687162215936,0.11853266588343181,0.999,1.2483681652474525,1000 -RF Regr.,RF Clas.,0.95,0.95178,0.5926372656329394,0.11853266588343181,0.999,1.251522831166833,1000 diff --git a/results/irm/irm_cate_coverage_metadata.csv b/results/irm/irm_cate_coverage_metadata.csv deleted file mode 100644 index 771f45f..0000000 --- a/results/irm/irm_cate_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,irm_cate_coverage.py,2025-05-22 14:27:33,5618.293743133545,3.12.10 diff --git a/results/irm/irm_cate_metadata.csv b/results/irm/irm_cate_metadata.csv deleted file mode 100644 index 1556fdc..0000000 --- a/results/irm/irm_cate_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,IRMCATECoverageSimulation,2025-06-03 14:24,10.22935619354248,3.12.9,scripts/irm/irm_cate_config.yml diff --git a/results/irm/irm_gate_config.yml b/results/irm/irm_gate_config.yml deleted file mode 100644 index c1206fe..0000000 --- a/results/irm/irm_gate_config.yml +++ /dev/null @@ -1,63 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 500 - p: - - 10 - support_size: - - 5 - n_x: - - 1 -learner_definitions: - linear: &id001 - name: Linear - logit: &id002 - name: Logistic - rfr: &id003 - name: RF Regr. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - rfc: &id004 - name: RF Clas. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - lgbmr: &id005 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - lgbmc: &id006 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id001 - ml_m: *id004 - - ml_g: *id003 - ml_m: *id002 - - ml_g: *id005 - ml_m: *id006 - - ml_g: *id005 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id006 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/irm_gate_coverage.csv b/results/irm/irm_gate_coverage.csv deleted file mode 100644 index ab738e0..0000000 --- a/results/irm/irm_gate_coverage.csv +++ /dev/null @@ -1,15 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,0.9,0.9236666666666666,0.851465317065706,0.19722702192668598,1.0,2.011914810456983,1000 -LGBM Regr.,LGBM Clas.,0.95,0.972,1.014583503473648,0.19722702192668598,1.0,2.0031648741801455,1000 -LGBM Regr.,Logistic,0.9,0.9016666666666666,0.40159876476481454,0.09695556310967947,0.999,0.9443179359677094,1000 -LGBM Regr.,Logistic,0.95,0.9473333333333334,0.47853444359887215,0.09695556310967947,0.999,0.9425971024906015,1000 -Linear,LGBM Clas.,0.9,0.923,0.8592796676557775,0.19934007812012308,1.0,2.0230623845143447,1000 -Linear,LGBM Clas.,0.95,0.966,1.023894876515087,0.19934007812012308,1.0,2.0203888246588932,1000 -Linear,Logistic,0.9,0.915,0.4195046438102248,0.09830647800141477,0.999,0.9863092550256803,1000 -Linear,Logistic,0.95,0.9533333333333334,0.49987061446872544,0.09830647800141477,0.999,0.9830466638434444,1000 -Linear,RF Clas.,0.9,0.9206666666666666,0.4437261411849741,0.10126652921113784,0.999,1.0415488911519282,1000 -Linear,RF Clas.,0.95,0.9596666666666667,0.5287323087424741,0.10126652921113784,1.0,1.040804022375608,1000 -RF Regr.,Logistic,0.9,0.897,0.4014791112025455,0.09669425998448095,1.0,0.9423536354277464,1000 -RF Regr.,Logistic,0.95,0.9506666666666667,0.4783918675855257,0.09669425998448095,1.0,0.9449044166570425,1000 -RF Regr.,RF Clas.,0.9,0.8993333333333333,0.4239547202094922,0.10104977503999726,1.0,0.9958597773023945,1000 -RF Regr.,RF Clas.,0.95,0.95,0.5051732075554921,0.10104977503999726,0.999,0.9961472336115996,1000 diff --git a/results/irm/irm_gate_coverage_metadata.csv b/results/irm/irm_gate_coverage_metadata.csv deleted file mode 100644 index 00fc71a..0000000 --- a/results/irm/irm_gate_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,irm_gate_coverage.py,2025-05-22 12:06:46,2053.3285892009735,3.12.10 diff --git a/results/irm/irm_gate_metadata.csv b/results/irm/irm_gate_metadata.csv deleted file mode 100644 index 13efdf0..0000000 --- a/results/irm/irm_gate_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,IRMGATECoverageSimulation,2025-06-03 13:48,9.251631820201874,3.12.9,scripts/irm/irm_gate_config.yml diff --git a/results/irm/lpq_Y0_coverage.csv b/results/irm/lpq_Y0_coverage.csv deleted file mode 100644 index 81556c0..0000000 --- a/results/irm/lpq_Y0_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Clas.,LGBM Clas.,0.9,0.935,1.1830884138959616,0.24363577628567012,200 -LGBM Clas.,LGBM Clas.,0.95,0.966,1.4097367958876215,0.24363577628567012,200 -LGBM Clas.,Logistic,0.9,0.9470000000000001,1.1413178140016869,0.21854310075124617,200 -LGBM Clas.,Logistic,0.95,0.971,1.3599640561957957,0.21854310075124617,200 -Logistic,LGBM Clas.,0.9,0.932,1.1519919205445956,0.2330721806385721,200 -Logistic,LGBM Clas.,0.95,0.965,1.3726830386319526,0.2330721806385721,200 -Logistic,Logistic,0.9,0.9359999999999999,1.1121705811298108,0.21974489145697174,200 -Logistic,Logistic,0.95,0.9670000000000001,1.3252329860617573,0.21974489145697174,200 diff --git a/results/irm/lpq_Y1_coverage.csv b/results/irm/lpq_Y1_coverage.csv deleted file mode 100644 index 5f9e93b..0000000 --- a/results/irm/lpq_Y1_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Clas.,LGBM Clas.,0.9,0.927,1.6166365116884824,0.31220031423527045,200 -LGBM Clas.,LGBM Clas.,0.95,0.963,1.9263412178957202,0.31220031423527045,200 -LGBM Clas.,Logistic,0.9,0.943,1.563138831397548,0.2947145026308053,200 -LGBM Clas.,Logistic,0.95,0.971,1.8625948000329942,0.2947145026308053,200 -Logistic,LGBM Clas.,0.9,0.9420000000000001,1.567514402933319,0.2888227334203665,200 -Logistic,LGBM Clas.,0.95,0.971,1.867808615099192,0.2888227334203665,200 -Logistic,Logistic,0.9,0.94,1.514063009772447,0.28729535217904684,200 -Logistic,Logistic,0.95,0.9690000000000001,1.8041173517537936,0.28729535217904684,200 diff --git a/results/irm/lpq_config.yml b/results/irm/lpq_config.yml deleted file mode 100644 index 85abd3f..0000000 --- a/results/irm/lpq_config.yml +++ /dev/null @@ -1,48 +0,0 @@ -simulation_parameters: - repetitions: 200 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 5000 - dim_x: - - 5 -learner_definitions: - logit: &id001 - name: Logistic - lgbmc: &id002 - name: LGBM Clas. - params: - n_estimators: 200 - learning_rate: 0.05 - num_leaves: 15 - max_depth: 5 - min_child_samples: 10 - subsample: 0.9 - colsample_bytree: 0.9 - reg_alpha: 0.0 - reg_lambda: 0.1 - random_state: 42 -dml_parameters: - tau_vec: - - - 0.3 - - 0.4 - - 0.5 - - 0.6 - - 0.7 - trimming_threshold: - - 0.01 - learners: - - ml_g: *id001 - ml_m: *id001 - - ml_g: *id002 - ml_m: *id002 - - ml_g: *id002 - ml_m: *id001 - - ml_g: *id001 - ml_m: *id002 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/lpq_coverage_lpq0.csv b/results/irm/lpq_coverage_lpq0.csv deleted file mode 100644 index d563335..0000000 --- a/results/irm/lpq_coverage_lpq0.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,0.9,0.94,1.1717023704378204,0.23180102735661154,100 -LGBM,LGBM,0.95,0.9722222222222223,1.396169488293374,0.23180102735661154,100 -LGBM,Logistic Regression,0.9,0.95,1.1248311184133066,0.2270596212748565,100 -LGBM,Logistic Regression,0.95,0.9755555555555556,1.3403189467174592,0.2270596212748565,100 -Logistic Regression,LGBM,0.9,0.9488888888888889,1.1516756381210271,0.22097455311738945,100 -Logistic Regression,LGBM,0.95,0.9811111111111112,1.372306164879188,0.22097455311738945,100 -Logistic Regression,Logistic Regression,0.9,0.9533333333333333,1.1095156391492575,0.20619468880954653,100 -Logistic Regression,Logistic Regression,0.95,0.9788888888888888,1.3220694275677582,0.20619468880954653,100 diff --git a/results/irm/lpq_coverage_lpq1.csv b/results/irm/lpq_coverage_lpq1.csv deleted file mode 100644 index 524d87a..0000000 --- a/results/irm/lpq_coverage_lpq1.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,0.9,0.9577777777777777,1.6624989751251327,0.3276833414641952,100 -LGBM,LGBM,0.95,0.99,1.9809897137285786,0.3276833414641952,100 -LGBM,Logistic Regression,0.9,0.9411111111111111,1.5914659538910119,0.32194623632362507,100 -LGBM,Logistic Regression,0.95,0.9711111111111111,1.8963486483773861,0.32194623632362507,100 -Logistic Regression,LGBM,0.9,0.96,1.60784858202307,0.30083496643464896,100 -Logistic Regression,LGBM,0.95,0.9822222222222223,1.915869753833108,0.30083496643464896,100 -Logistic Regression,Logistic Regression,0.9,0.9466666666666668,1.556189836416658,0.304958909712274,100 -Logistic Regression,Logistic Regression,0.95,0.9844444444444445,1.8543145617989472,0.304958909712274,100 diff --git a/results/irm/lpq_coverage_lqte.csv b/results/irm/lpq_coverage_lqte.csv deleted file mode 100644 index 2e788da..0000000 --- a/results/irm/lpq_coverage_lqte.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.9233333333333333,1.636872420792144,0.38490701730912247,0.94,2.2547716211801454,100 -LGBM,LGBM,0.95,0.9622222222222223,1.950453790824845,0.38490701730912247,0.97,2.5400452907969764,100 -LGBM,Logistic Regression,0.9,0.9088888888888889,1.5675334432220174,0.37520599979698516,0.91,2.1574364137437168,100 -LGBM,Logistic Regression,0.95,0.95,1.8678313030025362,0.37520599979698516,0.95,2.4273297337432616,100 -Logistic Regression,LGBM,0.9,0.9188888888888889,1.6190226009242576,0.3723322348549169,0.92,2.208051172256097,100 -Logistic Regression,LGBM,0.95,0.9644444444444444,1.9291844185850637,0.3723322348549169,0.98,2.487384422889672,100 -Logistic Regression,Logistic Regression,0.9,0.9066666666666667,1.5642497785562741,0.3720685867269132,0.9,2.1368366984439215,100 -Logistic Regression,Logistic Regression,0.95,0.9477777777777777,1.8639185752213465,0.3720685867269132,0.95,2.4083334749081065,100 diff --git a/results/irm/lpq_coverage_metadata.csv b/results/irm/lpq_coverage_metadata.csv deleted file mode 100644 index 53aaefa..0000000 --- a/results/irm/lpq_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,lpq_coverage.py,2025-05-22 16:36:53,18251.836868286133,3.12.10 diff --git a/results/irm/lpq_effect_coverage.csv b/results/irm/lpq_effect_coverage.csv deleted file mode 100644 index b4f076b..0000000 --- a/results/irm/lpq_effect_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Clas.,LGBM Clas.,0.9,0.872,1.6181705726529205,0.40951487126584607,0.845,2.1354108341964264,200 -LGBM Clas.,LGBM Clas.,0.95,0.9159999999999999,1.928169164280202,0.40951487126584607,0.9,2.415503519370637,200 -LGBM Clas.,Logistic,0.9,0.8740000000000001,1.5610121253821851,0.3740351656285603,0.85,2.0636125204752434,200 -LGBM Clas.,Logistic,0.95,0.922,1.860060673514064,0.3740351656285603,0.9,2.3356640837390916,200 -Logistic,LGBM Clas.,0.9,0.88,1.5741042679593236,0.3725851701898653,0.85,2.068634959359497,200 -Logistic,LGBM Clas.,0.95,0.924,1.8756609235978434,0.3725851701898653,0.9,2.3413181297561683,200 -Logistic,Logistic,0.9,0.867,1.517966599775595,0.37223450094097055,0.85,1.9954916237204523,200 -Logistic,Logistic,0.95,0.92,1.808768766135729,0.37223450094097055,0.92,2.260577010587138,200 diff --git a/results/irm/lpq_metadata.csv b/results/irm/lpq_metadata.csv deleted file mode 100644 index 1ef72ff..0000000 --- a/results/irm/lpq_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,LPQCoverageSimulation,2025-06-05 13:42,14.852794400850932,3.12.9,scripts/irm/lpq_config.yml diff --git a/results/irm/pq_Y0_coverage.csv b/results/irm/pq_Y0_coverage.csv deleted file mode 100644 index 904a016..0000000 --- a/results/irm/pq_Y0_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Clas.,LGBM Clas.,0.9,0.8721428571428571,0.5855383193027298,0.15439049862379853,200 -LGBM Clas.,LGBM Clas.,0.95,0.932142857142857,0.6977119414135707,0.15439049862379853,200 -LGBM Clas.,Logistic,0.9,0.8607142857142857,0.4157006469047894,0.1135304583367824,200 -LGBM Clas.,Logistic,0.95,0.9264285714285714,0.4953378725822799,0.1135304583367824,200 -Logistic,LGBM Clas.,0.9,0.9007142857142857,0.57746009123863,0.1320561476852036,200 -Logistic,LGBM Clas.,0.95,0.9614285714285714,0.6880861389682303,0.1320561476852036,200 -Logistic,Logistic,0.9,0.8892857142857143,0.40888219424763206,0.10270056266342995,200 -Logistic,Logistic,0.95,0.9335714285714286,0.4872131851211298,0.10270056266342995,200 diff --git a/results/irm/pq_Y1_coverage.csv b/results/irm/pq_Y1_coverage.csv deleted file mode 100644 index 59ce777..0000000 --- a/results/irm/pq_Y1_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM Clas.,LGBM Clas.,0.9,0.9135714285714286,0.2547786121622827,0.06025439826660347,200 -LGBM Clas.,LGBM Clas.,0.95,0.9635714285714286,0.30358744126957204,0.06025439826660347,200 -LGBM Clas.,Logistic,0.9,0.925,0.23468112272452962,0.055254012231200356,200 -LGBM Clas.,Logistic,0.95,0.9621428571428571,0.27963980554548934,0.055254012231200356,200 -Logistic,LGBM Clas.,0.9,0.9292857142857143,0.25306018928392865,0.05756351160374336,200 -Logistic,LGBM Clas.,0.95,0.9728571428571429,0.30153981411503566,0.05756351160374336,200 -Logistic,Logistic,0.9,0.9235714285714286,0.23576437773394143,0.05403824556407575,200 -Logistic,Logistic,0.95,0.9721428571428571,0.2809305835027078,0.05403824556407575,200 diff --git a/results/irm/pq_config.yml b/results/irm/pq_config.yml deleted file mode 100644 index e106878..0000000 --- a/results/irm/pq_config.yml +++ /dev/null @@ -1,50 +0,0 @@ -simulation_parameters: - repetitions: 200 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 5000 - dim_x: - - 5 -learner_definitions: - logit: &id001 - name: Logistic - lgbmc: &id002 - name: LGBM Clas. - params: - n_estimators: 200 - learning_rate: 0.05 - num_leaves: 15 - max_depth: 5 - min_child_samples: 10 - subsample: 0.9 - colsample_bytree: 0.9 - reg_alpha: 0.0 - reg_lambda: 0.1 - random_state: 42 -dml_parameters: - tau_vec: - - - 0.2 - - 0.3 - - 0.4 - - 0.5 - - 0.6 - - 0.7 - - 0.8 - trimming_threshold: - - 0.01 - learners: - - ml_g: *id001 - ml_m: *id001 - - ml_g: *id002 - ml_m: *id002 - - ml_g: *id002 - ml_m: *id001 - - ml_g: *id001 - ml_m: *id002 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/irm/pq_coverage_metadata.csv b/results/irm/pq_coverage_metadata.csv deleted file mode 100644 index 4074d69..0000000 --- a/results/irm/pq_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,pq_coverage.py,2025-05-22 16:20:49,17287.969739675522,3.12.10 diff --git a/results/irm/pq_coverage_pq0.csv b/results/irm/pq_coverage_pq0.csv deleted file mode 100644 index e7b946a..0000000 --- a/results/irm/pq_coverage_pq0.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,0.9,0.8823076923076922,0.5804011224570385,0.14917558900311645,100 -LGBM,LGBM,0.95,0.9338461538461539,0.6915905938151775,0.14917558900311645,100 -LGBM,Logistic Regression,0.9,0.8115384615384617,0.38610406439934963,0.11426502373246265,100 -LGBM,Logistic Regression,0.95,0.8869230769230769,0.4600713693350327,0.11426502373246265,100 -Logistic Regression,LGBM,0.9,0.8869230769230769,0.5879335180942487,0.15107204460433907,100 -Logistic Regression,LGBM,0.95,0.9415384615384617,0.7005659968080872,0.15107204460433907,100 -Logistic Regression,Logistic Regression,0.9,0.8223076923076923,0.3894908707564202,0.11249469872415391,100 -Logistic Regression,Logistic Regression,0.95,0.9015384615384616,0.4641069980218067,0.11249469872415391,100 diff --git a/results/irm/pq_coverage_pq1.csv b/results/irm/pq_coverage_pq1.csv deleted file mode 100644 index ab97622..0000000 --- a/results/irm/pq_coverage_pq1.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,0.9,0.9153846153846155,0.2504138111093655,0.058637832346116046,100 -LGBM,LGBM,0.95,0.9623076923076923,0.298386460025268,0.058637832346116046,100 -LGBM,Logistic Regression,0.9,0.9138461538461539,0.2294851617480571,0.053811638122637194,100 -LGBM,Logistic Regression,0.95,0.9623076923076923,0.273448436166418,0.053811638122637194,100 -Logistic Regression,LGBM,0.9,0.9192307692307692,0.25410039964172587,0.059350250451121786,100 -Logistic Regression,LGBM,0.95,0.9607692307692308,0.3027793012063014,0.059350250451121786,100 -Logistic Regression,Logistic Regression,0.9,0.8976923076923078,0.23093621538720735,0.05722710381019568,100 -Logistic Regression,Logistic Regression,0.95,0.9538461538461539,0.2751774732222205,0.05722710381019568,100 diff --git a/results/irm/pq_coverage_qte.csv b/results/irm/pq_coverage_qte.csv deleted file mode 100644 index c1c85e9..0000000 --- a/results/irm/pq_coverage_qte.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM,LGBM,0.9,0.8823076923076922,0.6176207568284253,0.15519922876616388,0.84,0.9336715877443045,100 -LGBM,LGBM,0.95,0.9392307692307692,0.7359405236146267,0.15519922876616388,0.91,1.0306538899948843,100 -LGBM,Logistic Regression,0.9,0.8261538461538461,0.4257458252181111,0.1226898281791693,0.78,0.6459797086090959,100 -LGBM,Logistic Regression,0.95,0.9107692307692308,0.5073074408099907,0.1226898281791693,0.84,0.7142375039945987,100 -Logistic Regression,LGBM,0.9,0.8930769230769231,0.6286198118927271,0.1592095091097193,0.87,0.9308233463178209,100 -Logistic Regression,LGBM,0.95,0.9476923076923077,0.7490467060960181,0.1592095091097193,0.92,1.029300136308572,100 -Logistic Regression,Logistic Regression,0.9,0.8415384615384616,0.43446715078562453,0.12422823365772839,0.8,0.6474624649583857,100 -Logistic Regression,Logistic Regression,0.95,0.9123076923076923,0.5176995411949078,0.12422823365772839,0.86,0.719846486999326,100 diff --git a/results/irm/pq_effect_coverage.csv b/results/irm/pq_effect_coverage.csv deleted file mode 100644 index 2723ea4..0000000 --- a/results/irm/pq_effect_coverage.csv +++ /dev/null @@ -1,9 +0,0 @@ -Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Clas.,LGBM Clas.,0.9,0.8721428571428571,0.6250811142351042,0.16391196246394876,0.83,0.8938663559093165,200 -LGBM Clas.,LGBM Clas.,0.95,0.9328571428571428,0.74483008776143,0.16391196246394876,0.91,0.9951285879711892,200 -LGBM Clas.,Logistic,0.9,0.8664285714285714,0.4563475824127607,0.1242769519340373,0.825,0.6552349151667995,200 -LGBM Clas.,Logistic,0.95,0.927142857142857,0.5437716835744456,0.1242769519340373,0.905,0.7290641682104055,200 -Logistic,LGBM Clas.,0.9,0.92,0.6192520613043571,0.14050842467602845,0.905,0.873815817039262,200 -Logistic,LGBM Clas.,0.95,0.9585714285714286,0.7378843427899359,0.14050842467602845,0.94,0.97537292218002,200 -Logistic,Logistic,0.9,0.8907142857142857,0.4547624845968767,0.11573164990154354,0.88,0.6436547419121843,200 -Logistic,Logistic,0.95,0.9385714285714286,0.541882923030528,0.11573164990154354,0.94,0.7176332662822544,200 diff --git a/results/irm/pq_metadata.csv b/results/irm/pq_metadata.csv deleted file mode 100644 index ccb611e..0000000 --- a/results/irm/pq_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,PQCoverageSimulation,2025-06-05 12:51,16.240616850058238,3.12.9,scripts/irm/pq_config.yml diff --git a/results/irm/ssm_mar_ate_coverage.csv b/results/irm/ssm_mar_ate_coverage.csv deleted file mode 100644 index 1bb3c80..0000000 --- a/results/irm/ssm_mar_ate_coverage.csv +++ /dev/null @@ -1,17 +0,0 @@ -Learner g,Learner m,Learner pi,score,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,LGBM,missing-at-random,0.9,0.934,5.894613599209654,1.524603484598883,1000 -LGBM,LGBM,LGBM,missing-at-random,0.95,0.981,7.023865326329001,1.524603484598883,1000 -LGBM,LGBM,Logistic,missing-at-random,0.9,0.927,2.581588867556288,0.6151192173080174,1000 -LGBM,LGBM,Logistic,missing-at-random,0.95,0.973,3.0761528687981836,0.6151192173080174,1000 -LGBM,Logistic,LGBM,missing-at-random,0.9,0.945,2.5756414334122413,0.6542029876050892,1000 -LGBM,Logistic,LGBM,missing-at-random,0.95,0.985,3.0690660639106513,0.6542029876050892,1000 -LGBM,Logistic,Logistic,missing-at-random,0.9,0.914,0.5399737109966929,0.12672360617482703,1000 -LGBM,Logistic,Logistic,missing-at-random,0.95,0.958,0.6434183618596122,0.12672360617482703,1000 -Lasso,LGBM,LGBM,missing-at-random,0.9,0.939,5.030966633759897,1.2700343898139361,1000 -Lasso,LGBM,LGBM,missing-at-random,0.95,0.981,5.994766493519136,1.2700343898139361,1000 -Lasso,LGBM,Logistic,missing-at-random,0.9,0.887,2.3414252826432578,0.6221402191258447,1000 -Lasso,LGBM,Logistic,missing-at-random,0.95,0.955,2.78998030662317,0.6221402191258447,1000 -Lasso,Logistic,LGBM,missing-at-random,0.9,0.919,2.2995632695758177,0.6130089902400226,1000 -Lasso,Logistic,LGBM,missing-at-random,0.95,0.97,2.7400986414171338,0.6130089902400226,1000 -Lasso,Logistic,Logistic,missing-at-random,0.9,0.897,0.5116626905293399,0.12267262949094253,1000 -Lasso,Logistic,Logistic,missing-at-random,0.95,0.961,0.6096837002627445,0.12267262949094253,1000 diff --git a/results/irm/ssm_mar_ate_coverage_metadata.csv b/results/irm/ssm_mar_ate_coverage_metadata.csv deleted file mode 100644 index 1653aa7..0000000 --- a/results/irm/ssm_mar_ate_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,ssm_mar_ate_coverage.py,2025-05-22 12:57:04,5067.488474369049,3.12.10 diff --git a/results/irm/ssm_nonignorable_ate_coverage.csv b/results/irm/ssm_nonignorable_ate_coverage.csv deleted file mode 100644 index 7ba36c8..0000000 --- a/results/irm/ssm_nonignorable_ate_coverage.csv +++ /dev/null @@ -1,17 +0,0 @@ -Learner g,Learner m,Learner pi,score,level,Coverage,CI Length,Bias,repetition -LGBM,LGBM,LGBM,nonignorable,0.9,0.919,13.007296321798503,3.6668819438868456,1000 -LGBM,LGBM,LGBM,nonignorable,0.95,0.966,15.499149534791721,3.6668819438868456,1000 -LGBM,LGBM,Logistic,nonignorable,0.9,0.918,4.832148171492935,1.326909933210586,1000 -LGBM,LGBM,Logistic,nonignorable,0.95,0.974,5.757859683624388,1.326909933210586,1000 -LGBM,Logistic,LGBM,nonignorable,0.9,0.897,4.592630929679517,1.2319933070953262,1000 -LGBM,Logistic,LGBM,nonignorable,0.95,0.959,5.472457286755355,1.2319933070953262,1000 -LGBM,Logistic,Logistic,nonignorable,0.9,0.867,2.5301811727355124,0.727808897144389,1000 -LGBM,Logistic,Logistic,nonignorable,0.95,0.94,3.014896822226011,0.727808897144389,1000 -Lasso,LGBM,LGBM,nonignorable,0.9,0.931,10.203902842326483,2.892343371671614,1000 -Lasso,LGBM,LGBM,nonignorable,0.95,0.975,12.158700169432056,2.892343371671614,1000 -Lasso,LGBM,Logistic,nonignorable,0.9,0.917,7.0625497859220765,2.0505032981783877,1000 -Lasso,LGBM,Logistic,nonignorable,0.95,0.974,8.415547129919013,2.0505032981783877,1000 -Lasso,Logistic,LGBM,nonignorable,0.9,0.894,4.170596833405628,1.1867597841647146,1000 -Lasso,Logistic,LGBM,nonignorable,0.95,0.95,4.969572643774818,1.1867597841647146,1000 -Lasso,Logistic,Logistic,nonignorable,0.9,0.87,1.993316632836819,0.5662899386624597,1000 -Lasso,Logistic,Logistic,nonignorable,0.95,0.928,2.375183266237269,0.5662899386624597,1000 diff --git a/results/irm/ssm_nonignorable_ate_coverage_metadata.csv b/results/irm/ssm_nonignorable_ate_coverage_metadata.csv deleted file mode 100644 index cd143b6..0000000 --- a/results/irm/ssm_nonignorable_ate_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,ssm_nonignorable_ate_coverage.py,2025-05-22 13:29:53,7036.344848871231,3.12.10 diff --git a/results/plm/pliv_late_config.yml b/results/plm/pliv_late_config.yml deleted file mode 100644 index 9863dcf..0000000 --- a/results/plm/pliv_late_config.yml +++ /dev/null @@ -1,57 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 0.5 - n_obs: - - 500 - dim_x: - - 20 - dim_z: - - 1 -learner_definitions: - lasso: &id001 - name: LassoCV - rf: &id002 - name: RF Regr. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id001 - ml_r: *id001 - - ml_g: *id002 - ml_m: *id002 - ml_r: *id002 - - ml_g: *id001 - ml_m: *id002 - ml_r: *id002 - - ml_g: *id002 - ml_m: *id001 - ml_r: *id002 - - ml_g: *id002 - ml_m: *id002 - ml_r: *id001 - - ml_g: *id001 - ml_m: *id001 - ml_r: *id002 - - ml_g: *id002 - ml_m: *id001 - ml_r: *id001 - - ml_g: *id001 - ml_m: *id002 - ml_r: *id001 - score: - - partialling out - - IV-type -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/plm/pliv_late_coverage.csv b/results/plm/pliv_late_coverage.csv deleted file mode 100644 index dabc338..0000000 --- a/results/plm/pliv_late_coverage.csv +++ /dev/null @@ -1,33 +0,0 @@ -Learner g,Learner m,Learner r,Score,level,Coverage,CI Length,Bias,repetition -LassoCV,LassoCV,LassoCV,IV-type,0.9,0.7766143106457243,0.22989223679605483,0.07287153111653735,573 -LassoCV,LassoCV,LassoCV,IV-type,0.95,0.8534031413612565,0.2739334960039667,0.07287153111653735,573 -LassoCV,LassoCV,LassoCV,partialling out,0.9,0.881326352530541,0.29700780857260933,0.07271080850444225,573 -LassoCV,LassoCV,LassoCV,partialling out,0.95,0.9476439790575916,0.35390663241468806,0.07271080850444225,573 -LassoCV,LassoCV,RF Regr.,IV-type,0.9,0.7975567190226877,0.23015212335471688,0.07216217057387413,573 -LassoCV,LassoCV,RF Regr.,IV-type,0.95,0.8691099476439791,0.27424316993889775,0.07216217057387413,573 -LassoCV,LassoCV,RF Regr.,partialling out,0.9,0.8987783595113438,0.30254607837243314,0.07481695240309204,573 -LassoCV,LassoCV,RF Regr.,partialling out,0.95,0.9511343804537522,0.3605058879146674,0.07481695240309204,573 -LassoCV,RF Regr.,LassoCV,IV-type,0.9,0.8289703315881326,0.2609713252114788,0.075760272295832,573 -LassoCV,RF Regr.,LassoCV,IV-type,0.95,0.8830715532286213,0.3109665139992902,0.075760272295832,573 -LassoCV,RF Regr.,LassoCV,partialling out,0.9,0.900523560209424,0.31348377219475954,0.07615050625397395,573 -LassoCV,RF Regr.,LassoCV,partialling out,0.95,0.9476439790575916,0.3735389539665188,0.07615050625397395,573 -LassoCV,RF Regr.,RF Regr.,IV-type,0.9,0.8342059336823735,0.2618973110694574,0.07635382529994407,573 -LassoCV,RF Regr.,RF Regr.,IV-type,0.95,0.9022687609075044,0.3120698942041265,0.07635382529994407,573 -LassoCV,RF Regr.,RF Regr.,partialling out,0.9,0.900523560209424,0.2969325926809845,0.08064896780776748,573 -LassoCV,RF Regr.,RF Regr.,partialling out,0.95,0.9493891797556719,0.35381700715184744,0.08064896780776748,573 -RF Regr.,LassoCV,LassoCV,IV-type,0.9,0.7888307155322862,0.2399734669407101,0.07565892605977774,573 -RF Regr.,LassoCV,LassoCV,IV-type,0.95,0.8603839441535777,0.28594602263833013,0.07565892605977774,573 -RF Regr.,LassoCV,LassoCV,partialling out,0.9,0.8952879581151832,0.32748151131844716,0.08012239409438285,573 -RF Regr.,LassoCV,LassoCV,partialling out,0.95,0.9476439790575916,0.39021828889206017,0.08012239409438285,573 -RF Regr.,LassoCV,RF Regr.,IV-type,0.9,0.7975567190226877,0.23928903589865372,0.07494587967257611,573 -RF Regr.,LassoCV,RF Regr.,IV-type,0.95,0.8568935427574171,0.2851304727496643,0.07494587967257611,573 -RF Regr.,LassoCV,RF Regr.,partialling out,0.9,0.8952879581151832,0.3140855171898558,0.07607988220815401,573 -RF Regr.,LassoCV,RF Regr.,partialling out,0.95,0.9424083769633508,0.3742559773532452,0.07607988220815401,573 -RF Regr.,RF Regr.,LassoCV,IV-type,0.9,0.8132635253054101,0.2731895612733841,0.07830955419542239,573 -RF Regr.,RF Regr.,LassoCV,IV-type,0.95,0.8708551483420593,0.3255254402426704,0.07830955419542239,573 -RF Regr.,RF Regr.,LassoCV,partialling out,0.9,0.7801047120418848,0.3462668556955946,0.10647619537980385,573 -RF Regr.,RF Regr.,LassoCV,partialling out,0.95,0.8481675392670157,0.41260240734072084,0.10647619537980385,573 -RF Regr.,RF Regr.,RF Regr.,IV-type,0.9,0.8150087260034904,0.2716740654611092,0.07804596547692132,573 -RF Regr.,RF Regr.,RF Regr.,IV-type,0.95,0.8778359511343804,0.3237196156014316,0.07804596547692132,573 -RF Regr.,RF Regr.,RF Regr.,partialling out,0.9,0.8691099476439791,0.2991970298118071,0.07619100964756245,573 -RF Regr.,RF Regr.,RF Regr.,partialling out,0.95,0.9109947643979057,0.356515250417355,0.07619100964756245,573 diff --git a/results/plm/pliv_late_coverage_metadata.csv b/results/plm/pliv_late_coverage_metadata.csv deleted file mode 100644 index 7b97bb6..0000000 --- a/results/plm/pliv_late_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,pliv_late_coverage.py,2025-05-22 16:55:09,19353.43654370308,3.12.10 diff --git a/results/plm/pliv_late_metadata.csv b/results/plm/pliv_late_metadata.csv deleted file mode 100644 index ea4b643..0000000 --- a/results/plm/pliv_late_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,PLIVLATECoverageSimulation,2025-05-28 17:55,333.0460760434469,3.12.3,scripts/plm/pliv_late_config.yml diff --git a/results/plm/plr_ate_config.yml b/results/plm/plr_ate_config.yml deleted file mode 100644 index d504ba6..0000000 --- a/results/plm/plr_ate_config.yml +++ /dev/null @@ -1,50 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 0.5 - n_obs: - - 500 - dim_x: - - 20 -learner_definitions: - lasso: &id001 - name: LassoCV - rf: &id002 - name: RF Regr. - params: - n_estimators: 200 - max_features: 10 - max_depth: 5 - min_samples_leaf: 20 - lgbm: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id001 - - ml_g: *id002 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id002 - ml_m: *id001 - - ml_g: *id003 - ml_m: *id003 - - ml_g: *id003 - ml_m: *id001 - - ml_g: *id001 - ml_m: *id003 - score: - - partialling out - - IV-type -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/plm/plr_ate_coverage.csv b/results/plm/plr_ate_coverage.csv deleted file mode 100644 index 6049e48..0000000 --- a/results/plm/plr_ate_coverage.csv +++ /dev/null @@ -1,29 +0,0 @@ -Learner g,Learner m,Score,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Regr.,IV-type,0.9,0.883,0.15961877895273296,0.04068372543442765,1000 -LGBM Regr.,LGBM Regr.,IV-type,0.95,0.933,0.1901975062567962,0.04068372543442765,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.9,0.817,0.14642066864789335,0.041735779410315844,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.95,0.897,0.17447098783739418,0.041735779410315844,1000 -LGBM Regr.,LassoCV,IV-type,0.9,0.888,0.14828359010688336,0.03751445724526263,1000 -LGBM Regr.,LassoCV,IV-type,0.95,0.944,0.17669079567063856,0.03751445724526263,1000 -LGBM Regr.,LassoCV,partialling out,0.9,0.904,0.1593118503428552,0.03940645884290757,1000 -LGBM Regr.,LassoCV,partialling out,0.95,0.946,0.1898317782605001,0.03940645884290757,1000 -LassoCV,LGBM Regr.,IV-type,0.9,0.888,0.1501213938923901,0.037389002407502744,1000 -LassoCV,LGBM Regr.,IV-type,0.95,0.934,0.17888067394991158,0.037389002407502744,1000 -LassoCV,LGBM Regr.,partialling out,0.9,0.49,0.13868359580763356,0.07134433277798699,1000 -LassoCV,LGBM Regr.,partialling out,0.95,0.628,0.16525169691436084,0.07134433277798699,1000 -LassoCV,LassoCV,IV-type,0.9,0.879,0.1395848933214119,0.03508684359283747,1000 -LassoCV,LassoCV,IV-type,0.95,0.936,0.16632565914262007,0.03508684359283747,1000 -LassoCV,LassoCV,partialling out,0.9,0.895,0.14655835450119167,0.034987652787981494,1000 -LassoCV,LassoCV,partialling out,0.95,0.944,0.17463505065077992,0.034987652787981494,1000 -LassoCV,RF Regr.,IV-type,0.9,0.859,0.1302363383352069,0.03561064803310554,1000 -LassoCV,RF Regr.,IV-type,0.95,0.915,0.15518616880729266,0.03561064803310554,1000 -LassoCV,RF Regr.,partialling out,0.9,0.781,0.1426668302933166,0.04651298597227526,1000 -LassoCV,RF Regr.,partialling out,0.95,0.869,0.16999801355068422,0.04651298597227526,1000 -RF Regr.,LassoCV,IV-type,0.9,0.885,0.14079639422615867,0.034650404336531236,1000 -RF Regr.,LassoCV,IV-type,0.95,0.936,0.16776925150952393,0.034650404336531236,1000 -RF Regr.,LassoCV,partialling out,0.9,0.888,0.15051167153657427,0.036505990374521784,1000 -RF Regr.,LassoCV,partialling out,0.95,0.948,0.17934571844629627,0.036505990374521784,1000 -RF Regr.,RF Regr.,IV-type,0.9,0.856,0.13145465044384871,0.03623204217504653,1000 -RF Regr.,RF Regr.,IV-type,0.95,0.909,0.1566378772242249,0.03623204217504653,1000 -RF Regr.,RF Regr.,partialling out,0.9,0.886,0.14234151080307436,0.03605936619645565,1000 -RF Regr.,RF Regr.,partialling out,0.95,0.931,0.1696103714688016,0.03605936619645565,1000 diff --git a/results/plm/plr_ate_coverage_metadata.csv b/results/plm/plr_ate_coverage_metadata.csv deleted file mode 100644 index f234205..0000000 --- a/results/plm/plr_ate_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,plr_ate_coverage.py,2025-05-22 13:19:23,6440.37045955658,3.12.3 diff --git a/results/plm/plr_ate_metadata.csv b/results/plm/plr_ate_metadata.csv deleted file mode 100644 index 9eb81ce..0000000 --- a/results/plm/plr_ate_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,PLRATECoverageSimulation,2025-05-28 15:36,194.11949107646942,3.12.3,scripts/plm/plr_ate_config.yml diff --git a/results/plm/plr_ate_sensitivity_config.yml b/results/plm/plr_ate_sensitivity_config.yml deleted file mode 100644 index f575860..0000000 --- a/results/plm/plr_ate_sensitivity_config.yml +++ /dev/null @@ -1,49 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 0.5 - n_obs: - - 1000 -learner_definitions: - lasso: &id001 - name: LassoCV - rf: &id002 - name: RF Regr. - params: - n_estimators: 200 - max_features: 10 - max_depth: 5 - min_samples_leaf: 2 - lgbm: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.05 - min_child_samples: 5 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id001 - - ml_g: *id002 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id002 - ml_m: *id001 - - ml_g: *id003 - ml_m: *id003 - - ml_g: *id003 - ml_m: *id001 - - ml_g: *id001 - ml_m: *id003 - score: - - partialling out - - IV-type -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/plm/plr_ate_sensitivity_coverage.csv b/results/plm/plr_ate_sensitivity_coverage.csv deleted file mode 100644 index 434f452..0000000 --- a/results/plm/plr_ate_sensitivity_coverage.csv +++ /dev/null @@ -1,29 +0,0 @@ -Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition -LGBM Regr.,LGBM Regr.,IV-type,0.9,0.385,1.4663299122305629,0.7925421322234831,1.0,0.985,0.10725651393439574,0.03326460518365192,1.4913903235634014,0.2926564371041883,1000 -LGBM Regr.,LGBM Regr.,IV-type,0.95,0.576,1.7472398579028525,0.7925421322234831,1.0,0.996,0.10725651393439574,0.0186351412063672,1.4913903235634014,0.2926564371041883,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.9,0.182,1.1497967634349104,0.7729578872365019,1.0,0.97,0.10474768112597262,0.04431238181012191,1.4751597629464743,0.2712920302703979,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.95,0.318,1.3700673476033447,0.7729578872365019,1.0,0.995,0.10474768112597262,0.030097055769805838,1.4751597629464743,0.2712920302703979,1000 -LGBM Regr.,LassoCV,IV-type,0.9,0.016,1.5675897053004566,1.4881399909307544,1.0,0.349,0.18835258787429676,0.11061603940247629,2.22500572268596,0.7547108921538096,1000 -LGBM Regr.,LassoCV,IV-type,0.95,0.049,1.8678983434039613,1.4881399909307544,1.0,0.589,0.18835258787429676,0.08965505199962495,2.22500572268596,0.7547108921538096,1000 -LGBM Regr.,LassoCV,partialling out,0.9,0.033,1.5608447161075107,1.3368140143494018,1.0,0.538,0.17297048595824702,0.09456285640366094,2.0670435317928293,0.609504417265797,1000 -LGBM Regr.,LassoCV,partialling out,0.95,0.093,1.8598611930595945,1.3368140143494018,1.0,0.767,0.17297048595824702,0.07389205339318292,2.0670435317928293,0.609504417265797,1000 -LassoCV,LGBM Regr.,IV-type,0.9,0.73,2.5656781122758883,1.0677570591023937,1.0,1.0,0.0711666272086956,0.011464853941823843,2.578295926341774,0.5631859759280742,1000 -LassoCV,LGBM Regr.,IV-type,0.95,0.891,3.057194034525367,1.0677570591023937,1.0,1.0,0.0711666272086956,0.003910618305845746,2.578295926341774,0.5631859759280742,1000 -LassoCV,LGBM Regr.,partialling out,0.9,0.641,2.027924924331959,0.9237208344896396,1.0,1.0,0.06130931642754562,0.011850855336480514,2.4482326562106262,0.6449506923859979,1000 -LassoCV,LGBM Regr.,partialling out,0.95,0.857,2.416421589079803,0.9237208344896396,1.0,1.0,0.06130931642754562,0.004197479989729969,2.4482326562106262,0.6449506923859979,1000 -LassoCV,LassoCV,IV-type,0.9,0.0,2.6390903058880437,4.873595405404249,1.0,0.0,0.2835323346090944,0.2235995852752004,6.403190100985858,3.344000709822638,1000 -LassoCV,LassoCV,IV-type,0.95,0.0,3.144670058621553,4.873595405404249,1.0,0.0,0.2835323346090944,0.20668125629682246,6.403190100985858,3.344000709822638,1000 -LassoCV,LassoCV,partialling out,0.9,0.0,2.6512157416595166,4.8742982878654155,1.0,0.0,0.28358055454345027,0.22344281290628232,6.403739456275626,3.3448571194552046,1000 -LassoCV,LassoCV,partialling out,0.95,0.0,3.159118406498553,4.8742982878654155,1.0,0.0,0.28358055454345027,0.20645960241254674,6.403739456275626,3.3448571194552046,1000 -LassoCV,RF Regr.,IV-type,0.9,0.033,2.2828984031735264,1.7549860217797124,1.0,0.992,0.10540674548204913,0.05179748157769331,3.4080328923671543,0.34365428027936945,1000 -LassoCV,RF Regr.,IV-type,0.95,0.117,2.720241228319411,1.7549860217797124,1.0,1.0,0.10540674548204913,0.03703505470417302,3.4080328923671543,0.34365428027936945,1000 -LassoCV,RF Regr.,partialling out,0.9,0.037,2.3209438874895922,1.7056607970976996,1.0,0.998,0.10089770825684756,0.0472619615205151,3.386769951832876,0.32870269184314155,1000 -LassoCV,RF Regr.,partialling out,0.95,0.147,2.7655752190235416,1.7056607970976996,1.0,1.0,0.10089770825684756,0.03263938744702106,3.386769951832876,0.32870269184314155,1000 -RF Regr.,LassoCV,IV-type,0.9,0.002,2.0336458826639054,2.5168441311266254,1.0,0.15,0.18897217034656957,0.13108215640403256,3.7726967118723413,1.2630723489756102,1000 -RF Regr.,LassoCV,IV-type,0.95,0.004,2.4232385313924456,2.5168441311266254,1.0,0.296,0.18897217034656957,0.11456339186569718,3.7726967118723413,1.2630723489756102,1000 -RF Regr.,LassoCV,partialling out,0.9,0.004,2.0042262177980654,2.2020124873834774,1.0,0.326,0.1673566906972531,0.10968485912427584,3.461182283094903,0.945607640026297,1000 -RF Regr.,LassoCV,partialling out,0.95,0.013,2.388182838515291,2.2020124873834774,1.0,0.586,0.1673566906972531,0.093218820211599,3.461182283094903,0.945607640026297,1000 -RF Regr.,RF Regr.,IV-type,0.9,0.017,1.832711921828132,1.666112390968602,1.0,0.903,0.12210557487205914,0.07016425910777375,2.9998575741792273,0.43566994445193274,1000 -RF Regr.,RF Regr.,IV-type,0.95,0.06,2.1838109494750206,1.666112390968602,1.0,0.967,0.12210557487205914,0.05560391034447919,2.9998575741792273,0.43566994445193274,1000 -RF Regr.,RF Regr.,partialling out,0.9,0.016,1.8212178132592944,1.6223242047256947,1.0,0.919,0.1187876211842705,0.0672786914116626,2.9607373471379326,0.4017526397593657,1000 -RF Regr.,RF Regr.,partialling out,0.95,0.06,2.170114874359165,1.6223242047256947,1.0,0.983,0.1187876211842705,0.05284651175118434,2.9607373471379326,0.4017526397593657,1000 diff --git a/results/plm/plr_ate_sensitivity_metadata.csv b/results/plm/plr_ate_sensitivity_metadata.csv deleted file mode 100644 index d9b4047..0000000 --- a/results/plm/plr_ate_sensitivity_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,PLRATESensitivityCoverageSimulation,2025-05-28 16:12,229.2524726430575,3.12.3,scripts/plm/plr_ate_sensitivity_config.yml diff --git a/results/plm/plr_cate_config.yml b/results/plm/plr_cate_config.yml deleted file mode 100644 index 20ce744..0000000 --- a/results/plm/plr_cate_config.yml +++ /dev/null @@ -1,52 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 500 - p: - - 10 - support_size: - - 5 - n_x: - - 1 -learner_definitions: - lasso: &id001 - name: LassoCV - rf: &id002 - name: RF Regr. - params: - n_estimators: 200 - max_features: 10 - max_depth: 5 - min_samples_leaf: 2 - lgbm: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id001 - - ml_g: *id002 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id002 - ml_m: *id001 - - ml_g: *id003 - ml_m: *id003 - - ml_g: *id003 - ml_m: *id001 - - ml_g: *id001 - ml_m: *id003 - score: - - partialling out - - IV-type -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/plm/plr_cate_coverage.csv b/results/plm/plr_cate_coverage.csv deleted file mode 100644 index bf7168b..0000000 --- a/results/plm/plr_cate_coverage.csv +++ /dev/null @@ -1,29 +0,0 @@ -Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Regr.,IV-type,0.9,0.81356,0.3481406151640484,0.10430800140217082,0.983,0.8752657879172515,1000 -LGBM Regr.,LGBM Regr.,IV-type,0.95,0.88477,0.4148351294587775,0.10430800140217082,0.982,0.8732288511102869,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.9,0.74012,0.4560685341081391,0.15783062735200043,0.977,1.14744422301648,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.95,0.8299500000000001,0.5434391770109168,0.15783062735200043,0.98,1.1454708849896886,1000 -LGBM Regr.,LassoCV,IV-type,0.9,0.88352,0.36584955467139657,0.09269456203727587,0.997,0.9190652139310769,1000 -LGBM Regr.,LassoCV,IV-type,0.95,0.93592,0.4359366323950171,0.09269456203727587,0.997,0.9182701523375287,1000 -LGBM Regr.,LassoCV,partialling out,0.9,0.8598600000000001,0.6464984966564067,0.17497861883142152,0.997,1.6227149811912818,1000 -LGBM Regr.,LassoCV,partialling out,0.95,0.9182,0.7703504729805534,0.17497861883142152,0.993,1.6256277670143164,1000 -LassoCV,LGBM Regr.,IV-type,0.9,0.76988,0.35642448629422974,0.11632423194012062,0.967,0.8974918718098766,1000 -LassoCV,LGBM Regr.,IV-type,0.95,0.85114,0.42470597073102984,0.11632423194012062,0.969,0.8968672652695018,1000 -LassoCV,LGBM Regr.,partialling out,0.9,0.11622,0.5619854399953333,0.5256323682345825,0.234,1.410142913244516,1000 -LassoCV,LGBM Regr.,partialling out,0.95,0.17595,0.6696469547069583,0.5256323682345825,0.229,1.40931387611625,1000 -LassoCV,LassoCV,IV-type,0.9,0.89151,0.36264059342442617,0.08911225886649077,0.999,0.9175790450518392,1000 -LassoCV,LassoCV,IV-type,0.95,0.9436899999999999,0.432112919227601,0.08911225886649077,0.997,0.9122947604257755,1000 -LassoCV,LassoCV,partialling out,0.9,0.88915,0.37658641629597944,0.09294192591629252,0.998,0.9493314635761626,1000 -LassoCV,LassoCV,partialling out,0.95,0.9430700000000001,0.4487303921231547,0.09294192591629252,0.999,0.9492044628231284,1000 -LassoCV,RF Regr.,IV-type,0.9,0.8881699999999999,0.36007271468635116,0.08945011832697905,0.997,0.905729315492467,1000 -LassoCV,RF Regr.,IV-type,0.95,0.94083,0.42905310298570154,0.08945011832697905,0.996,0.905560466242843,1000 -LassoCV,RF Regr.,partialling out,0.9,0.75973,0.4327531492388262,0.14496239788299442,0.979,1.0861336481238588,1000 -LassoCV,RF Regr.,partialling out,0.95,0.8421900000000001,0.5156571823818642,0.14496239788299442,0.978,1.0839002162247489,1000 -RF Regr.,LassoCV,IV-type,0.9,0.88758,0.3483083251389444,0.08779327663792416,0.998,0.8779489030402857,1000 -RF Regr.,LassoCV,IV-type,0.95,0.94112,0.41503496821966074,0.08779327663792416,0.996,0.8735133292532407,1000 -RF Regr.,LassoCV,partialling out,0.9,0.86795,0.4443503476360394,0.11714250183161505,0.994,1.1172789302634005,1000 -RF Regr.,LassoCV,partialling out,0.95,0.92418,0.5294760966047857,0.11714250183161505,0.995,1.114769235628846,1000 -RF Regr.,RF Regr.,IV-type,0.9,0.8849,0.34393624819903923,0.08639122390266744,0.996,0.8665106551289745,1000 -RF Regr.,RF Regr.,IV-type,0.95,0.9396100000000001,0.40982531722127136,0.08639122390266744,0.996,0.8683144995935241,1000 -RF Regr.,RF Regr.,partialling out,0.9,0.88555,0.3841724761396707,0.09707379630217602,0.998,0.9672632389200293,1000 -RF Regr.,RF Regr.,partialling out,0.95,0.93972,0.45776973996212145,0.09707379630217602,0.999,0.9635850313374369,1000 diff --git a/results/plm/plr_cate_coverage_metadata.csv b/results/plm/plr_cate_coverage_metadata.csv deleted file mode 100644 index fe8d34a..0000000 --- a/results/plm/plr_cate_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,plr_cate_coverage.py,2025-05-22 12:47:29,4525.569060087204,3.12.3 diff --git a/results/plm/plr_cate_metadata.csv b/results/plm/plr_cate_metadata.csv deleted file mode 100644 index f90c6c2..0000000 --- a/results/plm/plr_cate_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,PLRCATECoverageSimulation,2025-05-28 15:29,186.339128780365,3.12.3,scripts/plm/plr_cate_config.yml diff --git a/results/plm/plr_gate_config.yml b/results/plm/plr_gate_config.yml deleted file mode 100644 index 20ce744..0000000 --- a/results/plm/plr_gate_config.yml +++ /dev/null @@ -1,52 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 500 - p: - - 10 - support_size: - - 5 - n_x: - - 1 -learner_definitions: - lasso: &id001 - name: LassoCV - rf: &id002 - name: RF Regr. - params: - n_estimators: 200 - max_features: 10 - max_depth: 5 - min_samples_leaf: 2 - lgbm: &id003 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id001 - - ml_g: *id002 - ml_m: *id002 - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id002 - ml_m: *id001 - - ml_g: *id003 - ml_m: *id003 - - ml_g: *id003 - ml_m: *id001 - - ml_g: *id001 - ml_m: *id003 - score: - - partialling out - - IV-type -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/plm/plr_gate_coverage.csv b/results/plm/plr_gate_coverage.csv deleted file mode 100644 index 90e8c35..0000000 --- a/results/plm/plr_gate_coverage.csv +++ /dev/null @@ -1,29 +0,0 @@ -Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Regr.,IV-type,0.9,0.792,0.3409717982379027,0.10939094977617905,0.993,0.8022444119321607,1000 -LGBM Regr.,LGBM Regr.,IV-type,0.95,0.868,0.4062929572212102,0.10939094977617905,0.993,0.8004798193792318,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.9,0.7256666666666667,0.41261199381065716,0.14296451918548386,0.97,0.9675570982673285,1000 -LGBM Regr.,LGBM Regr.,partialling out,0.95,0.815,0.49165751542098196,0.14296451918548386,0.967,0.9691480724040933,1000 -LGBM Regr.,LassoCV,IV-type,0.9,0.877,0.35826783725657413,0.09169163906741995,0.999,0.8408389172164787,1000 -LGBM Regr.,LassoCV,IV-type,0.95,0.93,0.42690245887919315,0.09169163906741995,0.997,0.8447866030999811,1000 -LGBM Regr.,LassoCV,partialling out,0.9,0.8436666666666667,0.5545701417184685,0.15552961423549327,0.998,1.3051628808444764,1000 -LGBM Regr.,LassoCV,partialling out,0.95,0.901,0.6608110818249359,0.15552961423549327,0.995,1.3025794190401572,1000 -LassoCV,LGBM Regr.,IV-type,0.9,0.7456666666666666,0.3540709326890836,0.12416752914751389,0.987,0.8320224393479907,1000 -LassoCV,LGBM Regr.,IV-type,0.95,0.837,0.42190153863677704,0.12416752914751389,0.984,0.8317500001409704,1000 -LassoCV,LGBM Regr.,partialling out,0.9,0.1333333333333333,0.48177803693340226,0.48575358485471176,0.177,1.1312945673131298,1000 -LassoCV,LGBM Regr.,partialling out,0.95,0.18,0.5740739391394702,0.48575358485471176,0.163,1.1319600186032173,1000 -LassoCV,LassoCV,IV-type,0.9,0.8926666666666666,0.35742311987476943,0.0870152370686674,1.0,0.8398941995619424,1000 -LassoCV,LassoCV,IV-type,0.95,0.9413333333333334,0.4258959160365205,0.0870152370686674,1.0,0.8405778234098288,1000 -LassoCV,LassoCV,partialling out,0.9,0.8856666666666666,0.3675924080229034,0.09140883729216352,0.999,0.8634618636354112,1000 -LassoCV,LassoCV,partialling out,0.95,0.937,0.4380133702538254,0.09140883729216352,0.998,0.8645135749451283,1000 -LassoCV,RF Regr.,IV-type,0.9,0.8906666666666666,0.35602270119404505,0.08734257475647278,1.0,0.8374639259045487,1000 -LassoCV,RF Regr.,IV-type,0.95,0.9416666666666667,0.4242272142550836,0.08734257475647278,0.999,0.836868604185174,1000 -LassoCV,RF Regr.,partialling out,0.9,0.738,0.40491199800883637,0.13642422484844158,0.983,0.9500817559029185,1000 -LassoCV,RF Regr.,partialling out,0.95,0.8273333333333334,0.4824824045142146,0.13642422484844158,0.983,0.9523261430293178,1000 -RF Regr.,LassoCV,IV-type,0.9,0.8773333333333334,0.34720295214031466,0.08839198383861967,0.998,0.8185421027515423,1000 -RF Regr.,LassoCV,IV-type,0.95,0.9343333333333333,0.41371783505273413,0.08839198383861967,0.998,0.8146669237329567,1000 -RF Regr.,LassoCV,partialling out,0.9,0.8533333333333334,0.41301433989509856,0.10966336398968128,0.996,0.9683790675299301,1000 -RF Regr.,LassoCV,partialling out,0.95,0.9136666666666666,0.49213694035089944,0.10966336398968128,0.998,0.9669097488144158,1000 -RF Regr.,RF Regr.,IV-type,0.9,0.8783333333333334,0.3444973770845564,0.08786209409395863,1.0,0.8103855381771613,1000 -RF Regr.,RF Regr.,IV-type,0.95,0.9303333333333333,0.4104939435283654,0.08786209409395863,0.998,0.8085416729445144,1000 -RF Regr.,RF Regr.,partialling out,0.9,0.8793333333333334,0.3693751123936641,0.0927826393282892,0.999,0.8668280374940234,1000 -RF Regr.,RF Regr.,partialling out,0.95,0.9333333333333333,0.44013759353091364,0.0927826393282892,0.998,0.8658046899691123,1000 diff --git a/results/plm/plr_gate_coverage_metadata.csv b/results/plm/plr_gate_coverage_metadata.csv deleted file mode 100644 index 334d6ba..0000000 --- a/results/plm/plr_gate_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.10.dev0,plr_gate_coverage.py,2025-05-22 11:58:55,1613.3821394443512,3.12.3 diff --git a/results/plm/plr_gate_metadata.csv b/results/plm/plr_gate_metadata.csv deleted file mode 100644 index ef66b20..0000000 --- a/results/plm/plr_gate_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,PLRGATECoverageSimulation,2025-05-28 15:27,184.28431547085444,3.12.3,scripts/plm/plr_gate_config.yml diff --git a/results/rdd/rdd_fuzzy_config.yml b/results/rdd/rdd_fuzzy_config.yml deleted file mode 100644 index 1c010bd..0000000 --- a/results/rdd/rdd_fuzzy_config.yml +++ /dev/null @@ -1,63 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 2000 - fuzzy: - - true - cutoff: - - 0.0 -learner_definitions: - lgbmr: &id001 - name: LGBM Regr. - params: - n_estimators: 200 - learning_rate: 0.02 - max_depth: 5 - lgbmc: &id002 - name: LGBM Clas. - params: - n_estimators: 200 - learning_rate: 0.02 - max_depth: 5 - global_linear: &id003 - name: Global Linear - global_logistic: &id004 - name: Global Logistic - local_linear: &id005 - name: Linear - local_logistic: &id006 - name: Logistic - stacked_reg: &id007 - name: Stacked Regr. - params: - n_estimators: 200 - learning_rate: 0.02 - max_depth: 5 - stacked_cls: &id008 - name: Stacked Clas. - params: - n_estimators: 200 - learning_rate: 0.02 - max_depth: 5 -dml_parameters: - fs_specification: - - cutoff - - cutoff and score - - interacted cutoff and score - learners: - - ml_g: *id001 - ml_m: *id002 - - ml_g: *id003 - ml_m: *id004 - - ml_g: *id005 - ml_m: *id006 - - ml_g: *id007 - ml_m: *id008 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/rdd/rdd_fuzzy_coverage.csv b/results/rdd/rdd_fuzzy_coverage.csv deleted file mode 100644 index a9a6dea..0000000 --- a/results/rdd/rdd_fuzzy_coverage.csv +++ /dev/null @@ -1,27 +0,0 @@ -Method,fs_specification,Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -RDFlex,cutoff,Global Linear,Global Logistic,0.9,0.8943333333333334,9.45138989718295,2.373538922365825,1000 -RDFlex,cutoff,Global Linear,Global Logistic,0.95,0.9466666666666667,11.26202568957878,2.373538922365825,1000 -RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.9,0.9106666666666666,2.098970644289801,0.5229709395139468,1000 -RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.95,0.9606666666666667,2.5010777858935986,0.5229709395139468,1000 -RDFlex,cutoff,Linear,Logistic,0.9,0.898,9.475050602811462,2.38122109508206,1000 -RDFlex,cutoff,Linear,Logistic,0.95,0.9516666666666667,11.290219159271665,2.38122109508206,1000 -RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.9,0.9143333333333333,2.006664818935384,0.4926541115149405,1000 -RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.95,0.9643333333333334,2.3910886109946707,0.4926541115149405,1000 -RDFlex,cutoff and score,Global Linear,Global Logistic,0.9,0.896,9.45192675987028,2.3708700911814633,1000 -RDFlex,cutoff and score,Global Linear,Global Logistic,0.95,0.9483333333333334,11.262665400927295,2.3708700911814633,1000 -RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.9206666666666666,2.137979587602868,0.5310240118035273,1000 -RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9706666666666667,2.547559808801788,0.5310240118035273,1000 -RDFlex,cutoff and score,Linear,Logistic,0.9,0.8993333333333333,9.431787596286874,2.370891486466498,1000 -RDFlex,cutoff and score,Linear,Logistic,0.95,0.9506666666666667,11.238668107395837,2.370891486466498,1000 -RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.9206666666666666,2.021432595475123,0.4848163059226252,1000 -RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.968,2.408685502095107,0.4848163059226252,1000 -RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.9,0.8986666666666666,9.417430458001911,2.3532260082168035,1000 -RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.95,0.9506666666666667,11.221560521955702,2.3532260082168035,1000 -RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.9203333333333333,2.1443333037007934,0.5343555930536144,1000 -RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9696666666666667,2.555130728496937,0.5343555930536144,1000 -RDFlex,interacted cutoff and score,Linear,Logistic,0.9,0.8983333333333333,9.463034507707663,2.36467701566644,1000 -RDFlex,interacted cutoff and score,Linear,Logistic,0.95,0.9486666666666667,11.275901098836155,2.36467701566644,1000 -RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.9233333333333333,2.0607292105190114,0.5038394189514153,1000 -RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.9763333333333334,2.455510307012918,0.5038394189514153,1000 -rdrobust,cutoff,Linear,Logistic,0.9,0.925,10.188022696252679,2.4726265121800406,1000 -rdrobust,cutoff,Linear,Logistic,0.95,0.97,12.13977780827851,2.4726265121800406,1000 diff --git a/results/rdd/rdd_fuzzy_coverage_metadata.csv b/results/rdd/rdd_fuzzy_coverage_metadata.csv deleted file mode 100644 index 6c9e78a..0000000 --- a/results/rdd/rdd_fuzzy_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.9.dev0,rdd_fuzzy_coverage.py,2025-05-22 17:03:51,19875.749115228653,3.12.10 diff --git a/results/rdd/rdd_fuzzy_metadata.csv b/results/rdd/rdd_fuzzy_metadata.csv deleted file mode 100644 index 0c28df1..0000000 --- a/results/rdd/rdd_fuzzy_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,RDDCoverageSimulation,2025-06-03 10:17,24.518820464611053,3.12.9,scripts/rdd/rdd_fuzzy_config.yml diff --git a/results/rdd/rdd_sharp_config.yml b/results/rdd/rdd_sharp_config.yml deleted file mode 100644 index 57d0a43..0000000 --- a/results/rdd/rdd_sharp_config.yml +++ /dev/null @@ -1,41 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - n_obs: - - 1000 - fuzzy: - - false - cutoff: - - 0.0 -learner_definitions: - lgbmr: &id001 - name: LGBM Regr. - params: - n_estimators: 100 - learning_rate: 0.05 - global_linear: &id002 - name: Global Linear - local_linear: &id003 - name: Linear - stacked_reg: &id004 - name: Stacked Regr. - params: - n_estimators: 100 - learning_rate: 0.05 -dml_parameters: - fs_specification: - - cutoff - - cutoff and score - - interacted cutoff and score - learners: - - ml_g: *id001 - - ml_g: *id002 - - ml_g: *id003 - - ml_g: *id004 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/rdd/rdd_sharp_coverage.csv b/results/rdd/rdd_sharp_coverage.csv deleted file mode 100644 index f9b942e..0000000 --- a/results/rdd/rdd_sharp_coverage.csv +++ /dev/null @@ -1,27 +0,0 @@ -Method,fs_specification,Learner g,Learner m,level,Coverage,CI Length,Bias,repetition -RDFlex,cutoff,Global Linear,N/A,0.9,0.8783333333333334,1.9718196650713942,0.5093136469698075,1000 -RDFlex,cutoff,Global Linear,N/A,0.95,0.9376666666666666,2.3495680492315225,0.5093136469698075,1000 -RDFlex,cutoff,LGBM Regr.,N/A,0.9,0.8753333333333334,0.5757111703216161,0.15519089437437322,1000 -RDFlex,cutoff,LGBM Regr.,N/A,0.95,0.9316666666666666,0.6860021711591865,0.15519089437437322,1000 -RDFlex,cutoff,Linear,N/A,0.9,0.8823333333333334,1.9835872651996145,0.5100383308045482,1000 -RDFlex,cutoff,Linear,N/A,0.95,0.942,2.363590009640563,0.5100383308045482,1000 -RDFlex,cutoff,Stacked Regr.,N/A,0.9,0.882,0.5590578781507813,0.14332464663035524,1000 -RDFlex,cutoff,Stacked Regr.,N/A,0.95,0.9366666666666666,0.6661585496088891,0.14332464663035524,1000 -RDFlex,cutoff and score,Global Linear,N/A,0.9,0.882,1.971849810438757,0.5080389655599933,1000 -RDFlex,cutoff and score,Global Linear,N/A,0.95,0.9383333333333334,2.34960396965226,0.5080389655599933,1000 -RDFlex,cutoff and score,LGBM Regr.,N/A,0.9,0.8846666666666666,0.6017477258893029,0.15725459328740565,1000 -RDFlex,cutoff and score,LGBM Regr.,N/A,0.95,0.9423333333333334,0.7170266406669815,0.15725459328740565,1000 -RDFlex,cutoff and score,Linear,N/A,0.9,0.8826666666666666,1.9835459135793096,0.5104954020103588,1000 -RDFlex,cutoff and score,Linear,N/A,0.95,0.9403333333333334,2.363540736145845,0.5104954020103588,1000 -RDFlex,cutoff and score,Stacked Regr.,N/A,0.9,0.8973333333333333,0.5804002753516253,0.14754701246061155,1000 -RDFlex,cutoff and score,Stacked Regr.,N/A,0.95,0.9413333333333334,0.6915895844268198,0.14754701246061155,1000 -RDFlex,interacted cutoff and score,Global Linear,N/A,0.9,0.882,1.9748055181211774,0.508213715385231,1000 -RDFlex,interacted cutoff and score,Global Linear,N/A,0.95,0.938,2.3531259125847197,0.508213715385231,1000 -RDFlex,interacted cutoff and score,LGBM Regr.,N/A,0.9,0.889,0.6013814494909888,0.15466636196782954,1000 -RDFlex,interacted cutoff and score,LGBM Regr.,N/A,0.95,0.9433333333333334,0.7165901954190156,0.15466636196782954,1000 -RDFlex,interacted cutoff and score,Linear,N/A,0.9,0.88,1.992308168049787,0.5113923914828905,1000 -RDFlex,interacted cutoff and score,Linear,N/A,0.95,0.938,2.373981606326701,0.5113923914828905,1000 -RDFlex,interacted cutoff and score,Stacked Regr.,N/A,0.9,0.8756666666666666,0.5801425055800902,0.14962735197253088,1000 -RDFlex,interacted cutoff and score,Stacked Regr.,N/A,0.95,0.929,0.6912824327993231,0.14962735197253088,1000 -rdrobust,cutoff,Linear,Logistic,0.9,0.896,2.178474435204289,0.5326223192522394,1000 -rdrobust,cutoff,Linear,Logistic,0.95,0.954,2.595812395875642,0.5326223192522394,1000 diff --git a/results/rdd/rdd_sharp_coverage_metadata.csv b/results/rdd/rdd_sharp_coverage_metadata.csv deleted file mode 100644 index 586a02d..0000000 --- a/results/rdd/rdd_sharp_coverage_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (seconds),Python Version -0.9.dev0,rdd_sharp_coverage.py,2025-05-22 12:43:00,4216.746794462204,3.12.10 diff --git a/results/rdd/rdd_sharp_metadata.csv b/results/rdd/rdd_sharp_metadata.csv deleted file mode 100644 index 375d001..0000000 --- a/results/rdd/rdd_sharp_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,RDDCoverageSimulation,2025-06-02 13:17,65.69356084664663,3.12.3,scripts/rdd/rdd_sharp_config.yml diff --git a/results/ssm/ssm_mar_ate_config.yml b/results/ssm/ssm_mar_ate_config.yml deleted file mode 100644 index 6c5f926..0000000 --- a/results/ssm/ssm_mar_ate_config.yml +++ /dev/null @@ -1,74 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 1.0 - n_obs: - - 500 - dim_x: - - 20 -learner_definitions: - lasso: &id001 - name: LassoCV - logit: &id002 - name: Logistic - rfr: &id003 - name: RF Regr. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - rfc: &id004 - name: RF Clas. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - lgbmr: &id005 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - lgbmc: &id006 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - ml_pi: *id002 - - ml_g: *id003 - ml_m: *id004 - ml_pi: *id004 - - ml_g: *id001 - ml_m: *id004 - ml_pi: *id004 - - ml_g: *id003 - ml_m: *id002 - ml_pi: *id004 - - ml_g: *id003 - ml_m: *id004 - ml_pi: *id002 - - ml_g: *id005 - ml_m: *id006 - ml_pi: *id006 - - ml_g: *id001 - ml_m: *id006 - ml_pi: *id006 - - ml_g: *id005 - ml_m: *id002 - ml_pi: *id006 - - ml_g: *id005 - ml_m: *id006 - ml_pi: *id002 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/ssm/ssm_mar_ate_coverage.csv b/results/ssm/ssm_mar_ate_coverage.csv deleted file mode 100644 index 91f8e89..0000000 --- a/results/ssm/ssm_mar_ate_coverage.csv +++ /dev/null @@ -1,19 +0,0 @@ -Learner g,Learner m,Learner pi,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.937,1.1020474646866227,0.25225717557270916,1000 -LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.976,1.3131705488242713,0.25225717557270916,1000 -LGBM Regr.,LGBM Clas.,Logistic,0.9,0.925,0.9396009375831231,0.21523318689504592,1000 -LGBM Regr.,LGBM Clas.,Logistic,0.95,0.967,1.1196035728213285,0.21523318689504592,1000 -LGBM Regr.,Logistic,LGBM Clas.,0.9,0.927,0.7652547530061172,0.16892900789678272,1000 -LGBM Regr.,Logistic,LGBM Clas.,0.95,0.976,0.9118572803769212,0.16892900789678272,1000 -LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.94,1.0416524703569756,0.23136599807480204,1000 -LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.979,1.2412054743683776,0.23136599807480204,1000 -LassoCV,Logistic,Logistic,0.9,0.918,0.5983979591318811,0.13819869402679225,1000 -LassoCV,Logistic,Logistic,0.95,0.961,0.7130351473854032,0.13819869402679225,1000 -LassoCV,RF Clas.,RF Clas.,0.9,0.915,0.5159726010062256,0.11685996635828219,1000 -LassoCV,RF Clas.,RF Clas.,0.95,0.966,0.6148192753515406,0.11685996635828219,1000 -RF Regr.,Logistic,RF Clas.,0.9,0.914,0.5740315353572116,0.13374033079721487,1000 -RF Regr.,Logistic,RF Clas.,0.95,0.967,0.6840007626548271,0.13374033079721487,1000 -RF Regr.,RF Clas.,Logistic,0.9,0.916,0.5717174746911912,0.13251444813486235,1000 -RF Regr.,RF Clas.,Logistic,0.95,0.964,0.6812433893000642,0.13251444813486235,1000 -RF Regr.,RF Clas.,RF Clas.,0.9,0.917,0.5204895028483878,0.12032384089569902,1000 -RF Regr.,RF Clas.,RF Clas.,0.95,0.957,0.6202014958648324,0.12032384089569902,1000 diff --git a/results/ssm/ssm_mar_ate_metadata.csv b/results/ssm/ssm_mar_ate_metadata.csv deleted file mode 100644 index b21daf8..0000000 --- a/results/ssm/ssm_mar_ate_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,SSMMarATECoverageSimulation,2025-06-05 10:19,32.703589328130086,3.12.9,scripts/ssm/ssm_mar_ate_config.yml diff --git a/results/ssm/ssm_nonig_ate_config.yml b/results/ssm/ssm_nonig_ate_config.yml deleted file mode 100644 index 6c5f926..0000000 --- a/results/ssm/ssm_nonig_ate_config.yml +++ /dev/null @@ -1,74 +0,0 @@ -simulation_parameters: - repetitions: 1000 - max_runtime: 19800 - random_seed: 42 - n_jobs: -2 -dgp_parameters: - theta: - - 1.0 - n_obs: - - 500 - dim_x: - - 20 -learner_definitions: - lasso: &id001 - name: LassoCV - logit: &id002 - name: Logistic - rfr: &id003 - name: RF Regr. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - rfc: &id004 - name: RF Clas. - params: - n_estimators: 200 - max_features: 20 - max_depth: 5 - min_samples_leaf: 2 - lgbmr: &id005 - name: LGBM Regr. - params: - n_estimators: 500 - learning_rate: 0.01 - lgbmc: &id006 - name: LGBM Clas. - params: - n_estimators: 500 - learning_rate: 0.01 -dml_parameters: - learners: - - ml_g: *id001 - ml_m: *id002 - ml_pi: *id002 - - ml_g: *id003 - ml_m: *id004 - ml_pi: *id004 - - ml_g: *id001 - ml_m: *id004 - ml_pi: *id004 - - ml_g: *id003 - ml_m: *id002 - ml_pi: *id004 - - ml_g: *id003 - ml_m: *id004 - ml_pi: *id002 - - ml_g: *id005 - ml_m: *id006 - ml_pi: *id006 - - ml_g: *id001 - ml_m: *id006 - ml_pi: *id006 - - ml_g: *id005 - ml_m: *id002 - ml_pi: *id006 - - ml_g: *id005 - ml_m: *id006 - ml_pi: *id002 -confidence_parameters: - level: - - 0.95 - - 0.9 diff --git a/results/ssm/ssm_nonig_ate_coverage.csv b/results/ssm/ssm_nonig_ate_coverage.csv deleted file mode 100644 index 3fe8260..0000000 --- a/results/ssm/ssm_nonig_ate_coverage.csv +++ /dev/null @@ -1,19 +0,0 @@ -Learner g,Learner m,Learner pi,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.906,1.5821140101993176,0.39941487645605,1000 -LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.958,1.8852051201504163,0.39941487645605,1000 -LGBM Regr.,LGBM Clas.,Logistic,0.9,0.935,2.3216975230755064,0.6217489058523816,1000 -LGBM Regr.,LGBM Clas.,Logistic,0.95,0.974,2.7664732312123816,0.6217489058523816,1000 -LGBM Regr.,Logistic,LGBM Clas.,0.9,0.834,1.1194612001997861,0.31096250226975036,1000 -LGBM Regr.,Logistic,LGBM Clas.,0.95,0.904,1.3339202945055102,0.31096250226975036,1000 -LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.907,1.4773761863865273,0.3819267464776803,1000 -LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.957,1.760402305402313,0.3819267464776803,1000 -LassoCV,Logistic,Logistic,0.9,0.857,1.8486984724368598,0.524196741214989,1000 -LassoCV,Logistic,Logistic,0.95,0.92,2.202860099452095,0.524196741214989,1000 -LassoCV,RF Clas.,RF Clas.,0.9,0.78,0.6505940752158618,0.20476023599261262,1000 -LassoCV,RF Clas.,RF Clas.,0.95,0.872,0.7752306558374706,0.20476023599261262,1000 -RF Regr.,Logistic,RF Clas.,0.9,0.708,0.7687129167631139,0.2667490928514026,1000 -RF Regr.,Logistic,RF Clas.,0.95,0.814,0.9159779366500982,0.2667490928514026,1000 -RF Regr.,RF Clas.,Logistic,0.9,0.892,1.437280071189879,0.396115809059242,1000 -RF Regr.,RF Clas.,Logistic,0.95,0.949,1.7126248372934632,0.396115809059242,1000 -RF Regr.,RF Clas.,RF Clas.,0.9,0.779,0.6653233603546214,0.20524894117905498,1000 -RF Regr.,RF Clas.,RF Clas.,0.95,0.857,0.7927816816047267,0.20524894117905498,1000 diff --git a/results/ssm/ssm_nonig_ate_metadata.csv b/results/ssm/ssm_nonig_ate_metadata.csv deleted file mode 100644 index f8e47b8..0000000 --- a/results/ssm/ssm_nonig_ate_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,SSMNonIgnorableATECoverageSimulation,2025-06-05 10:40,19.940552759170533,3.12.9,scripts/ssm/ssm_nonig_ate_config.yml From 7e4e364b8930b8a51e548bfac6d84a6ee328b617 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 14:23:18 +0200 Subject: [PATCH 098/142] add iivm to monte-cover --- monte-cover/src/montecover/irm/__init__.py | 2 + monte-cover/src/montecover/irm/iivm_late.py | 122 ++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 monte-cover/src/montecover/irm/iivm_late.py diff --git a/monte-cover/src/montecover/irm/__init__.py b/monte-cover/src/montecover/irm/__init__.py index 57050ae..6c09726 100644 --- a/monte-cover/src/montecover/irm/__init__.py +++ b/monte-cover/src/montecover/irm/__init__.py @@ -3,6 +3,7 @@ from montecover.irm.apo import APOCoverageSimulation from montecover.irm.apos import APOSCoverageSimulation from montecover.irm.cvar import CVARCoverageSimulation +from montecover.irm.iivm_late import IIVMLATECoverageSimulation from montecover.irm.irm_ate import IRMATECoverageSimulation from montecover.irm.irm_ate_sensitivity import IRMATESensitivityCoverageSimulation from montecover.irm.irm_atte import IRMATTECoverageSimulation @@ -17,6 +18,7 @@ "APOSCoverageSimulation", "CVARCoverageSimulation", "IRMATECoverageSimulation", + "IIVMLATECoverageSimulation", "IRMATESensitivityCoverageSimulation", "IRMATTECoverageSimulation", "IRMATTESensitivityCoverageSimulation", diff --git a/monte-cover/src/montecover/irm/iivm_late.py b/monte-cover/src/montecover/irm/iivm_late.py new file mode 100644 index 0000000..2f1ac1f --- /dev/null +++ b/monte-cover/src/montecover/irm/iivm_late.py @@ -0,0 +1,122 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +from doubleml.datasets import make_iivm_data + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class IIVMLATECoverageSimulation(BaseSimulation): + """Simulation class for coverage properties of DoubleMLIIVM for LATE estimation.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m", "ml_r"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + self.oracle_values = dict() + self.oracle_values["theta"] = self.dgp_parameters["theta"] + + def run_single_rep(self, dml_data: dml.DoubleMLData, dml_params: Dict[str, Any]) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + learner_r_name, ml_r = create_learner_from_config(learner_config["ml_r"]) + + # Model + dml_model = dml.DoubleMLIIVM( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=ml_m, + ml_r=ml_r, + ) + dml_model.fit() + + result = { + "coverage": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["coverage"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=self.oracle_values["theta"], + confint=dml_model.confint(level=level), + joint_confint=None, + ) + + # add parameters to the result + for res_metric in level_result.values(): + res_metric.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Learner r": learner_r_name, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + # Group by parameter combinations + groupby_cols = ["Learner g", "Learner m", "Learner r", "level"] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "repetition": "count", + } + + # Aggregate results (possibly multiple result dfs) + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params: Dict[str, Any]) -> dml.DoubleMLData: + """Generate data for the simulation.""" + data = make_iivm_data( + theta=dgp_params["theta"], + n_obs=dgp_params["n_obs"], + dim_x=dgp_params["dim_x"], + alpha_x=dgp_params["alpha_x"], + return_type="DataFrame", + ) + dml_data = dml.DoubleMLData(data, "y", "d", z_cols="z") + return dml_data From 6b3b92a8c570dc43d35a24d1520a690a1450ca60 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 14:23:31 +0200 Subject: [PATCH 099/142] update iivm scripts --- scripts/irm/iivm_late.py | 13 ++++++ scripts/irm/iivm_late_config.yml | 80 ++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 scripts/irm/iivm_late.py create mode 100644 scripts/irm/iivm_late_config.yml diff --git a/scripts/irm/iivm_late.py b/scripts/irm/iivm_late.py new file mode 100644 index 0000000..c6b7942 --- /dev/null +++ b/scripts/irm/iivm_late.py @@ -0,0 +1,13 @@ +from montecover.irm import IIVMLATECoverageSimulation + +# Create and run simulation with config file +sim = IIVMLATECoverageSimulation( + config_file="scripts/irm/iivm_late_config.yml", + log_level="INFO", + log_file="logs/irm/iivm_late_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/irm/", file_prefix="iivm_late") + +# Save config file for reproducibility +sim.save_config("results/irm/iivm_late_config.yml") diff --git a/scripts/irm/iivm_late_config.yml b/scripts/irm/iivm_late_config.yml new file mode 100644 index 0000000..07a7185 --- /dev/null +++ b/scripts/irm/iivm_late_config.yml @@ -0,0 +1,80 @@ +# Simulation parameters for IIVM LATE Coverage + +simulation_parameters: + repetitions: 200 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + theta: [0.5] # Treatment effect + n_obs: [500] # Sample size + dim_x: [20] # Number of covariates + alpha_x: [1.0] # Covariate effect + +# Define reusable learner configurations +learner_definitions: + lasso: &lasso + name: "LassoCV" + + logit: &logit + name: "Logistic" + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 100 # Fewer trees; with small data, fewer is often better + learning_rate: 0.05 # Reasonable speed without sacrificing much accuracy + num_leaves: 7 # Smaller trees reduce overfitting risk + max_depth: 3 # Shallow trees generalize better on tiny datasets + min_child_samples: 20 # Avoids splitting on noise + subsample: 1.0 # Use all rows — subsampling adds variance with small data + colsample_bytree: 0.8 # Still good to randomly drop some features per tree + reg_alpha: 0.1 # L1 regularization helps when there are many features + reg_lambda: 1.0 # Stronger L2 regularization improves generalization + random_state: 42 # Reproducibility + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 100 # Fewer trees; with small data, fewer is often better + learning_rate: 0.05 # Reasonable speed without sacrificing much accuracy + num_leaves: 7 # Smaller trees reduce overfitting risk + max_depth: 3 # Shallow trees generalize better on tiny datasets + min_child_samples: 20 # Avoids splitting on noise + subsample: 1.0 # Use all rows — subsampling adds variance with small data + colsample_bytree: 0.8 # Still good to randomly drop some features per tree + reg_alpha: 0.1 # L1 regularization helps when there are many features + reg_lambda: 1.0 # Stronger L2 regularization improves generalization + random_state: 42 # Reproducibility + +dml_parameters: + learners: + - ml_g: *lasso + ml_m: *logit + ml_r: *logit + - ml_g: *lasso + ml_m: *logit + ml_r: *lgbmc + - ml_g: *lasso + ml_m: *lgbmc + ml_r: *logit + - ml_g: *lasso + ml_m: *lgbmc + ml_r: *lgbmc + - ml_g: *lgbmr + ml_m: *logit + ml_r: *logit + - ml_g: *lgbmr + ml_m: *logit + ml_r: *lgbmc + - ml_g: *lgbmr + ml_m: *lgbmc + ml_r: *logit + - ml_g: *lgbmr + ml_m: *lgbmc + ml_r: *lgbmc + + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From 4dcb55adeab121e22b6cac7a20737df23d38b035 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 14:23:48 +0200 Subject: [PATCH 100/142] update qmd and workflow files --- .github/workflows/iivm_sim.yml | 23 ++++++++++++++++------- doc/irm/iivm.qmd | 4 ++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.github/workflows/iivm_sim.yml b/.github/workflows/iivm_sim.yml index 681070b..a8dcc98 100644 --- a/.github/workflows/iivm_sim.yml +++ b/.github/workflows/iivm_sim.yml @@ -47,20 +47,27 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.7.8" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + cd monte-cover + uv venv + uv sync - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -68,7 +75,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | diff --git a/doc/irm/iivm.qmd b/doc/irm/iivm.qmd index 00f4184..7dd53c2 100644 --- a/doc/irm/iivm.qmd +++ b/doc/irm/iivm.qmd @@ -30,7 +30,7 @@ The simulations are based on the the [make_iivm_data](https://docs.doubleml.org ```{python} #| echo: false -metadata_file = '../../results/irm/iivm_late_coverage_metadata.csv' +metadata_file = '../../results/irm/iivm_late_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -46,7 +46,7 @@ df = pd.read_csv("../../results/irm/iivm_late_coverage.csv", index_col=None) assert df["repetition"].nunique() == 1 n_rep = df["repetition"].unique()[0] -display_columns = ["Learner g", "Learner m", "Bias", "CI Length", "Coverage"] +display_columns = ["Learner g", "Learner m", "Learner r", "Bias", "CI Length", "Coverage"] ``` From a3f53ec3378c385ea808e72203d9398dd1620054 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 14:34:13 +0200 Subject: [PATCH 101/142] fix iivm workflow --- .github/workflows/iivm_sim.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/iivm_sim.yml b/.github/workflows/iivm_sim.yml index a8dcc98..b7cb787 100644 --- a/.github/workflows/iivm_sim.yml +++ b/.github/workflows/iivm_sim.yml @@ -17,7 +17,7 @@ jobs: strategy: matrix: script: [ - 'scripts/irm/iivm_late_coverage.py', + 'scripts/irm/iivm_late.py', ] steps: From c0a9a27163cfd698fdf946020ff34f7c37795a10 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 12:42:43 +0000 Subject: [PATCH 102/142] Update results from script: scripts/irm/iivm_late.py --- results/irm/iivm_late_config.yml | 75 ++++++++++++++++++++++++++++++ results/irm/iivm_late_coverage.csv | 17 +++++++ results/irm/iivm_late_metadata.csv | 2 + 3 files changed, 94 insertions(+) create mode 100644 results/irm/iivm_late_config.yml create mode 100644 results/irm/iivm_late_coverage.csv create mode 100644 results/irm/iivm_late_metadata.csv diff --git a/results/irm/iivm_late_config.yml b/results/irm/iivm_late_config.yml new file mode 100644 index 0000000..262ed8d --- /dev/null +++ b/results/irm/iivm_late_config.yml @@ -0,0 +1,75 @@ +simulation_parameters: + repetitions: 200 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 500 + dim_x: + - 20 + alpha_x: + - 1.0 +learner_definitions: + lasso: &id001 + name: LassoCV + logit: &id002 + name: Logistic + lgbmr: &id004 + name: LGBM Regr. + params: + n_estimators: 100 + learning_rate: 0.05 + num_leaves: 7 + max_depth: 3 + min_child_samples: 20 + subsample: 1.0 + colsample_bytree: 0.8 + reg_alpha: 0.1 + reg_lambda: 1.0 + random_state: 42 + lgbmc: &id003 + name: LGBM Clas. + params: + n_estimators: 100 + learning_rate: 0.05 + num_leaves: 7 + max_depth: 3 + min_child_samples: 20 + subsample: 1.0 + colsample_bytree: 0.8 + reg_alpha: 0.1 + reg_lambda: 1.0 + random_state: 42 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + ml_r: *id002 + - ml_g: *id001 + ml_m: *id002 + ml_r: *id003 + - ml_g: *id001 + ml_m: *id003 + ml_r: *id002 + - ml_g: *id001 + ml_m: *id003 + ml_r: *id003 + - ml_g: *id004 + ml_m: *id002 + ml_r: *id002 + - ml_g: *id004 + ml_m: *id002 + ml_r: *id003 + - ml_g: *id004 + ml_m: *id003 + ml_r: *id002 + - ml_g: *id004 + ml_m: *id003 + ml_r: *id003 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/iivm_late_coverage.csv b/results/irm/iivm_late_coverage.csv new file mode 100644 index 0000000..174966e --- /dev/null +++ b/results/irm/iivm_late_coverage.csv @@ -0,0 +1,17 @@ +Learner g,Learner m,Learner r,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.935,1.1168835154580528,0.23046338682103318,200 +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.97,1.3308487936895623,0.23046338682103318,200 +LGBM Regr.,LGBM Clas.,Logistic,0.9,0.955,1.1132643708033312,0.2387703838551479,200 +LGBM Regr.,LGBM Clas.,Logistic,0.95,0.97,1.326536316845503,0.2387703838551479,200 +LGBM Regr.,Logistic,LGBM Clas.,0.9,0.925,1.0676961140157748,0.2404768410266537,200 +LGBM Regr.,Logistic,LGBM Clas.,0.95,0.955,1.2722383898576701,0.2404768410266537,200 +LGBM Regr.,Logistic,Logistic,0.9,0.945,1.0542837892752488,0.2314227063303991,200 +LGBM Regr.,Logistic,Logistic,0.95,0.965,1.2562566191945217,0.2314227063303991,200 +LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.95,1.050618151197297,0.219243438592031,200 +LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.975,1.2518887420196634,0.219243438592031,200 +LassoCV,LGBM Clas.,Logistic,0.9,0.935,1.0466111753459595,0.22595938006238492,200 +LassoCV,LGBM Clas.,Logistic,0.95,0.975,1.247114135801298,0.22595938006238492,200 +LassoCV,Logistic,LGBM Clas.,0.9,0.935,1.0013259753676422,0.21864342992355934,200 +LassoCV,Logistic,LGBM Clas.,0.95,0.96,1.1931534918048492,0.21864342992355934,200 +LassoCV,Logistic,Logistic,0.9,0.94,1.0039031105588596,0.22138652272701975,200 +LassoCV,Logistic,Logistic,0.95,0.955,1.196224337790968,0.22138652272701975,200 diff --git a/results/irm/iivm_late_metadata.csv b/results/irm/iivm_late_metadata.csv new file mode 100644 index 0000000..136e8e0 --- /dev/null +++ b/results/irm/iivm_late_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,IIVMLATECoverageSimulation,2025-06-05 12:42,4.740816859404246,3.12.3,scripts/irm/iivm_late_config.yml From 028a99ab66d8deeaca88b86c238fcac3e51409ab Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 14:49:36 +0200 Subject: [PATCH 103/142] increase iivm repetitions --- results/irm/iivm_late_config.yml | 2 +- results/irm/iivm_late_coverage.csv | 32 +++++++++++++++--------------- results/irm/iivm_late_metadata.csv | 2 +- scripts/irm/iivm_late_config.yml | 4 ++-- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/results/irm/iivm_late_config.yml b/results/irm/iivm_late_config.yml index 262ed8d..d549111 100644 --- a/results/irm/iivm_late_config.yml +++ b/results/irm/iivm_late_config.yml @@ -1,5 +1,5 @@ simulation_parameters: - repetitions: 200 + repetitions: 1000 max_runtime: 19800 random_seed: 42 n_jobs: -2 diff --git a/results/irm/iivm_late_coverage.csv b/results/irm/iivm_late_coverage.csv index 174966e..dcd3993 100644 --- a/results/irm/iivm_late_coverage.csv +++ b/results/irm/iivm_late_coverage.csv @@ -1,17 +1,17 @@ Learner g,Learner m,Learner r,level,Coverage,CI Length,Bias,repetition -LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.935,1.1168835154580528,0.23046338682103318,200 -LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.97,1.3308487936895623,0.23046338682103318,200 -LGBM Regr.,LGBM Clas.,Logistic,0.9,0.955,1.1132643708033312,0.2387703838551479,200 -LGBM Regr.,LGBM Clas.,Logistic,0.95,0.97,1.326536316845503,0.2387703838551479,200 -LGBM Regr.,Logistic,LGBM Clas.,0.9,0.925,1.0676961140157748,0.2404768410266537,200 -LGBM Regr.,Logistic,LGBM Clas.,0.95,0.955,1.2722383898576701,0.2404768410266537,200 -LGBM Regr.,Logistic,Logistic,0.9,0.945,1.0542837892752488,0.2314227063303991,200 -LGBM Regr.,Logistic,Logistic,0.95,0.965,1.2562566191945217,0.2314227063303991,200 -LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.95,1.050618151197297,0.219243438592031,200 -LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.975,1.2518887420196634,0.219243438592031,200 -LassoCV,LGBM Clas.,Logistic,0.9,0.935,1.0466111753459595,0.22595938006238492,200 -LassoCV,LGBM Clas.,Logistic,0.95,0.975,1.247114135801298,0.22595938006238492,200 -LassoCV,Logistic,LGBM Clas.,0.9,0.935,1.0013259753676422,0.21864342992355934,200 -LassoCV,Logistic,LGBM Clas.,0.95,0.96,1.1931534918048492,0.21864342992355934,200 -LassoCV,Logistic,Logistic,0.9,0.94,1.0039031105588596,0.22138652272701975,200 -LassoCV,Logistic,Logistic,0.95,0.955,1.196224337790968,0.22138652272701975,200 +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.914,1.1170031612339868,0.26443161772788826,1000 +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.968,1.3309913604249184,0.26443161772788826,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.9,0.921,1.111120207889174,0.2669195093646889,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.95,0.969,1.32398138914867,0.2669195093646889,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.9,0.923,1.0567499407213161,0.25374822037756817,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.95,0.965,1.2591952198915768,0.25374822037756817,1000 +LGBM Regr.,Logistic,Logistic,0.9,0.915,1.0557640391096161,0.2504657709294685,1000 +LGBM Regr.,Logistic,Logistic,0.95,0.966,1.2580204456626907,0.2504657709294685,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.92,1.0534935963070167,0.2478314316215499,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.964,1.2553150461978761,0.2478314316215499,1000 +LassoCV,LGBM Clas.,Logistic,0.9,0.915,1.048839165759454,0.2487976919643911,1000 +LassoCV,LGBM Clas.,Logistic,0.95,0.964,1.2497689501244686,0.2487976919643911,1000 +LassoCV,Logistic,LGBM Clas.,0.9,0.918,1.0011806143989663,0.24364342853702406,1000 +LassoCV,Logistic,LGBM Clas.,0.95,0.959,1.1929802835274108,0.24364342853702406,1000 +LassoCV,Logistic,Logistic,0.9,0.916,0.9983343843722963,0.24211448303931346,1000 +LassoCV,Logistic,Logistic,0.95,0.967,1.1895887912678056,0.24211448303931346,1000 diff --git a/results/irm/iivm_late_metadata.csv b/results/irm/iivm_late_metadata.csv index 136e8e0..0ab74ee 100644 --- a/results/irm/iivm_late_metadata.csv +++ b/results/irm/iivm_late_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,IIVMLATECoverageSimulation,2025-06-05 12:42,4.740816859404246,3.12.3,scripts/irm/iivm_late_config.yml +0.10.0,IIVMLATECoverageSimulation,2025-06-05 14:57,2.219698127110799,3.12.9,scripts/irm/iivm_late_config.yml diff --git a/scripts/irm/iivm_late_config.yml b/scripts/irm/iivm_late_config.yml index 07a7185..b81c856 100644 --- a/scripts/irm/iivm_late_config.yml +++ b/scripts/irm/iivm_late_config.yml @@ -1,7 +1,7 @@ # Simulation parameters for IIVM LATE Coverage simulation_parameters: - repetitions: 200 + repetitions: 1000 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 @@ -74,7 +74,7 @@ dml_parameters: - ml_g: *lgbmr ml_m: *lgbmc ml_r: *lgbmc - + confidence_parameters: level: [0.95, 0.90] # Confidence levels From 685ce7b51ffbad6e072c8dec11b4dcf5564517f2 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 13:14:03 +0000 Subject: [PATCH 104/142] Update results from script: scripts/irm/irm_ate_sensitivity.py --- results/irm/irm_ate_sensitivity_config.yml | 53 ++++++++++++++++++++ results/irm/irm_ate_sensitivity_coverage.csv | 9 ++++ results/irm/irm_ate_sensitivity_metadata.csv | 2 + 3 files changed, 64 insertions(+) create mode 100644 results/irm/irm_ate_sensitivity_config.yml create mode 100644 results/irm/irm_ate_sensitivity_coverage.csv create mode 100644 results/irm/irm_ate_sensitivity_metadata.csv diff --git a/results/irm/irm_ate_sensitivity_config.yml b/results/irm/irm_ate_sensitivity_config.yml new file mode 100644 index 0000000..74143aa --- /dev/null +++ b/results/irm/irm_ate_sensitivity_config.yml @@ -0,0 +1,53 @@ +simulation_parameters: + repetitions: 500 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 5.0 + n_obs: + - 5000 + trimming_threshold: + - 0.05 + var_epsilon_y: + - 1.0 + linear: + - false + gamma_a: + - 0.198 + beta_a: + - 0.582 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 + trimming_threshold: + - 0.05 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_ate_sensitivity_coverage.csv b/results/irm/irm_ate_sensitivity_coverage.csv new file mode 100644 index 0000000..f538604 --- /dev/null +++ b/results/irm/irm_ate_sensitivity_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition +LGBM Regr.,LGBM Clas.,0.9,0.084,0.2668540258210539,0.18198204659615963,0.95,1.0,0.12589776145327045,0.05628191414414868,0.044383096119999466,0.32513075000880287,500 +LGBM Regr.,LGBM Clas.,0.95,0.246,0.317976184122928,0.18198204659615963,0.998,1.0,0.12589776145327045,0.03630227835056437,0.044383096119999466,0.32513075000880287,500 +LGBM Regr.,Logistic,0.9,0.26,0.2574630882167088,0.14916839267522197,1.0,1.0,0.10064526477515615,0.034829417508842296,0.026887536242060982,0.297933622145966,500 +LGBM Regr.,Logistic,0.95,0.572,0.3067861917831888,0.14916839267522197,1.0,1.0,0.10064526477515615,0.018255506137347777,0.026887536242060982,0.297933622145966,500 +Linear,LGBM Clas.,0.9,0.082,0.2672263041294733,0.1800922704825838,0.964,1.0,0.12741937328027908,0.056153203215479244,0.04433563312353054,0.31995377591144475,500 +Linear,LGBM Clas.,0.95,0.258,0.31841978108789315,0.1800922704825838,0.996,1.0,0.12741937328027908,0.03559871249886926,0.04433563312353054,0.31995377591144475,500 +Linear,Logistic,0.9,0.868,0.2588792120747325,0.08970647188763244,1.0,1.0,0.06307809186280441,0.006372043222062277,0.0574078098172687,0.23496351259089188,500 +Linear,Logistic,0.95,0.976,0.3084736074376251,0.08970647188763244,1.0,1.0,0.06307809186280441,0.001546577328924639,0.0574078098172687,0.23496351259089188,500 diff --git a/results/irm/irm_ate_sensitivity_metadata.csv b/results/irm/irm_ate_sensitivity_metadata.csv new file mode 100644 index 0000000..e47f137 --- /dev/null +++ b/results/irm/irm_ate_sensitivity_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,IRMATESensitivityCoverageSimulation,2025-06-05 13:14,37.417966898282366,3.12.3,scripts/irm/irm_ate_sensitivity_config.yml From 424860afd094445488209e14fa3091181a71e6b8 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 13:14:20 +0000 Subject: [PATCH 105/142] Update results from script: scripts/irm/irm_atte_sensitivity.py --- results/irm/irm_atte_sensitivity_config.yml | 53 +++++++++++++++++++ results/irm/irm_atte_sensitivity_coverage.csv | 9 ++++ results/irm/irm_atte_sensitivity_metadata.csv | 2 + 3 files changed, 64 insertions(+) create mode 100644 results/irm/irm_atte_sensitivity_config.yml create mode 100644 results/irm/irm_atte_sensitivity_coverage.csv create mode 100644 results/irm/irm_atte_sensitivity_metadata.csv diff --git a/results/irm/irm_atte_sensitivity_config.yml b/results/irm/irm_atte_sensitivity_config.yml new file mode 100644 index 0000000..bf06bc6 --- /dev/null +++ b/results/irm/irm_atte_sensitivity_config.yml @@ -0,0 +1,53 @@ +simulation_parameters: + repetitions: 500 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 5.0 + n_obs: + - 5000 + trimming_threshold: + - 0.05 + var_epsilon_y: + - 1.0 + linear: + - false + gamma_a: + - 0.151 + beta_a: + - 0.582 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 + trimming_threshold: + - 0.05 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_atte_sensitivity_coverage.csv b/results/irm/irm_atte_sensitivity_coverage.csv new file mode 100644 index 0000000..d592177 --- /dev/null +++ b/results/irm/irm_atte_sensitivity_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition +LGBM Regr.,LGBM Clas.,0.9,0.708,0.3489511146392163,0.13756848436233937,0.94,1.0,0.10664020023640788,0.02469821575907808,0.06297064757762019,0.26272747008699665,500 +LGBM Regr.,LGBM Clas.,0.95,0.826,0.41580089915085766,0.13756848436233937,0.978,1.0,0.10664020023640788,0.012557304495326774,0.06297064757762019,0.26272747008699665,500 +LGBM Regr.,Logistic,0.9,0.728,0.3466996212937586,0.13203748795264333,0.96,1.0,0.0989531978785329,0.02152136562411849,0.061845450573817774,0.261622864513939,500 +LGBM Regr.,Logistic,0.95,0.834,0.41311807935691197,0.13203748795264333,0.988,1.0,0.0989531978785329,0.01068777225560622,0.061845450573817774,0.261622864513939,500 +Linear,LGBM Clas.,0.9,0.77,0.3499025013245624,0.12450248762578023,0.968,1.0,0.09911082424887455,0.019375250746672557,0.061685830635415634,0.24526004965885637,500 +Linear,LGBM Clas.,0.95,0.866,0.41693454630832866,0.12450248762578023,0.988,1.0,0.09911082424887455,0.009539652027944212,0.061685830635415634,0.24526004965885637,500 +Linear,Logistic,0.9,0.936,0.3503606994029222,0.07357271764564946,0.998,1.0,0.05747974737962404,0.004779092271966848,0.0939884966306456,0.17946572893838733,500 +Linear,Logistic,0.95,0.976,0.41748052299382554,0.07357271764564946,1.0,1.0,0.05747974737962404,0.0017099292842988314,0.0939884966306456,0.17946572893838733,500 diff --git a/results/irm/irm_atte_sensitivity_metadata.csv b/results/irm/irm_atte_sensitivity_metadata.csv new file mode 100644 index 0000000..06469e7 --- /dev/null +++ b/results/irm/irm_atte_sensitivity_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,IRMATTESensitivityCoverageSimulation,2025-06-05 13:14,37.61970745722453,3.12.3,scripts/irm/irm_atte_sensitivity_config.yml From 3d8ff93a013b873529a8d741c2806aabee049da0 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 13:49:51 +0000 Subject: [PATCH 106/142] Update results from script: scripts/irm/apos.py --- results/irm/apos_causal_contrast.csv | 9 +++++ results/irm/apos_config.yml | 49 ++++++++++++++++++++++++++++ results/irm/apos_coverage.csv | 9 +++++ results/irm/apos_metadata.csv | 2 ++ 4 files changed, 69 insertions(+) create mode 100644 results/irm/apos_causal_contrast.csv create mode 100644 results/irm/apos_config.yml create mode 100644 results/irm/apos_coverage.csv create mode 100644 results/irm/apos_metadata.csv diff --git a/results/irm/apos_causal_contrast.csv b/results/irm/apos_causal_contrast.csv new file mode 100644 index 0000000..aa9f305 --- /dev/null +++ b/results/irm/apos_causal_contrast.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,0.9,0.904,33.69662163571549,8.483004437185645,0.926,39.85455370375964,1000 +LGBM Regr.,LGBM Clas.,0.95,0.962,40.152001202125206,8.483004437185645,0.971,45.73641635076257,1000 +LGBM Regr.,Logistic,0.9,0.94,5.358652779061842,1.1112961153926972,0.938,6.338924854198347,1000 +LGBM Regr.,Logistic,0.95,0.9705,6.385228618842048,1.1112961153926972,0.971,7.278594548770065,1000 +Linear,LGBM Clas.,0.9,0.961,6.6486166061347785,1.2777994119295877,0.974,7.879408694900085,1000 +Linear,LGBM Clas.,0.95,0.987,7.922315324306693,1.2777994119295877,0.992,9.038546968123926,1000 +Linear,Logistic,0.9,0.863,1.1418873926566593,0.3053856763981124,0.855,1.3481716926442315,1000 +Linear,Logistic,0.95,0.9275,1.3606427510242092,0.3053856763981124,0.921,1.5482567665033886,1000 diff --git a/results/irm/apos_config.yml b/results/irm/apos_config.yml new file mode 100644 index 0000000..40be90e --- /dev/null +++ b/results/irm/apos_config.yml @@ -0,0 +1,49 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + n_levels: + - 2 + linear: + - true +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 +dml_parameters: + treatment_levels: + - - 0 + - 1 + - 2 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/apos_coverage.csv b/results/irm/apos_coverage.csv new file mode 100644 index 0000000..d672bd2 --- /dev/null +++ b/results/irm/apos_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,0.9,0.9203333333333333,25.45613129678526,6.166381695751374,0.946,32.623943884889655,1000 +LGBM Regr.,LGBM Clas.,0.95,0.9643333333333334,30.3328513309069,6.166381695751374,0.986,36.86913655114933,1000 +LGBM Regr.,Logistic,0.9,0.917,6.627738366241373,1.5016545559757806,0.92,8.149255859131907,1000 +LGBM Regr.,Logistic,0.95,0.9596666666666667,7.897437367033678,1.5016545559757806,0.959,9.320000315514479,1000 +Linear,LGBM Clas.,0.9,0.9376666666666666,7.5134083953879935,1.6006918303560986,0.951,9.29091412660083,1000 +Linear,LGBM Clas.,0.95,0.974,8.952778298816861,1.6006918303560986,0.974,10.609555760885549,1000 +Linear,Logistic,0.9,0.915,5.39079994210578,1.2559293498489636,0.914,5.8155441975859725,1000 +Linear,Logistic,0.95,0.96,6.423534326255072,1.2559293498489636,0.959,6.833558835632949,1000 diff --git a/results/irm/apos_metadata.csv b/results/irm/apos_metadata.csv new file mode 100644 index 0000000..10c6d4c --- /dev/null +++ b/results/irm/apos_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,APOSCoverageSimulation,2025-06-05 13:49,73.850344034036,3.12.3,scripts/irm/apos_config.yml From 47a4aac6c83311b453ca66c4c196a6579f65ebc6 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 13:49:58 +0000 Subject: [PATCH 107/142] Update results from script: scripts/irm/apo.py --- results/irm/apo_config.yml | 49 ++++++++++++++++++++++++++++++++++++ results/irm/apo_coverage.csv | 25 ++++++++++++++++++ results/irm/apo_metadata.csv | 2 ++ 3 files changed, 76 insertions(+) create mode 100644 results/irm/apo_config.yml create mode 100644 results/irm/apo_coverage.csv create mode 100644 results/irm/apo_metadata.csv diff --git a/results/irm/apo_config.yml b/results/irm/apo_config.yml new file mode 100644 index 0000000..5f31101 --- /dev/null +++ b/results/irm/apo_config.yml @@ -0,0 +1,49 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + n_levels: + - 2 + linear: + - true +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 + min_child_samples: 10 +dml_parameters: + treatment_level: + - 0 + - 1 + - 2 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/apo_coverage.csv b/results/irm/apo_coverage.csv new file mode 100644 index 0000000..cb1bc37 --- /dev/null +++ b/results/irm/apo_coverage.csv @@ -0,0 +1,25 @@ +Learner g,Learner m,Treatment Level,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,0,0.9,0.921,8.43473750706522,2.0020174052425626,1000 +LGBM Regr.,LGBM Clas.,0,0.95,0.968,10.050609648188914,2.0020174052425626,1000 +LGBM Regr.,LGBM Clas.,1,0.9,0.945,34.49785903442266,8.012907711983175,1000 +LGBM Regr.,LGBM Clas.,1,0.95,0.983,41.10673444938877,8.012907711983175,1000 +LGBM Regr.,LGBM Clas.,2,0.9,0.909,33.42971449937157,8.333206392907996,1000 +LGBM Regr.,LGBM Clas.,2,0.95,0.973,39.83396173291094,8.333206392907996,1000 +LGBM Regr.,Logistic,0,0.9,0.905,5.626372580880361,1.390211734015615,1000 +LGBM Regr.,Logistic,0,0.95,0.958,6.704236438695905,1.390211734015615,1000 +LGBM Regr.,Logistic,1,0.9,0.922,7.220302724612175,1.6901658245391882,1000 +LGBM Regr.,Logistic,1,0.95,0.952,8.603521350373505,1.6901658245391882,1000 +LGBM Regr.,Logistic,2,0.9,0.91,7.160030685666201,1.6407106001549503,1000 +LGBM Regr.,Logistic,2,0.95,0.957,8.531702786293828,1.6407106001549503,1000 +Linear,LGBM Clas.,0,0.9,0.902,5.4602785529816185,1.3727521781733092,1000 +Linear,LGBM Clas.,0,0.95,0.95,6.506323197423445,1.3727521781733092,1000 +Linear,LGBM Clas.,1,0.9,0.946,9.92791552556521,2.067430586356608,1000 +Linear,LGBM Clas.,1,0.95,0.979,11.82984099790536,2.067430586356608,1000 +Linear,LGBM Clas.,2,0.9,0.93,7.18671690478672,1.5695466395151154,1000 +Linear,LGBM Clas.,2,0.95,0.971,8.563501377671649,1.5695466395151154,1000 +Linear,Logistic,0,0.9,0.897,5.347321418519404,1.344857338767798,1000 +Linear,Logistic,0,0.95,0.949,6.371726469960765,1.344857338767798,1000 +Linear,Logistic,1,0.9,0.901,5.430231052306794,1.3595988005998974,1000 +Linear,Logistic,1,0.95,0.947,6.470519392037281,1.3595988005998974,1000 +Linear,Logistic,2,0.9,0.898,5.376486330054867,1.3454318063315418,1000 +Linear,Logistic,2,0.95,0.947,6.406478605521755,1.3454318063315418,1000 diff --git a/results/irm/apo_metadata.csv b/results/irm/apo_metadata.csv new file mode 100644 index 0000000..443288c --- /dev/null +++ b/results/irm/apo_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,APOCoverageSimulation,2025-06-05 13:49,73.86938846111298,3.12.3,scripts/irm/apo_config.yml From df190c5cc01a38ee9f78a5667dd0e01640d08762 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 13:55:56 +0000 Subject: [PATCH 108/142] Update results from script: scripts/irm/irm_gate.py --- results/irm/irm_gate_config.yml | 63 +++++++++++++++++++++++++++++++ results/irm/irm_gate_coverage.csv | 15 ++++++++ results/irm/irm_gate_metadata.csv | 2 + 3 files changed, 80 insertions(+) create mode 100644 results/irm/irm_gate_config.yml create mode 100644 results/irm/irm_gate_coverage.csv create mode 100644 results/irm/irm_gate_metadata.csv diff --git a/results/irm/irm_gate_config.yml b/results/irm/irm_gate_config.yml new file mode 100644 index 0000000..c1206fe --- /dev/null +++ b/results/irm/irm_gate_config.yml @@ -0,0 +1,63 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + p: + - 10 + support_size: + - 5 + n_x: + - 1 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id001 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id005 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id006 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_gate_coverage.csv b/results/irm/irm_gate_coverage.csv new file mode 100644 index 0000000..30f5e71 --- /dev/null +++ b/results/irm/irm_gate_coverage.csv @@ -0,0 +1,15 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,0.9,0.9346666666666666,0.8364542894818474,0.18422904419208913,1.0,1.9724400757209293,1000 +LGBM Regr.,LGBM Clas.,0.95,0.9756666666666667,0.9966967608764793,0.18422904419208913,1.0,1.9651735219350885,1000 +LGBM Regr.,Logistic,0.9,0.9006666666666666,0.40046180389774216,0.09740590411838057,0.998,0.9434012510097336,1000 +LGBM Regr.,Logistic,0.95,0.9523333333333334,0.4771796711651552,0.09740590411838057,0.999,0.9366053028101997,1000 +Linear,LGBM Clas.,0.9,0.9226666666666666,0.8421150432332748,0.1918698759485984,1.0,1.9758022948217957,1000 +Linear,LGBM Clas.,0.95,0.9686666666666667,1.003441965006716,0.1918698759485984,1.0,1.9855094815511516,1000 +Linear,Logistic,0.9,0.9123333333333333,0.41818791810731526,0.09904291484604033,1.0,0.9842536479155779,1000 +Linear,Logistic,0.95,0.951,0.4983016390213454,0.09904291484604033,1.0,0.985193431203212,1000 +Linear,RF Clas.,0.9,0.9166666666666666,0.44173892078977606,0.10153218721035738,1.0,1.0388647556648747,1000 +Linear,RF Clas.,0.95,0.9593333333333334,0.5263643895914247,0.10153218721035738,1.0,1.0383096121913078,1000 +RF Regr.,Logistic,0.9,0.9026666666666666,0.4004544456677431,0.0967060927359184,1.0,0.9427533643825874,1000 +RF Regr.,Logistic,0.95,0.9486666666666667,0.4771709032933203,0.0967060927359184,0.999,0.9365571482746528,1000 +RF Regr.,RF Clas.,0.9,0.9026666666666666,0.4211186636375361,0.10090471591950194,1.0,0.9859887811490382,1000 +RF Regr.,RF Clas.,0.95,0.9506666666666667,0.5017938377148734,0.10090471591950194,1.0,0.9865161484854005,1000 diff --git a/results/irm/irm_gate_metadata.csv b/results/irm/irm_gate_metadata.csv new file mode 100644 index 0000000..b66fe1e --- /dev/null +++ b/results/irm/irm_gate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,IRMGATECoverageSimulation,2025-06-05 13:55,79.23283307154973,3.12.3,scripts/irm/irm_gate_config.yml From 6c9197e642fc20441898343c9b3bd71d472a3f7d Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 13:56:18 +0000 Subject: [PATCH 109/142] Update results from script: scripts/irm/irm_cate.py --- results/irm/irm_cate_config.yml | 63 +++++++++++++++++++++++++++++++ results/irm/irm_cate_coverage.csv | 15 ++++++++ results/irm/irm_cate_metadata.csv | 2 + 3 files changed, 80 insertions(+) create mode 100644 results/irm/irm_cate_config.yml create mode 100644 results/irm/irm_cate_coverage.csv create mode 100644 results/irm/irm_cate_metadata.csv diff --git a/results/irm/irm_cate_config.yml b/results/irm/irm_cate_config.yml new file mode 100644 index 0000000..c1206fe --- /dev/null +++ b/results/irm/irm_cate_config.yml @@ -0,0 +1,63 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + p: + - 10 + support_size: + - 5 + n_x: + - 1 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id001 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id005 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id006 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_cate_coverage.csv b/results/irm/irm_cate_coverage.csv new file mode 100644 index 0000000..14cd160 --- /dev/null +++ b/results/irm/irm_cate_coverage.csv @@ -0,0 +1,15 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,0.9,0.92506,1.0375110625997357,0.2365318243837263,1.0,2.596617666316375,1000 +LGBM Regr.,LGBM Clas.,0.95,0.96602,1.2362706826540963,0.2365318243837263,1.0,2.6133853117978934,1000 +LGBM Regr.,Logistic,0.9,0.89561,0.45975570518256736,0.11084262270269904,1.0,1.1581396191978983,1000 +LGBM Regr.,Logistic,0.95,0.94487,0.547832712333638,0.11084262270269904,1.0,1.1623001863971778,1000 +Linear,LGBM Clas.,0.9,0.90998,1.0435330991760245,0.2472414883409576,0.998,2.618492131430461,1000 +Linear,LGBM Clas.,0.95,0.95692,1.243446381822529,0.2472414883409576,0.999,2.626489143651275,1000 +Linear,Logistic,0.9,0.89899,0.47571933545085376,0.11363003649173503,1.0,1.1954349623588154,1000 +Linear,Logistic,0.95,0.9459299999999999,0.5668545510405528,0.11363003649173503,0.998,1.1979576781693033,1000 +Linear,RF Clas.,0.9,0.90489,0.5110714313286231,0.12032009678319744,1.0,1.2817085692658767,1000 +Linear,RF Clas.,0.95,0.9514600000000001,0.6089791714706715,0.12032009678319744,1.0,1.2861291474394618,1000 +RF Regr.,Logistic,0.9,0.89376,0.4592745091137625,0.11114309499883832,0.999,1.1543665958014406,1000 +RF Regr.,Logistic,0.95,0.94267,0.5472593318522952,0.11114309499883832,1.0,1.1532136852815742,1000 +RF Regr.,RF Clas.,0.9,0.89648,0.4916798706519477,0.11789806419426764,1.0,1.2340869862770245,1000 +RF Regr.,RF Clas.,0.95,0.9448,0.5858727017474369,0.11789806419426764,1.0,1.2368879574968341,1000 diff --git a/results/irm/irm_cate_metadata.csv b/results/irm/irm_cate_metadata.csv new file mode 100644 index 0000000..4bd0baf --- /dev/null +++ b/results/irm/irm_cate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,IRMCATECoverageSimulation,2025-06-05 13:56,79.61121084690095,3.12.3,scripts/irm/irm_cate_config.yml From 07a6398edec8e08bfe35a5f43ebca6d13145b540 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 14:11:04 +0000 Subject: [PATCH 110/142] Update results from script: scripts/irm/cvar.py --- results/irm/cvar_Y0_coverage.csv | 9 ++++ results/irm/cvar_Y1_coverage.csv | 9 ++++ results/irm/cvar_config.yml | 65 ++++++++++++++++++++++++++++ results/irm/cvar_effect_coverage.csv | 9 ++++ results/irm/cvar_metadata.csv | 2 + 5 files changed, 94 insertions(+) create mode 100644 results/irm/cvar_Y0_coverage.csv create mode 100644 results/irm/cvar_Y1_coverage.csv create mode 100644 results/irm/cvar_config.yml create mode 100644 results/irm/cvar_effect_coverage.csv create mode 100644 results/irm/cvar_metadata.csv diff --git a/results/irm/cvar_Y0_coverage.csv b/results/irm/cvar_Y0_coverage.csv new file mode 100644 index 0000000..4c25ee7 --- /dev/null +++ b/results/irm/cvar_Y0_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,0.9,0.8564285714285714,0.5599803695184898,0.15691823669038846,200 +LGBM Regr.,LGBM Clas.,0.95,0.9242857142857143,0.6672577658717421,0.15691823669038846,200 +LGBM Regr.,Logistic,0.9,0.8,0.4488498613139841,0.13502164231417138,200 +LGBM Regr.,Logistic,0.95,0.8842857142857143,0.5348375978424744,0.13502164231417138,200 +Linear,LGBM Clas.,0.9,0.7778571428571429,0.5748146502742429,0.16876670012237052,200 +Linear,LGBM Clas.,0.95,0.8607142857142857,0.6849339016332675,0.16876670012237052,200 +Linear,Logistic,0.9,0.7521428571428571,0.4599365576395126,0.14286782087753735,200 +Linear,Logistic,0.95,0.832857142857143,0.5480482113277858,0.14286782087753735,200 diff --git a/results/irm/cvar_Y1_coverage.csv b/results/irm/cvar_Y1_coverage.csv new file mode 100644 index 0000000..8fddf73 --- /dev/null +++ b/results/irm/cvar_Y1_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,0.9,0.9014285714285714,0.19064863373047444,0.046573467818208994,200 +LGBM Regr.,LGBM Clas.,0.95,0.9535714285714286,0.22717185875440954,0.046573467818208994,200 +LGBM Regr.,Logistic,0.9,0.8921428571428571,0.18035991253115108,0.044703609418269445,200 +LGBM Regr.,Logistic,0.95,0.942857142857143,0.2149120912789158,0.044703609418269445,200 +Linear,LGBM Clas.,0.9,0.9064285714285714,0.21197545188306893,0.04818749120158227,200 +Linear,LGBM Clas.,0.95,0.957857142857143,0.25258432999137354,0.04818749120158227,200 +Linear,Logistic,0.9,0.9007142857142857,0.1965222149886573,0.04731821601748326,200 +Linear,Logistic,0.95,0.9457142857142857,0.23417066250063942,0.04731821601748326,200 diff --git a/results/irm/cvar_config.yml b/results/irm/cvar_config.yml new file mode 100644 index 0000000..5157d7e --- /dev/null +++ b/results/irm/cvar_config.yml @@ -0,0 +1,65 @@ +simulation_parameters: + repetitions: 200 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 5000 + dim_x: + - 5 +learner_definitions: + linear: &id001 + name: Linear + logit: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 200 + learning_rate: 0.05 + num_leaves: 15 + max_depth: 5 + min_child_samples: 10 + subsample: 0.9 + colsample_bytree: 0.9 + reg_alpha: 0.0 + reg_lambda: 0.1 + random_state: 42 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 200 + learning_rate: 0.05 + num_leaves: 15 + max_depth: 5 + min_child_samples: 10 + subsample: 0.9 + colsample_bytree: 0.9 + reg_alpha: 0.0 + reg_lambda: 0.1 + random_state: 42 +dml_parameters: + tau_vec: + - - 0.2 + - 0.3 + - 0.4 + - 0.5 + - 0.6 + - 0.7 + - 0.8 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id004 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/cvar_effect_coverage.csv b/results/irm/cvar_effect_coverage.csv new file mode 100644 index 0000000..b17f3f4 --- /dev/null +++ b/results/irm/cvar_effect_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,0.9,0.8357142857142857,0.572356196179233,0.16148728231793735,0.8,0.6933257488655766,200 +LGBM Regr.,LGBM Clas.,0.95,0.912142857142857,0.6820044728957118,0.16148728231793735,0.89,0.7996943722331994,200 +LGBM Regr.,Logistic,0.9,0.812142857142857,0.4603475364424448,0.13621838163720854,0.785,0.5540435315601864,200 +LGBM Regr.,Logistic,0.95,0.885,0.5485379227762442,0.13621838163720854,0.86,0.6395859491088156,200 +Linear,LGBM Clas.,0.9,0.7835714285714286,0.6002467096290228,0.17327648690690606,0.75,0.7089505880560413,200 +Linear,LGBM Clas.,0.95,0.8592857142857143,0.7152380694761148,0.17327648690690606,0.815,0.8220830080641385,200 +Linear,Logistic,0.9,0.7742857142857144,0.48428688399508923,0.14834465693639912,0.755,0.5678723651822354,200 +Linear,Logistic,0.95,0.85,0.5770634148004378,0.14834465693639912,0.82,0.6581721908143731,200 diff --git a/results/irm/cvar_metadata.csv b/results/irm/cvar_metadata.csv new file mode 100644 index 0000000..6db12ae --- /dev/null +++ b/results/irm/cvar_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,CVARCoverageSimulation,2025-06-05 14:11,94.70462875763575,3.12.3,scripts/irm/cvar_config.yml From b614f94da3d9951d47ce58eb68271ad87acac23d Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 14:29:18 +0000 Subject: [PATCH 111/142] Update results from script: scripts/irm/lpq.py --- results/irm/lpq_Y0_coverage.csv | 9 ++++++ results/irm/lpq_Y1_coverage.csv | 9 ++++++ results/irm/lpq_config.yml | 48 +++++++++++++++++++++++++++++ results/irm/lpq_effect_coverage.csv | 9 ++++++ results/irm/lpq_metadata.csv | 2 ++ 5 files changed, 77 insertions(+) create mode 100644 results/irm/lpq_Y0_coverage.csv create mode 100644 results/irm/lpq_Y1_coverage.csv create mode 100644 results/irm/lpq_config.yml create mode 100644 results/irm/lpq_effect_coverage.csv create mode 100644 results/irm/lpq_metadata.csv diff --git a/results/irm/lpq_Y0_coverage.csv b/results/irm/lpq_Y0_coverage.csv new file mode 100644 index 0000000..fa7c0a3 --- /dev/null +++ b/results/irm/lpq_Y0_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Clas.,LGBM Clas.,0.9,0.938,1.182292560755257,0.23325691846991042,200 +LGBM Clas.,LGBM Clas.,0.95,0.9690000000000001,1.4087884783794826,0.23325691846991042,200 +LGBM Clas.,Logistic,0.9,0.9390000000000001,1.137086069984906,0.22432594978342146,200 +LGBM Clas.,Logistic,0.95,0.9690000000000001,1.3549216221890352,0.22432594978342146,200 +Logistic,LGBM Clas.,0.9,0.938,1.1527775627918269,0.22374215890669022,200 +Logistic,LGBM Clas.,0.95,0.9690000000000001,1.3736191891100717,0.22374215890669022,200 +Logistic,Logistic,0.9,0.943,1.111906655099774,0.2212690310065874,200 +Logistic,Logistic,0.95,0.9690000000000001,1.3249184987998035,0.2212690310065874,200 diff --git a/results/irm/lpq_Y1_coverage.csv b/results/irm/lpq_Y1_coverage.csv new file mode 100644 index 0000000..ba4fa63 --- /dev/null +++ b/results/irm/lpq_Y1_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Clas.,LGBM Clas.,0.9,0.946,1.6296637808266206,0.31922961803439465,200 +LGBM Clas.,LGBM Clas.,0.95,0.965,1.9418641665090766,0.31922961803439465,200 +LGBM Clas.,Logistic,0.9,0.94,1.5840129690335032,0.3094090506782375,200 +LGBM Clas.,Logistic,0.95,0.97,1.8874678691647622,0.3094090506782375,200 +Logistic,LGBM Clas.,0.9,0.93,1.5829510778239204,0.31056212030323144,200 +Logistic,LGBM Clas.,0.95,0.965,1.8862025477451665,0.31056212030323144,200 +Logistic,Logistic,0.9,0.941,1.5420148214413294,0.2867899782486625,200 +Logistic,Logistic,0.95,0.97,1.8374239896673397,0.2867899782486625,200 diff --git a/results/irm/lpq_config.yml b/results/irm/lpq_config.yml new file mode 100644 index 0000000..85abd3f --- /dev/null +++ b/results/irm/lpq_config.yml @@ -0,0 +1,48 @@ +simulation_parameters: + repetitions: 200 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 5000 + dim_x: + - 5 +learner_definitions: + logit: &id001 + name: Logistic + lgbmc: &id002 + name: LGBM Clas. + params: + n_estimators: 200 + learning_rate: 0.05 + num_leaves: 15 + max_depth: 5 + min_child_samples: 10 + subsample: 0.9 + colsample_bytree: 0.9 + reg_alpha: 0.0 + reg_lambda: 0.1 + random_state: 42 +dml_parameters: + tau_vec: + - - 0.3 + - 0.4 + - 0.5 + - 0.6 + - 0.7 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id002 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/lpq_effect_coverage.csv b/results/irm/lpq_effect_coverage.csv new file mode 100644 index 0000000..2e1488a --- /dev/null +++ b/results/irm/lpq_effect_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Clas.,LGBM Clas.,0.9,0.882,1.6179566817511408,0.38892858697985444,0.85,2.134204151727998,200 +LGBM Clas.,LGBM Clas.,0.95,0.9329999999999999,1.9279142975508834,0.38892858697985444,0.93,2.4114959415166863,200 +LGBM Clas.,Logistic,0.9,0.907,1.57231832862624,0.36746763608272737,0.865,2.0750759388885753,200 +LGBM Clas.,Logistic,0.95,0.9520000000000001,1.873532845625395,0.36746763608272737,0.935,2.3491301230114727,200 +Logistic,LGBM Clas.,0.9,0.892,1.5819115069451675,0.37355342356664595,0.835,2.0754682406547134,200 +Logistic,LGBM Clas.,0.95,0.943,1.8849638226401801,0.37355342356664595,0.93,2.3505474278366396,200 +Logistic,Logistic,0.9,0.895,1.5376032362171548,0.3646953928818029,0.86,2.0170674200183667,200 +Logistic,Logistic,0.95,0.941,1.8321672616445936,0.3646953928818029,0.91,2.2852783686545495,200 diff --git a/results/irm/lpq_metadata.csv b/results/irm/lpq_metadata.csv new file mode 100644 index 0000000..47bab20 --- /dev/null +++ b/results/irm/lpq_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,LPQCoverageSimulation,2025-06-05 14:29,112.94002043803533,3.12.3,scripts/irm/lpq_config.yml From 4495d6017cfce946d7913fb7d03a883aad1d4ae4 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 14:33:35 +0000 Subject: [PATCH 112/142] Update results from script: scripts/irm/pq.py --- results/irm/pq_Y0_coverage.csv | 9 ++++++ results/irm/pq_Y1_coverage.csv | 9 ++++++ results/irm/pq_config.yml | 50 ++++++++++++++++++++++++++++++ results/irm/pq_effect_coverage.csv | 9 ++++++ results/irm/pq_metadata.csv | 2 ++ 5 files changed, 79 insertions(+) create mode 100644 results/irm/pq_Y0_coverage.csv create mode 100644 results/irm/pq_Y1_coverage.csv create mode 100644 results/irm/pq_config.yml create mode 100644 results/irm/pq_effect_coverage.csv create mode 100644 results/irm/pq_metadata.csv diff --git a/results/irm/pq_Y0_coverage.csv b/results/irm/pq_Y0_coverage.csv new file mode 100644 index 0000000..ff0b3ac --- /dev/null +++ b/results/irm/pq_Y0_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Clas.,LGBM Clas.,0.9,0.8835714285714286,0.5723701824339644,0.14549176231056815,200 +LGBM Clas.,LGBM Clas.,0.95,0.9378571428571427,0.6820211385461397,0.14549176231056815,200 +LGBM Clas.,Logistic,0.9,0.84,0.4044754891818755,0.1130627263596336,200 +LGBM Clas.,Logistic,0.95,0.9078571428571429,0.4819622721658046,0.1130627263596336,200 +Logistic,LGBM Clas.,0.9,0.8878571428571429,0.5701038626834825,0.14084059793538922,200 +Logistic,LGBM Clas.,0.95,0.9328571428571429,0.6793206520009456,0.14084059793538922,200 +Logistic,Logistic,0.9,0.8521428571428571,0.40381464298983716,0.10742954627392248,200 +Logistic,Logistic,0.95,0.9207142857142857,0.4811748253592969,0.10742954627392248,200 diff --git a/results/irm/pq_Y1_coverage.csv b/results/irm/pq_Y1_coverage.csv new file mode 100644 index 0000000..3cb5336 --- /dev/null +++ b/results/irm/pq_Y1_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Clas.,LGBM Clas.,0.9,0.9114285714285714,0.25322340912372693,0.05863607300930684,200 +LGBM Clas.,LGBM Clas.,0.95,0.9514285714285714,0.3017343025499488,0.05863607300930684,200 +LGBM Clas.,Logistic,0.9,0.9028571428571429,0.23575937348166215,0.057047735482004806,200 +LGBM Clas.,Logistic,0.95,0.9507142857142857,0.2809246205683309,0.057047735482004806,200 +Logistic,LGBM Clas.,0.9,0.9178571428571429,0.2536257290831553,0.0584307589677001,200 +Logistic,LGBM Clas.,0.95,0.9607142857142857,0.3022136963499933,0.0584307589677001,200 +Logistic,Logistic,0.9,0.8971428571428571,0.2359931637120258,0.05685852446847999,200 +Logistic,Logistic,0.95,0.9407142857142857,0.28120319881015254,0.05685852446847999,200 diff --git a/results/irm/pq_config.yml b/results/irm/pq_config.yml new file mode 100644 index 0000000..e106878 --- /dev/null +++ b/results/irm/pq_config.yml @@ -0,0 +1,50 @@ +simulation_parameters: + repetitions: 200 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 5000 + dim_x: + - 5 +learner_definitions: + logit: &id001 + name: Logistic + lgbmc: &id002 + name: LGBM Clas. + params: + n_estimators: 200 + learning_rate: 0.05 + num_leaves: 15 + max_depth: 5 + min_child_samples: 10 + subsample: 0.9 + colsample_bytree: 0.9 + reg_alpha: 0.0 + reg_lambda: 0.1 + random_state: 42 +dml_parameters: + tau_vec: + - - 0.2 + - 0.3 + - 0.4 + - 0.5 + - 0.6 + - 0.7 + - 0.8 + trimming_threshold: + - 0.01 + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id002 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/pq_effect_coverage.csv b/results/irm/pq_effect_coverage.csv new file mode 100644 index 0000000..710de75 --- /dev/null +++ b/results/irm/pq_effect_coverage.csv @@ -0,0 +1,9 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Clas.,LGBM Clas.,0.9,0.8857142857142857,0.6119091533344946,0.15466123618513827,0.83,0.87431953800783,200 +LGBM Clas.,LGBM Clas.,0.95,0.9392857142857143,0.7291347282790106,0.15466123618513827,0.895,0.9724716396352252,200 +LGBM Clas.,Logistic,0.9,0.8414285714285714,0.44675957755153617,0.12877194950989979,0.725,0.6418465368141598,200 +LGBM Clas.,Logistic,0.95,0.9028571428571429,0.5323468711147352,0.12877194950989979,0.835,0.7132416415357535,200 +Logistic,LGBM Clas.,0.9,0.89,0.6129040235808955,0.15303926661598033,0.83,0.8645516927626398,200 +Logistic,LGBM Clas.,0.95,0.94,0.7303201892952897,0.15303926661598033,0.88,0.9644960349693998,200 +Logistic,Logistic,0.9,0.8592857142857143,0.45040188642196527,0.12179153217631539,0.785,0.6382066580620731,200 +Logistic,Logistic,0.95,0.925,0.536686949824257,0.12179153217631539,0.865,0.7120923308029136,200 diff --git a/results/irm/pq_metadata.csv b/results/irm/pq_metadata.csv new file mode 100644 index 0000000..bf12575 --- /dev/null +++ b/results/irm/pq_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,PQCoverageSimulation,2025-06-05 14:33,117.12256911595662,3.12.3,scripts/irm/pq_config.yml From 8f56dbfc24cad1317e26f27a6e83dcdd3c7159f5 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 14:42:27 +0000 Subject: [PATCH 113/142] Update results from script: scripts/irm/irm_ate.py --- results/irm/irm_ate_config.yml | 61 ++++++++++++++++++++++++++++++++ results/irm/irm_ate_coverage.csv | 15 ++++++++ results/irm/irm_ate_metadata.csv | 2 ++ 3 files changed, 78 insertions(+) create mode 100644 results/irm/irm_ate_config.yml create mode 100644 results/irm/irm_ate_coverage.csv create mode 100644 results/irm/irm_ate_metadata.csv diff --git a/results/irm/irm_ate_config.yml b/results/irm/irm_ate_config.yml new file mode 100644 index 0000000..d19a50a --- /dev/null +++ b/results/irm/irm_ate_config.yml @@ -0,0 +1,61 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id001 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id005 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id006 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_ate_coverage.csv b/results/irm/irm_ate_coverage.csv new file mode 100644 index 0000000..46ebf4c --- /dev/null +++ b/results/irm/irm_ate_coverage.csv @@ -0,0 +1,15 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,0.9,0.928,1.1983115160037485,0.2840471834602478,1000 +LGBM Regr.,LGBM Clas.,0.95,0.98,1.4278762408664047,0.2840471834602478,1000 +LGBM Regr.,Logistic,0.9,0.928,0.771069826261061,0.1773323727171827,1000 +LGBM Regr.,Logistic,0.95,0.97,0.9187863675372636,0.1773323727171827,1000 +LassoCV,LGBM Clas.,0.9,0.943,1.0988039710069317,0.25576093311987325,1000 +LassoCV,LGBM Clas.,0.95,0.979,1.3093056877253173,0.25576093311987325,1000 +LassoCV,Logistic,0.9,0.927,0.6575776853999991,0.1495642781049785,1000 +LassoCV,Logistic,0.95,0.968,0.7835521406302206,0.1495642781049785,1000 +LassoCV,RF Clas.,0.9,0.926,0.5837441390355065,0.13723792736069168,1000 +LassoCV,RF Clas.,0.95,0.962,0.6955740437624297,0.13723792736069168,1000 +RF Regr.,Logistic,0.9,0.918,0.743232966143666,0.1705153153049291,1000 +RF Regr.,Logistic,0.95,0.968,0.8856167028456445,0.1705153153049291,1000 +RF Regr.,RF Clas.,0.9,0.905,0.6164614614548363,0.14356423385388378,1000 +RF Regr.,RF Clas.,0.95,0.951,0.7345591379749272,0.14356423385388378,1000 diff --git a/results/irm/irm_ate_metadata.csv b/results/irm/irm_ate_metadata.csv new file mode 100644 index 0000000..03c5799 --- /dev/null +++ b/results/irm/irm_ate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,IRMATECoverageSimulation,2025-06-05 14:42,125.66061746279398,3.12.3,scripts/irm/irm_ate_config.yml From 4900fb023186978f57cf71daa54aac1604210b40 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 14:42:47 +0000 Subject: [PATCH 114/142] Update results from script: scripts/irm/irm_atte.py --- results/irm/irm_atte_config.yml | 61 +++++++++++++++++++++++++++++++ results/irm/irm_atte_coverage.csv | 15 ++++++++ results/irm/irm_atte_metadata.csv | 2 + 3 files changed, 78 insertions(+) create mode 100644 results/irm/irm_atte_config.yml create mode 100644 results/irm/irm_atte_coverage.csv create mode 100644 results/irm/irm_atte_metadata.csv diff --git a/results/irm/irm_atte_config.yml b/results/irm/irm_atte_config.yml new file mode 100644 index 0000000..2d3c69a --- /dev/null +++ b/results/irm/irm_atte_config.yml @@ -0,0 +1,61 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 20 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 20 + min_samples_leaf: 20 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id001 + ml_m: *id004 + - ml_g: *id003 + ml_m: *id002 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id005 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id006 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/irm/irm_atte_coverage.csv b/results/irm/irm_atte_coverage.csv new file mode 100644 index 0000000..5b68231 --- /dev/null +++ b/results/irm/irm_atte_coverage.csv @@ -0,0 +1,15 @@ +Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,0.9,0.927,1.5064451215730035,0.34563899658615477,1000 +LGBM Regr.,LGBM Clas.,0.95,0.974,1.7950400780897324,0.34563899658615477,1000 +LGBM Regr.,Logistic,0.9,0.926,0.853133738564191,0.2115612747662681,1000 +LGBM Regr.,Logistic,0.95,0.969,1.016571550309234,0.2115612747662681,1000 +LassoCV,LGBM Clas.,0.9,0.912,1.3899632828213013,0.3405205709305417,1000 +LassoCV,LGBM Clas.,0.95,0.977,1.6562434064190357,0.3405205709305417,1000 +LassoCV,Logistic,0.9,0.918,0.7956786618509171,0.19501674862485438,1000 +LassoCV,Logistic,0.95,0.962,0.9481096037616187,0.19501674862485438,1000 +LassoCV,RF Clas.,0.9,0.895,0.5793446092118805,0.1467183519931486,1000 +LassoCV,RF Clas.,0.95,0.945,0.6903316806354453,0.1467183519931486,1000 +RF Regr.,Logistic,0.9,0.915,0.8295563252373992,0.200468421193765,1000 +RF Regr.,Logistic,0.95,0.963,0.9884773295153919,0.200468421193765,1000 +RF Regr.,RF Clas.,0.9,0.881,0.5967830827952515,0.15670311644434254,1000 +RF Regr.,RF Clas.,0.95,0.939,0.7111109035454538,0.15670311644434254,1000 diff --git a/results/irm/irm_atte_metadata.csv b/results/irm/irm_atte_metadata.csv new file mode 100644 index 0000000..876cac0 --- /dev/null +++ b/results/irm/irm_atte_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,IRMATTECoverageSimulation,2025-06-05 14:42,126.08159985939662,3.12.3,scripts/irm/irm_atte_config.yml From ce79b56f549269978f9d2d50e36e424f092db2c5 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 15:41:49 +0000 Subject: [PATCH 115/142] Update results from script: scripts/plm/plr_cate.py --- results/plm/plr_cate_config.yml | 52 +++++++++++++++++++++++++++++++ results/plm/plr_cate_coverage.csv | 29 +++++++++++++++++ results/plm/plr_cate_metadata.csv | 2 ++ 3 files changed, 83 insertions(+) create mode 100644 results/plm/plr_cate_config.yml create mode 100644 results/plm/plr_cate_coverage.csv create mode 100644 results/plm/plr_cate_metadata.csv diff --git a/results/plm/plr_cate_config.yml b/results/plm/plr_cate_config.yml new file mode 100644 index 0000000..20ce744 --- /dev/null +++ b/results/plm/plr_cate_config.yml @@ -0,0 +1,52 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + p: + - 10 + support_size: + - 5 + n_x: + - 1 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 2 + lgbm: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id003 + ml_m: *id003 + - ml_g: *id003 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id003 + score: + - partialling out + - IV-type +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/plr_cate_coverage.csv b/results/plm/plr_cate_coverage.csv new file mode 100644 index 0000000..c95af2f --- /dev/null +++ b/results/plm/plr_cate_coverage.csv @@ -0,0 +1,29 @@ +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.81092,0.34748895671048663,0.10460813293283802,0.981,0.8749566905579788,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.87944,0.4140586305179147,0.10460813293283802,0.976,0.8752701592984206,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.74924,0.45498586012385417,0.15429490050948075,0.974,1.1431727401739051,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.83409,0.5421490913878395,0.15429490050948075,0.979,1.1448962771888775,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.88,0.36554268929918754,0.09244785218836214,0.998,0.9180115191244616,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.9358200000000001,0.43557097975105097,0.09244785218836214,1.0,0.922278240560451,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.8425499999999999,0.6463383782822439,0.17877605236642957,0.993,1.6252735422347984,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.90764,0.7701596801698865,0.17877605236642957,0.99,1.6258971712277042,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.77804,0.356611018165839,0.11531004698375871,0.98,0.8990196528636599,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.85509,0.42492823716515665,0.11531004698375871,0.973,0.897125005016581,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.11495,0.5626129349999418,0.5271527276193878,0.232,1.4094053511501499,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.17364000000000002,0.6703946611225079,0.5271527276193878,0.245,1.415448802418257,1000 +LassoCV,LassoCV,IV-type,0.9,0.8912100000000001,0.36244677298144845,0.08838657089890865,0.999,0.913576206576413,1000 +LassoCV,LassoCV,IV-type,0.95,0.94274,0.43188196792501726,0.08838657089890865,0.998,0.912240620292473,1000 +LassoCV,LassoCV,partialling out,0.9,0.88858,0.3775763713434813,0.09330414285601538,0.997,0.9491441464568747,1000 +LassoCV,LassoCV,partialling out,0.95,0.94064,0.4499099963187045,0.09330414285601538,0.997,0.9487107676660669,1000 +LassoCV,RF Regr.,IV-type,0.9,0.89254,0.3599305351929274,0.08850837997692952,1.0,0.9044665568509359,1000 +LassoCV,RF Regr.,IV-type,0.95,0.94188,0.4288836856698476,0.08850837997692952,0.999,0.9044733402499352,1000 +LassoCV,RF Regr.,partialling out,0.9,0.77416,0.43217879712767876,0.1405937817588716,0.981,1.090157100332438,1000 +LassoCV,RF Regr.,partialling out,0.95,0.85737,0.5149727996295947,0.1405937817588716,0.978,1.087530105804212,1000 +RF Regr.,LassoCV,IV-type,0.9,0.8807699999999999,0.3475079221052468,0.08785236408566467,0.996,0.8749646348632354,1000 +RF Regr.,LassoCV,IV-type,0.95,0.93665,0.4140812291796275,0.08785236408566467,0.998,0.8759773436970753,1000 +RF Regr.,LassoCV,partialling out,0.9,0.8651,0.44409447433118815,0.11793812231956644,0.995,1.113461220582107,1000 +RF Regr.,LassoCV,partialling out,0.95,0.9245099999999999,0.5291712047567231,0.11793812231956644,0.995,1.1193035806604223,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.8769600000000001,0.3430202960561061,0.08782119424850063,0.997,0.8607856773588846,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.9322,0.4087338929253366,0.08782119424850063,0.998,0.8634371330487173,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.88322,0.3831582275710224,0.09673737638816682,0.996,0.9645065365685301,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.9354,0.45656118825068054,0.09673737638816682,0.998,0.9640177197875869,1000 diff --git a/results/plm/plr_cate_metadata.csv b/results/plm/plr_cate_metadata.csv new file mode 100644 index 0000000..be41517 --- /dev/null +++ b/results/plm/plr_cate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,PLRCATECoverageSimulation,2025-06-05 15:41,185.28740434646608,3.12.3,scripts/plm/plr_cate_config.yml From e7d2beec474db257a6a2e1e71a4891fa52af12c9 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 15:40:49 +0000 Subject: [PATCH 116/142] Update results from script: scripts/plm/plr_gate.py --- results/plm/plr_gate_config.yml | 52 +++++++++++++++++++++++++++++++ results/plm/plr_gate_coverage.csv | 29 +++++++++++++++++ results/plm/plr_gate_metadata.csv | 2 ++ 3 files changed, 83 insertions(+) create mode 100644 results/plm/plr_gate_config.yml create mode 100644 results/plm/plr_gate_coverage.csv create mode 100644 results/plm/plr_gate_metadata.csv diff --git a/results/plm/plr_gate_config.yml b/results/plm/plr_gate_config.yml new file mode 100644 index 0000000..20ce744 --- /dev/null +++ b/results/plm/plr_gate_config.yml @@ -0,0 +1,52 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 500 + p: + - 10 + support_size: + - 5 + n_x: + - 1 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 2 + lgbm: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id003 + ml_m: *id003 + - ml_g: *id003 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id003 + score: + - partialling out + - IV-type +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/plr_gate_coverage.csv b/results/plm/plr_gate_coverage.csv new file mode 100644 index 0000000..df0c44b --- /dev/null +++ b/results/plm/plr_gate_coverage.csv @@ -0,0 +1,29 @@ +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.8023333333333333,0.340614107591605,0.10669475143783842,0.987,0.7987268267983838,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.8706666666666666,0.40586674252777905,0.10669475143783842,0.988,0.7989724883932184,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.725,0.41206326461441856,0.14116055364172336,0.982,0.9688824136316435,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.816,0.4910036642549748,0.14116055364172336,0.978,0.963097819307053,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.884,0.3584385924494663,0.09037899338673383,0.999,0.8422006093284867,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.94,0.4271059262411261,0.09037899338673383,0.999,0.8410103142728071,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.846,0.5546020564560807,0.15058630900692344,0.995,1.3030240395599795,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.9063333333333333,0.6608491105803649,0.15058630900692344,0.998,1.3052579182429735,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.7443333333333334,0.3533683685919372,0.12308426099091321,0.984,0.8290587683546056,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.828,0.4210643818802881,0.12308426099091321,0.986,0.8297177472370508,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.12766666666666665,0.4805861056396863,0.48492787025671996,0.166,1.1277373422329622,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.18,0.5726536654023722,0.48492787025671996,0.163,1.1286363645960298,1000 +LassoCV,LassoCV,IV-type,0.9,0.908,0.35675825943241785,0.08468553801157398,0.998,0.8347654007058711,1000 +LassoCV,LassoCV,IV-type,0.95,0.9536666666666667,0.42510368595573833,0.08468553801157398,1.0,0.8406082357109622,1000 +LassoCV,LassoCV,partialling out,0.9,0.897,0.3685816198393858,0.08926222502259333,0.999,0.8634981533000406,1000 +LassoCV,LassoCV,partialling out,0.95,0.9493333333333334,0.43919208883499217,0.08926222502259333,0.998,0.8629765470291304,1000 +LassoCV,RF Regr.,IV-type,0.9,0.9046666666666666,0.35535128701248625,0.08564429580896525,0.998,0.8309506852608253,1000 +LassoCV,RF Regr.,IV-type,0.95,0.9526666666666667,0.423427174912371,0.08564429580896525,0.997,0.8339321583590988,1000 +LassoCV,RF Regr.,partialling out,0.9,0.7333333333333334,0.4028059779258174,0.13583622582602936,0.98,0.9463483076426671,1000 +LassoCV,RF Regr.,partialling out,0.95,0.8286666666666667,0.4799729268039788,0.13583622582602936,0.988,0.9464873702847479,1000 +RF Regr.,LassoCV,IV-type,0.9,0.8856666666666666,0.34695511339781726,0.0872292667085423,0.999,0.8159480135750993,1000 +RF Regr.,LassoCV,IV-type,0.95,0.936,0.41342251697621396,0.0872292667085423,0.998,0.8161295955897384,1000 +RF Regr.,LassoCV,partialling out,0.9,0.86,0.4138648906001244,0.108596480808861,0.999,0.97698823470601,1000 +RF Regr.,LassoCV,partialling out,0.95,0.9236666666666666,0.4931504340269086,0.108596480808861,0.999,0.9729165052534585,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.8836666666666666,0.34359869293370354,0.08702820649024633,1.0,0.8068440871102968,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.9393333333333334,0.4094230953141002,0.08702820649024633,0.998,0.8071122999062327,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.8806666666666666,0.3685754520029418,0.09347367483176777,1.0,0.8690762276450229,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.9383333333333334,0.4391847394045658,0.09347367483176777,1.0,0.8688884478341746,1000 diff --git a/results/plm/plr_gate_metadata.csv b/results/plm/plr_gate_metadata.csv new file mode 100644 index 0000000..c820b6d --- /dev/null +++ b/results/plm/plr_gate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,PLRGATECoverageSimulation,2025-06-05 15:40,184.26536533435186,3.12.3,scripts/plm/plr_gate_config.yml From 65b80f00591bb90684adbed3614b2309f6e0c106 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 15:50:42 +0000 Subject: [PATCH 117/142] Update results from script: scripts/plm/plr_ate.py --- results/plm/plr_ate_config.yml | 50 ++++++++++++++++++++++++++++++++ results/plm/plr_ate_coverage.csv | 29 ++++++++++++++++++ results/plm/plr_ate_metadata.csv | 2 ++ 3 files changed, 81 insertions(+) create mode 100644 results/plm/plr_ate_config.yml create mode 100644 results/plm/plr_ate_coverage.csv create mode 100644 results/plm/plr_ate_metadata.csv diff --git a/results/plm/plr_ate_config.yml b/results/plm/plr_ate_config.yml new file mode 100644 index 0000000..d504ba6 --- /dev/null +++ b/results/plm/plr_ate_config.yml @@ -0,0 +1,50 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 20 + lgbm: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id003 + ml_m: *id003 + - ml_g: *id003 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id003 + score: + - partialling out + - IV-type +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/plr_ate_coverage.csv b/results/plm/plr_ate_coverage.csv new file mode 100644 index 0000000..751fcac --- /dev/null +++ b/results/plm/plr_ate_coverage.csv @@ -0,0 +1,29 @@ +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.885,0.15983740265821775,0.041136505215158464,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.935,0.19045801246956545,0.041136505215158464,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.824,0.14652019534658833,0.04246199234429185,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.893,0.17458958121357435,0.04246199234429185,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.883,0.14837154235030955,0.037547727902696455,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.937,0.17679559723270477,0.037547727902696455,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.887,0.15933257799041745,0.04021756501464064,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.941,0.1898564767759428,0.04021756501464064,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.874,0.1504138026201527,0.0384034628252421,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.945,0.17922910043953308,0.0384034628252421,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.521,0.13901722228563204,0.06873936210074709,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.64,0.16564923738267465,0.06873936210074709,1000 +LassoCV,LassoCV,IV-type,0.9,0.876,0.13984950388376818,0.03654175128573881,1000 +LassoCV,LassoCV,IV-type,0.95,0.934,0.16664096207514204,0.03654175128573881,1000 +LassoCV,LassoCV,partialling out,0.9,0.9,0.1468437970720089,0.03588220373374918,1000 +LassoCV,LassoCV,partialling out,0.95,0.946,0.17497517645242536,0.03588220373374918,1000 +LassoCV,RF Regr.,IV-type,0.9,0.837,0.13013644240026234,0.036636608615855826,1000 +LassoCV,RF Regr.,IV-type,0.95,0.907,0.1550671354589842,0.036636608615855826,1000 +LassoCV,RF Regr.,partialling out,0.9,0.773,0.14296223702800953,0.046042984436838075,1000 +LassoCV,RF Regr.,partialling out,0.95,0.859,0.17035001238590083,0.046042984436838075,1000 +RF Regr.,LassoCV,IV-type,0.9,0.884,0.141016616428934,0.03611493633659719,1000 +RF Regr.,LassoCV,IV-type,0.95,0.929,0.168031662449296,0.03611493633659719,1000 +RF Regr.,LassoCV,partialling out,0.9,0.885,0.15062723475769935,0.037683080056869614,1000 +RF Regr.,LassoCV,partialling out,0.95,0.943,0.1794834205175513,0.037683080056869614,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.841,0.1314513341669066,0.037780418069974564,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.9,0.15663392563651957,0.037780418069974564,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.876,0.14238380316163346,0.0364464310437898,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.929,0.16966076592228904,0.0364464310437898,1000 diff --git a/results/plm/plr_ate_metadata.csv b/results/plm/plr_ate_metadata.csv new file mode 100644 index 0000000..c6aa9c1 --- /dev/null +++ b/results/plm/plr_ate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,PLRATECoverageSimulation,2025-06-05 15:50,194.21264092922212,3.12.3,scripts/plm/plr_ate_config.yml From dd729b666dad7a356f0a2cf310ab88da81f08f08 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 16:23:49 +0000 Subject: [PATCH 118/142] Update results from script: scripts/plm/plr_ate_sensitivity.py --- results/plm/plr_ate_sensitivity_config.yml | 49 ++++++++++++++++++++ results/plm/plr_ate_sensitivity_coverage.csv | 29 ++++++++++++ results/plm/plr_ate_sensitivity_metadata.csv | 2 + 3 files changed, 80 insertions(+) create mode 100644 results/plm/plr_ate_sensitivity_config.yml create mode 100644 results/plm/plr_ate_sensitivity_coverage.csv create mode 100644 results/plm/plr_ate_sensitivity_metadata.csv diff --git a/results/plm/plr_ate_sensitivity_config.yml b/results/plm/plr_ate_sensitivity_config.yml new file mode 100644 index 0000000..f575860 --- /dev/null +++ b/results/plm/plr_ate_sensitivity_config.yml @@ -0,0 +1,49 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 1000 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: + n_estimators: 200 + max_features: 10 + max_depth: 5 + min_samples_leaf: 2 + lgbm: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.05 + min_child_samples: 5 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + - ml_g: *id002 + ml_m: *id002 + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id002 + ml_m: *id001 + - ml_g: *id003 + ml_m: *id003 + - ml_g: *id003 + ml_m: *id001 + - ml_g: *id001 + ml_m: *id003 + score: + - partialling out + - IV-type +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/plr_ate_sensitivity_coverage.csv b/results/plm/plr_ate_sensitivity_coverage.csv new file mode 100644 index 0000000..cd2031e --- /dev/null +++ b/results/plm/plr_ate_sensitivity_coverage.csv @@ -0,0 +1,29 @@ +Learner g,Learner m,Score,level,Coverage,CI Length,Bias,Coverage (Lower),Coverage (Upper),RV,RVa,Bias (Lower),Bias (Upper),repetition +LGBM Regr.,LGBM Regr.,IV-type,0.9,0.388,1.4093565939481743,0.7570214454341684,1.0,0.992,0.10345660369135473,0.03229286770316017,1.4538012313284263,0.2824074286090704,1000 +LGBM Regr.,LGBM Regr.,IV-type,0.95,0.577,1.6793519619323294,0.7570214454341684,1.0,1.0,0.10345660369135473,0.018230572464796476,1.4538012313284263,0.2824074286090704,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.9,0.205,1.10817064601718,0.74843530520864,1.0,0.973,0.10230834250567276,0.04378686178903142,1.4469171977836348,0.26847190174256996,1000 +LGBM Regr.,LGBM Regr.,partialling out,0.95,0.328,1.3204667694010184,0.74843530520864,1.0,0.995,0.10230834250567276,0.02998497094011609,1.4469171977836348,0.26847190174256996,1000 +LGBM Regr.,LassoCV,IV-type,0.9,0.02,1.521119145022205,1.4608769656478595,1.0,0.359,0.1858831134654844,0.10989835156011962,2.1959840483158897,0.7297672680739162,1000 +LGBM Regr.,LassoCV,IV-type,0.95,0.045,1.8125252554924385,1.4608769656478595,1.0,0.58,0.1858831134654844,0.08960405454511797,2.1959840483158897,0.7297672680739162,1000 +LGBM Regr.,LassoCV,partialling out,0.9,0.021,1.5093401960317487,1.3250609990655347,1.0,0.537,0.17222024016738868,0.09586170007661886,2.053549895430398,0.6003221955363113,1000 +LGBM Regr.,LassoCV,partialling out,0.95,0.079,1.7984897720799624,1.3250609990655347,1.0,0.765,0.17222024016738868,0.07549935380647549,2.053549895430398,0.6003221955363113,1000 +LassoCV,LGBM Regr.,IV-type,0.9,0.748,2.5133664291353095,1.0223715401643154,1.0,1.0,0.06817434769512887,0.010427835528562208,2.534255845067475,0.5860957184805163,1000 +LassoCV,LGBM Regr.,IV-type,0.95,0.926,2.9948608194317967,1.0223715401643154,1.0,1.0,0.06817434769512887,0.0031611418652559196,2.534255845067475,0.5860957184805163,1000 +LassoCV,LGBM Regr.,partialling out,0.9,0.605,1.9815232621302428,0.9121069506452848,1.0,1.0,0.06053882318785803,0.012365997991750076,2.4395495885220395,0.6451231506011218,1000 +LassoCV,LGBM Regr.,partialling out,0.95,0.833,2.361130598290116,0.9121069506452848,1.0,1.0,0.06053882318785803,0.004652476916621015,2.4395495885220395,0.6451231506011218,1000 +LassoCV,LassoCV,IV-type,0.9,0.0,2.5877087930438964,4.872772215540649,1.0,0.0,0.28270722007024496,0.22413939259803953,6.407549231579281,3.3379951995020174,1000 +LassoCV,LassoCV,IV-type,0.95,0.001,3.0834452097987697,4.872772215540649,1.0,0.001,0.28270722007024496,0.20760827505991444,6.407549231579281,3.3379951995020174,1000 +LassoCV,LassoCV,partialling out,0.9,0.0,2.6022738054015564,4.872971572776508,1.0,0.0,0.2826615836284171,0.22383756375128439,6.408028359909112,3.337914785643903,1000 +LassoCV,LassoCV,partialling out,0.95,0.001,3.1008004924741663,4.872971572776508,1.0,0.001,0.2826615836284171,0.2072284307839625,6.408028359909112,3.337914785643903,1000 +LassoCV,RF Regr.,IV-type,0.9,0.03,2.230177042929521,1.7208906933423658,1.0,0.996,0.10321605320265151,0.050929864370534886,3.379395087094497,0.32699487018563966,1000 +LassoCV,RF Regr.,IV-type,0.95,0.104,2.6574198528480117,1.7208906933423658,1.0,0.999,0.10321605320265151,0.036611667122436437,3.379395087094497,0.32699487018563966,1000 +LassoCV,RF Regr.,partialling out,0.9,0.035,2.2613273518524517,1.6654740653451128,1.0,1.0,0.09838693440861622,0.046224192363929564,3.352306820686065,0.30396867960100216,1000 +LassoCV,RF Regr.,partialling out,0.95,0.126,2.6945377353123594,1.6654740653451128,1.0,1.0,0.09838693440861622,0.031946038970425784,3.352306820686065,0.30396867960100216,1000 +RF Regr.,LassoCV,IV-type,0.9,0.001,1.9755980491263099,2.4911901944187225,1.0,0.146,0.18765120739490848,0.13125708709313408,3.74493409869544,1.2384844937405288,1000 +RF Regr.,LassoCV,IV-type,0.95,0.004,2.354070271524165,2.4911901944187225,1.0,0.305,0.18765120739490848,0.11522730290243077,3.74493409869544,1.2384844937405288,1000 +RF Regr.,LassoCV,partialling out,0.9,0.003,1.9489582706745046,2.190059714864294,1.0,0.342,0.16663434910102978,0.11054051768693487,3.4484420814862635,0.9343987618760414,1000 +RF Regr.,LassoCV,partialling out,0.95,0.006,2.3223270176162565,2.190059714864294,1.0,0.58,0.16663434910102978,0.09457408564648179,3.4484420814862635,0.9343987618760414,1000 +RF Regr.,RF Regr.,IV-type,0.9,0.016,1.7671562935719778,1.6053531172501359,1.0,0.908,0.11827277682192193,0.06796316869150489,2.9370932976098705,0.3875377103244566,1000 +RF Regr.,RF Regr.,IV-type,0.95,0.047,2.1056966004164406,1.6053531172501359,1.0,0.972,0.11827277682192193,0.05390037915368153,2.9370932976098705,0.3875377103244566,1000 +RF Regr.,RF Regr.,partialling out,0.9,0.016,1.7741971479960048,1.5898420246719582,1.0,0.93,0.11671620294392733,0.06643566871448575,2.9271556769700973,0.3806480611364335,1000 +RF Regr.,RF Regr.,partialling out,0.95,0.057,2.114086295928167,1.5898420246719582,1.0,0.98,0.11671620294392733,0.052344557926308814,2.9271556769700973,0.3806480611364335,1000 diff --git a/results/plm/plr_ate_sensitivity_metadata.csv b/results/plm/plr_ate_sensitivity_metadata.csv new file mode 100644 index 0000000..24030fe --- /dev/null +++ b/results/plm/plr_ate_sensitivity_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,PLRATESensitivityCoverageSimulation,2025-06-05 16:23,227.22630832592645,3.12.3,scripts/plm/plr_ate_sensitivity_config.yml From 67afc5e7c1700960a708a9ace282c3274a742664 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 5 Jun 2025 19:04:03 +0200 Subject: [PATCH 119/142] fix ssm workflow --- .github/workflows/ssm_sim.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ssm_sim.yml b/.github/workflows/ssm_sim.yml index cdef61c..071a556 100644 --- a/.github/workflows/ssm_sim.yml +++ b/.github/workflows/ssm_sim.yml @@ -48,20 +48,27 @@ jobs: with: ref: ${{ env.TARGET_BRANCH }} + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + version: "0.7.8" + - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.12' + python-version-file: "monte-cover/pyproject.toml" - - name: Install dependencies + - name: Install Monte-Cover run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + cd monte-cover + uv venv + uv sync - name: Install DoubleML from correct branch run: | - pip uninstall -y doubleml - pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" + source monte-cover/.venv/bin/activate + uv pip uninstall doubleml + uv pip install "doubleml @ git+https://github.com/DoubleML/doubleml-for-py@${{ env.DML_BRANCH }}" - name: Set up Git configuration run: | @@ -69,7 +76,9 @@ jobs: git config --global user.email 'github-actions@github.com' - name: Run scripts - run: python ${{ matrix.script }} + run: | + source monte-cover/.venv/bin/activate + uv run ${{ matrix.script }} - name: Commit any existing changes run: | From 110af8507e412668ab93c9a04bf01b2831ae85ee Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 17:58:35 +0000 Subject: [PATCH 120/142] Update results from script: scripts/rdd/rdd_sharp.py --- results/rdd/rdd_sharp_config.yml | 41 ++++++++++++++++++++++++++++++ results/rdd/rdd_sharp_coverage.csv | 27 ++++++++++++++++++++ results/rdd/rdd_sharp_metadata.csv | 2 ++ 3 files changed, 70 insertions(+) create mode 100644 results/rdd/rdd_sharp_config.yml create mode 100644 results/rdd/rdd_sharp_coverage.csv create mode 100644 results/rdd/rdd_sharp_metadata.csv diff --git a/results/rdd/rdd_sharp_config.yml b/results/rdd/rdd_sharp_config.yml new file mode 100644 index 0000000..57d0a43 --- /dev/null +++ b/results/rdd/rdd_sharp_config.yml @@ -0,0 +1,41 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 1000 + fuzzy: + - false + cutoff: + - 0.0 +learner_definitions: + lgbmr: &id001 + name: LGBM Regr. + params: + n_estimators: 100 + learning_rate: 0.05 + global_linear: &id002 + name: Global Linear + local_linear: &id003 + name: Linear + stacked_reg: &id004 + name: Stacked Regr. + params: + n_estimators: 100 + learning_rate: 0.05 +dml_parameters: + fs_specification: + - cutoff + - cutoff and score + - interacted cutoff and score + learners: + - ml_g: *id001 + - ml_g: *id002 + - ml_g: *id003 + - ml_g: *id004 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/rdd/rdd_sharp_coverage.csv b/results/rdd/rdd_sharp_coverage.csv new file mode 100644 index 0000000..e6fe699 --- /dev/null +++ b/results/rdd/rdd_sharp_coverage.csv @@ -0,0 +1,27 @@ +Method,fs_specification,Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +RDFlex,cutoff,Global Linear,N/A,0.9,0.8693333333333334,1.9777420628015956,0.5363309802914388,1000 +RDFlex,cutoff,Global Linear,N/A,0.95,0.9296666666666666,2.356625021391914,0.5363309802914388,1000 +RDFlex,cutoff,LGBM Regr.,N/A,0.9,0.8756666666666666,0.5745846597977408,0.15277974067846242,1000 +RDFlex,cutoff,LGBM Regr.,N/A,0.95,0.9296666666666666,0.6846598510774335,0.15277974067846242,1000 +RDFlex,cutoff,Linear,N/A,0.9,0.8666666666666666,1.991920387201889,0.5404127325625548,1000 +RDFlex,cutoff,Linear,N/A,0.95,0.9286666666666666,2.3735195369465925,0.5404127325625548,1000 +RDFlex,cutoff,Stacked Regr.,N/A,0.9,0.8813333333333334,0.5670086678915763,0.1471163883503396,1000 +RDFlex,cutoff,Stacked Regr.,N/A,0.95,0.9423333333333334,0.6756324999259701,0.1471163883503396,1000 +RDFlex,cutoff and score,Global Linear,N/A,0.9,0.868,1.9777819118149618,0.5362223371501555,1000 +RDFlex,cutoff and score,Global Linear,N/A,0.95,0.9283333333333333,2.3566725044200316,0.5362223371501555,1000 +RDFlex,cutoff and score,LGBM Regr.,N/A,0.9,0.8663333333333334,0.6047557690566959,0.16255491915792666,1000 +RDFlex,cutoff and score,LGBM Regr.,N/A,0.95,0.934,0.7206109451761669,0.16255491915792666,1000 +RDFlex,cutoff and score,Linear,N/A,0.9,0.869,1.99069360970139,0.5359824339657442,1000 +RDFlex,cutoff and score,Linear,N/A,0.95,0.932,2.372057741393101,0.5359824339657442,1000 +RDFlex,cutoff and score,Stacked Regr.,N/A,0.9,0.8926666666666666,0.5869731443946519,0.15208518895862003,1000 +RDFlex,cutoff and score,Stacked Regr.,N/A,0.95,0.9443333333333334,0.6994216409626386,0.15208518895862003,1000 +RDFlex,interacted cutoff and score,Global Linear,N/A,0.9,0.8666666666666666,1.9803466175426516,0.5369353192144897,1000 +RDFlex,interacted cutoff and score,Global Linear,N/A,0.95,0.928,2.359728539786857,0.5369353192144897,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,N/A,0.9,0.884,0.6090642078915169,0.16109292443371379,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,N/A,0.95,0.94,0.725744766695285,0.16109292443371379,1000 +RDFlex,interacted cutoff and score,Linear,N/A,0.9,0.8683333333333334,2.000108510613013,0.5391094961686808,1000 +RDFlex,interacted cutoff and score,Linear,N/A,0.95,0.9276666666666666,2.3832762877746387,0.5391094961686808,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,N/A,0.9,0.8766666666666666,0.5858746023498046,0.15217399239455562,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,N/A,0.95,0.934,0.6981126473791827,0.15217399239455562,1000 +rdrobust,cutoff,Linear,Logistic,0.9,0.888,2.18636563211321,0.5631032433381369,1000 +rdrobust,cutoff,Linear,Logistic,0.95,0.94,2.605215336953788,0.5631032433381369,1000 diff --git a/results/rdd/rdd_sharp_metadata.csv b/results/rdd/rdd_sharp_metadata.csv new file mode 100644 index 0000000..4c44c96 --- /dev/null +++ b/results/rdd/rdd_sharp_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,RDDCoverageSimulation,2025-06-05 17:58,65.60530270735423,3.12.3,scripts/rdd/rdd_sharp_config.yml From 011e27fc3442257a093864fdd49e1828ef01314d Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 18:09:37 +0000 Subject: [PATCH 121/142] Update results from script: scripts/plm/pliv_late.py --- results/plm/pliv_late_config.yml | 57 ++++++++++++++++++++++++++++++ results/plm/pliv_late_coverage.csv | 33 +++++++++++++++++ results/plm/pliv_late_metadata.csv | 2 ++ 3 files changed, 92 insertions(+) create mode 100644 results/plm/pliv_late_config.yml create mode 100644 results/plm/pliv_late_coverage.csv create mode 100644 results/plm/pliv_late_metadata.csv diff --git a/results/plm/pliv_late_config.yml b/results/plm/pliv_late_config.yml new file mode 100644 index 0000000..9863dcf --- /dev/null +++ b/results/plm/pliv_late_config.yml @@ -0,0 +1,57 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 0.5 + n_obs: + - 500 + dim_x: + - 20 + dim_z: + - 1 +learner_definitions: + lasso: &id001 + name: LassoCV + rf: &id002 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id001 + ml_r: *id001 + - ml_g: *id002 + ml_m: *id002 + ml_r: *id002 + - ml_g: *id001 + ml_m: *id002 + ml_r: *id002 + - ml_g: *id002 + ml_m: *id001 + ml_r: *id002 + - ml_g: *id002 + ml_m: *id002 + ml_r: *id001 + - ml_g: *id001 + ml_m: *id001 + ml_r: *id002 + - ml_g: *id002 + ml_m: *id001 + ml_r: *id001 + - ml_g: *id001 + ml_m: *id002 + ml_r: *id001 + score: + - partialling out + - IV-type +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/plm/pliv_late_coverage.csv b/results/plm/pliv_late_coverage.csv new file mode 100644 index 0000000..1a876b3 --- /dev/null +++ b/results/plm/pliv_late_coverage.csv @@ -0,0 +1,33 @@ +Learner g,Learner m,Learner r,Score,level,Coverage,CI Length,Bias,repetition +LassoCV,LassoCV,LassoCV,IV-type,0.9,0.7993019197207679,0.23180266726620893,0.07317965760520444,573 +LassoCV,LassoCV,LassoCV,IV-type,0.95,0.8603839441535777,0.27620991431567365,0.07317965760520444,573 +LassoCV,LassoCV,LassoCV,partialling out,0.9,0.8795811518324608,0.3005968104977072,0.07254739125260629,573 +LassoCV,LassoCV,LassoCV,partialling out,0.95,0.9493891797556719,0.3581831919810696,0.07254739125260629,573 +LassoCV,LassoCV,RF Regr.,IV-type,0.9,0.806282722513089,0.23262465528448026,0.07326064389971966,573 +LassoCV,LassoCV,RF Regr.,IV-type,0.95,0.8638743455497382,0.27718937345120853,0.07326064389971966,573 +LassoCV,LassoCV,RF Regr.,partialling out,0.9,0.8848167539267016,0.3081195890287047,0.07427328983504944,573 +LassoCV,LassoCV,RF Regr.,partialling out,0.95,0.9581151832460733,0.3671471354851205,0.07427328983504944,573 +LassoCV,RF Regr.,LassoCV,IV-type,0.9,0.8132635253054101,0.2659516317640923,0.07903719894266115,573 +LassoCV,RF Regr.,LassoCV,IV-type,0.95,0.8900523560209425,0.31690091528287584,0.07903719894266115,573 +LassoCV,RF Regr.,LassoCV,partialling out,0.9,0.8830715532286213,0.3186854967173057,0.07809285377225214,573 +LassoCV,RF Regr.,LassoCV,partialling out,0.95,0.9476439790575916,0.379737191034327,0.07809285377225214,573 +LassoCV,RF Regr.,RF Regr.,IV-type,0.9,0.8254799301919721,0.2668640644386955,0.07668266567351469,573 +LassoCV,RF Regr.,RF Regr.,IV-type,0.95,0.893542757417103,0.31798814587363317,0.07668266567351469,573 +LassoCV,RF Regr.,RF Regr.,partialling out,0.9,0.8656195462478184,0.30294245283479354,0.08542062639988371,573 +LassoCV,RF Regr.,RF Regr.,partialling out,0.95,0.93717277486911,0.36097819721799285,0.08542062639988371,573 +RF Regr.,LassoCV,LassoCV,IV-type,0.9,0.7818499127399651,0.24228998675825072,0.07584491443329881,573 +RF Regr.,LassoCV,LassoCV,IV-type,0.95,0.8586387434554974,0.28870632625286374,0.07584491443329881,573 +RF Regr.,LassoCV,LassoCV,partialling out,0.9,0.8970331588132635,0.3318879094683072,0.0806654890480541,573 +RF Regr.,LassoCV,LassoCV,partialling out,0.95,0.9406631762652705,0.3954688361345379,0.0806654890480541,573 +RF Regr.,LassoCV,RF Regr.,IV-type,0.9,0.8027923211169284,0.241628366516599,0.07544233872660495,573 +RF Regr.,LassoCV,RF Regr.,IV-type,0.95,0.8673647469458988,0.28791795710935314,0.07544233872660495,573 +RF Regr.,LassoCV,RF Regr.,partialling out,0.9,0.8952879581151832,0.32006834738062506,0.07708638562807664,573 +RF Regr.,LassoCV,RF Regr.,partialling out,0.95,0.9476439790575916,0.3813849592318696,0.07708638562807664,573 +RF Regr.,RF Regr.,LassoCV,IV-type,0.9,0.8184991273996509,0.2791009597646858,0.08075894727233103,573 +RF Regr.,RF Regr.,LassoCV,IV-type,0.95,0.8848167539267016,0.3325693060015278,0.08075894727233103,573 +RF Regr.,RF Regr.,LassoCV,partialling out,0.9,0.806282722513089,0.35157995852822205,0.10562690570040405,573 +RF Regr.,RF Regr.,LassoCV,partialling out,0.95,0.8726003490401396,0.4189333598507066,0.10562690570040405,573 +RF Regr.,RF Regr.,RF Regr.,IV-type,0.9,0.8359511343804538,0.2769681338448809,0.07840964131824099,573 +RF Regr.,RF Regr.,RF Regr.,IV-type,0.95,0.8830715532286213,0.33002788716667447,0.07840964131824099,573 +RF Regr.,RF Regr.,RF Regr.,partialling out,0.9,0.8534031413612565,0.304252712059565,0.07977048559824199,573 +RF Regr.,RF Regr.,RF Regr.,partialling out,0.95,0.9179755671902269,0.36253946738141946,0.07977048559824199,573 diff --git a/results/plm/pliv_late_metadata.csv b/results/plm/pliv_late_metadata.csv new file mode 100644 index 0000000..18f9cba --- /dev/null +++ b/results/plm/pliv_late_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,PLIVLATECoverageSimulation,2025-06-05 18:09,333.49471075932183,3.12.3,scripts/plm/pliv_late_config.yml From 26c6b50926bed600968a0e16963d7346060190bf Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 19:37:10 +0000 Subject: [PATCH 122/142] Update results from script: scripts/ssm/ssm_nonig_ate.py --- results/ssm/ssm_nonig_ate_config.yml | 74 ++++++++++++++++++++++++++ results/ssm/ssm_nonig_ate_coverage.csv | 19 +++++++ results/ssm/ssm_nonig_ate_metadata.csv | 2 + 3 files changed, 95 insertions(+) create mode 100644 results/ssm/ssm_nonig_ate_config.yml create mode 100644 results/ssm/ssm_nonig_ate_coverage.csv create mode 100644 results/ssm/ssm_nonig_ate_metadata.csv diff --git a/results/ssm/ssm_nonig_ate_config.yml b/results/ssm/ssm_nonig_ate_config.yml new file mode 100644 index 0000000..6c5f926 --- /dev/null +++ b/results/ssm/ssm_nonig_ate_config.yml @@ -0,0 +1,74 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 1.0 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + ml_pi: *id002 + - ml_g: *id003 + ml_m: *id004 + ml_pi: *id004 + - ml_g: *id001 + ml_m: *id004 + ml_pi: *id004 + - ml_g: *id003 + ml_m: *id002 + ml_pi: *id004 + - ml_g: *id003 + ml_m: *id004 + ml_pi: *id002 + - ml_g: *id005 + ml_m: *id006 + ml_pi: *id006 + - ml_g: *id001 + ml_m: *id006 + ml_pi: *id006 + - ml_g: *id005 + ml_m: *id002 + ml_pi: *id006 + - ml_g: *id005 + ml_m: *id006 + ml_pi: *id002 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/ssm/ssm_nonig_ate_coverage.csv b/results/ssm/ssm_nonig_ate_coverage.csv new file mode 100644 index 0000000..9a3d225 --- /dev/null +++ b/results/ssm/ssm_nonig_ate_coverage.csv @@ -0,0 +1,19 @@ +Learner g,Learner m,Learner pi,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.89,1.5301470087049076,0.3770578639809072,1000 +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.942,1.823282618570531,0.3770578639809072,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.9,0.929,2.4676110419059616,0.6723444365149791,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.95,0.969,2.9403399127694723,0.6723444365149791,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.9,0.809,1.0997736728076188,0.32081226177381494,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.95,0.895,1.310461158688781,0.32081226177381494,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.902,1.4984436991476344,0.3690107638339736,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.961,1.785505795207747,0.3690107638339736,1000 +LassoCV,Logistic,Logistic,0.9,0.84,3.803087791117463,1.1219550707748396,1000 +LassoCV,Logistic,Logistic,0.95,0.916,4.531658609920874,1.1219550707748396,1000 +LassoCV,RF Clas.,RF Clas.,0.9,0.76,0.6487741040070446,0.20425601204335075,1000 +LassoCV,RF Clas.,RF Clas.,0.95,0.854,0.773062026383923,0.20425601204335075,1000 +RF Regr.,Logistic,RF Clas.,0.9,0.711,0.7424019979703704,0.26224742985370675,1000 +RF Regr.,Logistic,RF Clas.,0.95,0.816,0.8846265431954046,0.26224742985370675,1000 +RF Regr.,RF Clas.,Logistic,0.9,0.898,1.5259930175436052,0.4120022228090046,1000 +RF Regr.,RF Clas.,Logistic,0.95,0.958,1.818332832805496,0.4120022228090046,1000 +RF Regr.,RF Clas.,RF Clas.,0.9,0.759,0.6647246082851119,0.21200753632780625,1000 +RF Regr.,RF Clas.,RF Clas.,0.95,0.835,0.7920682245088012,0.21200753632780625,1000 diff --git a/results/ssm/ssm_nonig_ate_metadata.csv b/results/ssm/ssm_nonig_ate_metadata.csv new file mode 100644 index 0000000..0eab540 --- /dev/null +++ b/results/ssm/ssm_nonig_ate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,SSMNonIgnorableATECoverageSimulation,2025-06-05 19:37,152.50586200555165,3.12.3,scripts/ssm/ssm_nonig_ate_config.yml From 3d37f89cb88533b41f0e5cf6c267523886dee8c1 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 20:21:50 +0000 Subject: [PATCH 123/142] Update results from script: scripts/rdd/rdd_fuzzy.py --- results/rdd/rdd_fuzzy_config.yml | 63 ++++++++++++++++++++++++++++++ results/rdd/rdd_fuzzy_coverage.csv | 27 +++++++++++++ results/rdd/rdd_fuzzy_metadata.csv | 2 + 3 files changed, 92 insertions(+) create mode 100644 results/rdd/rdd_fuzzy_config.yml create mode 100644 results/rdd/rdd_fuzzy_coverage.csv create mode 100644 results/rdd/rdd_fuzzy_metadata.csv diff --git a/results/rdd/rdd_fuzzy_config.yml b/results/rdd/rdd_fuzzy_config.yml new file mode 100644 index 0000000..1c010bd --- /dev/null +++ b/results/rdd/rdd_fuzzy_config.yml @@ -0,0 +1,63 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + n_obs: + - 2000 + fuzzy: + - true + cutoff: + - 0.0 +learner_definitions: + lgbmr: &id001 + name: LGBM Regr. + params: + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 + lgbmc: &id002 + name: LGBM Clas. + params: + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 + global_linear: &id003 + name: Global Linear + global_logistic: &id004 + name: Global Logistic + local_linear: &id005 + name: Linear + local_logistic: &id006 + name: Logistic + stacked_reg: &id007 + name: Stacked Regr. + params: + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 + stacked_cls: &id008 + name: Stacked Clas. + params: + n_estimators: 200 + learning_rate: 0.02 + max_depth: 5 +dml_parameters: + fs_specification: + - cutoff + - cutoff and score + - interacted cutoff and score + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + - ml_g: *id005 + ml_m: *id006 + - ml_g: *id007 + ml_m: *id008 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/rdd/rdd_fuzzy_coverage.csv b/results/rdd/rdd_fuzzy_coverage.csv new file mode 100644 index 0000000..a6c0a42 --- /dev/null +++ b/results/rdd/rdd_fuzzy_coverage.csv @@ -0,0 +1,27 @@ +Method,fs_specification,Learner g,Learner m,level,Coverage,CI Length,Bias,repetition +RDFlex,cutoff,Global Linear,Global Logistic,0.9,0.914,159.78774916508115,16.371821196962774,1000 +RDFlex,cutoff,Global Linear,Global Logistic,0.95,0.9616666666666667,190.39884668322458,16.371821196962774,1000 +RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.9,0.911,21.894892395588858,2.054842519054099,1000 +RDFlex,cutoff,LGBM Regr.,LGBM Clas.,0.95,0.964,26.089373447939103,2.054842519054099,1000 +RDFlex,cutoff,Linear,Logistic,0.9,0.912,24.13350016941463,3.970042561943364,1000 +RDFlex,cutoff,Linear,Logistic,0.95,0.9606666666666667,28.756839136264052,3.970042561943364,1000 +RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.9,0.9203333333333333,3.9519734545980754,0.647703696648072,1000 +RDFlex,cutoff,Stacked Regr.,Stacked Clas.,0.95,0.9736666666666667,4.709066820265513,0.647703696648072,1000 +RDFlex,cutoff and score,Global Linear,Global Logistic,0.9,0.9136666666666666,40.229554938489734,4.971844764740165,1000 +RDFlex,cutoff and score,Global Linear,Global Logistic,0.95,0.961,47.9364713683679,4.971844764740165,1000 +RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.9146666666666666,16.86998628777336,1.5860785538090398,1000 +RDFlex,cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9656666666666667,20.101828516499268,1.5860785538090398,1000 +RDFlex,cutoff and score,Linear,Logistic,0.9,0.914,97.14155501358066,9.810720713145727,1000 +RDFlex,cutoff and score,Linear,Logistic,0.95,0.963,115.75130218833239,9.810720713145727,1000 +RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.923,2.1887222402404873,0.5251851443672533,1000 +RDFlex,cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.9683333333333334,2.6080234087356517,0.5251851443672533,1000 +RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.9,0.916,39.62681032308488,5.974362235508999,1000 +RDFlex,interacted cutoff and score,Global Linear,Global Logistic,0.95,0.9616666666666667,47.218256860577036,5.974362235508999,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.9,0.9126666666666666,207.48089868228553,16.46141812561768,1000 +RDFlex,interacted cutoff and score,LGBM Regr.,LGBM Clas.,0.95,0.9626666666666667,247.22873952679137,16.46141812561768,1000 +RDFlex,interacted cutoff and score,Linear,Logistic,0.9,0.9143333333333333,1703.658231476743,157.0745025974768,1000 +RDFlex,interacted cutoff and score,Linear,Logistic,0.95,0.9626666666666667,2030.033992658808,157.0745025974768,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.9,0.9093333333333333,2.7930762710442028,0.5786138381787103,1000 +RDFlex,interacted cutoff and score,Stacked Regr.,Stacked Clas.,0.95,0.9663333333333334,3.328155653257759,0.5786138381787103,1000 +rdrobust,cutoff,Linear,Logistic,0.9,0.935,16.18988307541303,3.355681291457316,1000 +rdrobust,cutoff,Linear,Logistic,0.95,0.976,19.291435554988908,3.355681291457316,1000 diff --git a/results/rdd/rdd_fuzzy_metadata.csv b/results/rdd/rdd_fuzzy_metadata.csv new file mode 100644 index 0000000..ca7af26 --- /dev/null +++ b/results/rdd/rdd_fuzzy_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,RDDCoverageSimulation,2025-06-05 20:21,208.91020024220148,3.12.3,scripts/rdd/rdd_fuzzy_config.yml From af46e5a39db2e9f1f96646cec88037c9e4f34522 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 5 Jun 2025 21:15:55 +0000 Subject: [PATCH 124/142] Update results from script: scripts/ssm/ssm_mar_ate.py --- results/ssm/ssm_mar_ate_config.yml | 74 ++++++++++++++++++++++++++++ results/ssm/ssm_mar_ate_coverage.csv | 19 +++++++ results/ssm/ssm_mar_ate_metadata.csv | 2 + 3 files changed, 95 insertions(+) create mode 100644 results/ssm/ssm_mar_ate_config.yml create mode 100644 results/ssm/ssm_mar_ate_coverage.csv create mode 100644 results/ssm/ssm_mar_ate_metadata.csv diff --git a/results/ssm/ssm_mar_ate_config.yml b/results/ssm/ssm_mar_ate_config.yml new file mode 100644 index 0000000..6c5f926 --- /dev/null +++ b/results/ssm/ssm_mar_ate_config.yml @@ -0,0 +1,74 @@ +simulation_parameters: + repetitions: 1000 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + theta: + - 1.0 + n_obs: + - 500 + dim_x: + - 20 +learner_definitions: + lasso: &id001 + name: LassoCV + logit: &id002 + name: Logistic + rfr: &id003 + name: RF Regr. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + rfc: &id004 + name: RF Clas. + params: + n_estimators: 200 + max_features: 20 + max_depth: 5 + min_samples_leaf: 2 + lgbmr: &id005 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.01 + lgbmc: &id006 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.01 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + ml_pi: *id002 + - ml_g: *id003 + ml_m: *id004 + ml_pi: *id004 + - ml_g: *id001 + ml_m: *id004 + ml_pi: *id004 + - ml_g: *id003 + ml_m: *id002 + ml_pi: *id004 + - ml_g: *id003 + ml_m: *id004 + ml_pi: *id002 + - ml_g: *id005 + ml_m: *id006 + ml_pi: *id006 + - ml_g: *id001 + ml_m: *id006 + ml_pi: *id006 + - ml_g: *id005 + ml_m: *id002 + ml_pi: *id006 + - ml_g: *id005 + ml_m: *id006 + ml_pi: *id002 +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/ssm/ssm_mar_ate_coverage.csv b/results/ssm/ssm_mar_ate_coverage.csv new file mode 100644 index 0000000..aa8edb2 --- /dev/null +++ b/results/ssm/ssm_mar_ate_coverage.csv @@ -0,0 +1,19 @@ +Learner g,Learner m,Learner pi,level,Coverage,CI Length,Bias,repetition +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.9,0.934,1.0713352028098442,0.24591485806272242,1000 +LGBM Regr.,LGBM Clas.,LGBM Clas.,0.95,0.981,1.2765746316095508,0.24591485806272242,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.9,0.939,0.9131848507685725,0.21223789879924182,1000 +LGBM Regr.,LGBM Clas.,Logistic,0.95,0.972,1.088126863939359,0.21223789879924182,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.9,0.933,0.7703469411630964,0.17142872246581048,1000 +LGBM Regr.,Logistic,LGBM Clas.,0.95,0.972,0.9179249968148138,0.17142872246581048,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.9,0.947,1.0364590345690332,0.2359720559564468,1000 +LassoCV,LGBM Clas.,LGBM Clas.,0.95,0.982,1.2350171139370278,0.2359720559564468,1000 +LassoCV,Logistic,Logistic,0.9,0.926,0.5826714123685559,0.12863481417003114,1000 +LassoCV,Logistic,Logistic,0.95,0.965,0.6942958110990313,0.12863481417003114,1000 +LassoCV,RF Clas.,RF Clas.,0.9,0.919,0.5111034002250002,0.11799184761111325,1000 +LassoCV,RF Clas.,RF Clas.,0.95,0.956,0.6090172647602495,0.11799184761111325,1000 +RF Regr.,Logistic,RF Clas.,0.9,0.923,0.5773836889150485,0.13144778185362027,1000 +RF Regr.,Logistic,RF Clas.,0.95,0.963,0.687995099984517,0.13144778185362027,1000 +RF Regr.,RF Clas.,Logistic,0.9,0.923,0.5549423867573083,0.1256504508256171,1000 +RF Regr.,RF Clas.,Logistic,0.95,0.958,0.6612546391467519,0.1256504508256171,1000 +RF Regr.,RF Clas.,RF Clas.,0.9,0.922,0.5213838221703648,0.12121755103534768,1000 +RF Regr.,RF Clas.,RF Clas.,0.95,0.961,0.6212671430647002,0.12121755103534768,1000 diff --git a/results/ssm/ssm_mar_ate_metadata.csv b/results/ssm/ssm_mar_ate_metadata.csv new file mode 100644 index 0000000..b659c07 --- /dev/null +++ b/results/ssm/ssm_mar_ate_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,SSMMarATECoverageSimulation,2025-06-05 21:15,251.25987704992295,3.12.3,scripts/ssm/ssm_mar_ate_config.yml From 235a797f6f3fe0fac3f0520ea644056f771c6ea2 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Fri, 6 Jun 2025 07:07:58 +0200 Subject: [PATCH 125/142] small did multi test run --- results/did/did_multi_detailed.csv | 49 ++++++++++++++++++++++++++++ results/did/did_multi_eventstudy.csv | 49 ++++++++++++++++++++++++++++ results/did/did_multi_group.csv | 49 ++++++++++++++++++++++++++++ results/did/did_multi_metadata.csv | 2 ++ results/did/did_multi_time.csv | 49 ++++++++++++++++++++++++++++ results/did/did_pa_multi_config.yml | 43 ++++++++++++++++++++++++ 6 files changed, 241 insertions(+) create mode 100644 results/did/did_multi_detailed.csv create mode 100644 results/did/did_multi_eventstudy.csv create mode 100644 results/did/did_multi_group.csv create mode 100644 results/did/did_multi_metadata.csv create mode 100644 results/did/did_multi_time.csv create mode 100644 results/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_detailed.csv b/results/did/did_multi_detailed.csv new file mode 100644 index 0000000..57940d8 --- /dev/null +++ b/results/did/did_multi_detailed.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.475,0.6631981918824853,0.4245293917047067,0.1,0.9932181765069161,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.5416666666666666,0.7902493871815527,0.4245293917047067,0.2,1.1015948175949941,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.5416666666666667,0.5869258060896296,0.32764889570233524,0.1,0.8999313982334242,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.625,0.6993652338930899,0.32764889570233524,0.2,0.9905529011972265,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8916666666666666,0.5732380857479841,0.1296008781804815,0.9,0.8863780150212672,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9583333333333333,0.6830553091310898,0.1296008781804815,0.9,0.9768868984728167,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.4333333333333333,0.6644058230082063,0.4310666769580376,0.1,0.9956876207839418,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.525,0.7916883684223393,0.4310666769580376,0.2,1.1010287059662813,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.5333333333333333,0.5867446374588254,0.3252236559819743,0.1,0.9009653298965914,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.625,0.6991493581545523,0.3252236559819743,0.2,0.9906567705361429,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9166666666666666,0.5744375253283261,0.1271887141133709,0.9,0.886140673979245,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.95,0.6844845295435221,0.1271887141133709,0.9,0.9769555531920947,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9166666666666666,2.664236516104595,0.737702874596228,1.0,4.15532260850043,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9583333333333334,3.174633616207804,0.737702874596228,1.0,4.551877666833338,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9,3.5057037569343903,1.0460340720779053,0.8,5.373199518974397,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.95,4.177303677040729,1.0460340720779053,1.0,5.908190710461086,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9,2.281268632456931,0.5618099356228352,0.9,3.5680571904376768,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.95,2.7182992367310748,0.5618099356228352,1.0,3.9096210173277703,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9166666666666666,1.1409695517478806,0.2729230152948616,1.0,1.7661171504579372,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9583333333333334,1.3595490761249551,0.2729230152948616,1.0,1.9422779024965977,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.95,1.300679100736105,0.30657137533712187,0.9,2.0078045899921433,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666666,1.5498547415501558,0.30657137533712187,1.0,2.20728741408156,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9,0.9958269378502731,0.25005822501578195,1.0,1.562210388164876,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9666666666666666,1.1866009844527796,0.25005822501578195,1.0,1.7164594299889349,10 +Linear,Logistic,experimental,False,1,0.9,0.8666666666666666,0.29402341515497066,0.08910609381990196,0.7,0.4563945612014034,10 +Linear,Logistic,experimental,False,1,0.95,0.925,0.35035050832046627,0.08910609381990196,0.7,0.5008231628131503,10 +Linear,Logistic,experimental,False,4,0.9,0.33333333333333337,0.977397258784985,0.7610350745966782,0.1,1.4094995674731499,10 +Linear,Logistic,experimental,False,4,0.95,0.4083333333333333,1.1646406673627152,0.7610350745966782,0.3,1.5699905716332707,10 +Linear,Logistic,experimental,False,6,0.9,0.8416666666666666,0.9663512842635651,0.2905316800247778,0.9,1.3942167275591268,10 +Linear,Logistic,experimental,False,6,0.95,0.925,1.1514785768998363,0.2905316800247778,0.9,1.5608208532578387,10 +Linear,Logistic,experimental,True,1,0.9,0.875,0.29394309706642396,0.08863490209339472,0.7,0.4568938014814658,10 +Linear,Logistic,experimental,True,1,0.95,0.925,0.3502548034150089,0.08863490209339472,0.7,0.501950368270883,10 +Linear,Logistic,experimental,True,4,0.9,0.325,0.9782224880817683,0.7615993346262713,0.0,1.4186481260559465,10 +Linear,Logistic,experimental,True,4,0.95,0.425,1.165623988719814,0.7615993346262713,0.3,1.5858023453294943,10 +Linear,Logistic,experimental,True,6,0.9,0.8416666666666666,0.9666491673336306,0.2924338853282872,0.9,1.396461066885858,10 +Linear,Logistic,experimental,True,6,0.95,0.9083333333333334,1.151833526470647,0.2924338853282872,0.9,1.562384080954277,10 +Linear,Logistic,observational,False,1,0.9,0.85,0.31425203663015777,0.08367653043797604,0.9,0.4895007276578588,10 +Linear,Logistic,observational,False,1,0.95,0.925,0.37445439750466164,0.08367653043797604,1.0,0.5393388520558242,10 +Linear,Logistic,observational,False,4,0.9,0.4833333333333334,1.2561035808707968,0.7066371770929671,0.3,1.778385188880911,10 +Linear,Logistic,observational,False,4,0.95,0.6,1.496739733566086,0.7066371770929671,0.4,2.000876501405903,10 +Linear,Logistic,observational,False,6,0.9,0.8833333333333332,0.9938097946227102,0.27383988384601515,0.9,1.44354873326288,10 +Linear,Logistic,observational,False,6,0.95,0.9416666666666668,1.184197410047798,0.27383988384601515,0.9,1.6062137591033303,10 +Linear,Logistic,observational,True,1,0.9,0.875,0.3129076258919823,0.08545450451730417,0.9,0.48745486803071925,10 +Linear,Logistic,observational,True,1,0.95,0.9333333333333333,0.37285243330305884,0.08545450451730417,1.0,0.5382885976877344,10 +Linear,Logistic,observational,True,4,0.9,0.4583333333333333,1.2506620298584346,0.7103356872029178,0.2,1.7866328735215717,10 +Linear,Logistic,observational,True,4,0.95,0.5916666666666666,1.4902557256096856,0.7103356872029178,0.5,2.006300527306606,10 +Linear,Logistic,observational,True,6,0.9,0.8833333333333332,0.9882996807860529,0.2762054991697468,0.9,1.437888190932466,10 +Linear,Logistic,observational,True,6,0.95,0.925,1.1776317044472453,0.2762054991697468,0.9,1.608395843078576,10 diff --git a/results/did/did_multi_eventstudy.csv b/results/did/did_multi_eventstudy.csv new file mode 100644 index 0000000..3777945 --- /dev/null +++ b/results/did/did_multi_eventstudy.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.31666666666666665,0.6537151341141119,0.49066639902375886,0.1,0.8523540998501415,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.5166666666666667,0.7789496268960298,0.49066639902375886,0.3,0.9770428100782877,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.36666666666666664,0.5452858065123898,0.3778386818154926,0.1,0.743163176914931,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4333333333333333,0.6497481140774426,0.3778386818154926,0.2,0.8296678442930695,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.95,0.5315426696186827,0.12186390955805393,0.9,0.7244710155084734,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9666666666666668,0.6333721564208382,0.12186390955805393,0.9,0.8204261481453766,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.2833333333333333,0.6558959400557026,0.49088494137273975,0.1,0.8651478545918568,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.45,0.7815482174531182,0.49088494137273975,0.2,0.977876743090663,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.41666666666666663,0.5445922521271076,0.36496793788889453,0.1,0.7376622142543021,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4666666666666666,0.648921693054806,0.36496793788889453,0.1,0.8399324262943078,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9166666666666667,0.5333510002926822,0.1267921483923527,0.9,0.7262289685879977,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.95,0.635526915321633,0.1267921483923527,0.9,0.8201526076321896,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9333333333333333,2.5552992411975888,0.7608777281615188,1.0,3.5528245647198546,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9666666666666668,3.0448268468435344,0.7608777281615188,1.0,3.9835090886742615,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9,3.5766594600203696,1.1151310261364602,0.9,4.849978691856272,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.95,4.261852612135938,1.1151310261364602,0.9,5.4843854314489615,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9666666666666668,2.0715338989490997,0.4576593539811947,1.0,2.8905463706130057,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.4683848873647265,0.4576593539811947,1.0,3.226733174299394,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.95,1.1035468154353276,0.22988973515771507,1.0,1.549789512023247,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.95,1.3149571354356897,0.22988973515771507,1.0,1.7100374044594258,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9333333333333333,1.2615162998420864,0.2921735103221472,0.9,1.7349291303889927,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666666,1.5031893860265462,0.2921735103221472,0.9,1.9482906291010973,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9166666666666667,0.9020852664274039,0.223288825691725,1.0,1.268826579092233,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9666666666666668,1.0749008934362119,0.223288825691725,1.0,1.412850138548627,10 +Linear,Logistic,experimental,False,1,0.9,0.8166666666666667,0.20956843058873878,0.07506477801543116,0.8,0.3000288302842385,10 +Linear,Logistic,experimental,False,1,0.95,0.9,0.24971618721586605,0.07506477801543116,0.9,0.33172401119841494,10 +Linear,Logistic,experimental,False,4,0.9,0.26666666666666666,0.9758192029894814,0.8863553189507677,0.0,1.2590578271307205,10 +Linear,Logistic,experimental,False,4,0.95,0.35,1.1627602979036324,0.8863553189507677,0.3,1.425570646998339,10 +Linear,Logistic,experimental,False,6,0.9,0.8166666666666667,0.9629875332601576,0.2908069953332307,0.9,1.2404344667371887,10 +Linear,Logistic,experimental,False,6,0.95,0.9333333333333333,1.1474704203613983,0.2908069953332307,0.9,1.4105058132057242,10 +Linear,Logistic,experimental,True,1,0.9,0.8333333333333334,0.20947111193940754,0.07428343024326965,0.8,0.2979299079446137,10 +Linear,Logistic,experimental,True,1,0.95,0.9,0.24960022489278275,0.07428343024326965,0.9,0.3330048127441146,10 +Linear,Logistic,experimental,True,4,0.9,0.3,0.9769037190176618,0.8858975253049832,0.0,1.245923467397466,10 +Linear,Logistic,experimental,True,4,0.95,0.35,1.1640525784573916,0.8858975253049832,0.3,1.4322400852668717,10 +Linear,Logistic,experimental,True,6,0.9,0.8166666666666667,0.9636908575425596,0.2931962751755147,0.9,1.2538856223646675,10 +Linear,Logistic,experimental,True,6,0.95,0.9333333333333333,1.1483084829344887,0.2931962751755147,0.9,1.4163679478599076,10 +Linear,Logistic,observational,False,1,0.9,0.8666666666666666,0.22523328177594734,0.060145661276170145,0.9,0.32202147548595106,10 +Linear,Logistic,observational,False,1,0.95,0.9166666666666667,0.26838200868899714,0.060145661276170145,1.0,0.35718168239326376,10 +Linear,Logistic,observational,False,4,0.9,0.41666666666666663,1.3135619894646324,0.8111606055413789,0.3,1.671840343983336,10 +Linear,Logistic,observational,False,4,0.95,0.5666666666666667,1.5652056502942664,0.8111606055413789,0.4,1.8973728801243435,10 +Linear,Logistic,observational,False,6,0.9,0.9,0.9938846466929837,0.27188590324660405,0.9,1.2869823819918522,10 +Linear,Logistic,observational,False,6,0.95,0.9333333333333333,1.1842866017907592,0.27188590324660405,0.9,1.452249753513595,10 +Linear,Logistic,observational,True,1,0.9,0.85,0.22362395181955633,0.06146781325453693,0.9,0.31927096315703024,10 +Linear,Logistic,observational,True,1,0.95,0.9166666666666667,0.2664643737687314,0.06146781325453693,1.0,0.3549910024680031,10 +Linear,Logistic,observational,True,4,0.9,0.4,1.3111465991606206,0.8189855976253808,0.4,1.6704469678803615,10 +Linear,Logistic,observational,True,4,0.95,0.5666666666666667,1.5623275352286452,0.8189855976253808,0.5,1.894016910355654,10 +Linear,Logistic,observational,True,6,0.9,0.8833333333333334,0.987754294207036,0.2775290083947557,0.9,1.2747731988103106,10 +Linear,Logistic,observational,True,6,0.95,0.95,1.1769818362553224,0.2775290083947557,0.9,1.4482252219187701,10 diff --git a/results/did/did_multi_group.csv b/results/did/did_multi_group.csv new file mode 100644 index 0000000..759e756 --- /dev/null +++ b/results/did/did_multi_group.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.4,0.7038778757281438,0.47194973287162156,0.2,0.8758913214185977,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.5,0.8387222202249021,0.47194973287162156,0.2,1.001010069655882,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.5,0.6149881253656317,0.3604337033572076,0.2,0.7810219664812267,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.5666666666666667,0.732803549742243,0.3604337033572076,0.2,0.8919457124055196,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9333333333333333,0.5996559313467016,0.12668533432786627,0.9,0.7620919434781398,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9666666666666666,0.7145341137336549,0.12668533432786627,0.9,0.8630472730843429,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.4,0.7053152806494579,0.4746991771029457,0.0,0.8810869883220048,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4333333333333333,0.8404349938302946,0.4746991771029457,0.2,1.0105973604651746,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.4666666666666666,0.6137523693083393,0.35662870553179526,0.2,0.7787017019204658,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.5666666666666667,0.7313310555784558,0.35662870553179526,0.2,0.8859891714764163,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9666666666666666,0.6016187358287552,0.12413016996963395,0.9,0.7675776583241858,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9666666666666666,0.7168729395297528,0.12413016996963395,0.9,0.8672944117057485,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9,2.564117397311814,0.6748075074539025,1.0,3.211572092656728,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,1.0,3.0553343279413907,0.6748075074539025,1.0,3.6685301941243447,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9333333333333333,3.6314497401813917,1.135290510403337,0.9,4.591536068751408,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9666666666666666,4.327139257743116,1.135290510403337,0.9,5.164689966870119,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9,2.311485371433312,0.6025651661909022,1.0,2.944256005463674,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.7543047019916633,0.6025651661909022,1.0,3.32115409107021,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,1.0,1.159774095087729,0.2556180857092131,1.0,1.4568864048385959,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,1.0,1.381956071548696,0.2556180857092131,1.0,1.6519752896650126,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9333333333333333,1.3002684796757527,0.3050015094584157,1.0,1.6348037247808438,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666666,1.5493654563782737,0.3050015094584157,1.0,1.8717284730559123,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9666666666666666,1.0225970849005845,0.2444184989857893,1.0,1.305407047359292,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,1.0,1.2184995821272093,0.2444184989857893,1.0,1.4842057522002559,10 +Linear,Logistic,experimental,False,1,0.9,0.8666666666666666,0.2632736921387274,0.08586190204900797,0.8,0.3413446240666038,10 +Linear,Logistic,experimental,False,1,0.95,0.9333333333333333,0.31370995340487845,0.08586190204900797,0.9,0.38529167082027993,10 +Linear,Logistic,experimental,False,4,0.9,0.3,1.0817308916902049,0.8593353424866175,0.1,1.3746939016404482,10 +Linear,Logistic,experimental,False,4,0.95,0.4,1.2889618589385583,0.8593353424866175,0.3,1.5579590830548598,10 +Linear,Logistic,experimental,False,6,0.9,0.8333333333333333,1.0683268803526378,0.3323660779211622,0.9,1.3490656766283455,10 +Linear,Logistic,experimental,False,6,0.95,0.9333333333333333,1.2729899943060263,0.3323660779211622,0.9,1.5404615209866068,10 +Linear,Logistic,experimental,True,1,0.9,0.9,0.2631245503202201,0.08406984540734988,0.8,0.3387436337194215,10 +Linear,Logistic,experimental,True,1,0.95,0.9333333333333333,0.31353223996699353,0.08406984540734988,0.9,0.38588941069606797,10 +Linear,Logistic,experimental,True,4,0.9,0.3,1.081869575626785,0.8607114497457358,0.1,1.3624602314700855,10 +Linear,Logistic,experimental,True,4,0.95,0.4666666666666666,1.2891271110415283,0.8607114497457358,0.3,1.5716251157153072,10 +Linear,Logistic,experimental,True,6,0.9,0.8,1.0679763763477195,0.3311340138013665,0.9,1.3471096697431735,10 +Linear,Logistic,experimental,True,6,0.95,0.9333333333333333,1.2725723430239788,0.3311340138013665,0.9,1.5417334084201677,10 +Linear,Logistic,observational,False,1,0.9,0.8333333333333333,0.2816649382994895,0.07271564074321726,0.9,0.36083833235314666,10 +Linear,Logistic,observational,False,1,0.95,0.9666666666666666,0.3356244748645851,0.07271564074321726,0.9,0.4079591535467177,10 +Linear,Logistic,observational,False,4,0.9,0.4333333333333333,1.3994251351987763,0.8150159195179807,0.3,1.741311134100631,10 +Linear,Logistic,observational,False,4,0.95,0.6,1.6675178989228194,0.8150159195179807,0.5,2.0039775780893656,10 +Linear,Logistic,observational,False,6,0.9,0.9,1.0956980944083736,0.3101338106517739,0.9,1.386667166945419,10 +Linear,Logistic,observational,False,6,0.95,0.9333333333333333,1.3056048074926598,0.3101338106517739,0.9,1.558225874803193,10 +Linear,Logistic,observational,True,1,0.9,0.9666666666666666,0.2798937856932111,0.07210043374255667,0.9,0.36057975492164257,10 +Linear,Logistic,observational,True,1,0.95,0.9666666666666666,0.3335140163638711,0.07210043374255667,0.9,0.40431144423970544,10 +Linear,Logistic,observational,True,4,0.9,0.4333333333333333,1.3878865436390964,0.8157724009785868,0.4,1.734158677188527,10 +Linear,Logistic,observational,True,4,0.95,0.6,1.6537688190541107,0.8157724009785868,0.5,2.0031223112830108,10 +Linear,Logistic,observational,True,6,0.9,0.8666666666666666,1.0918235063839146,0.3093097916806968,0.9,1.3809527770014425,10 +Linear,Logistic,observational,True,6,0.95,0.9333333333333333,1.300987951099824,0.3093097916806968,0.9,1.5734346850225365,10 diff --git a/results/did/did_multi_metadata.csv b/results/did/did_multi_metadata.csv new file mode 100644 index 0000000..6ec764b --- /dev/null +++ b/results/did/did_multi_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.10.0,DIDMultiCoverageSimulation,2025-06-06 07:07,2.84502333799998,3.12.9,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_time.csv b/results/did/did_multi_time.csv new file mode 100644 index 0000000..b56b019 --- /dev/null +++ b/results/did/did_multi_time.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.2333333333333333,0.6625987616638548,0.5213456662078564,0.2,0.7853107113133788,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.3,0.7895351220211091,0.5213456662078564,0.2,0.9197962066654052,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.26666666666666666,0.5493976514472162,0.4185989168586719,0.3,0.6682227683696846,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.36666666666666664,0.654647679516107,0.4185989168586719,0.3,0.7654036063784714,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9,0.5332788843896268,0.10688967347011427,0.9,0.6590174118187636,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9333333333333333,0.6354409839230054,0.10688967347011427,0.9,0.7462631615057108,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.2333333333333333,0.6634007679597379,0.5331593697938268,0.1,0.7887760040753716,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.3,0.7904907714658677,0.5331593697938268,0.2,0.9122615403961426,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.26666666666666666,0.5479992332361258,0.4111745820322453,0.3,0.6599184723785617,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.36666666666666664,0.652981361441263,0.4111745820322453,0.3,0.7613711498758222,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9,0.5346760598484942,0.11070063279136115,0.9,0.6528004508473261,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9,0.6371058211672402,0.11070063279136115,0.9,0.7449493953115034,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9666666666666666,2.724444869693017,0.8243030230260644,1.0,3.3909690969119404,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,1.0,3.246376294503422,0.8243030230260644,1.0,3.8976431441316266,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9,3.6042175187597345,1.1266225099616716,0.8,4.424909178964977,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9333333333333333,4.294690064495208,1.1266225099616716,0.9,4.989501158590644,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9333333333333332,2.049861926914148,0.497363662933101,1.0,2.586659888950317,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9666666666666666,2.442561139909952,0.497363662933101,1.0,2.931429368444929,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9333333333333333,1.1329976823562682,0.2659616385892486,0.9,1.3893901574468819,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9666666666666666,1.3500500078546822,0.2659616385892486,1.0,1.5944049463735803,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9333333333333333,1.251058212717813,0.3007003480415746,0.9,1.529240506606829,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666666,1.4907278066039762,0.3007003480415746,0.9,1.7668714749531325,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9333333333333332,0.8948452833589853,0.204625060665209,1.0,1.1255012536126696,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9666666666666666,1.0662739215097916,0.204625060665209,1.0,1.2696773979939644,10 +Linear,Logistic,experimental,False,1,0.9,0.8,0.24368352652491732,0.07973745587306341,0.7,0.3140608732531678,10 +Linear,Logistic,experimental,False,1,0.95,0.8333333333333334,0.29036683130263713,0.07973745587306341,0.9,0.353078827935582,10 +Linear,Logistic,experimental,False,4,0.9,0.06666666666666667,0.9696652351208508,1.0073141648234347,0.1,1.1209858064157003,10 +Linear,Logistic,experimental,False,4,0.95,0.2,1.1554273929041232,1.0073141648234347,0.2,1.2941513352794645,10 +Linear,Logistic,experimental,False,6,0.9,0.8333333333333333,0.9438277624968293,0.29488640962019724,0.9,1.0892187696065885,10 +Linear,Logistic,experimental,False,6,0.95,0.9333333333333333,1.1246401453552475,0.29488640962019724,0.9,1.2670156104265275,10 +Linear,Logistic,experimental,True,1,0.9,0.8,0.2436357920939464,0.0791259916382179,0.8,0.31171105219819967,10 +Linear,Logistic,experimental,True,1,0.95,0.8333333333333334,0.2903099522199074,0.0791259916382179,0.9,0.3520619816250074,10 +Linear,Logistic,experimental,True,4,0.9,0.03333333333333333,0.9695009673483899,1.0075438566095531,0.1,1.115461156732828,10 +Linear,Logistic,experimental,True,4,0.95,0.2,1.1552316557804254,1.0075438566095531,0.2,1.2789195615169306,10 +Linear,Logistic,experimental,True,6,0.9,0.8,0.9443978779018088,0.293922986691963,0.8,1.0881146173894785,10 +Linear,Logistic,experimental,True,6,0.95,0.9,1.1253194797607422,0.293922986691963,0.9,1.265074198410168,10 +Linear,Logistic,observational,False,1,0.9,0.9,0.26927852812297753,0.07828736376144599,1.0,0.3461250687337986,10 +Linear,Logistic,observational,False,1,0.95,0.9333333333333333,0.32086515680374456,0.07828736376144599,1.0,0.39040958691611627,10 +Linear,Logistic,observational,False,4,0.9,0.2333333333333333,1.3841812843946113,0.9247903996730132,0.2,1.5543899701191308,10 +Linear,Logistic,observational,False,4,0.95,0.4,1.6493537303473822,0.9247903996730132,0.2,1.822670006501189,10 +Linear,Logistic,observational,False,6,0.9,0.9,0.974459490524002,0.2757337897896041,0.9,1.1210193921596707,10 +Linear,Logistic,observational,False,6,0.95,0.9333333333333333,1.1611401005693511,0.2757337897896041,0.9,1.3140753581598792,10 +Linear,Logistic,observational,True,1,0.9,0.9,0.2685978168282629,0.07797281860557405,0.9,0.3454345116230722,10 +Linear,Logistic,observational,True,1,0.95,0.9666666666666666,0.32005403926741827,0.07797281860557405,1.0,0.38818579953504795,10 +Linear,Logistic,observational,True,4,0.9,0.2333333333333333,1.3696358280898424,0.9230010520428433,0.2,1.537629262768635,10 +Linear,Logistic,observational,True,4,0.95,0.3333333333333333,1.6320217501462715,0.9230010520428433,0.2,1.7984131238646603,10 +Linear,Logistic,observational,True,6,0.9,0.8666666666666666,0.9691273134777948,0.27660893376700224,0.8,1.1165632239349048,10 +Linear,Logistic,observational,True,6,0.95,0.9,1.1547864197320314,0.27660893376700224,0.9,1.2865502355295269,10 diff --git a/results/did/did_pa_multi_config.yml b/results/did/did_pa_multi_config.yml new file mode 100644 index 0000000..72961df --- /dev/null +++ b/results/did/did_pa_multi_config.yml @@ -0,0 +1,43 @@ +simulation_parameters: + repetitions: 10 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + DGP: + - 1 + - 4 + - 6 + n_obs: + - 2000 +learner_definitions: + linear: &id001 + name: Linear + logistic: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 500 + learning_rate: 0.02 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 500 + learning_rate: 0.02 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + score: + - observational + - experimental + in_sample_normalization: + - true + - false +confidence_parameters: + level: + - 0.95 + - 0.9 From 459f5de76d39581ff60aba16aee84d46201cdd21 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 6 Jun 2025 08:42:14 +0000 Subject: [PATCH 126/142] Update results from script: scripts/did/did_pa_atte_coverage.py --- results/did/did_pa_atte_coverage.csv | 49 +++++++++++++++++++ results/did/did_pa_atte_coverage_metadata.csv | 2 + 2 files changed, 51 insertions(+) create mode 100644 results/did/did_pa_atte_coverage.csv create mode 100644 results/did/did_pa_atte_coverage_metadata.csv diff --git a/results/did/did_pa_atte_coverage.csv b/results/did/did_pa_atte_coverage.csv new file mode 100644 index 0000000..9119e34 --- /dev/null +++ b/results/did/did_pa_atte_coverage.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,repetition +LGBM,LGBM,experimental,False,1,0.9,0.051,2.1624651397785515,2.1697505905302976,1000 +LGBM,LGBM,experimental,False,1,0.95,0.094,2.576736143777478,2.1697505905302976,1000 +LGBM,LGBM,experimental,False,2,0.9,0.378,2.1294819852681166,1.3213007503499328,1000 +LGBM,LGBM,experimental,False,2,0.95,0.475,2.537434291091179,1.3213007503499328,1000 +LGBM,LGBM,experimental,False,3,0.9,0.47,1.8796188347464011,1.0014962844281858,1000 +LGBM,LGBM,experimental,False,3,0.95,0.583,2.239703983626731,1.0014962844281858,1000 +LGBM,LGBM,experimental,False,4,0.9,0.078,1.8830006248174618,1.9173419242712182,1000 +LGBM,LGBM,experimental,False,4,0.95,0.122,2.243733635040054,1.9173419242712182,1000 +LGBM,LGBM,experimental,False,5,0.9,0.889,2.0642395778601936,0.5210006870170777,1000 +LGBM,LGBM,experimental,False,5,0.95,0.951,2.459693167693339,0.5210006870170777,1000 +LGBM,LGBM,experimental,False,6,0.9,0.908,1.8086231900602612,0.4337431389507495,1000 +LGBM,LGBM,experimental,False,6,0.95,0.948,2.1551074551794365,0.4337431389507495,1000 +LGBM,LGBM,experimental,True,1,0.9,0.049,2.159654648685151,2.17137681706751,1000 +LGBM,LGBM,experimental,True,1,0.95,0.099,2.573387237083486,2.17137681706751,1000 +LGBM,LGBM,experimental,True,2,0.9,0.373,2.129643042411216,1.319771507009933,1000 +LGBM,LGBM,experimental,True,2,0.95,0.47,2.537626202514028,1.319771507009933,1000 +LGBM,LGBM,experimental,True,3,0.9,0.477,1.8791031704354346,1.0000542552199656,1000 +LGBM,LGBM,experimental,True,3,0.95,0.598,2.23908953170162,1.0000542552199656,1000 +LGBM,LGBM,experimental,True,4,0.9,0.084,1.8855456999420728,1.9240618121414252,1000 +LGBM,LGBM,experimental,True,4,0.95,0.127,2.2467662791005663,1.9240618121414252,1000 +LGBM,LGBM,experimental,True,5,0.9,0.891,2.063666189492902,0.5200351889316859,1000 +LGBM,LGBM,experimental,True,5,0.95,0.947,2.459009933312703,0.5200351889316859,1000 +LGBM,LGBM,experimental,True,6,0.9,0.897,1.8093537325759845,0.43669034939483387,1000 +LGBM,LGBM,experimental,True,6,0.95,0.944,2.1559779502779253,0.43669034939483387,1000 +LGBM,LGBM,observational,False,1,0.9,0.893,12.590652453419517,3.3787304616783773,1000 +LGBM,LGBM,observational,False,1,0.95,0.953,15.002687744501154,3.3787304616783773,1000 +LGBM,LGBM,observational,False,2,0.9,0.914,14.716645515368727,3.622038823656133,1000 +LGBM,LGBM,observational,False,2,0.95,0.966,17.535964727040476,3.622038823656133,1000 +LGBM,LGBM,observational,False,3,0.9,0.933,14.387879061625718,3.413516510279929,1000 +LGBM,LGBM,observational,False,3,0.95,0.977,17.14421533481309,3.413516510279929,1000 +LGBM,LGBM,observational,False,4,0.9,0.843,18.129751335736472,5.765050835726839,1000 +LGBM,LGBM,observational,False,4,0.95,0.932,21.602931157204278,5.765050835726839,1000 +LGBM,LGBM,observational,False,5,0.9,0.917,7.704465948378402,1.901185439754437,1000 +LGBM,LGBM,observational,False,5,0.95,0.96,9.180437414922883,1.901185439754437,1000 +LGBM,LGBM,observational,False,6,0.9,0.922,7.569553123736534,1.7987428999886972,1000 +LGBM,LGBM,observational,False,6,0.95,0.971,9.019678868984235,1.7987428999886972,1000 +LGBM,LGBM,observational,True,1,0.9,0.906,4.1677645580041025,1.0303464962408189,1000 +LGBM,LGBM,observational,True,1,0.95,0.967,4.966197779476664,1.0303464962408189,1000 +LGBM,LGBM,observational,True,2,0.9,0.917,5.020279353776863,1.2235227285733399,1000 +LGBM,LGBM,observational,True,2,0.95,0.963,5.982031813960893,1.2235227285733399,1000 +LGBM,LGBM,observational,True,3,0.9,0.921,4.904759478369554,1.1326648179240986,1000 +LGBM,LGBM,observational,True,3,0.95,0.969,5.84438139231425,1.1326648179240986,1000 +LGBM,LGBM,observational,True,4,0.9,0.925,5.958922268906894,1.370042866021869,1000 +LGBM,LGBM,observational,True,4,0.95,0.971,7.1004938326197875,1.370042866021869,1000 +LGBM,LGBM,observational,True,5,0.9,0.92,3.449425982629519,0.8277123141255975,1000 +LGBM,LGBM,observational,True,5,0.95,0.965,4.110244572838216,0.8277123141255975,1000 +LGBM,LGBM,observational,True,6,0.9,0.925,3.40159548571924,0.8004114911308209,1000 +LGBM,LGBM,observational,True,6,0.95,0.97,4.053251020481494,0.8004114911308209,1000 diff --git a/results/did/did_pa_atte_coverage_metadata.csv b/results/did/did_pa_atte_coverage_metadata.csv new file mode 100644 index 0000000..1f17571 --- /dev/null +++ b/results/did/did_pa_atte_coverage_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (seconds),Python Version +0.11.dev0,did_pa_atte_coverage.py,2025-06-06 08:42:11,11024.603029727936,3.12.3 From 7d9eeb40148aaedcac0139dd4a94c6d10a52a862 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 6 Jun 2025 09:10:05 +0000 Subject: [PATCH 127/142] Update results from script: scripts/did/did_cs_atte_coverage.py --- results/did/did_cs_atte_coverage.csv | 49 +++++++++++++++++++ results/did/did_cs_atte_coverage_metadata.csv | 2 + 2 files changed, 51 insertions(+) create mode 100644 results/did/did_cs_atte_coverage.csv create mode 100644 results/did/did_cs_atte_coverage_metadata.csv diff --git a/results/did/did_cs_atte_coverage.csv b/results/did/did_cs_atte_coverage.csv new file mode 100644 index 0000000..53cf347 --- /dev/null +++ b/results/did/did_cs_atte_coverage.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,repetition +LGBM,LGBM,experimental,False,1,0.9,0.714,10.421426989395727,3.905582429463871,1000 +LGBM,LGBM,experimental,False,1,0.95,0.796,12.417896177537456,3.905582429463871,1000 +LGBM,LGBM,experimental,False,2,0.9,0.747,11.153655901082034,3.716762206006709,1000 +LGBM,LGBM,experimental,False,2,0.95,0.83,13.290400740757454,3.716762206006709,1000 +LGBM,LGBM,experimental,False,3,0.9,0.826,10.129500599367143,2.9806910089316485,1000 +LGBM,LGBM,experimental,False,3,0.95,0.9,12.070044428775317,2.9806910089316485,1000 +LGBM,LGBM,experimental,False,4,0.9,0.709,10.248410164509226,3.911148948219506,1000 +LGBM,LGBM,experimental,False,4,0.95,0.788,12.211733914865182,3.911148948219506,1000 +LGBM,LGBM,experimental,False,5,0.9,0.897,11.953436462004694,2.904688869350282,1000 +LGBM,LGBM,experimental,False,5,0.95,0.95,14.243398058730905,2.904688869350282,1000 +LGBM,LGBM,experimental,False,6,0.9,0.901,10.409876930645252,2.475898589693061,1000 +LGBM,LGBM,experimental,False,6,0.95,0.951,12.40413343366814,2.475898589693061,1000 +LGBM,LGBM,experimental,True,1,0.9,0.695,10.441642571924747,3.98549935766534,1000 +LGBM,LGBM,experimental,True,1,0.95,0.774,12.441984529859,3.98549935766534,1000 +LGBM,LGBM,experimental,True,2,0.9,0.769,11.14737947150305,3.7228962496196263,1000 +LGBM,LGBM,experimental,True,2,0.95,0.832,13.282921913629773,3.7228962496196263,1000 +LGBM,LGBM,experimental,True,3,0.9,0.822,10.139719900553855,2.993567832780566,1000 +LGBM,LGBM,experimental,True,3,0.95,0.896,12.082221477203783,2.993567832780566,1000 +LGBM,LGBM,experimental,True,4,0.9,0.707,10.258140130646604,3.9509918046955974,1000 +LGBM,LGBM,experimental,True,4,0.95,0.782,12.223327884618827,3.9509918046955974,1000 +LGBM,LGBM,experimental,True,5,0.9,0.894,11.981860540543671,2.9439981898378322,1000 +LGBM,LGBM,experimental,True,5,0.95,0.949,14.277267437329282,2.9439981898378322,1000 +LGBM,LGBM,experimental,True,6,0.9,0.894,10.42424549288115,2.562430198965583,1000 +LGBM,LGBM,experimental,True,6,0.95,0.955,12.421254631585413,2.562430198965583,1000 +LGBM,LGBM,observational,False,1,0.9,0.94,50.01837238134115,11.670635965681225,1000 +LGBM,LGBM,observational,False,1,0.95,0.973,59.600566777747616,11.670635965681225,1000 +LGBM,LGBM,observational,False,2,0.9,0.929,59.19235508827008,13.470175038952636,1000 +LGBM,LGBM,observational,False,2,0.95,0.977,70.53204141217991,13.470175038952636,1000 +LGBM,LGBM,observational,False,3,0.9,0.945,56.62260255116421,12.634763113659828,1000 +LGBM,LGBM,observational,False,3,0.95,0.989,67.46999240102099,12.634763113659828,1000 +LGBM,LGBM,observational,False,4,0.9,0.945,70.02798665966547,16.708878014378698,1000 +LGBM,LGBM,observational,False,4,0.95,0.982,83.44349279101235,16.708878014378698,1000 +LGBM,LGBM,observational,False,5,0.9,0.932,32.68395008367948,7.535531362351606,1000 +LGBM,LGBM,observational,False,5,0.95,0.973,38.945328621880215,7.535531362351606,1000 +LGBM,LGBM,observational,False,6,0.9,0.922,31.254676611393744,7.328062886784694,1000 +LGBM,LGBM,observational,False,6,0.95,0.96,37.24224423562365,7.328062886784694,1000 +LGBM,LGBM,observational,True,1,0.9,0.903,17.911052050251026,4.470376853620159,1000 +LGBM,LGBM,observational,True,1,0.95,0.954,21.342334885309523,4.470376853620159,1000 +LGBM,LGBM,observational,True,2,0.9,0.928,20.466840035852762,4.861276719991755,1000 +LGBM,LGBM,observational,True,2,0.95,0.965,24.387744107030723,4.861276719991755,1000 +LGBM,LGBM,observational,True,3,0.9,0.916,20.087760624155962,4.7945055222830755,1000 +LGBM,LGBM,observational,True,3,0.95,0.958,23.93604312766554,4.7945055222830755,1000 +LGBM,LGBM,observational,True,4,0.9,0.913,23.82669034521118,5.634290832938362,1000 +LGBM,LGBM,observational,True,4,0.95,0.956,28.391252681829,5.634290832938362,1000 +LGBM,LGBM,observational,True,5,0.9,0.89,16.373740873746755,4.117691170125128,1000 +LGBM,LGBM,observational,True,5,0.95,0.943,19.51051563427767,4.117691170125128,1000 +LGBM,LGBM,observational,True,6,0.9,0.891,14.987930087831806,3.7336563054022593,1000 +LGBM,LGBM,observational,True,6,0.95,0.957,17.85922023310908,3.7336563054022593,1000 diff --git a/results/did/did_cs_atte_coverage_metadata.csv b/results/did/did_cs_atte_coverage_metadata.csv new file mode 100644 index 0000000..08604a2 --- /dev/null +++ b/results/did/did_cs_atte_coverage_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (seconds),Python Version +0.11.dev0,did_cs_atte_coverage.py,2025-06-06 09:10:00,12688.770802021027,3.12.3 From 35d2a867c518cf1ed33c45c00347f23f90797a6e Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 6 Jun 2025 11:16:22 +0000 Subject: [PATCH 128/142] Update results from script: scripts/did/did_pa_multi.py --- results/did/did_multi_detailed.csv | 96 ++++++++++++++-------------- results/did/did_multi_eventstudy.csv | 96 ++++++++++++++-------------- results/did/did_multi_group.csv | 96 ++++++++++++++-------------- results/did/did_multi_metadata.csv | 2 +- results/did/did_multi_time.csv | 96 ++++++++++++++-------------- results/did/did_pa_multi_config.yml | 2 +- 6 files changed, 194 insertions(+), 194 deletions(-) diff --git a/results/did/did_multi_detailed.csv b/results/did/did_multi_detailed.csv index 57940d8..924bb00 100644 --- a/results/did/did_multi_detailed.csv +++ b/results/did/did_multi_detailed.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.475,0.6631981918824853,0.4245293917047067,0.1,0.9932181765069161,10 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.5416666666666666,0.7902493871815527,0.4245293917047067,0.2,1.1015948175949941,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.5416666666666667,0.5869258060896296,0.32764889570233524,0.1,0.8999313982334242,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.625,0.6993652338930899,0.32764889570233524,0.2,0.9905529011972265,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8916666666666666,0.5732380857479841,0.1296008781804815,0.9,0.8863780150212672,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9583333333333333,0.6830553091310898,0.1296008781804815,0.9,0.9768868984728167,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.4333333333333333,0.6644058230082063,0.4310666769580376,0.1,0.9956876207839418,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.525,0.7916883684223393,0.4310666769580376,0.2,1.1010287059662813,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.5333333333333333,0.5867446374588254,0.3252236559819743,0.1,0.9009653298965914,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.625,0.6991493581545523,0.3252236559819743,0.2,0.9906567705361429,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9166666666666666,0.5744375253283261,0.1271887141133709,0.9,0.886140673979245,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.95,0.6844845295435221,0.1271887141133709,0.9,0.9769555531920947,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9166666666666666,2.664236516104595,0.737702874596228,1.0,4.15532260850043,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9583333333333334,3.174633616207804,0.737702874596228,1.0,4.551877666833338,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9,3.5057037569343903,1.0460340720779053,0.8,5.373199518974397,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.95,4.177303677040729,1.0460340720779053,1.0,5.908190710461086,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9,2.281268632456931,0.5618099356228352,0.9,3.5680571904376768,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.95,2.7182992367310748,0.5618099356228352,1.0,3.9096210173277703,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9166666666666666,1.1409695517478806,0.2729230152948616,1.0,1.7661171504579372,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9583333333333334,1.3595490761249551,0.2729230152948616,1.0,1.9422779024965977,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.95,1.300679100736105,0.30657137533712187,0.9,2.0078045899921433,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666666,1.5498547415501558,0.30657137533712187,1.0,2.20728741408156,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9,0.9958269378502731,0.25005822501578195,1.0,1.562210388164876,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9666666666666666,1.1866009844527796,0.25005822501578195,1.0,1.7164594299889349,10 -Linear,Logistic,experimental,False,1,0.9,0.8666666666666666,0.29402341515497066,0.08910609381990196,0.7,0.4563945612014034,10 -Linear,Logistic,experimental,False,1,0.95,0.925,0.35035050832046627,0.08910609381990196,0.7,0.5008231628131503,10 -Linear,Logistic,experimental,False,4,0.9,0.33333333333333337,0.977397258784985,0.7610350745966782,0.1,1.4094995674731499,10 -Linear,Logistic,experimental,False,4,0.95,0.4083333333333333,1.1646406673627152,0.7610350745966782,0.3,1.5699905716332707,10 -Linear,Logistic,experimental,False,6,0.9,0.8416666666666666,0.9663512842635651,0.2905316800247778,0.9,1.3942167275591268,10 -Linear,Logistic,experimental,False,6,0.95,0.925,1.1514785768998363,0.2905316800247778,0.9,1.5608208532578387,10 -Linear,Logistic,experimental,True,1,0.9,0.875,0.29394309706642396,0.08863490209339472,0.7,0.4568938014814658,10 -Linear,Logistic,experimental,True,1,0.95,0.925,0.3502548034150089,0.08863490209339472,0.7,0.501950368270883,10 -Linear,Logistic,experimental,True,4,0.9,0.325,0.9782224880817683,0.7615993346262713,0.0,1.4186481260559465,10 -Linear,Logistic,experimental,True,4,0.95,0.425,1.165623988719814,0.7615993346262713,0.3,1.5858023453294943,10 -Linear,Logistic,experimental,True,6,0.9,0.8416666666666666,0.9666491673336306,0.2924338853282872,0.9,1.396461066885858,10 -Linear,Logistic,experimental,True,6,0.95,0.9083333333333334,1.151833526470647,0.2924338853282872,0.9,1.562384080954277,10 -Linear,Logistic,observational,False,1,0.9,0.85,0.31425203663015777,0.08367653043797604,0.9,0.4895007276578588,10 -Linear,Logistic,observational,False,1,0.95,0.925,0.37445439750466164,0.08367653043797604,1.0,0.5393388520558242,10 -Linear,Logistic,observational,False,4,0.9,0.4833333333333334,1.2561035808707968,0.7066371770929671,0.3,1.778385188880911,10 -Linear,Logistic,observational,False,4,0.95,0.6,1.496739733566086,0.7066371770929671,0.4,2.000876501405903,10 -Linear,Logistic,observational,False,6,0.9,0.8833333333333332,0.9938097946227102,0.27383988384601515,0.9,1.44354873326288,10 -Linear,Logistic,observational,False,6,0.95,0.9416666666666668,1.184197410047798,0.27383988384601515,0.9,1.6062137591033303,10 -Linear,Logistic,observational,True,1,0.9,0.875,0.3129076258919823,0.08545450451730417,0.9,0.48745486803071925,10 -Linear,Logistic,observational,True,1,0.95,0.9333333333333333,0.37285243330305884,0.08545450451730417,1.0,0.5382885976877344,10 -Linear,Logistic,observational,True,4,0.9,0.4583333333333333,1.2506620298584346,0.7103356872029178,0.2,1.7866328735215717,10 -Linear,Logistic,observational,True,4,0.95,0.5916666666666666,1.4902557256096856,0.7103356872029178,0.5,2.006300527306606,10 -Linear,Logistic,observational,True,6,0.9,0.8833333333333332,0.9882996807860529,0.2762054991697468,0.9,1.437888190932466,10 -Linear,Logistic,observational,True,6,0.95,0.925,1.1776317044472453,0.2762054991697468,0.9,1.608395843078576,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.3998435054773083,0.6774122808203658,0.45546224863660545,0.11737089201877934,1.012132591144609,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.4996087636932708,0.80718651881127,0.45546224863660545,0.16901408450704225,1.1223411583790253,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.5140845070422535,0.5825338629194045,0.338495362915356,0.1784037558685446,0.8960068193289008,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.610719874804382,0.6941319108212115,0.338495362915356,0.2535211267605634,0.9864382959365845,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8986697965571204,0.5797420679850099,0.14540866383510231,0.8826291079812206,0.8926096426690106,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9479655712050078,0.6908052819747433,0.14540866383510231,0.9342723004694836,0.9822524232973114,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3916275430359938,0.6775298981684246,0.45592163092849536,0.09859154929577464,1.0135080886880636,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.48669796557120504,0.807326668525734,0.45592163092849536,0.1784037558685446,1.124193118709099,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.5172143974960877,0.5826574073228631,0.3365628793076158,0.16901408450704225,0.8969567851338134,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.6091549295774648,0.6942791230577917,0.3365628793076158,0.24413145539906103,0.9871059533494473,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8869327073552425,0.5798047605704594,0.14806948542850354,0.863849765258216,0.8925487708481121,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9448356807511737,0.690879984797879,0.14806948542850354,0.9154929577464789,0.983624165795513,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.8959311424100157,2.7633926433144422,0.7280607911432032,0.9624413145539906,4.285605520531536,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9636150234741784,3.2927854292283714,0.7280607911432032,0.9953051643192489,4.706108077772218,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9213615023474179,3.515668749299535,0.9392311486884903,0.9812206572769953,5.420434398399545,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9737871674491393,4.189177697817945,0.9392311486884903,0.9906103286384976,5.965771640360436,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.935054773082942,2.1578720027595883,0.496041638455299,0.9859154929577465,3.3700943427527528,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9737871674491393,2.5712630834481467,0.496041638455299,0.9953051643192489,3.698989752638499,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9205790297339593,1.1465042775820924,0.27713945258525985,0.9389671361502347,1.7867222903995619,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9604851330203443,1.3661441087294448,0.27713945258525985,0.9671361502347418,1.9593600449966166,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9194053208137716,1.4124733764235744,0.3231443456256321,0.9154929577464789,2.1833254527657897,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.965962441314554,1.6830658373187681,0.3231443456256321,0.9577464788732394,2.401459731447086,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9064945226917058,1.0226495617680404,0.25036302518907455,0.92018779342723,1.5996891640220663,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9557902973395932,1.2185621121715549,0.25036302518907455,0.9812206572769953,1.75215700962208,213 +Linear,Logistic,experimental,False,1,0.9,0.8599374021909233,0.2942329381007584,0.07885862091152207,0.8215962441314554,0.45900161300159426,213 +Linear,Logistic,experimental,False,1,0.95,0.9182316118935838,0.35060017030919877,0.07885862091152207,0.892018779342723,0.504127351002567,213 +Linear,Logistic,experimental,False,4,0.9,0.32629107981220656,0.9776211802565642,0.8124180807452879,0.051643192488262914,1.415728891229315,213 +Linear,Logistic,experimental,False,4,0.95,0.40375586854460094,1.1649074862531439,0.8124180807452879,0.07042253521126761,1.5791872279233108,213 +Linear,Logistic,experimental,False,6,0.9,0.877151799687011,0.9835799789631973,0.25364255139431,0.892018779342723,1.4193976201818594,213 +Linear,Logistic,experimental,False,6,0.95,0.9374021909233177,1.1720078328522332,0.25364255139431,0.9389671361502347,1.582242445231874,213 +Linear,Logistic,experimental,True,1,0.9,0.8583724569640063,0.29425152842277663,0.07893506849681084,0.8309859154929577,0.4588389524655604,213 +Linear,Logistic,experimental,True,1,0.95,0.9174491392801252,0.3506223220441737,0.07893506849681084,0.892018779342723,0.5038096551733684,213 +Linear,Logistic,experimental,True,4,0.9,0.32511737089201875,0.977667670038589,0.8122120271542994,0.051643192488262914,1.415351456768969,213 +Linear,Logistic,experimental,True,4,0.95,0.40375586854460094,1.1649628822451792,0.8122120271542994,0.07042253521126761,1.5770157392547421,213 +Linear,Logistic,experimental,True,6,0.9,0.8744131455399061,0.983350088492923,0.25389098394203446,0.8732394366197183,1.4200093317947935,213 +Linear,Logistic,experimental,True,6,0.95,0.9393583724569641,1.1717339014611698,0.25389098394203446,0.9295774647887324,1.5838096355577131,213 +Linear,Logistic,observational,False,1,0.9,0.9076682316118936,0.3175553687272376,0.07561516930339814,0.9248826291079812,0.4938850661149503,213 +Linear,Logistic,observational,False,1,0.95,0.954225352112676,0.3783905604757408,0.07561516930339814,0.971830985915493,0.5429993998740388,213 +Linear,Logistic,observational,False,4,0.9,0.430359937402191,1.2397563880413096,0.7953463265166806,0.19248826291079812,1.7693165100102601,213 +Linear,Logistic,observational,False,4,0.95,0.5246478873239436,1.4772608518776844,0.7953463265166806,0.29577464788732394,1.9799630660898182,213 +Linear,Logistic,observational,False,6,0.9,0.8802816901408451,1.0215638849527298,0.2657697771880829,0.8591549295774648,1.4750781011819736,213 +Linear,Logistic,observational,False,6,0.95,0.9358372456964007,1.2172684484546181,0.2657697771880829,0.9530516431924883,1.6461025177498927,213 +Linear,Logistic,observational,True,1,0.9,0.9080594679186228,0.3156057782031101,0.07507216274302907,0.9107981220657277,0.49086788828196987,213 +Linear,Logistic,observational,True,1,0.95,0.9534428794992176,0.37606748008166807,0.07507216274302907,0.9671361502347418,0.5391557012552065,213 +Linear,Logistic,observational,True,4,0.9,0.42801251956181535,1.240156742199843,0.7925778982914784,0.19248826291079812,1.770662270313202,213 +Linear,Logistic,observational,True,4,0.95,0.5230829420970267,1.4777379032814864,0.7925778982914784,0.28169014084507044,1.977822853534819,213 +Linear,Logistic,observational,True,6,0.9,0.8697183098591549,1.0162174373615258,0.2678133905875943,0.8591549295774648,1.467059987564026,213 +Linear,Logistic,observational,True,6,0.95,0.9362284820031298,1.2108977632141256,0.2678133905875943,0.9107981220657277,1.6385166854484863,213 diff --git a/results/did/did_multi_eventstudy.csv b/results/did/did_multi_eventstudy.csv index 3777945..d0cc9a1 100644 --- a/results/did/did_multi_eventstudy.csv +++ b/results/did/did_multi_eventstudy.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.31666666666666665,0.6537151341141119,0.49066639902375886,0.1,0.8523540998501415,10 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.5166666666666667,0.7789496268960298,0.49066639902375886,0.3,0.9770428100782877,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.36666666666666664,0.5452858065123898,0.3778386818154926,0.1,0.743163176914931,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4333333333333333,0.6497481140774426,0.3778386818154926,0.2,0.8296678442930695,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.95,0.5315426696186827,0.12186390955805393,0.9,0.7244710155084734,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9666666666666668,0.6333721564208382,0.12186390955805393,0.9,0.8204261481453766,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.2833333333333333,0.6558959400557026,0.49088494137273975,0.1,0.8651478545918568,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.45,0.7815482174531182,0.49088494137273975,0.2,0.977876743090663,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.41666666666666663,0.5445922521271076,0.36496793788889453,0.1,0.7376622142543021,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4666666666666666,0.648921693054806,0.36496793788889453,0.1,0.8399324262943078,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9166666666666667,0.5333510002926822,0.1267921483923527,0.9,0.7262289685879977,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.95,0.635526915321633,0.1267921483923527,0.9,0.8201526076321896,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9333333333333333,2.5552992411975888,0.7608777281615188,1.0,3.5528245647198546,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9666666666666668,3.0448268468435344,0.7608777281615188,1.0,3.9835090886742615,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9,3.5766594600203696,1.1151310261364602,0.9,4.849978691856272,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.95,4.261852612135938,1.1151310261364602,0.9,5.4843854314489615,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9666666666666668,2.0715338989490997,0.4576593539811947,1.0,2.8905463706130057,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.4683848873647265,0.4576593539811947,1.0,3.226733174299394,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.95,1.1035468154353276,0.22988973515771507,1.0,1.549789512023247,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.95,1.3149571354356897,0.22988973515771507,1.0,1.7100374044594258,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9333333333333333,1.2615162998420864,0.2921735103221472,0.9,1.7349291303889927,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666666,1.5031893860265462,0.2921735103221472,0.9,1.9482906291010973,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9166666666666667,0.9020852664274039,0.223288825691725,1.0,1.268826579092233,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9666666666666668,1.0749008934362119,0.223288825691725,1.0,1.412850138548627,10 -Linear,Logistic,experimental,False,1,0.9,0.8166666666666667,0.20956843058873878,0.07506477801543116,0.8,0.3000288302842385,10 -Linear,Logistic,experimental,False,1,0.95,0.9,0.24971618721586605,0.07506477801543116,0.9,0.33172401119841494,10 -Linear,Logistic,experimental,False,4,0.9,0.26666666666666666,0.9758192029894814,0.8863553189507677,0.0,1.2590578271307205,10 -Linear,Logistic,experimental,False,4,0.95,0.35,1.1627602979036324,0.8863553189507677,0.3,1.425570646998339,10 -Linear,Logistic,experimental,False,6,0.9,0.8166666666666667,0.9629875332601576,0.2908069953332307,0.9,1.2404344667371887,10 -Linear,Logistic,experimental,False,6,0.95,0.9333333333333333,1.1474704203613983,0.2908069953332307,0.9,1.4105058132057242,10 -Linear,Logistic,experimental,True,1,0.9,0.8333333333333334,0.20947111193940754,0.07428343024326965,0.8,0.2979299079446137,10 -Linear,Logistic,experimental,True,1,0.95,0.9,0.24960022489278275,0.07428343024326965,0.9,0.3330048127441146,10 -Linear,Logistic,experimental,True,4,0.9,0.3,0.9769037190176618,0.8858975253049832,0.0,1.245923467397466,10 -Linear,Logistic,experimental,True,4,0.95,0.35,1.1640525784573916,0.8858975253049832,0.3,1.4322400852668717,10 -Linear,Logistic,experimental,True,6,0.9,0.8166666666666667,0.9636908575425596,0.2931962751755147,0.9,1.2538856223646675,10 -Linear,Logistic,experimental,True,6,0.95,0.9333333333333333,1.1483084829344887,0.2931962751755147,0.9,1.4163679478599076,10 -Linear,Logistic,observational,False,1,0.9,0.8666666666666666,0.22523328177594734,0.060145661276170145,0.9,0.32202147548595106,10 -Linear,Logistic,observational,False,1,0.95,0.9166666666666667,0.26838200868899714,0.060145661276170145,1.0,0.35718168239326376,10 -Linear,Logistic,observational,False,4,0.9,0.41666666666666663,1.3135619894646324,0.8111606055413789,0.3,1.671840343983336,10 -Linear,Logistic,observational,False,4,0.95,0.5666666666666667,1.5652056502942664,0.8111606055413789,0.4,1.8973728801243435,10 -Linear,Logistic,observational,False,6,0.9,0.9,0.9938846466929837,0.27188590324660405,0.9,1.2869823819918522,10 -Linear,Logistic,observational,False,6,0.95,0.9333333333333333,1.1842866017907592,0.27188590324660405,0.9,1.452249753513595,10 -Linear,Logistic,observational,True,1,0.9,0.85,0.22362395181955633,0.06146781325453693,0.9,0.31927096315703024,10 -Linear,Logistic,observational,True,1,0.95,0.9166666666666667,0.2664643737687314,0.06146781325453693,1.0,0.3549910024680031,10 -Linear,Logistic,observational,True,4,0.9,0.4,1.3111465991606206,0.8189855976253808,0.4,1.6704469678803615,10 -Linear,Logistic,observational,True,4,0.95,0.5666666666666667,1.5623275352286452,0.8189855976253808,0.5,1.894016910355654,10 -Linear,Logistic,observational,True,6,0.9,0.8833333333333334,0.987754294207036,0.2775290083947557,0.9,1.2747731988103106,10 -Linear,Logistic,observational,True,6,0.95,0.95,1.1769818362553224,0.2775290083947557,0.9,1.4482252219187701,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.2652582159624413,0.6738426353849756,0.5274293504796588,0.09859154929577464,0.8819137878378639,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.35758998435054773,0.8029330239249745,0.5274293504796588,0.1596244131455399,1.0020805794352288,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.36619718309859156,0.5417379559244159,0.38469874476660076,0.1784037558685446,0.7377899281180879,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4561815336463224,0.6455205893536495,0.38469874476660076,0.2535211267605634,0.8314719135575573,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8935837245696401,0.539297489044855,0.1350874946339115,0.8779342723004695,0.733879976113594,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.94679186228482,0.6426125937052664,0.1350874946339115,0.9577464788732394,0.8249185552960796,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.2566510172143975,0.6741169305030346,0.5271254414071088,0.07981220657276995,0.8840733793865773,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.352112676056338,0.8032598667173798,0.5271254414071088,0.14084507042253522,1.0029350081401456,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3669796557120501,0.5416448273714012,0.38289493428958665,0.15492957746478872,0.7375321995926126,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4663536776212832,0.6454096198382773,0.38289493428958665,0.2347417840375587,0.8302756334680312,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8857589984350547,0.5394652594848104,0.13836010080710312,0.8497652582159625,0.7318025579590295,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9475743348982786,0.6428125045147116,0.13836010080710312,0.92018779342723,0.82720613326034,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.8896713615023474,2.6890092512865227,0.7200494209782025,0.92018779342723,3.7251683690668043,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9553990610328639,3.2041521508418644,0.7200494209782025,0.9624413145539906,4.1740665666747265,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9209702660406885,3.5465803488647247,0.9687050535779654,0.9765258215962441,4.86821272823518,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9733959311424101,4.226011140538671,0.9687050535779654,0.9906103286384976,5.460451299700878,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9397496087636932,2.016844429290545,0.447496108983214,0.9624413145539906,2.808950740031606,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9757433489827857,2.403218364880276,0.447496108983214,0.9906103286384976,3.1542968976841452,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9209702660406885,1.0931141425868476,0.2586324201487641,0.9295774647887324,1.5164351424033533,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9687010954616588,1.302525838990542,0.2586324201487641,0.9671361502347418,1.6959957409224138,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9420970266040688,1.3861070534921676,0.29683891288883923,0.9295774647887324,1.9076412479291383,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9726134585289514,1.6516484257609465,0.29683891288883923,0.971830985915493,2.1381249471795822,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9053208137715181,0.9470898644218079,0.22867843675954816,0.8873239436619719,1.3244262222504375,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9616588419405321,1.1285271795460685,0.22867843675954816,0.9671361502347418,1.483381487672127,213 +Linear,Logistic,experimental,False,1,0.9,0.8395931142410016,0.20961349451394826,0.06166699387236784,0.7323943661971831,0.2990383792423722,213 +Linear,Logistic,experimental,False,1,0.95,0.9006259780907668,0.24976988419471297,0.06166699387236784,0.8262910798122066,0.3323039576385979,213 +Linear,Logistic,experimental,False,4,0.9,0.2136150234741784,0.9759976682205357,0.9530895482664571,0.046948356807511735,1.257805513435992,213 +Linear,Logistic,experimental,False,4,0.95,0.2683881064162754,1.1629729523426826,0.9530895482664571,0.06103286384976526,1.433457694555575,213 +Linear,Logistic,experimental,False,6,0.9,0.888888888888889,0.984101871756088,0.2529040307014624,0.8544600938967136,1.2672750485116713,213 +Linear,Logistic,experimental,False,6,0.95,0.9311424100156495,1.172629706471318,0.2529040307014624,0.9389671361502347,1.4397703898140197,213 +Linear,Logistic,experimental,True,1,0.9,0.838810641627543,0.20962019115150052,0.06163754557151296,0.7370892018779343,0.2991822645495156,213 +Linear,Logistic,experimental,True,1,0.95,0.9006259780907668,0.24977786373052385,0.06163754557151296,0.8309859154929577,0.33245309146308927,213 +Linear,Logistic,experimental,True,4,0.9,0.2167449139280125,0.9760619360265147,0.952817028222668,0.046948356807511735,1.2609463601610145,213 +Linear,Logistic,experimental,True,4,0.95,0.27230046948356806,1.1630495321568497,0.952817028222668,0.06572769953051644,1.4322602770975743,213 +Linear,Logistic,experimental,True,6,0.9,0.8834115805946792,0.983811761600466,0.2527027570120268,0.8497652582159625,1.265876521888396,213 +Linear,Logistic,experimental,True,6,0.95,0.9358372456964007,1.172284018899335,0.2527027570120268,0.9389671361502347,1.4415267063053059,213 +Linear,Logistic,observational,False,1,0.9,0.9100156494522692,0.2250881504094304,0.0527385366052549,0.9389671361502347,0.32114042199578385,213 +Linear,Logistic,observational,False,1,0.95,0.960093896713615,0.26820907399940563,0.0527385366052549,0.9624413145539906,0.3565208721390806,213 +Linear,Logistic,observational,False,4,0.9,0.3317683881064163,1.2904625746951797,0.929438804907565,0.18779342723004694,1.6422845737610774,213 +Linear,Logistic,observational,False,4,0.95,0.42018779342723006,1.5376809999118553,0.929438804907565,0.27699530516431925,1.8716546886192966,213 +Linear,Logistic,observational,False,6,0.9,0.8818466353677622,1.0252410978950457,0.26737451665728457,0.8544600938967136,1.317569321483734,213 +Linear,Logistic,observational,False,6,0.95,0.9327073552425664,1.2216501179310573,0.26737451665728457,0.92018779342723,1.5020723454442884,213 +Linear,Logistic,observational,True,1,0.9,0.9123630672926448,0.22389841311304975,0.052297945992543005,0.9248826291079812,0.31905149827680773,213 +Linear,Logistic,observational,True,1,0.95,0.9585289514866979,0.2667914145713799,0.052297945992543005,0.9765258215962441,0.3542427529311309,213 +Linear,Logistic,observational,True,4,0.9,0.3270735524256651,1.2929917075582165,0.9243991887988946,0.20187793427230047,1.64687629811095,213 +Linear,Logistic,observational,True,4,0.95,0.41784037558685444,1.54069464759603,0.9243991887988946,0.26291079812206575,1.8776567708863852,213 +Linear,Logistic,observational,True,6,0.9,0.8755868544600939,1.019446010780053,0.2700327354611733,0.8497652582159625,1.308225574447524,213 +Linear,Logistic,observational,True,6,0.95,0.9280125195618153,1.214744845725342,0.2700327354611733,0.92018779342723,1.4918494896646508,213 diff --git a/results/did/did_multi_group.csv b/results/did/did_multi_group.csv index 759e756..93cf706 100644 --- a/results/did/did_multi_group.csv +++ b/results/did/did_multi_group.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.4,0.7038778757281438,0.47194973287162156,0.2,0.8758913214185977,10 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.5,0.8387222202249021,0.47194973287162156,0.2,1.001010069655882,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.5,0.6149881253656317,0.3604337033572076,0.2,0.7810219664812267,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.5666666666666667,0.732803549742243,0.3604337033572076,0.2,0.8919457124055196,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9333333333333333,0.5996559313467016,0.12668533432786627,0.9,0.7620919434781398,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9666666666666666,0.7145341137336549,0.12668533432786627,0.9,0.8630472730843429,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.4,0.7053152806494579,0.4746991771029457,0.0,0.8810869883220048,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4333333333333333,0.8404349938302946,0.4746991771029457,0.2,1.0105973604651746,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.4666666666666666,0.6137523693083393,0.35662870553179526,0.2,0.7787017019204658,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.5666666666666667,0.7313310555784558,0.35662870553179526,0.2,0.8859891714764163,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9666666666666666,0.6016187358287552,0.12413016996963395,0.9,0.7675776583241858,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9666666666666666,0.7168729395297528,0.12413016996963395,0.9,0.8672944117057485,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9,2.564117397311814,0.6748075074539025,1.0,3.211572092656728,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,1.0,3.0553343279413907,0.6748075074539025,1.0,3.6685301941243447,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9333333333333333,3.6314497401813917,1.135290510403337,0.9,4.591536068751408,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9666666666666666,4.327139257743116,1.135290510403337,0.9,5.164689966870119,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9,2.311485371433312,0.6025651661909022,1.0,2.944256005463674,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.7543047019916633,0.6025651661909022,1.0,3.32115409107021,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,1.0,1.159774095087729,0.2556180857092131,1.0,1.4568864048385959,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,1.0,1.381956071548696,0.2556180857092131,1.0,1.6519752896650126,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9333333333333333,1.3002684796757527,0.3050015094584157,1.0,1.6348037247808438,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666666,1.5493654563782737,0.3050015094584157,1.0,1.8717284730559123,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9666666666666666,1.0225970849005845,0.2444184989857893,1.0,1.305407047359292,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,1.0,1.2184995821272093,0.2444184989857893,1.0,1.4842057522002559,10 -Linear,Logistic,experimental,False,1,0.9,0.8666666666666666,0.2632736921387274,0.08586190204900797,0.8,0.3413446240666038,10 -Linear,Logistic,experimental,False,1,0.95,0.9333333333333333,0.31370995340487845,0.08586190204900797,0.9,0.38529167082027993,10 -Linear,Logistic,experimental,False,4,0.9,0.3,1.0817308916902049,0.8593353424866175,0.1,1.3746939016404482,10 -Linear,Logistic,experimental,False,4,0.95,0.4,1.2889618589385583,0.8593353424866175,0.3,1.5579590830548598,10 -Linear,Logistic,experimental,False,6,0.9,0.8333333333333333,1.0683268803526378,0.3323660779211622,0.9,1.3490656766283455,10 -Linear,Logistic,experimental,False,6,0.95,0.9333333333333333,1.2729899943060263,0.3323660779211622,0.9,1.5404615209866068,10 -Linear,Logistic,experimental,True,1,0.9,0.9,0.2631245503202201,0.08406984540734988,0.8,0.3387436337194215,10 -Linear,Logistic,experimental,True,1,0.95,0.9333333333333333,0.31353223996699353,0.08406984540734988,0.9,0.38588941069606797,10 -Linear,Logistic,experimental,True,4,0.9,0.3,1.081869575626785,0.8607114497457358,0.1,1.3624602314700855,10 -Linear,Logistic,experimental,True,4,0.95,0.4666666666666666,1.2891271110415283,0.8607114497457358,0.3,1.5716251157153072,10 -Linear,Logistic,experimental,True,6,0.9,0.8,1.0679763763477195,0.3311340138013665,0.9,1.3471096697431735,10 -Linear,Logistic,experimental,True,6,0.95,0.9333333333333333,1.2725723430239788,0.3311340138013665,0.9,1.5417334084201677,10 -Linear,Logistic,observational,False,1,0.9,0.8333333333333333,0.2816649382994895,0.07271564074321726,0.9,0.36083833235314666,10 -Linear,Logistic,observational,False,1,0.95,0.9666666666666666,0.3356244748645851,0.07271564074321726,0.9,0.4079591535467177,10 -Linear,Logistic,observational,False,4,0.9,0.4333333333333333,1.3994251351987763,0.8150159195179807,0.3,1.741311134100631,10 -Linear,Logistic,observational,False,4,0.95,0.6,1.6675178989228194,0.8150159195179807,0.5,2.0039775780893656,10 -Linear,Logistic,observational,False,6,0.9,0.9,1.0956980944083736,0.3101338106517739,0.9,1.386667166945419,10 -Linear,Logistic,observational,False,6,0.95,0.9333333333333333,1.3056048074926598,0.3101338106517739,0.9,1.558225874803193,10 -Linear,Logistic,observational,True,1,0.9,0.9666666666666666,0.2798937856932111,0.07210043374255667,0.9,0.36057975492164257,10 -Linear,Logistic,observational,True,1,0.95,0.9666666666666666,0.3335140163638711,0.07210043374255667,0.9,0.40431144423970544,10 -Linear,Logistic,observational,True,4,0.9,0.4333333333333333,1.3878865436390964,0.8157724009785868,0.4,1.734158677188527,10 -Linear,Logistic,observational,True,4,0.95,0.6,1.6537688190541107,0.8157724009785868,0.5,2.0031223112830108,10 -Linear,Logistic,observational,True,6,0.9,0.8666666666666666,1.0918235063839146,0.3093097916806968,0.9,1.3809527770014425,10 -Linear,Logistic,observational,True,6,0.95,0.9333333333333333,1.300987951099824,0.3093097916806968,0.9,1.5734346850225365,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.3615023474178404,0.7202622844804144,0.5142431175686811,0.09389671361502347,0.8960068730292109,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.4522691705790297,0.8582454474204736,0.5142431175686811,0.16901408450704225,1.0218690905313046,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.4585289514866979,0.6080965137285453,0.37995101909660545,0.1784037558685446,0.7737228418008084,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.568075117370892,0.72459168797971,0.37995101909660545,0.23943661971830985,0.8761317466502612,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9107981220657277,0.6041693800921251,0.1487229003064066,0.892018779342723,0.768532913195283,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9577464788732394,0.7199122196283984,0.1487229003064066,0.9389671361502347,0.8712620903971866,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3599374021909233,0.7202694109877334,0.5144563506346828,0.09859154929577464,0.896154594874867,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.43974960876369323,0.8582539391777047,0.5144563506346828,0.13615023474178403,1.0209397722371372,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.4726134585289514,0.6080786219858845,0.3781886928978884,0.18309859154929578,0.7737589269691583,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.5758998435054773,0.7245703686533813,0.3781886928978884,0.2347417840375587,0.8776184255890188,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8967136150234741,0.6043541483976993,0.15369943111934065,0.9061032863849765,0.7688492385342756,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9483568075117371,0.7201323846439818,0.15369943111934065,0.9436619718309859,0.8710978723491863,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9014084507042254,2.7211728776223616,0.7210652400496165,0.9389671361502347,3.4325568651778737,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9640062597809077,3.2424774754771537,0.7210652400496165,0.9765258215962441,3.90620301995042,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9280125195618153,3.5331758180056396,0.9482156709536594,0.9530516431924883,4.456779474115103,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9812206572769953,4.210038656858068,0.9482156709536594,0.9906103286384976,5.050979601042688,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9593114241001566,2.1134207943166583,0.4426633274641162,0.9671361502347418,2.68416063766941,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9890453834115805,2.518296201660071,0.4426633274641162,1.0,3.0441389382496644,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9311424100156495,1.1368385210095147,0.2642736374124477,0.9577464788732394,1.445045473376009,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.971830985915493,1.3546266493913184,0.2642736374124477,0.9906103286384976,1.6350299884984196,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9358372456964007,1.4316645897561893,0.3075262798142372,0.9295774647887324,1.812614988818496,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9687010954616588,1.7059335784570864,0.3075262798142372,0.9530516431924883,2.0542997322706174,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.92018779342723,1.008702982773344,0.23956099456087157,0.9295774647887324,1.2878304500066007,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9655712050078247,1.2019437382997051,0.23956099456087157,0.9671361502347418,1.4556619642167887,213 +Linear,Logistic,experimental,False,1,0.9,0.8466353677621283,0.26379623317984124,0.07367574399457054,0.812206572769953,0.33886769227656965,213 +Linear,Logistic,experimental,False,1,0.95,0.917057902973396,0.3143325994593638,0.07367574399457054,0.8873239436619719,0.3826093895409892,213 +Linear,Logistic,experimental,False,4,0.9,0.31768388106416273,1.081000965905216,0.9209342612568459,0.046948356807511735,1.3612059586767777,213 +Linear,Logistic,experimental,False,4,0.95,0.406885758998435,1.2880920987200657,0.9209342612568459,0.07042253521126761,1.5495796948573959,213 +Linear,Logistic,experimental,False,6,0.9,0.8841940532081377,1.0864109362400156,0.2793222944837174,0.8826291079812206,1.3646379214251372,213 +Linear,Logistic,experimental,False,6,0.95,0.9420970266040688,1.2945384759781382,0.2793222944837174,0.9436619718309859,1.5555664326647642,213 +Linear,Logistic,experimental,True,1,0.9,0.8482003129890453,0.26383019814224784,0.07370017470086833,0.7981220657276995,0.33938445004816475,213 +Linear,Logistic,experimental,True,1,0.95,0.917057902973396,0.314373071208316,0.07370017470086833,0.8779342723004695,0.38255405924208785,213 +Linear,Logistic,experimental,True,4,0.9,0.3145539906103286,1.0811145595227114,0.9206314437246235,0.046948356807511735,1.3629136590606885,213 +Linear,Logistic,experimental,True,4,0.95,0.406885758998435,1.288227453863841,0.9206314437246235,0.07042253521126761,1.5491777387798102,213 +Linear,Logistic,experimental,True,6,0.9,0.8763693270735524,1.0860190707615656,0.2799723827071057,0.8732394366197183,1.3678468139137758,213 +Linear,Logistic,experimental,True,6,0.95,0.9436619718309859,1.2940715394605282,0.2799723827071057,0.9436619718309859,1.5543990432787684,213 +Linear,Logistic,observational,False,1,0.9,0.9233176838810642,0.28345104003446464,0.06577425283822312,0.9154929577464789,0.36397364538854327,213 +Linear,Logistic,observational,False,1,0.95,0.9640062597809077,0.3377527463508229,0.06577425283822312,0.9577464788732394,0.41153782693535657,213 +Linear,Logistic,observational,False,4,0.9,0.41001564945226915,1.3821730458167794,0.9084755331600975,0.22065727699530516,1.7301013537520684,213 +Linear,Logistic,observational,False,4,0.95,0.5320813771517997,1.6469607664869994,0.9084755331600975,0.3145539906103286,1.9685722460940824,213 +Linear,Logistic,observational,False,6,0.9,0.8904538341158059,1.1242898926223517,0.2899194075787034,0.9061032863849765,1.4121558358228579,213 +Linear,Logistic,observational,False,6,0.95,0.9436619718309859,1.3396740364103084,0.2899194075787034,0.9436619718309859,1.6083520009872296,213 +Linear,Logistic,observational,True,1,0.9,0.9264475743348983,0.28168330654961965,0.06531180649498958,0.92018779342723,0.36242423041318955,213 +Linear,Logistic,observational,True,1,0.95,0.9640062597809077,0.3356463619845842,0.06531180649498958,0.9624413145539906,0.4088457694027527,213 +Linear,Logistic,observational,True,4,0.9,0.41471048513302033,1.382459197707508,0.905500217221854,0.20187793427230047,1.7291824258918072,213 +Linear,Logistic,observational,True,4,0.95,0.5164319248826291,1.6473017374954506,0.905500217221854,0.29577464788732394,1.9692425330349306,213 +Linear,Logistic,observational,True,6,0.9,0.8763693270735524,1.1216619887490014,0.29425840904927425,0.8967136150234741,1.405222302167041,213 +Linear,Logistic,observational,True,6,0.95,0.9405320813771518,1.336542695808199,0.29425840904927425,0.9389671361502347,1.599301420149991,213 diff --git a/results/did/did_multi_metadata.csv b/results/did/did_multi_metadata.csv index 6ec764b..eddd880 100644 --- a/results/did/did_multi_metadata.csv +++ b/results/did/did_multi_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,DIDMultiCoverageSimulation,2025-06-06 07:07,2.84502333799998,3.12.9,scripts/did/did_pa_multi_config.yml +0.11.dev0,DIDMultiCoverageSimulation,2025-06-06 11:16,337.9197948932648,3.12.3,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_time.csv b/results/did/did_multi_time.csv index b56b019..c2b076e 100644 --- a/results/did/did_multi_time.csv +++ b/results/did/did_multi_time.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.2333333333333333,0.6625987616638548,0.5213456662078564,0.2,0.7853107113133788,10 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.3,0.7895351220211091,0.5213456662078564,0.2,0.9197962066654052,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.26666666666666666,0.5493976514472162,0.4185989168586719,0.3,0.6682227683696846,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.36666666666666664,0.654647679516107,0.4185989168586719,0.3,0.7654036063784714,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9,0.5332788843896268,0.10688967347011427,0.9,0.6590174118187636,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9333333333333333,0.6354409839230054,0.10688967347011427,0.9,0.7462631615057108,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.2333333333333333,0.6634007679597379,0.5331593697938268,0.1,0.7887760040753716,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.3,0.7904907714658677,0.5331593697938268,0.2,0.9122615403961426,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.26666666666666666,0.5479992332361258,0.4111745820322453,0.3,0.6599184723785617,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.36666666666666664,0.652981361441263,0.4111745820322453,0.3,0.7613711498758222,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9,0.5346760598484942,0.11070063279136115,0.9,0.6528004508473261,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9,0.6371058211672402,0.11070063279136115,0.9,0.7449493953115034,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9666666666666666,2.724444869693017,0.8243030230260644,1.0,3.3909690969119404,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,1.0,3.246376294503422,0.8243030230260644,1.0,3.8976431441316266,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9,3.6042175187597345,1.1266225099616716,0.8,4.424909178964977,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9333333333333333,4.294690064495208,1.1266225099616716,0.9,4.989501158590644,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9333333333333332,2.049861926914148,0.497363662933101,1.0,2.586659888950317,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9666666666666666,2.442561139909952,0.497363662933101,1.0,2.931429368444929,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9333333333333333,1.1329976823562682,0.2659616385892486,0.9,1.3893901574468819,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9666666666666666,1.3500500078546822,0.2659616385892486,1.0,1.5944049463735803,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9333333333333333,1.251058212717813,0.3007003480415746,0.9,1.529240506606829,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666666,1.4907278066039762,0.3007003480415746,0.9,1.7668714749531325,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9333333333333332,0.8948452833589853,0.204625060665209,1.0,1.1255012536126696,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9666666666666666,1.0662739215097916,0.204625060665209,1.0,1.2696773979939644,10 -Linear,Logistic,experimental,False,1,0.9,0.8,0.24368352652491732,0.07973745587306341,0.7,0.3140608732531678,10 -Linear,Logistic,experimental,False,1,0.95,0.8333333333333334,0.29036683130263713,0.07973745587306341,0.9,0.353078827935582,10 -Linear,Logistic,experimental,False,4,0.9,0.06666666666666667,0.9696652351208508,1.0073141648234347,0.1,1.1209858064157003,10 -Linear,Logistic,experimental,False,4,0.95,0.2,1.1554273929041232,1.0073141648234347,0.2,1.2941513352794645,10 -Linear,Logistic,experimental,False,6,0.9,0.8333333333333333,0.9438277624968293,0.29488640962019724,0.9,1.0892187696065885,10 -Linear,Logistic,experimental,False,6,0.95,0.9333333333333333,1.1246401453552475,0.29488640962019724,0.9,1.2670156104265275,10 -Linear,Logistic,experimental,True,1,0.9,0.8,0.2436357920939464,0.0791259916382179,0.8,0.31171105219819967,10 -Linear,Logistic,experimental,True,1,0.95,0.8333333333333334,0.2903099522199074,0.0791259916382179,0.9,0.3520619816250074,10 -Linear,Logistic,experimental,True,4,0.9,0.03333333333333333,0.9695009673483899,1.0075438566095531,0.1,1.115461156732828,10 -Linear,Logistic,experimental,True,4,0.95,0.2,1.1552316557804254,1.0075438566095531,0.2,1.2789195615169306,10 -Linear,Logistic,experimental,True,6,0.9,0.8,0.9443978779018088,0.293922986691963,0.8,1.0881146173894785,10 -Linear,Logistic,experimental,True,6,0.95,0.9,1.1253194797607422,0.293922986691963,0.9,1.265074198410168,10 -Linear,Logistic,observational,False,1,0.9,0.9,0.26927852812297753,0.07828736376144599,1.0,0.3461250687337986,10 -Linear,Logistic,observational,False,1,0.95,0.9333333333333333,0.32086515680374456,0.07828736376144599,1.0,0.39040958691611627,10 -Linear,Logistic,observational,False,4,0.9,0.2333333333333333,1.3841812843946113,0.9247903996730132,0.2,1.5543899701191308,10 -Linear,Logistic,observational,False,4,0.95,0.4,1.6493537303473822,0.9247903996730132,0.2,1.822670006501189,10 -Linear,Logistic,observational,False,6,0.9,0.9,0.974459490524002,0.2757337897896041,0.9,1.1210193921596707,10 -Linear,Logistic,observational,False,6,0.95,0.9333333333333333,1.1611401005693511,0.2757337897896041,0.9,1.3140753581598792,10 -Linear,Logistic,observational,True,1,0.9,0.9,0.2685978168282629,0.07797281860557405,0.9,0.3454345116230722,10 -Linear,Logistic,observational,True,1,0.95,0.9666666666666666,0.32005403926741827,0.07797281860557405,1.0,0.38818579953504795,10 -Linear,Logistic,observational,True,4,0.9,0.2333333333333333,1.3696358280898424,0.9230010520428433,0.2,1.537629262768635,10 -Linear,Logistic,observational,True,4,0.95,0.3333333333333333,1.6320217501462715,0.9230010520428433,0.2,1.7984131238646603,10 -Linear,Logistic,observational,True,6,0.9,0.8666666666666666,0.9691273134777948,0.27660893376700224,0.8,1.1165632239349048,10 -Linear,Logistic,observational,True,6,0.95,0.9,1.1547864197320314,0.27660893376700224,0.9,1.2865502355295269,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.1111111111111111,0.6848879510567563,0.5814212808822293,0.06572769953051644,0.8112788259677559,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.19092331768388104,0.8160943293200865,0.5814212808822293,0.1596244131455399,0.9363347602930319,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.2190923317683881,0.5442904416410593,0.42804406962185293,0.15023474178403756,0.6610129830707445,213 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.3114241001564945,0.6485620636792077,0.42804406962185293,0.2112676056338028,0.7594820835871338,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9076682316118936,0.540281441005603,0.13166144694063336,0.8967136150234741,0.6574061190218973,213 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9530516431924883,0.6437850447817539,0.13166144694063336,0.9436619718309859,0.755440248127496,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.10641627543035993,0.6849270317496503,0.5816182941099456,0.07042253521126761,0.810739883430405,213 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.17527386541471046,0.8161408968378937,0.5816182941099456,0.13145539906103287,0.9369536425675097,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.2190923317683881,0.5441327590803698,0.4271332871560829,0.15492957746478872,0.659742375492321,213 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.29733959311424096,0.6483741733193132,0.4271332871560829,0.20657276995305165,0.7581397106264711,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8982785602503913,0.5400972159018558,0.1320306660672212,0.892018779342723,0.65734442843056,213 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9546165884194053,0.6435655270310701,0.1320306660672212,0.9248826291079812,0.7544822430389665,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.863849765258216,2.947691714934299,0.8081717452002422,0.9014084507042254,3.6345410887622425,213 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9483568075117371,3.5123913180688033,0.8081717452002422,0.9530516431924883,4.148298978134212,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9107981220657277,3.920449689676996,1.0987394652573248,0.9342723004694836,4.803568258598088,213 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.974960876369327,4.671503937532334,1.0987394652573248,1.0,5.490527294034555,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9452269170579031,1.9822578095421914,0.41440886099461754,0.9765258215962441,2.4747132887427976,213 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9843505477308294,2.362005865516796,0.41440886099461754,0.9906103286384976,2.82160571997147,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9139280125195618,1.1523823561555302,0.27480514203439516,0.9295774647887324,1.4209065729930848,213 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9733959311424101,1.37314827135733,0.27480514203439516,0.9765258215962441,1.6207292567271263,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9295774647887324,1.4768427642563355,0.3193093946805207,0.92018779342723,1.8030473738560802,213 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9655712050078247,1.7597666937304888,0.3193093946805207,0.971830985915493,2.066811584773276,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9029733959311425,0.9274870427023983,0.22082805477342204,0.92018779342723,1.1562170046781757,213 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9593114241001566,1.1051689767638488,0.22082805477342204,0.971830985915493,1.3147550346737336,213 +Linear,Logistic,experimental,False,1,0.9,0.8231611893583725,0.24405699708437717,0.07177094325289468,0.7746478873239436,0.3128134096194603,213 +Linear,Logistic,experimental,False,1,0.95,0.895148669796557,0.290811848922341,0.07177094325289468,0.8685446009389671,0.3532819977654326,213 +Linear,Logistic,experimental,False,4,0.9,0.03912363067292645,0.9696140468983949,1.089724580728028,0.028169014084507043,1.112835689831825,213 +Linear,Logistic,experimental,False,4,0.95,0.0594679186228482,1.1553663983750042,1.089724580728028,0.056338028169014086,1.2908015410381681,213 +Linear,Logistic,experimental,False,6,0.9,0.8841940532081377,0.9637145816970751,0.24601437794174566,0.8591549295774648,1.1098958953800837,213 +Linear,Logistic,experimental,False,6,0.95,0.9420970266040688,1.1483367520081937,0.24601437794174566,0.92018779342723,1.2882569853203092,213 +Linear,Logistic,experimental,True,1,0.9,0.8294209702660407,0.24407331778379834,0.07187555926470358,0.755868544600939,0.31239740640105534,213 +Linear,Logistic,experimental,True,1,0.95,0.8904538341158059,0.29083129623518633,0.07187555926470358,0.8685446009389671,0.35340605322083257,213 +Linear,Logistic,experimental,True,4,0.9,0.03755868544600939,0.9698402059419257,1.089909708050757,0.028169014084507043,1.1118287534726101,213 +Linear,Logistic,experimental,True,4,0.95,0.06572769953051644,1.1556358834968625,1.089909708050757,0.056338028169014086,1.2947346339601935,213 +Linear,Logistic,experimental,True,6,0.9,0.8857589984350547,0.963597334445951,0.2461020735514813,0.8732394366197183,1.1092556702862066,213 +Linear,Logistic,experimental,True,6,0.95,0.9420970266040688,1.1481970432914277,0.2461020735514813,0.9295774647887324,1.288313460888964,213 +Linear,Logistic,observational,False,1,0.9,0.9092331768388106,0.2738536200757641,0.0653695842721706,0.9107981220657277,0.35111788102252456,213 +Linear,Logistic,observational,False,1,0.95,0.9577464788732394,0.32631671511051,0.0653695842721706,0.9577464788732394,0.39595800514716334,213 +Linear,Logistic,observational,False,4,0.9,0.17214397496087636,1.352533603300557,1.0665740251760334,0.15023474178403756,1.523002565481769,213 +Linear,Logistic,observational,False,4,0.95,0.26134585289514867,1.611643192386921,1.0665740251760334,0.22535211267605634,1.7732161740973758,213 +Linear,Logistic,observational,False,6,0.9,0.8857589984350547,1.0021244212459983,0.25876871605083246,0.8591549295774648,1.1510136525260573,213 +Linear,Logistic,observational,False,6,0.95,0.9389671361502347,1.1941048987504526,0.25876871605083246,0.92018779342723,1.3383058201805063,213 +Linear,Logistic,observational,True,1,0.9,0.9123630672926448,0.2715453775356287,0.0644928980540172,0.9154929577464789,0.3477637744633791,213 +Linear,Logistic,observational,True,1,0.95,0.9608763693270735,0.32356627448034075,0.0644928980540172,0.9624413145539906,0.3936582053408612,213 +Linear,Logistic,observational,True,4,0.9,0.17683881064162754,1.3541054412513556,1.0639801560397304,0.15023474178403756,1.5236529859485555,213 +Linear,Logistic,observational,True,4,0.95,0.24413145539906103,1.6135161528270596,1.0639801560397304,0.2112676056338028,1.7775778058708633,213 +Linear,Logistic,observational,True,6,0.9,0.8763693270735524,0.9971323968875062,0.2594135097814355,0.8732394366197183,1.1473737786354752,213 +Linear,Logistic,observational,True,6,0.95,0.9327073552425664,1.1881565348399659,0.2594135097814355,0.9154929577464789,1.33540506645655,213 diff --git a/results/did/did_pa_multi_config.yml b/results/did/did_pa_multi_config.yml index 72961df..ed4e23a 100644 --- a/results/did/did_pa_multi_config.yml +++ b/results/did/did_pa_multi_config.yml @@ -1,5 +1,5 @@ simulation_parameters: - repetitions: 10 + repetitions: 1000 max_runtime: 19800 random_seed: 42 n_jobs: -2 From 22b5452b8bb584daf48d47d04be80887954744c0 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Fri, 6 Jun 2025 13:50:22 +0200 Subject: [PATCH 129/142] update did multi results --- results/did/did_multi_detailed.csv | 96 ++++++++++++++-------------- results/did/did_multi_eventstudy.csv | 96 ++++++++++++++-------------- results/did/did_multi_group.csv | 96 ++++++++++++++-------------- results/did/did_multi_metadata.csv | 2 +- results/did/did_multi_time.csv | 96 ++++++++++++++-------------- results/did/did_pa_multi_config.yml | 24 +++++-- scripts/did/did_pa_multi_config.yml | 24 +++++-- 7 files changed, 233 insertions(+), 201 deletions(-) diff --git a/results/did/did_multi_detailed.csv b/results/did/did_multi_detailed.csv index 924bb00..c996df8 100644 --- a/results/did/did_multi_detailed.csv +++ b/results/did/did_multi_detailed.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.3998435054773083,0.6774122808203658,0.45546224863660545,0.11737089201877934,1.012132591144609,213 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.4996087636932708,0.80718651881127,0.45546224863660545,0.16901408450704225,1.1223411583790253,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.5140845070422535,0.5825338629194045,0.338495362915356,0.1784037558685446,0.8960068193289008,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.610719874804382,0.6941319108212115,0.338495362915356,0.2535211267605634,0.9864382959365845,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8986697965571204,0.5797420679850099,0.14540866383510231,0.8826291079812206,0.8926096426690106,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9479655712050078,0.6908052819747433,0.14540866383510231,0.9342723004694836,0.9822524232973114,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3916275430359938,0.6775298981684246,0.45592163092849536,0.09859154929577464,1.0135080886880636,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.48669796557120504,0.807326668525734,0.45592163092849536,0.1784037558685446,1.124193118709099,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.5172143974960877,0.5826574073228631,0.3365628793076158,0.16901408450704225,0.8969567851338134,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.6091549295774648,0.6942791230577917,0.3365628793076158,0.24413145539906103,0.9871059533494473,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8869327073552425,0.5798047605704594,0.14806948542850354,0.863849765258216,0.8925487708481121,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9448356807511737,0.690879984797879,0.14806948542850354,0.9154929577464789,0.983624165795513,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.8959311424100157,2.7633926433144422,0.7280607911432032,0.9624413145539906,4.285605520531536,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9636150234741784,3.2927854292283714,0.7280607911432032,0.9953051643192489,4.706108077772218,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9213615023474179,3.515668749299535,0.9392311486884903,0.9812206572769953,5.420434398399545,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9737871674491393,4.189177697817945,0.9392311486884903,0.9906103286384976,5.965771640360436,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.935054773082942,2.1578720027595883,0.496041638455299,0.9859154929577465,3.3700943427527528,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9737871674491393,2.5712630834481467,0.496041638455299,0.9953051643192489,3.698989752638499,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9205790297339593,1.1465042775820924,0.27713945258525985,0.9389671361502347,1.7867222903995619,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9604851330203443,1.3661441087294448,0.27713945258525985,0.9671361502347418,1.9593600449966166,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9194053208137716,1.4124733764235744,0.3231443456256321,0.9154929577464789,2.1833254527657897,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.965962441314554,1.6830658373187681,0.3231443456256321,0.9577464788732394,2.401459731447086,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9064945226917058,1.0226495617680404,0.25036302518907455,0.92018779342723,1.5996891640220663,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9557902973395932,1.2185621121715549,0.25036302518907455,0.9812206572769953,1.75215700962208,213 -Linear,Logistic,experimental,False,1,0.9,0.8599374021909233,0.2942329381007584,0.07885862091152207,0.8215962441314554,0.45900161300159426,213 -Linear,Logistic,experimental,False,1,0.95,0.9182316118935838,0.35060017030919877,0.07885862091152207,0.892018779342723,0.504127351002567,213 -Linear,Logistic,experimental,False,4,0.9,0.32629107981220656,0.9776211802565642,0.8124180807452879,0.051643192488262914,1.415728891229315,213 -Linear,Logistic,experimental,False,4,0.95,0.40375586854460094,1.1649074862531439,0.8124180807452879,0.07042253521126761,1.5791872279233108,213 -Linear,Logistic,experimental,False,6,0.9,0.877151799687011,0.9835799789631973,0.25364255139431,0.892018779342723,1.4193976201818594,213 -Linear,Logistic,experimental,False,6,0.95,0.9374021909233177,1.1720078328522332,0.25364255139431,0.9389671361502347,1.582242445231874,213 -Linear,Logistic,experimental,True,1,0.9,0.8583724569640063,0.29425152842277663,0.07893506849681084,0.8309859154929577,0.4588389524655604,213 -Linear,Logistic,experimental,True,1,0.95,0.9174491392801252,0.3506223220441737,0.07893506849681084,0.892018779342723,0.5038096551733684,213 -Linear,Logistic,experimental,True,4,0.9,0.32511737089201875,0.977667670038589,0.8122120271542994,0.051643192488262914,1.415351456768969,213 -Linear,Logistic,experimental,True,4,0.95,0.40375586854460094,1.1649628822451792,0.8122120271542994,0.07042253521126761,1.5770157392547421,213 -Linear,Logistic,experimental,True,6,0.9,0.8744131455399061,0.983350088492923,0.25389098394203446,0.8732394366197183,1.4200093317947935,213 -Linear,Logistic,experimental,True,6,0.95,0.9393583724569641,1.1717339014611698,0.25389098394203446,0.9295774647887324,1.5838096355577131,213 -Linear,Logistic,observational,False,1,0.9,0.9076682316118936,0.3175553687272376,0.07561516930339814,0.9248826291079812,0.4938850661149503,213 -Linear,Logistic,observational,False,1,0.95,0.954225352112676,0.3783905604757408,0.07561516930339814,0.971830985915493,0.5429993998740388,213 -Linear,Logistic,observational,False,4,0.9,0.430359937402191,1.2397563880413096,0.7953463265166806,0.19248826291079812,1.7693165100102601,213 -Linear,Logistic,observational,False,4,0.95,0.5246478873239436,1.4772608518776844,0.7953463265166806,0.29577464788732394,1.9799630660898182,213 -Linear,Logistic,observational,False,6,0.9,0.8802816901408451,1.0215638849527298,0.2657697771880829,0.8591549295774648,1.4750781011819736,213 -Linear,Logistic,observational,False,6,0.95,0.9358372456964007,1.2172684484546181,0.2657697771880829,0.9530516431924883,1.6461025177498927,213 -Linear,Logistic,observational,True,1,0.9,0.9080594679186228,0.3156057782031101,0.07507216274302907,0.9107981220657277,0.49086788828196987,213 -Linear,Logistic,observational,True,1,0.95,0.9534428794992176,0.37606748008166807,0.07507216274302907,0.9671361502347418,0.5391557012552065,213 -Linear,Logistic,observational,True,4,0.9,0.42801251956181535,1.240156742199843,0.7925778982914784,0.19248826291079812,1.770662270313202,213 -Linear,Logistic,observational,True,4,0.95,0.5230829420970267,1.4777379032814864,0.7925778982914784,0.28169014084507044,1.977822853534819,213 -Linear,Logistic,observational,True,6,0.9,0.8697183098591549,1.0162174373615258,0.2678133905875943,0.8591549295774648,1.467059987564026,213 -Linear,Logistic,observational,True,6,0.95,0.9362284820031298,1.2108977632141256,0.2678133905875943,0.9107981220657277,1.6385166854484863,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.34725,0.6632201286426477,0.49011237580369793,0.033,0.9893937609780801,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.4386666666666667,0.7902755264435218,0.49011237580369793,0.079,1.0974315281580984,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.3925,0.6374280121970815,0.4673059259736469,0.072,0.97009187850922,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4734166666666667,0.759542324114714,0.4673059259736469,0.111,1.071000291105895,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9011666666666667,0.6326304449554325,0.1563321623926723,0.888,0.9627064358023116,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9486666666666667,0.7538256701505138,0.1563321623926723,0.955,1.0626523999436193,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3473333333333333,0.663082675494273,0.4905683815649934,0.033,0.9889346057283442,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4349166666666667,0.7901117409151553,0.4905683815649934,0.08,1.0975864011236443,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3943333333333333,0.6375246725440924,0.46800538303488937,0.072,0.9700098655165373,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4765833333333333,0.759657502022201,0.46800538303488937,0.118,1.0708460305597636,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8973333333333333,0.6326541125548435,0.15625780987233984,0.89,0.9621250011958815,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.947,0.7538538718346554,0.15625780987233984,0.952,1.062489694804598,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9435833333333333,0.8381616751048,0.17814054462577147,0.953,1.2839156930486022,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9778333333333333,0.9987312363300253,0.17814054462577147,0.982,1.416218776113961,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.926,1.1565439632042973,0.2473594696190042,0.931,1.738632033036807,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9675,1.3781071320120069,0.2473594696190042,0.965,1.9268759390224799,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.931,0.7998363707192514,0.17526821717897792,0.945,1.2193415272752777,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9684166666666666,0.9530638194478139,0.17526821717897792,0.978,1.3462730296391963,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9301666666666666,0.7578895509440912,0.16579983845899396,0.945,1.163855412725748,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9713333333333334,0.9030811008166856,0.16579983845899396,0.98,1.2816924647051413,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.89675,1.026901361709593,0.2402117312036738,0.865,1.5489489542811425,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.94425,1.2236284442866847,0.2402117312036738,0.922,1.7135671893558606,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9195833333333334,0.7392347349554987,0.16906220777838002,0.931,1.131310154953256,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.962,0.8808525165361331,0.16906220777838002,0.963,1.2473273228458321,1000 +Linear,Logistic,experimental,False,1,0.9,0.86275,0.2948051239305335,0.07900091146011895,0.793,0.45951022758324694,1000 +Linear,Logistic,experimental,False,1,0.95,0.92075,0.35128197177800297,0.07900091146011895,0.871,0.5047371756723105,1000 +Linear,Logistic,experimental,False,4,0.9,0.3095833333333333,0.9746459049539102,0.8123545762455107,0.041,1.4101593649841206,1000 +Linear,Logistic,experimental,False,4,0.95,0.39075,1.1613622270630595,0.8123545762455107,0.071,1.5725658487365672,1000 +Linear,Logistic,experimental,False,6,0.9,0.9036666666666666,0.9838971680839407,0.238720331830627,0.907,1.4193492655675315,1000 +Linear,Logistic,experimental,False,6,0.95,0.9551666666666666,1.172385787001319,0.238720331830627,0.96,1.5835849590579594,1000 +Linear,Logistic,experimental,True,1,0.9,0.8628333333333333,0.2948075666878801,0.07902018736146375,0.796,0.4595632294378891,1000 +Linear,Logistic,experimental,True,1,0.95,0.9198333333333334,0.3512848825029112,0.07902018736146375,0.867,0.5043781347089554,1000 +Linear,Logistic,experimental,True,4,0.9,0.309,0.9745871850206221,0.8120029975685781,0.042,1.4109703744664022,1000 +Linear,Logistic,experimental,True,4,0.95,0.3904166666666667,1.1612922579469427,0.8120029975685781,0.072,1.573528921909118,1000 +Linear,Logistic,experimental,True,6,0.9,0.9026666666666666,0.9840257361416861,0.23855494093764582,0.909,1.4210470533624664,1000 +Linear,Logistic,experimental,True,6,0.95,0.955,1.172538985291194,0.23855494093764582,0.963,1.585082469200275,1000 +Linear,Logistic,observational,False,1,0.9,0.9035,0.3185718084378124,0.0757558873307347,0.903,0.49534769392303246,1000 +Linear,Logistic,observational,False,1,0.95,0.9523333333333334,0.3796017230938245,0.0757558873307347,0.952,0.5441495204164779,1000 +Linear,Logistic,observational,False,4,0.9,0.41975,1.2508957207637406,0.7931627006785289,0.182,1.7859975260538024,1000 +Linear,Logistic,observational,False,4,0.95,0.5270833333333333,1.4905341854984016,0.7931627006785289,0.266,1.9972462513836364,1000 +Linear,Logistic,observational,False,6,0.9,0.8975833333333334,1.0291252957567814,0.2544578718137418,0.89,1.4849517269617925,1000 +Linear,Logistic,observational,False,6,0.95,0.9506666666666667,1.2262784251512802,0.2544578718137418,0.955,1.6571001913426326,1000 +Linear,Logistic,observational,True,1,0.9,0.90125,0.3166209527583751,0.07556902517081551,0.907,0.4925599895610136,1000 +Linear,Logistic,observational,True,1,0.95,0.9506666666666667,0.37727713517421785,0.07556902517081551,0.942,0.5411280924724183,1000 +Linear,Logistic,observational,True,4,0.9,0.416,1.2505883681999757,0.7923942748523936,0.194,1.7849545041218804,1000 +Linear,Logistic,observational,True,4,0.95,0.525,1.49016795232989,0.7923942748523936,0.281,1.996332789038424,1000 +Linear,Logistic,observational,True,6,0.9,0.8970833333333333,1.0227456972598339,0.2535415241660661,0.897,1.475471462269075,1000 +Linear,Logistic,observational,True,6,0.95,0.95025,1.2186766646754759,0.2535415241660661,0.955,1.6467072408407117,1000 diff --git a/results/did/did_multi_eventstudy.csv b/results/did/did_multi_eventstudy.csv index d0cc9a1..2241619 100644 --- a/results/did/did_multi_eventstudy.csv +++ b/results/did/did_multi_eventstudy.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.2652582159624413,0.6738426353849756,0.5274293504796588,0.09859154929577464,0.8819137878378639,213 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.35758998435054773,0.8029330239249745,0.5274293504796588,0.1596244131455399,1.0020805794352288,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.36619718309859156,0.5417379559244159,0.38469874476660076,0.1784037558685446,0.7377899281180879,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4561815336463224,0.6455205893536495,0.38469874476660076,0.2535211267605634,0.8314719135575573,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.8935837245696401,0.539297489044855,0.1350874946339115,0.8779342723004695,0.733879976113594,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.94679186228482,0.6426125937052664,0.1350874946339115,0.9577464788732394,0.8249185552960796,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.2566510172143975,0.6741169305030346,0.5271254414071088,0.07981220657276995,0.8840733793865773,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.352112676056338,0.8032598667173798,0.5271254414071088,0.14084507042253522,1.0029350081401456,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3669796557120501,0.5416448273714012,0.38289493428958665,0.15492957746478872,0.7375321995926126,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4663536776212832,0.6454096198382773,0.38289493428958665,0.2347417840375587,0.8302756334680312,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8857589984350547,0.5394652594848104,0.13836010080710312,0.8497652582159625,0.7318025579590295,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9475743348982786,0.6428125045147116,0.13836010080710312,0.92018779342723,0.82720613326034,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.8896713615023474,2.6890092512865227,0.7200494209782025,0.92018779342723,3.7251683690668043,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9553990610328639,3.2041521508418644,0.7200494209782025,0.9624413145539906,4.1740665666747265,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9209702660406885,3.5465803488647247,0.9687050535779654,0.9765258215962441,4.86821272823518,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9733959311424101,4.226011140538671,0.9687050535779654,0.9906103286384976,5.460451299700878,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9397496087636932,2.016844429290545,0.447496108983214,0.9624413145539906,2.808950740031606,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9757433489827857,2.403218364880276,0.447496108983214,0.9906103286384976,3.1542968976841452,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9209702660406885,1.0931141425868476,0.2586324201487641,0.9295774647887324,1.5164351424033533,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9687010954616588,1.302525838990542,0.2586324201487641,0.9671361502347418,1.6959957409224138,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9420970266040688,1.3861070534921676,0.29683891288883923,0.9295774647887324,1.9076412479291383,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9726134585289514,1.6516484257609465,0.29683891288883923,0.971830985915493,2.1381249471795822,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9053208137715181,0.9470898644218079,0.22867843675954816,0.8873239436619719,1.3244262222504375,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9616588419405321,1.1285271795460685,0.22867843675954816,0.9671361502347418,1.483381487672127,213 -Linear,Logistic,experimental,False,1,0.9,0.8395931142410016,0.20961349451394826,0.06166699387236784,0.7323943661971831,0.2990383792423722,213 -Linear,Logistic,experimental,False,1,0.95,0.9006259780907668,0.24976988419471297,0.06166699387236784,0.8262910798122066,0.3323039576385979,213 -Linear,Logistic,experimental,False,4,0.9,0.2136150234741784,0.9759976682205357,0.9530895482664571,0.046948356807511735,1.257805513435992,213 -Linear,Logistic,experimental,False,4,0.95,0.2683881064162754,1.1629729523426826,0.9530895482664571,0.06103286384976526,1.433457694555575,213 -Linear,Logistic,experimental,False,6,0.9,0.888888888888889,0.984101871756088,0.2529040307014624,0.8544600938967136,1.2672750485116713,213 -Linear,Logistic,experimental,False,6,0.95,0.9311424100156495,1.172629706471318,0.2529040307014624,0.9389671361502347,1.4397703898140197,213 -Linear,Logistic,experimental,True,1,0.9,0.838810641627543,0.20962019115150052,0.06163754557151296,0.7370892018779343,0.2991822645495156,213 -Linear,Logistic,experimental,True,1,0.95,0.9006259780907668,0.24977786373052385,0.06163754557151296,0.8309859154929577,0.33245309146308927,213 -Linear,Logistic,experimental,True,4,0.9,0.2167449139280125,0.9760619360265147,0.952817028222668,0.046948356807511735,1.2609463601610145,213 -Linear,Logistic,experimental,True,4,0.95,0.27230046948356806,1.1630495321568497,0.952817028222668,0.06572769953051644,1.4322602770975743,213 -Linear,Logistic,experimental,True,6,0.9,0.8834115805946792,0.983811761600466,0.2527027570120268,0.8497652582159625,1.265876521888396,213 -Linear,Logistic,experimental,True,6,0.95,0.9358372456964007,1.172284018899335,0.2527027570120268,0.9389671361502347,1.4415267063053059,213 -Linear,Logistic,observational,False,1,0.9,0.9100156494522692,0.2250881504094304,0.0527385366052549,0.9389671361502347,0.32114042199578385,213 -Linear,Logistic,observational,False,1,0.95,0.960093896713615,0.26820907399940563,0.0527385366052549,0.9624413145539906,0.3565208721390806,213 -Linear,Logistic,observational,False,4,0.9,0.3317683881064163,1.2904625746951797,0.929438804907565,0.18779342723004694,1.6422845737610774,213 -Linear,Logistic,observational,False,4,0.95,0.42018779342723006,1.5376809999118553,0.929438804907565,0.27699530516431925,1.8716546886192966,213 -Linear,Logistic,observational,False,6,0.9,0.8818466353677622,1.0252410978950457,0.26737451665728457,0.8544600938967136,1.317569321483734,213 -Linear,Logistic,observational,False,6,0.95,0.9327073552425664,1.2216501179310573,0.26737451665728457,0.92018779342723,1.5020723454442884,213 -Linear,Logistic,observational,True,1,0.9,0.9123630672926448,0.22389841311304975,0.052297945992543005,0.9248826291079812,0.31905149827680773,213 -Linear,Logistic,observational,True,1,0.95,0.9585289514866979,0.2667914145713799,0.052297945992543005,0.9765258215962441,0.3542427529311309,213 -Linear,Logistic,observational,True,4,0.9,0.3270735524256651,1.2929917075582165,0.9243991887988946,0.20187793427230047,1.64687629811095,213 -Linear,Logistic,observational,True,4,0.95,0.41784037558685444,1.54069464759603,0.9243991887988946,0.26291079812206575,1.8776567708863852,213 -Linear,Logistic,observational,True,6,0.9,0.8755868544600939,1.019446010780053,0.2700327354611733,0.8497652582159625,1.308225574447524,213 -Linear,Logistic,observational,True,6,0.95,0.9280125195618153,1.214744845725342,0.2700327354611733,0.92018779342723,1.4918494896646508,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.212,0.6604863947299484,0.5680925390085144,0.03,0.8639202587233566,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.2853333333333333,0.787018081571581,0.5680925390085144,0.073,0.9797059963406656,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.24783333333333332,0.6059094348361568,0.5434696918979384,0.06,0.8130147435733623,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.32,0.7219856227407174,0.5434696918979384,0.102,0.9183163527410149,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.897,0.6023951572598649,0.14911519055090663,0.896,0.80773077576638,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9485,0.7177981027277819,0.14911519055090663,0.944,0.9122884478790374,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.216,0.6603511092788719,0.568539302268738,0.034,0.8638114270473408,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.28983333333333333,0.7868568790138594,0.568539302268738,0.073,0.9802312306197214,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.24733333333333332,0.6060215144180863,0.5437755527978768,0.064,0.8139649562039803,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.3206666666666667,0.7221191737998417,0.5437755527978768,0.105,0.918312219671443,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8961666666666667,0.6024262845726389,0.149332789476576,0.895,0.807525870642016,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9488333333333334,0.7178351932086445,0.149332789476576,0.942,0.9117009348167522,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9585,0.8182729709439571,0.16565056617253612,0.958,1.1056917522246983,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9826666666666666,0.9750323836079928,0.16565056617253612,0.983,1.2457725065304077,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.937,1.1923984653336688,0.2434226455534901,0.929,1.5772729726576005,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9705,1.4208304064151072,0.2434226455534901,0.969,1.7864645790746925,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9405,0.7715719701005695,0.16570390033287308,0.943,1.0366837950276395,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9736666666666667,0.9193847088269498,0.16570390033287308,0.975,1.1696730766341457,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9435,0.7351138303781443,0.15288401708102373,0.953,0.9974445142927548,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9776666666666667,0.8759421558675607,0.15288401708102373,0.98,1.1224659600314153,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8981666666666667,1.048606227423576,0.24125031716387346,0.882,1.3932585328634872,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9471666666666666,1.2494913869775361,0.24125031716387346,0.934,1.5755625535278197,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9265,0.707833153098743,0.1584727972282905,0.932,0.9562892376447345,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9656666666666667,0.8434352239039034,0.1584727972282905,0.971,1.0771546668822336,1000 +Linear,Logistic,experimental,False,1,0.9,0.8333333333333334,0.21008119266299188,0.06279250993648063,0.772,0.2997763455348952,1000 +Linear,Logistic,experimental,False,1,0.95,0.898,0.25032718091263456,0.06279250993648063,0.852,0.3330657871692049,1000 +Linear,Logistic,experimental,False,4,0.9,0.186,0.9725081430802559,0.9487602256636943,0.038,1.254980282567084,1000 +Linear,Logistic,experimental,False,4,0.95,0.2495,1.1588149266764283,0.9487602256636943,0.065,1.4284992957761715,1000 +Linear,Logistic,experimental,False,6,0.9,0.9058333333333334,0.9844631950664593,0.2397840052146586,0.905,1.2664633333872184,1000 +Linear,Logistic,experimental,False,6,0.95,0.9588333333333334,1.1730602497509743,0.2397840052146586,0.958,1.4417094501447543,1000 +Linear,Logistic,experimental,True,1,0.9,0.8348333333333333,0.21008310515619139,0.06274327271440339,0.766,0.2999472120228887,1000 +Linear,Logistic,experimental,True,1,0.95,0.8965,0.2503294597888399,0.06274327271440339,0.851,0.3328788977719515,1000 +Linear,Logistic,experimental,True,4,0.9,0.1855,0.9724386030694512,0.9484794587569109,0.04,1.2546597764324676,1000 +Linear,Logistic,experimental,True,4,0.95,0.24766666666666665,1.158732064642732,0.9484794587569109,0.067,1.4275114494639556,1000 +Linear,Logistic,experimental,True,6,0.9,0.906,0.9845132322822716,0.2399237885684876,0.906,1.2667892152063878,1000 +Linear,Logistic,experimental,True,6,0.95,0.959,1.173119872771085,0.2399237885684876,0.959,1.4415012389600717,1000 +Linear,Logistic,observational,False,1,0.9,0.9121666666666667,0.2263188173897403,0.05316466170010902,0.908,0.3227959863736354,1000 +Linear,Logistic,observational,False,1,0.95,0.9536666666666667,0.26967550415394803,0.05316466170010902,0.964,0.35842709635415104,1000 +Linear,Logistic,observational,False,4,0.9,0.308,1.3046529273340777,0.9246466619438996,0.17,1.658910870414429,1000 +Linear,Logistic,observational,False,4,0.95,0.41483333333333333,1.5545898479968427,0.9246466619438996,0.26,1.8916048826034793,1000 +Linear,Logistic,observational,False,6,0.9,0.8995,1.0353589791850297,0.2578329738577894,0.909,1.3296442260169248,1000 +Linear,Logistic,observational,False,6,0.95,0.9556666666666667,1.2337063170987448,0.2578329738577894,0.954,1.5137160905920766,1000 +Linear,Logistic,observational,True,1,0.9,0.9068333333333334,0.22511549914119275,0.053178118920023186,0.913,0.32092353183996714,1000 +Linear,Logistic,observational,True,1,0.95,0.9531666666666666,0.2682416620232874,0.053178118920023186,0.962,0.3568312746703429,1000 +Linear,Logistic,observational,True,4,0.9,0.3075,1.3070131076837166,0.9238327987989788,0.175,1.658886675275069,1000 +Linear,Logistic,observational,True,4,0.95,0.4135,1.5574021763441892,0.9238327987989788,0.273,1.8945931482242002,1000 +Linear,Logistic,observational,True,6,0.9,0.8951666666666667,1.0276881926550976,0.25674529262721113,0.912,1.3196141537282695,1000 +Linear,Logistic,observational,True,6,0.95,0.9548333333333334,1.2245660111861596,0.25674529262721113,0.955,1.50455977788913,1000 diff --git a/results/did/did_multi_group.csv b/results/did/did_multi_group.csv index 93cf706..378a6a5 100644 --- a/results/did/did_multi_group.csv +++ b/results/did/did_multi_group.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.3615023474178404,0.7202622844804144,0.5142431175686811,0.09389671361502347,0.8960068730292109,213 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.4522691705790297,0.8582454474204736,0.5142431175686811,0.16901408450704225,1.0218690905313046,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.4585289514866979,0.6080965137285453,0.37995101909660545,0.1784037558685446,0.7737228418008084,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.568075117370892,0.72459168797971,0.37995101909660545,0.23943661971830985,0.8761317466502612,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9107981220657277,0.6041693800921251,0.1487229003064066,0.892018779342723,0.768532913195283,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9577464788732394,0.7199122196283984,0.1487229003064066,0.9389671361502347,0.8712620903971866,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3599374021909233,0.7202694109877334,0.5144563506346828,0.09859154929577464,0.896154594874867,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.43974960876369323,0.8582539391777047,0.5144563506346828,0.13615023474178403,1.0209397722371372,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.4726134585289514,0.6080786219858845,0.3781886928978884,0.18309859154929578,0.7737589269691583,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.5758998435054773,0.7245703686533813,0.3781886928978884,0.2347417840375587,0.8776184255890188,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8967136150234741,0.6043541483976993,0.15369943111934065,0.9061032863849765,0.7688492385342756,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9483568075117371,0.7201323846439818,0.15369943111934065,0.9436619718309859,0.8710978723491863,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9014084507042254,2.7211728776223616,0.7210652400496165,0.9389671361502347,3.4325568651778737,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9640062597809077,3.2424774754771537,0.7210652400496165,0.9765258215962441,3.90620301995042,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9280125195618153,3.5331758180056396,0.9482156709536594,0.9530516431924883,4.456779474115103,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9812206572769953,4.210038656858068,0.9482156709536594,0.9906103286384976,5.050979601042688,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9593114241001566,2.1134207943166583,0.4426633274641162,0.9671361502347418,2.68416063766941,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9890453834115805,2.518296201660071,0.4426633274641162,1.0,3.0441389382496644,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9311424100156495,1.1368385210095147,0.2642736374124477,0.9577464788732394,1.445045473376009,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.971830985915493,1.3546266493913184,0.2642736374124477,0.9906103286384976,1.6350299884984196,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9358372456964007,1.4316645897561893,0.3075262798142372,0.9295774647887324,1.812614988818496,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9687010954616588,1.7059335784570864,0.3075262798142372,0.9530516431924883,2.0542997322706174,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.92018779342723,1.008702982773344,0.23956099456087157,0.9295774647887324,1.2878304500066007,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9655712050078247,1.2019437382997051,0.23956099456087157,0.9671361502347418,1.4556619642167887,213 -Linear,Logistic,experimental,False,1,0.9,0.8466353677621283,0.26379623317984124,0.07367574399457054,0.812206572769953,0.33886769227656965,213 -Linear,Logistic,experimental,False,1,0.95,0.917057902973396,0.3143325994593638,0.07367574399457054,0.8873239436619719,0.3826093895409892,213 -Linear,Logistic,experimental,False,4,0.9,0.31768388106416273,1.081000965905216,0.9209342612568459,0.046948356807511735,1.3612059586767777,213 -Linear,Logistic,experimental,False,4,0.95,0.406885758998435,1.2880920987200657,0.9209342612568459,0.07042253521126761,1.5495796948573959,213 -Linear,Logistic,experimental,False,6,0.9,0.8841940532081377,1.0864109362400156,0.2793222944837174,0.8826291079812206,1.3646379214251372,213 -Linear,Logistic,experimental,False,6,0.95,0.9420970266040688,1.2945384759781382,0.2793222944837174,0.9436619718309859,1.5555664326647642,213 -Linear,Logistic,experimental,True,1,0.9,0.8482003129890453,0.26383019814224784,0.07370017470086833,0.7981220657276995,0.33938445004816475,213 -Linear,Logistic,experimental,True,1,0.95,0.917057902973396,0.314373071208316,0.07370017470086833,0.8779342723004695,0.38255405924208785,213 -Linear,Logistic,experimental,True,4,0.9,0.3145539906103286,1.0811145595227114,0.9206314437246235,0.046948356807511735,1.3629136590606885,213 -Linear,Logistic,experimental,True,4,0.95,0.406885758998435,1.288227453863841,0.9206314437246235,0.07042253521126761,1.5491777387798102,213 -Linear,Logistic,experimental,True,6,0.9,0.8763693270735524,1.0860190707615656,0.2799723827071057,0.8732394366197183,1.3678468139137758,213 -Linear,Logistic,experimental,True,6,0.95,0.9436619718309859,1.2940715394605282,0.2799723827071057,0.9436619718309859,1.5543990432787684,213 -Linear,Logistic,observational,False,1,0.9,0.9233176838810642,0.28345104003446464,0.06577425283822312,0.9154929577464789,0.36397364538854327,213 -Linear,Logistic,observational,False,1,0.95,0.9640062597809077,0.3377527463508229,0.06577425283822312,0.9577464788732394,0.41153782693535657,213 -Linear,Logistic,observational,False,4,0.9,0.41001564945226915,1.3821730458167794,0.9084755331600975,0.22065727699530516,1.7301013537520684,213 -Linear,Logistic,observational,False,4,0.95,0.5320813771517997,1.6469607664869994,0.9084755331600975,0.3145539906103286,1.9685722460940824,213 -Linear,Logistic,observational,False,6,0.9,0.8904538341158059,1.1242898926223517,0.2899194075787034,0.9061032863849765,1.4121558358228579,213 -Linear,Logistic,observational,False,6,0.95,0.9436619718309859,1.3396740364103084,0.2899194075787034,0.9436619718309859,1.6083520009872296,213 -Linear,Logistic,observational,True,1,0.9,0.9264475743348983,0.28168330654961965,0.06531180649498958,0.92018779342723,0.36242423041318955,213 -Linear,Logistic,observational,True,1,0.95,0.9640062597809077,0.3356463619845842,0.06531180649498958,0.9624413145539906,0.4088457694027527,213 -Linear,Logistic,observational,True,4,0.9,0.41471048513302033,1.382459197707508,0.905500217221854,0.20187793427230047,1.7291824258918072,213 -Linear,Logistic,observational,True,4,0.95,0.5164319248826291,1.6473017374954506,0.905500217221854,0.29577464788732394,1.9692425330349306,213 -Linear,Logistic,observational,True,6,0.9,0.8763693270735524,1.1216619887490014,0.29425840904927425,0.8967136150234741,1.405222302167041,213 -Linear,Logistic,observational,True,6,0.95,0.9405320813771518,1.336542695808199,0.29425840904927425,0.9389671361502347,1.599301420149991,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.3273333333333333,0.707420656396312,0.5512047367255486,0.036,0.8797234045148201,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.41,0.8429437037666345,0.5512047367255486,0.074,1.0041771175059788,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.374,0.6782674902962976,0.5244026247767223,0.071,0.8610132839087776,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4453333333333333,0.8082055637552085,0.5244026247767223,0.117,0.976065830250241,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.899,0.671827470630062,0.16624920009099023,0.902,0.8525368328187772,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9473333333333334,0.8005318070155615,0.16624920009099023,0.951,0.966016106037394,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.326,0.7072412761451377,0.5510566287884651,0.038,0.8801404707275715,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4096666666666666,0.8427299590138623,0.5510566287884651,0.07,1.002125974085047,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.36866666666666664,0.6784182431926686,0.5259144954763614,0.072,0.8610207509558818,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4496666666666666,0.8083851969107737,0.5259144954763614,0.119,0.9763798979720331,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.894,0.6718234690242728,0.1657257952040637,0.896,0.8515844126182411,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9476666666666667,0.800527038808167,0.1657257952040637,0.95,0.9665334176962624,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.963,0.8652755981021423,0.17113142201133558,0.969,1.0889358534995506,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.984,1.031039468311053,0.17113142201133558,0.984,1.237297042745351,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9346666666666666,1.2284508258805134,0.24656685966850245,0.941,1.5361413271219306,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.972,1.463789443664172,0.24656685966850245,0.971,1.749648191744939,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9383333333333334,0.8377546803078038,0.1751631649589318,0.953,1.057109034491574,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.975,0.9982462721174428,0.1751631649589318,0.984,1.2014689940380152,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9496666666666667,0.7841947843278112,0.16086506631076952,0.956,0.9891207416675105,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.981,0.9344257196886802,0.16086506631076952,0.982,1.1249345196702958,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9063333333333333,1.0936611276605492,0.24761334359753662,0.893,1.3734409007728312,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9496666666666667,1.3031776119063627,0.24761334359753662,0.957,1.5621218569040163,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.93,0.7753642730061224,0.17208754196605122,0.938,0.9822835747368598,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.968,0.9239035164530885,0.17208754196605122,0.97,1.114292213724501,1000 +Linear,Logistic,experimental,False,1,0.9,0.8386666666666667,0.26406011408190466,0.07484251880343806,0.782,0.3391725273742781,1000 +Linear,Logistic,experimental,False,1,0.95,0.9,0.3146470329480206,0.07484251880343806,0.861,0.38312548180720674,1000 +Linear,Logistic,experimental,False,4,0.9,0.30766666666666664,1.0775081920199379,0.9180199075797375,0.043,1.358394713485805,1000 +Linear,Logistic,experimental,False,4,0.95,0.387,1.2839302019353809,0.9180199075797375,0.075,1.5436882060371362,1000 +Linear,Logistic,experimental,False,6,0.9,0.9006666666666666,1.0862296392061837,0.26426326890215074,0.901,1.3668444179732824,1000 +Linear,Logistic,experimental,False,6,0.95,0.9506666666666667,1.2943224472379558,0.26426326890215074,0.953,1.5536493498793789,1000 +Linear,Logistic,experimental,True,1,0.9,0.8393333333333334,0.26407759152816007,0.07480194343006176,0.78,0.339074181745231,1000 +Linear,Logistic,experimental,True,1,0.95,0.9026666666666666,0.3146678586097337,0.07480194343006176,0.856,0.38322152907222656,1000 +Linear,Logistic,experimental,True,4,0.9,0.30866666666666664,1.0774440156012468,0.9177015030168479,0.042,1.358470637092642,1000 +Linear,Logistic,experimental,True,4,0.95,0.3873333333333333,1.2838537310158835,0.9177015030168479,0.077,1.5429798338746872,1000 +Linear,Logistic,experimental,True,6,0.9,0.9,1.0863837801957064,0.26380863451040953,0.9,1.3672808159070202,1000 +Linear,Logistic,experimental,True,6,0.95,0.9513333333333334,1.2945061175555181,0.26380863451040953,0.954,1.5541073384842106,1000 +Linear,Logistic,observational,False,1,0.9,0.9076666666666666,0.28416293869816867,0.06719907904707288,0.895,0.3651157807139984,1000 +Linear,Logistic,observational,False,1,0.95,0.9483333333333334,0.3386010259294065,0.06719907904707288,0.945,0.41201437318485834,1000 +Linear,Logistic,observational,False,4,0.9,0.401,1.391585982365,0.904387305913916,0.19,1.740406175908275,1000 +Linear,Logistic,observational,False,4,0.95,0.5136666666666666,1.6581769721851722,0.904387305913916,0.283,1.9826656824817435,1000 +Linear,Logistic,observational,False,6,0.9,0.8973333333333333,1.1352802141544187,0.27975950279202133,0.905,1.4266992538777443,1000 +Linear,Logistic,observational,False,6,0.95,0.9503333333333334,1.3527698122461733,0.27975950279202133,0.955,1.6225397076843175,1000 +Linear,Logistic,observational,True,1,0.9,0.903,0.2824293492396861,0.06705110860806944,0.898,0.3627882621194592,1000 +Linear,Logistic,observational,True,1,0.95,0.946,0.33653532667998365,0.06705110860806944,0.942,0.40929988535575634,1000 +Linear,Logistic,observational,True,4,0.9,0.402,1.3915312960755781,0.9034692492203523,0.193,1.7414149632974412,1000 +Linear,Logistic,observational,True,4,0.95,0.5146666666666666,1.6581118094521734,0.9034692492203523,0.286,1.9845340670655314,1000 +Linear,Logistic,observational,True,6,0.9,0.8936666666666666,1.1270129557072197,0.27813843488385187,0.905,1.4156442615210005,1000 +Linear,Logistic,observational,True,6,0.95,0.9483333333333334,1.3429187662066389,0.27813843488385187,0.952,1.6098259360653087,1000 diff --git a/results/did/did_multi_metadata.csv b/results/did/did_multi_metadata.csv index eddd880..28b7a8c 100644 --- a/results/did/did_multi_metadata.csv +++ b/results/did/did_multi_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,DIDMultiCoverageSimulation,2025-06-06 11:16,337.9197948932648,3.12.3,scripts/did/did_pa_multi_config.yml +0.10.0,DIDMultiCoverageSimulation,2025-06-06 08:13,60.66274849573771,3.12.9,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_time.csv b/results/did/did_multi_time.csv index c2b076e..166a58b 100644 --- a/results/did/did_multi_time.csv +++ b/results/did/did_multi_time.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.1111111111111111,0.6848879510567563,0.5814212808822293,0.06572769953051644,0.8112788259677559,213 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.19092331768388104,0.8160943293200865,0.5814212808822293,0.1596244131455399,0.9363347602930319,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.2190923317683881,0.5442904416410593,0.42804406962185293,0.15023474178403756,0.6610129830707445,213 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.3114241001564945,0.6485620636792077,0.42804406962185293,0.2112676056338028,0.7594820835871338,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9076682316118936,0.540281441005603,0.13166144694063336,0.8967136150234741,0.6574061190218973,213 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9530516431924883,0.6437850447817539,0.13166144694063336,0.9436619718309859,0.755440248127496,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.10641627543035993,0.6849270317496503,0.5816182941099456,0.07042253521126761,0.810739883430405,213 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.17527386541471046,0.8161408968378937,0.5816182941099456,0.13145539906103287,0.9369536425675097,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.2190923317683881,0.5441327590803698,0.4271332871560829,0.15492957746478872,0.659742375492321,213 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.29733959311424096,0.6483741733193132,0.4271332871560829,0.20657276995305165,0.7581397106264711,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8982785602503913,0.5400972159018558,0.1320306660672212,0.892018779342723,0.65734442843056,213 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9546165884194053,0.6435655270310701,0.1320306660672212,0.9248826291079812,0.7544822430389665,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.863849765258216,2.947691714934299,0.8081717452002422,0.9014084507042254,3.6345410887622425,213 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9483568075117371,3.5123913180688033,0.8081717452002422,0.9530516431924883,4.148298978134212,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9107981220657277,3.920449689676996,1.0987394652573248,0.9342723004694836,4.803568258598088,213 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.974960876369327,4.671503937532334,1.0987394652573248,1.0,5.490527294034555,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9452269170579031,1.9822578095421914,0.41440886099461754,0.9765258215962441,2.4747132887427976,213 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9843505477308294,2.362005865516796,0.41440886099461754,0.9906103286384976,2.82160571997147,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9139280125195618,1.1523823561555302,0.27480514203439516,0.9295774647887324,1.4209065729930848,213 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9733959311424101,1.37314827135733,0.27480514203439516,0.9765258215962441,1.6207292567271263,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9295774647887324,1.4768427642563355,0.3193093946805207,0.92018779342723,1.8030473738560802,213 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9655712050078247,1.7597666937304888,0.3193093946805207,0.971830985915493,2.066811584773276,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9029733959311425,0.9274870427023983,0.22082805477342204,0.92018779342723,1.1562170046781757,213 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9593114241001566,1.1051689767638488,0.22082805477342204,0.971830985915493,1.3147550346737336,213 -Linear,Logistic,experimental,False,1,0.9,0.8231611893583725,0.24405699708437717,0.07177094325289468,0.7746478873239436,0.3128134096194603,213 -Linear,Logistic,experimental,False,1,0.95,0.895148669796557,0.290811848922341,0.07177094325289468,0.8685446009389671,0.3532819977654326,213 -Linear,Logistic,experimental,False,4,0.9,0.03912363067292645,0.9696140468983949,1.089724580728028,0.028169014084507043,1.112835689831825,213 -Linear,Logistic,experimental,False,4,0.95,0.0594679186228482,1.1553663983750042,1.089724580728028,0.056338028169014086,1.2908015410381681,213 -Linear,Logistic,experimental,False,6,0.9,0.8841940532081377,0.9637145816970751,0.24601437794174566,0.8591549295774648,1.1098958953800837,213 -Linear,Logistic,experimental,False,6,0.95,0.9420970266040688,1.1483367520081937,0.24601437794174566,0.92018779342723,1.2882569853203092,213 -Linear,Logistic,experimental,True,1,0.9,0.8294209702660407,0.24407331778379834,0.07187555926470358,0.755868544600939,0.31239740640105534,213 -Linear,Logistic,experimental,True,1,0.95,0.8904538341158059,0.29083129623518633,0.07187555926470358,0.8685446009389671,0.35340605322083257,213 -Linear,Logistic,experimental,True,4,0.9,0.03755868544600939,0.9698402059419257,1.089909708050757,0.028169014084507043,1.1118287534726101,213 -Linear,Logistic,experimental,True,4,0.95,0.06572769953051644,1.1556358834968625,1.089909708050757,0.056338028169014086,1.2947346339601935,213 -Linear,Logistic,experimental,True,6,0.9,0.8857589984350547,0.963597334445951,0.2461020735514813,0.8732394366197183,1.1092556702862066,213 -Linear,Logistic,experimental,True,6,0.95,0.9420970266040688,1.1481970432914277,0.2461020735514813,0.9295774647887324,1.288313460888964,213 -Linear,Logistic,observational,False,1,0.9,0.9092331768388106,0.2738536200757641,0.0653695842721706,0.9107981220657277,0.35111788102252456,213 -Linear,Logistic,observational,False,1,0.95,0.9577464788732394,0.32631671511051,0.0653695842721706,0.9577464788732394,0.39595800514716334,213 -Linear,Logistic,observational,False,4,0.9,0.17214397496087636,1.352533603300557,1.0665740251760334,0.15023474178403756,1.523002565481769,213 -Linear,Logistic,observational,False,4,0.95,0.26134585289514867,1.611643192386921,1.0665740251760334,0.22535211267605634,1.7732161740973758,213 -Linear,Logistic,observational,False,6,0.9,0.8857589984350547,1.0021244212459983,0.25876871605083246,0.8591549295774648,1.1510136525260573,213 -Linear,Logistic,observational,False,6,0.95,0.9389671361502347,1.1941048987504526,0.25876871605083246,0.92018779342723,1.3383058201805063,213 -Linear,Logistic,observational,True,1,0.9,0.9123630672926448,0.2715453775356287,0.0644928980540172,0.9154929577464789,0.3477637744633791,213 -Linear,Logistic,observational,True,1,0.95,0.9608763693270735,0.32356627448034075,0.0644928980540172,0.9624413145539906,0.3936582053408612,213 -Linear,Logistic,observational,True,4,0.9,0.17683881064162754,1.3541054412513556,1.0639801560397304,0.15023474178403756,1.5236529859485555,213 -Linear,Logistic,observational,True,4,0.95,0.24413145539906103,1.6135161528270596,1.0639801560397304,0.2112676056338028,1.7775778058708633,213 -Linear,Logistic,observational,True,6,0.9,0.8763693270735524,0.9971323968875062,0.2594135097814355,0.8732394366197183,1.1473737786354752,213 -Linear,Logistic,observational,True,6,0.95,0.9327073552425664,1.1881565348399659,0.2594135097814355,0.9154929577464789,1.33540506645655,213 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.055,0.6712569909941205,0.6346334487258358,0.035,0.7933048784144286,1000 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.10733333333333332,0.7998520386021065,0.6346334487258358,0.061,0.9159058461680386,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.075,0.6060202682055259,0.6100618498175898,0.052,0.7251643151081226,1000 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.13,0.7221176888459861,0.6100618498175898,0.097,0.8353173376691023,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.901,0.5988208500851633,0.1464689152752021,0.897,0.7188116426660323,1000 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9483333333333334,0.7135390530364837,0.1464689152752021,0.95,0.827434201860584,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.054,0.6710988857611525,0.6356662481793647,0.03,0.7928754344366965,1000 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.09766666666666665,0.7996636445971279,0.6356662481793647,0.064,0.9157288402316642,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.08,0.6061420688480603,0.611475967305118,0.051,0.7250804471897608,1000 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.12766666666666665,0.7222628232632679,0.611475967305118,0.097,0.8356164365834543,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9003333333333333,0.5988274535253045,0.1470455937405394,0.897,0.7193380504386929,1000 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9466666666666667,0.7135469215207298,0.1470455937405394,0.939,0.8266210501795132,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9633333333333334,0.8625181197134913,0.1705040132107199,0.972,1.045848740623199,1000 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9886666666666666,1.0277537301509225,0.1705040132107199,0.989,1.2001073696975533,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9353333333333333,1.2945843278468319,0.26162576104250007,0.923,1.5341055868187743,1000 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.968,1.542592371719069,0.26162576104250007,0.965,1.7716810296642407,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.947,0.7672044714361391,0.16043039243421475,0.948,0.9284201701025314,1000 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9763333333333334,0.9141805131802676,0.16043039243421475,0.973,1.067043785578332,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9506666666666667,0.7684651194719102,0.1600966845306246,0.961,0.9322911708810523,1000 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.982,0.9156826679658406,0.1600966845306246,0.978,1.0708669848118426,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.887,1.1247146971381123,0.25811288498674895,0.868,1.3337069451804375,1000 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9386666666666666,1.3401802222117185,0.25811288498674895,0.915,1.539509702377364,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9233333333333333,0.7013549950930801,0.15406953919220856,0.931,0.8502851669291526,1000 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9673333333333334,0.835716022529863,0.15406953919220856,0.967,0.9757420279803587,1000 +Linear,Logistic,experimental,False,1,0.9,0.8113333333333334,0.24421066998125654,0.07335238125159724,0.763,0.31287636754980536,1000 +Linear,Logistic,experimental,False,1,0.95,0.885,0.2909949614731166,0.07335238125159724,0.844,0.35353712763106526,1000 +Linear,Logistic,experimental,False,4,0.9,0.03866666666666666,0.9657093192836849,1.0744747295532333,0.034,1.1073798978939535,1000 +Linear,Logistic,experimental,False,4,0.95,0.069,1.1507136284452841,1.0744747295532333,0.055,1.2858869628367815,1000 +Linear,Logistic,experimental,False,6,0.9,0.9016666666666666,0.9646204823976587,0.23468919497366172,0.901,1.1093098237657892,1000 +Linear,Logistic,experimental,False,6,0.95,0.953,1.1494161992718415,0.23468919497366172,0.957,1.2871233271513411,1000 +Linear,Logistic,experimental,True,1,0.9,0.8133333333333334,0.2442088644035013,0.07330749456217257,0.77,0.3129912931800666,1000 +Linear,Logistic,experimental,True,1,0.95,0.8853333333333334,0.2909928099945208,0.07330749456217257,0.845,0.35370879380082904,1000 +Linear,Logistic,experimental,True,4,0.9,0.040333333333333325,0.965669466190919,1.074178736623636,0.034,1.1079673576193978,1000 +Linear,Logistic,experimental,True,4,0.95,0.07066666666666667,1.1506661405562622,1.074178736623636,0.056,1.2874892975542063,1000 +Linear,Logistic,experimental,True,6,0.9,0.905,0.9646743300945927,0.23461429065167058,0.903,1.1086934199469425,1000 +Linear,Logistic,experimental,True,6,0.95,0.9513333333333334,1.1494803627602588,0.23461429065167058,0.954,1.288778040856994,1000 +Linear,Logistic,observational,False,1,0.9,0.8963333333333334,0.27432665056823285,0.06662446847374676,0.892,0.3514300281214646,1000 +Linear,Logistic,observational,False,1,0.95,0.947,0.3268803657075217,0.06662446847374676,0.94,0.3973633331155568,1000 +Linear,Logistic,observational,False,4,0.9,0.16966666666666666,1.3719614152655681,1.057702662307478,0.138,1.5420603037012326,1000 +Linear,Logistic,observational,False,4,0.95,0.2533333333333333,1.6347928581844855,1.057702662307478,0.227,1.7997355197003797,1000 +Linear,Logistic,observational,False,6,0.9,0.893,1.0148202381932496,0.25145709760552504,0.896,1.1671820785014646,1000 +Linear,Logistic,observational,False,6,0.95,0.952,1.2092328977183877,0.25145709760552504,0.948,1.3556655852353603,1000 +Linear,Logistic,observational,True,1,0.9,0.8956666666666666,0.2722754365826716,0.06632302110410243,0.882,0.34896138602531507,1000 +Linear,Logistic,observational,True,1,0.95,0.945,0.3244361934903646,0.06632302110410243,0.935,0.3940464937357552,1000 +Linear,Logistic,observational,True,4,0.9,0.16866666666666666,1.3721900166602485,1.0557853739176288,0.144,1.5416213892347916,1000 +Linear,Logistic,observational,True,4,0.95,0.258,1.6350652535472388,1.0557853739176288,0.226,1.8003166158280433,1000 +Linear,Logistic,observational,True,6,0.9,0.893,1.0066884879769613,0.25076936355127627,0.887,1.1578970654476302,1000 +Linear,Logistic,observational,True,6,0.95,0.949,1.19954331969512,0.25076936355127627,0.942,1.3460255801756882,1000 diff --git a/results/did/did_pa_multi_config.yml b/results/did/did_pa_multi_config.yml index ed4e23a..7ef23dd 100644 --- a/results/did/did_pa_multi_config.yml +++ b/results/did/did_pa_multi_config.yml @@ -18,13 +18,29 @@ learner_definitions: lgbmr: &id003 name: LGBM Regr. params: - n_estimators: 500 - learning_rate: 0.02 + n_estimators: 300 + learning_rate: 0.03 + num_leaves: 7 + max_depth: 3 + min_child_samples: 20 + subsample: 0.8 + colsample_bytree: 0.8 + reg_alpha: 0.1 + reg_lambda: 1.0 + random_state: 42 lgbmc: &id004 name: LGBM Clas. params: - n_estimators: 500 - learning_rate: 0.02 + n_estimators: 300 + learning_rate: 0.03 + num_leaves: 7 + max_depth: 3 + min_child_samples: 20 + subsample: 0.8 + colsample_bytree: 0.8 + reg_alpha: 0.1 + reg_lambda: 1.0 + random_state: 42 dml_parameters: learners: - ml_g: *id001 diff --git a/scripts/did/did_pa_multi_config.yml b/scripts/did/did_pa_multi_config.yml index c89ef8d..ad33a5d 100644 --- a/scripts/did/did_pa_multi_config.yml +++ b/scripts/did/did_pa_multi_config.yml @@ -21,14 +21,30 @@ learner_definitions: lgbmr: &lgbmr name: "LGBM Regr." params: - n_estimators: 500 - learning_rate: 0.02 + n_estimators: 300 # More trees to learn slowly and steadily + learning_rate: 0.03 # Lower learning rate to improve generalization + num_leaves: 7 # Fewer leaves — simpler trees + max_depth: 3 # Shallow trees reduce overfitting + min_child_samples: 20 # Require more samples per leaf + subsample: 0.8 # More row sampling to add randomness + colsample_bytree: 0.8 # More feature sampling + reg_alpha: 0.1 # Add L1 regularization + reg_lambda: 1.0 # Increase L2 regularization + random_state: 42 # Reproducible lgbmc: &lgbmc name: "LGBM Clas." params: - n_estimators: 500 - learning_rate: 0.02 + n_estimators: 300 # More trees to learn slowly and steadily + learning_rate: 0.03 # Lower learning rate to improve generalization + num_leaves: 7 # Fewer leaves — simpler trees + max_depth: 3 # Shallow trees reduce overfitting + min_child_samples: 20 # Require more samples per leaf + subsample: 0.8 # More row sampling to add randomness + colsample_bytree: 0.8 # More feature sampling + reg_alpha: 0.1 # Add L1 regularization + reg_lambda: 1.0 # Increase L2 regularization + random_state: 42 # Reproducible dml_parameters: # ML methods for ml_g and ml_m From b85b2ed44a0146ac86cc21c3345ea9795df86947 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Fri, 6 Jun 2025 13:56:56 +0200 Subject: [PATCH 130/142] fix metadata paths --- doc/irm/irm.qmd | 2 +- doc/irm/irm_cate.qmd | 2 +- doc/irm/irm_gate.qmd | 2 +- doc/plm/pliv.qmd | 2 +- doc/plm/plr.qmd | 2 +- doc/plm/plr_cate.qmd | 4 ++-- doc/plm/plr_gate.qmd | 2 +- doc/rdd/rdd.qmd | 4 ++-- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/irm/irm.qmd b/doc/irm/irm.qmd index f30fe75..a25087c 100644 --- a/doc/irm/irm.qmd +++ b/doc/irm/irm.qmd @@ -30,7 +30,7 @@ The simulations are based on the the [make_irm_data](https://docs.doubleml.org/ ```{python} #| echo: false -metadata_file = '../../results/irm/irm_ate_coverage_metadata.csv' +metadata_file = '../../results/irm/irm_ate_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` diff --git a/doc/irm/irm_cate.qmd b/doc/irm/irm_cate.qmd index 52b5abb..df2d3c6 100644 --- a/doc/irm/irm_cate.qmd +++ b/doc/irm/irm_cate.qmd @@ -32,7 +32,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/irm/irm_cate_coverage_metadata.csv' +metadata_file = '../../results/irm/irm_cate_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` diff --git a/doc/irm/irm_gate.qmd b/doc/irm/irm_gate.qmd index c552771..9224fae 100644 --- a/doc/irm/irm_gate.qmd +++ b/doc/irm/irm_gate.qmd @@ -32,7 +32,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/irm/irm_gate_coverage_metadata.csv' +metadata_file = '../../results/irm/irm_gate_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` diff --git a/doc/plm/pliv.qmd b/doc/plm/pliv.qmd index 04f2dcd..eb3b455 100644 --- a/doc/plm/pliv.qmd +++ b/doc/plm/pliv.qmd @@ -30,7 +30,7 @@ The simulations are based on the the [make_pliv_CHS2015](https://docs.doubleml. ```{python} #| echo: false -metadata_file = '../../results/plm/pliv_late_coverage_metadata.csv' +metadata_file = '../../results/plm/pliv_late_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` diff --git a/doc/plm/plr.qmd b/doc/plm/plr.qmd index 99f1df5..f9e9304 100644 --- a/doc/plm/plr.qmd +++ b/doc/plm/plr.qmd @@ -30,7 +30,7 @@ The simulations are based on the the [make_plr_CCDDHNR2018](https://docs.double ```{python} #| echo: false -metadata_file = '../../results/plm/plr_ate_coverage_metadata.csv' +metadata_file = '../../results/plm/plr_ate_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` diff --git a/doc/plm/plr_cate.qmd b/doc/plm/plr_cate.qmd index ece025e..1581025 100644 --- a/doc/plm/plr_cate.qmd +++ b/doc/plm/plr_cate.qmd @@ -32,7 +32,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/plm/plr_cate_coverage_metadata.csv' +metadata_file = '../../results/plm/plr_cate_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -116,4 +116,4 @@ generate_and_show_styled_table( rename_map={"Learner g": "Learner l"}, coverage_highlight_cols=["Coverage", "Uniform Coverage"] ) -``` \ No newline at end of file +``` diff --git a/doc/plm/plr_gate.qmd b/doc/plm/plr_gate.qmd index e381fa9..d32bd4e 100644 --- a/doc/plm/plr_gate.qmd +++ b/doc/plm/plr_gate.qmd @@ -32,7 +32,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/plm/plr_gate_coverage_metadata.csv' +metadata_file = '../../results/plm/plr_gate_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` diff --git a/doc/rdd/rdd.qmd b/doc/rdd/rdd.qmd index dce518d..31cdddb 100644 --- a/doc/rdd/rdd.qmd +++ b/doc/rdd/rdd.qmd @@ -31,7 +31,7 @@ The simulations are based on the [make_simple_rdd_data](https://docs.doubleml.or ```{python} #| echo: false -metadata_file = '../../results/rdd/rdd_sharp_coverage_metadata.csv' +metadata_file = '../../results/rdd/rdd_sharp_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -83,7 +83,7 @@ The simulations are based on the [make_simple_rdd_data](https://docs.doubleml.or ```{python} #| echo: false -metadata_file = '../../results/rdd/rdd_fuzzy_coverage_metadata.csv' +metadata_file = '../../results/rdd/rdd_fuzzy_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` From be8066b8a81346b41e414fa19aca0e53f894debf Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 11 Jun 2025 11:19:22 +0200 Subject: [PATCH 131/142] update table colors and styling --- doc/index.qmd | 25 ++++++++-- doc/utils/style_tables.py | 101 +++++++++++++++++++++++++++++++++----- doc/utils/styling.py | 90 +++++++++++++++++++++++++++++++++ doc/utils/theme.yml | 31 ++++++++++++ 4 files changed, 231 insertions(+), 16 deletions(-) create mode 100644 doc/utils/styling.py create mode 100644 doc/utils/theme.yml diff --git a/doc/index.qmd b/doc/index.qmd index 3915d9a..0928c0f 100644 --- a/doc/index.qmd +++ b/doc/index.qmd @@ -28,9 +28,26 @@ $$ for a nominal coverage level is $1-\alpha$. The corresponding coverage results are highlighted according to the following color scheme: -* Green if the deviation to the nominal level is below $5\%$ -* Yellow if the deviation to the nominal level is above $5\%$ and below $10\%$ -* Red if the deviation to the nominal level is above $10\%$ +```{python} +#| echo: false +#| output: asis +from utils.styling import get_html_color_span + +# Generate color legend using centralized configuration +good_span = get_html_color_span("good") +medium_span = get_html_color_span("medium") +poor_span = get_html_color_span("poor") + +from IPython.display import Markdown, display + +markdown_output = f""" +* {good_span} if the deviation to the nominal level is below 5% +* {medium_span} if the deviation to the nominal level is above 5% and below 10% +* {poor_span} if the deviation to the nominal level is above 10% +""" + +display(Markdown(markdown_output)) +``` For simulations with multiple parameters of interest, usually pointwise and uniform coverage is assessed. @@ -247,5 +264,3 @@ fig.show() ``` ::: - -::: diff --git a/doc/utils/style_tables.py b/doc/utils/style_tables.py index 5d73466..24ed8f5 100644 --- a/doc/utils/style_tables.py +++ b/doc/utils/style_tables.py @@ -3,17 +3,21 @@ from pandas.io.formats.style import Styler from typing import Union, Optional, List, Any from itables import show +from .styling import ( + TABLE_STYLING, + COVERAGE_THRESHOLDS, + get_coverage_tier_props, +) -# Define highlighting tiers as a list of dictionaries or tuples -# Each element defines: dist, props. Applied in order (later rules can override). -# Order: from least specific (largest dist) to most specific (smallest dist) -# or ensure the _apply_highlight_range logic correctly handles overlaps if props are different. -# Current logic: more specific (smaller dist) rules are applied last and override. +# Define highlighting tiers using centralized color configuration HIGHLIGHT_TIERS = [ - {"dist": 1.0, "props": "color:black;background-color:red;"}, - {"dist": 0.1, "props": "color:black;background-color:yellow;"}, - {"dist": 0.05, "props": "color:white;background-color:darkgreen;"}, + {"dist": COVERAGE_THRESHOLDS["poor"], "props": get_coverage_tier_props("poor")}, + { + "dist": COVERAGE_THRESHOLDS["medium"], + "props": get_coverage_tier_props("medium", "500"), + }, + {"dist": COVERAGE_THRESHOLDS["good"], "props": get_coverage_tier_props("good")}, ] @@ -34,6 +38,77 @@ def _apply_highlight_range( return np.where(condition, props, "") +def _apply_base_table_styling(styler: Styler) -> Styler: + """ + Apply base styling to the table including headers, borders, and overall appearance. + """ + # Define CSS styles for clean table appearance using centralized colors + styles = [ + # Table-wide styling + { + "selector": "table", + "props": [ + ("border-collapse", "separate"), + ("border-spacing", "0"), + ("width", "100%"), + ( + "font-family", + '"Segoe UI", -apple-system, BlinkMacSystemFont, "Roboto", sans-serif', + ), + ("font-size", "14px"), + ("line-height", "1.5"), + ("box-shadow", "0 2px 8px rgba(0,0,0,0.1)"), + ("border-radius", "8px"), + ("overflow", "hidden"), + ], + }, + # Header styling + { + "selector": "thead th", + "props": [ + ("background-color", TABLE_STYLING["header_bg"]), + ("color", TABLE_STYLING["header_text"]), + ("font-weight", "600"), + ("text-align", "center"), + ("padding", "12px 16px"), + ("border-bottom", f'2px solid {TABLE_STYLING["border"]}'), + ("position", "sticky"), + ("top", "0"), + ("z-index", "10"), + ], + }, + # Cell styling + { + "selector": "tbody td", + "props": [ + ("padding", "10px 16px"), + ("text-align", "center"), + ("border-bottom", f'1px solid {TABLE_STYLING["border"]}'), + ("transition", "background-color 0.2s ease"), + ], + }, + # Row hover effect + { + "selector": "tbody tr:hover td", + "props": [("background-color", TABLE_STYLING["hover_bg"])], + }, + # Caption styling + { + "selector": "caption", + "props": [ + ("color", TABLE_STYLING["caption_color"]), + ("font-size", "16px"), + ("font-weight", "600"), + ("margin-bottom", "16px"), + ("text-align", "left"), + ("caption-side", "top"), + ], + }, + ] + + return styler.set_table_styles(styles) + + def color_coverage_columns( styler: Styler, level: float, coverage_cols: list[str] = ["Coverage"] ) -> Styler: @@ -54,13 +129,15 @@ def color_coverage_columns( if not valid_coverage_cols: return styler # No valid columns to style + # Apply base styling first + current_styler = _apply_base_table_styling(styler) + # Apply highlighting rules from the defined tiers # The order in HIGHLIGHT_TIERS is important if props are meant to override. # Pandas Styler.apply applies styles sequentially. If a cell matches multiple # conditions from different .apply calls, the styles from later calls typically override # or merge with earlier ones, depending on the CSS properties. # For background-color, later calls will override. - current_styler = styler for tier in HIGHLIGHT_TIERS: current_styler = current_styler.apply( _apply_highlight_range, @@ -70,10 +147,12 @@ def color_coverage_columns( subset=valid_coverage_cols, ) - # Set font to bold for the coverage columns + # Apply additional styling to coverage columns for emphasis current_styler = current_styler.set_properties( - **{"font-weight": "bold"}, subset=valid_coverage_cols + **{"text-align": "center", "font-family": "monospace", "font-size": "13px"}, + subset=valid_coverage_cols, ) + return current_styler diff --git a/doc/utils/styling.py b/doc/utils/styling.py new file mode 100644 index 0000000..626952d --- /dev/null +++ b/doc/utils/styling.py @@ -0,0 +1,90 @@ +""" +Styling utilities for DoubleML Coverage tables and documentation. + +This module provides helper functions for applying consistent styling +based on the centralized theme configuration. +""" + +import yaml +from pathlib import Path +from typing import Dict, Any + + +def _load_theme_config() -> Dict[str, Any]: + """Load theme configuration from YAML file.""" + config_path = Path(__file__).parent / "theme.yml" + with open(config_path, "r") as f: + return yaml.safe_load(f) + + +# Load configuration once at module import +_THEME = _load_theme_config() + +# Expose configuration for backward compatibility and direct access +COVERAGE_COLORS = _THEME["coverage_colors"] +TABLE_STYLING = _THEME["table_styling"] +COVERAGE_THRESHOLDS = _THEME["coverage_thresholds"] + + +def get_coverage_tier_props(tier: str, font_weight: str = "600") -> str: + """ + Generate CSS properties string for a coverage performance tier. + + Args: + tier: One of 'good', 'medium', 'poor' + font_weight: CSS font-weight value + + Returns: + CSS properties string for use with pandas Styler + """ + if tier not in COVERAGE_COLORS: + raise ValueError( + f"Unknown tier '{tier}'. Must be one of: {list(COVERAGE_COLORS.keys())}" + ) + + colors = COVERAGE_COLORS[tier] + return ( + f"color:{colors['text']};" + f"background-color:{colors['background']};" + f"border-left:4px solid {colors['border']};" + f"font-weight:{font_weight};" + ) + + +def get_html_color_span(tier: str, text: str = None) -> str: + """ + Generate HTML span element with coverage tier styling for documentation. + + Args: + tier: One of 'good', 'medium', 'poor' + text: Text to display (defaults to tier description) + + Returns: + HTML span element with inline styling + """ + if tier not in COVERAGE_COLORS: + raise ValueError( + f"Unknown tier '{tier}'. Must be one of: {list(COVERAGE_COLORS.keys())}" + ) + + colors = COVERAGE_COLORS[tier] + display_text = text or colors["description"] + + return ( + f'' + f"{display_text}" + ) + + +def get_theme_config() -> Dict[str, Any]: + """ + Get the complete theme configuration. + + Returns: + Dictionary containing all theme settings + """ + return _THEME.copy() diff --git a/doc/utils/theme.yml b/doc/utils/theme.yml new file mode 100644 index 0000000..2115026 --- /dev/null +++ b/doc/utils/theme.yml @@ -0,0 +1,31 @@ +# DoubleML Coverage Theme Configuration +# Central color palette and styling settings + +coverage_colors: + good: + background: "#d1e7dd" + text: "#0f5132" + border: "#198754" + description: "Green" + medium: + background: "#fff3cd" + text: "#856404" + border: "#ffc107" + description: "Amber" + poor: + background: "#f8d7da" + text: "#721c24" + border: "#dc3545" + description: "Coral" + +table_styling: + header_bg: "#f8f9fa" + header_text: "#495057" + border: "#dee2e6" + caption_color: "#6c757d" + hover_bg: "#f5f5f5" + +coverage_thresholds: + good: 0.05 # Within 5% of nominal level + medium: 0.1 # Within 10% of nominal level + poor: 1.0 # Beyond 10% of nominal level From 7079234f47679829e516de4e213b035f877c448f Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 11 Jun 2025 11:37:33 +0200 Subject: [PATCH 132/142] clarify utils names --- doc/index.qmd | 8 ++--- doc/utils/style_tables.py | 65 +++++++++++++++++++++++++-------------- doc/utils/styling.py | 4 +-- doc/utils/theme.yml | 6 ++-- 4 files changed, 51 insertions(+), 32 deletions(-) diff --git a/doc/index.qmd b/doc/index.qmd index 0928c0f..2302fd0 100644 --- a/doc/index.qmd +++ b/doc/index.qmd @@ -31,12 +31,12 @@ The corresponding coverage results are highlighted according to the following co ```{python} #| echo: false #| output: asis -from utils.styling import get_html_color_span +from utils.styling import get_coverage_tier_html_span # Generate color legend using centralized configuration -good_span = get_html_color_span("good") -medium_span = get_html_color_span("medium") -poor_span = get_html_color_span("poor") +good_span = get_coverage_tier_html_span("good") +medium_span = get_coverage_tier_html_span("medium") +poor_span = get_coverage_tier_html_span("poor") from IPython.display import Markdown, display diff --git a/doc/utils/style_tables.py b/doc/utils/style_tables.py index 24ed8f5..f932fe9 100644 --- a/doc/utils/style_tables.py +++ b/doc/utils/style_tables.py @@ -6,18 +6,18 @@ from .styling import ( TABLE_STYLING, COVERAGE_THRESHOLDS, - get_coverage_tier_props, + get_coverage_tier_css_props, ) # Define highlighting tiers using centralized color configuration HIGHLIGHT_TIERS = [ - {"dist": COVERAGE_THRESHOLDS["poor"], "props": get_coverage_tier_props("poor")}, + {"dist": COVERAGE_THRESHOLDS["poor"], "props": get_coverage_tier_css_props("poor")}, { "dist": COVERAGE_THRESHOLDS["medium"], - "props": get_coverage_tier_props("medium", "500"), + "props": get_coverage_tier_css_props("medium", "500"), }, - {"dist": COVERAGE_THRESHOLDS["good"], "props": get_coverage_tier_props("good")}, + {"dist": COVERAGE_THRESHOLDS["good"], "props": get_coverage_tier_css_props("good")}, ] @@ -31,13 +31,34 @@ def _apply_highlight_range( s_numeric = pd.to_numeric( s_col, errors="coerce" ) # Convert to numeric, non-convertibles become NaN + # Apply style ONLY if value is WITHIN the current dist from level - # This means for tiered styling, the order of applying styles in the calling function matters. - # If a value falls into multiple dist categories, the LAST applied style for that dist will win. - condition = (s_numeric >= level - dist) & (s_numeric <= level + dist) + # Use absolute difference to determine which tier applies + abs_diff = np.abs(s_numeric - level) + condition = abs_diff <= dist return np.where(condition, props, "") +def _determine_coverage_tier(value: float, level: float) -> str: + """ + Determine which coverage tier a value belongs to based on distance from level. + Returns the most specific (smallest distance) tier that applies. + """ + if pd.isna(value): + return "" + + abs_diff = abs(value - level) + + # Check tiers from most specific to least specific + sorted_tiers = sorted(HIGHLIGHT_TIERS, key=lambda x: x["dist"]) + + for tier in sorted_tiers: + if abs_diff <= tier["dist"]: + return tier["props"] + + return "" + + def _apply_base_table_styling(styler: Styler) -> Styler: """ Apply base styling to the table including headers, borders, and overall appearance. @@ -114,7 +135,7 @@ def color_coverage_columns( ) -> Styler: """ Applies tiered highlighting to specified coverage columns of a Styler object. - The order of application matters: more specific (narrower dist) rules are applied last to override. + Uses non-overlapping logic to prevent CSS conflicts. """ if not isinstance(styler, Styler): raise TypeError("Expected a pandas Styler object.") @@ -132,24 +153,22 @@ def color_coverage_columns( # Apply base styling first current_styler = _apply_base_table_styling(styler) - # Apply highlighting rules from the defined tiers - # The order in HIGHLIGHT_TIERS is important if props are meant to override. - # Pandas Styler.apply applies styles sequentially. If a cell matches multiple - # conditions from different .apply calls, the styles from later calls typically override - # or merge with earlier ones, depending on the CSS properties. - # For background-color, later calls will override. - for tier in HIGHLIGHT_TIERS: - current_styler = current_styler.apply( - _apply_highlight_range, - level=level, - dist=tier["dist"], - props=tier["props"], - subset=valid_coverage_cols, - ) + # Apply single tier styling to prevent conflicts + def apply_coverage_tier_to_cell(s_col): + """Apply only the most appropriate coverage tier for each cell.""" + return s_col.apply(lambda x: _determine_coverage_tier(x, level)) + + current_styler = current_styler.apply( + apply_coverage_tier_to_cell, subset=valid_coverage_cols + ) # Apply additional styling to coverage columns for emphasis current_styler = current_styler.set_properties( - **{"text-align": "center", "font-family": "monospace", "font-size": "13px"}, + **{ + "text-align": "center", + "font-family": "monospace", + "font-size": "13px", + }, subset=valid_coverage_cols, ) diff --git a/doc/utils/styling.py b/doc/utils/styling.py index 626952d..e7c34cf 100644 --- a/doc/utils/styling.py +++ b/doc/utils/styling.py @@ -26,7 +26,7 @@ def _load_theme_config() -> Dict[str, Any]: COVERAGE_THRESHOLDS = _THEME["coverage_thresholds"] -def get_coverage_tier_props(tier: str, font_weight: str = "600") -> str: +def get_coverage_tier_css_props(tier: str, font_weight: str = "600") -> str: """ Generate CSS properties string for a coverage performance tier. @@ -51,7 +51,7 @@ def get_coverage_tier_props(tier: str, font_weight: str = "600") -> str: ) -def get_html_color_span(tier: str, text: str = None) -> str: +def get_coverage_tier_html_span(tier: str, text: str = None) -> str: """ Generate HTML span element with coverage tier styling for documentation. diff --git a/doc/utils/theme.yml b/doc/utils/theme.yml index 2115026..3e98bed 100644 --- a/doc/utils/theme.yml +++ b/doc/utils/theme.yml @@ -26,6 +26,6 @@ table_styling: hover_bg: "#f5f5f5" coverage_thresholds: - good: 0.05 # Within 5% of nominal level - medium: 0.1 # Within 10% of nominal level - poor: 1.0 # Beyond 10% of nominal level + good: 0.05 # Within 5% of nominal level + medium: 0.1 # Within 10% of nominal level + poor: 1.0 # Beyond 10% of nominal level From f119aa2a7b6eabb5c4c39cd104d2586de9286e86 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Wed, 11 Jun 2025 11:52:14 +0200 Subject: [PATCH 133/142] update fonts --- doc/styles.css | 147 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 146 insertions(+), 1 deletion(-) diff --git a/doc/styles.css b/doc/styles.css index 2ddf50c..951e121 100644 --- a/doc/styles.css +++ b/doc/styles.css @@ -1 +1,146 @@ -/* css styles */ +/* Import Google Fonts */ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap'); + +/* Root font variables */ +:root { + --font-family-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + --font-family-mono: 'JetBrains Mono', 'SF Mono', Monaco, Inconsolata, 'Roboto Mono', 'Source Code Pro', monospace; +} + +/* Base typography */ +body { + font-family: var(--font-family-sans); + font-weight: 400; + line-height: 1.6; + font-feature-settings: 'kern' 1, 'liga' 1, 'calt' 1; +} + +/* Headings */ +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--font-family-sans); + font-weight: 600; + line-height: 1.3; + letter-spacing: -0.025em; +} + +h1 { + font-weight: 700; + font-size: 2.25rem; +} + +h2 { + font-weight: 600; + font-size: 1.875rem; +} + +h3 { + font-weight: 600; + font-size: 1.5rem; +} + +h4 { + font-weight: 500; + font-size: 1.25rem; +} + +/* Code and pre-formatted text */ +code, +pre, +.sourceCode { + font-family: var(--font-family-mono); + font-weight: 400; + font-feature-settings: 'liga' 1, 'calt' 1; +} + +/* Inline code */ +code:not(pre code) { + font-size: 0.875em; + font-weight: 500; + padding: 0.125rem 0.25rem; + background-color: rgba(175, 184, 193, 0.2); + border-radius: 0.25rem; +} + +/* Code blocks */ +pre { + font-size: 0.875rem; + line-height: 1.5; + padding: 1rem; + border-radius: 0.5rem; + overflow-x: auto; +} + +/* Navigation and UI elements */ +.navbar-brand, +.nav-link { + font-family: var(--font-family-sans); + font-weight: 500; +} + +.sidebar .nav-link { + font-weight: 400; +} + +.sidebar .nav-link.active { + font-weight: 500; +} + +/* Tables */ +table { + font-family: var(--font-family-sans); + font-variant-numeric: tabular-nums; +} + +th { + font-weight: 600; +} + +/* Math equations - ensure good readability */ +.math { + font-family: 'STIX Two Math', 'Times New Roman', serif; +} + +/* Buttons and interactive elements */ +.btn { + font-family: var(--font-family-sans); + font-weight: 500; + letter-spacing: 0.025em; +} + +/* Improve readability for long text */ +.content { + max-width: none; +} + +p { + margin-bottom: 1.25rem; +} + +/* List styling */ +ul, +ol { + margin-bottom: 1.25rem; +} + +li { + margin-bottom: 0.5rem; +} + +/* Better spacing for equations */ +.math.display { + margin: 1.5rem 0; +} + +/* Blockquotes */ +blockquote { + font-style: italic; + border-left: 4px solid #e9ecef; + padding-left: 1rem; + margin-left: 0; + color: #6c757d; +} From 3cec82b5e83cba7075d0f8f471f2ae4f52f80081 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 12 Jun 2025 09:41:37 +0200 Subject: [PATCH 134/142] add did cs multi simulation to montecover --- monte-cover/src/montecover/did/__init__.py | 3 +- .../src/montecover/did/did_cs_multi.py | 183 ++++++++++++++++++ 2 files changed, 185 insertions(+), 1 deletion(-) create mode 100644 monte-cover/src/montecover/did/did_cs_multi.py diff --git a/monte-cover/src/montecover/did/__init__.py b/monte-cover/src/montecover/did/__init__.py index 5aecac3..e14a6dd 100644 --- a/monte-cover/src/montecover/did/__init__.py +++ b/monte-cover/src/montecover/did/__init__.py @@ -1,5 +1,6 @@ """Monte Carlo coverage simulations for DiD.""" +from montecover.did.did_cs_multi import DIDCSMultiCoverageSimulation from montecover.did.did_pa_multi import DIDMultiCoverageSimulation -__all__ = ["DIDMultiCoverageSimulation"] +__all__ = ["DIDMultiCoverageSimulation", "DIDCSMultiCoverageSimulation"] diff --git a/monte-cover/src/montecover/did/did_cs_multi.py b/monte-cover/src/montecover/did/did_cs_multi.py new file mode 100644 index 0000000..4adc0fb --- /dev/null +++ b/monte-cover/src/montecover/did/did_cs_multi.py @@ -0,0 +1,183 @@ +from typing import Any, Dict, Optional + +import doubleml as dml +import numpy as np +import pandas as pd +from doubleml.did.datasets import make_did_cs_CS2021 + +from montecover.base import BaseSimulation +from montecover.utils import create_learner_from_config + + +class DIDCSMultiCoverageSimulation(BaseSimulation): + """Simulation study for coverage properties of DoubleMLDIDMulti.""" + + def __init__( + self, + config_file: str, + suppress_warnings: bool = True, + log_level: str = "INFO", + log_file: Optional[str] = None, + ): + super().__init__( + config_file=config_file, + suppress_warnings=suppress_warnings, + log_level=log_level, + log_file=log_file, + ) + + # Additional results storage for aggregated results + self.results_aggregated = [] + + # Calculate oracle values + self._calculate_oracle_values() + + def _process_config_parameters(self): + """Process simulation-specific parameters from config""" + # Process ML models in parameter grid + # Process ML models in parameter grid + assert "learners" in self.dml_parameters, "No learners specified in the config file" + + required_learners = ["ml_g", "ml_m"] + for learner in self.dml_parameters["learners"]: + for ml in required_learners: + assert ml in learner, f"No {ml} specified in the config file" + + def _calculate_oracle_values(self): + """Calculate oracle values for the simulation.""" + self.logger.info("Calculating oracle values") + + self.oracle_values = dict() + # Oracle values + df_oracle = make_did_cs_CS2021( + n_obs=int(1e6), + dgp_type=1, + lambda_t=self.dgp_parameters["lambda_t"][0], + ) # does not depend on the DGP type or lambda_t + df_oracle["ite"] = df_oracle["y1"] - df_oracle["y0"] + self.oracle_values["detailed"] = df_oracle.groupby(["d", "t"])["ite"].mean().reset_index() + + # Oracle group aggregation + df_oracle_post_treatment = df_oracle[df_oracle["t"] >= df_oracle["d"]] + self.oracle_values["group"] = df_oracle_post_treatment.groupby("d")["ite"].mean() + + # Oracle time aggregation + self.oracle_values["time"] = df_oracle_post_treatment.groupby("t")["ite"].mean() + + # Oracle eventstudy aggregation + df_oracle["e"] = pd.to_datetime(df_oracle["t"]).values.astype("datetime64[M]") - pd.to_datetime( + df_oracle["d"] + ).values.astype("datetime64[M]") + self.oracle_values["eventstudy"] = df_oracle.groupby("e")["ite"].mean()[1:] + + def run_single_rep(self, dml_data, dml_params) -> Dict[str, Any]: + """Run a single repetition with the given parameters.""" + # Extract parameters + learner_config = dml_params["learners"] + learner_g_name, ml_g = create_learner_from_config(learner_config["ml_g"]) + learner_m_name, ml_m = create_learner_from_config(learner_config["ml_m"]) + score = dml_params["score"] + in_sample_normalization = dml_params["in_sample_normalization"] + + # Model + dml_model = dml.did.DoubleMLDIDMulti( + obj_dml_data=dml_data, + ml_g=ml_g, + ml_m=None if score == "experimental" else ml_m, + gt_combinations="standard", + score=score, + panel=False, + in_sample_normalization=in_sample_normalization, + ) + dml_model.fit() + dml_model.bootstrap(n_rep_boot=2000) + + # Oracle values for this model + oracle_thetas = np.full_like(dml_model.coef, np.nan) + for i, (g, _, t) in enumerate(dml_model.gt_combinations): + group_index = self.oracle_values["detailed"]["d"] == g + time_index = self.oracle_values["detailed"]["t"] == t + oracle_thetas[i] = self.oracle_values["detailed"][group_index & time_index]["ite"].iloc[0] + + result = { + "detailed": [], + "group": [], + "time": [], + "eventstudy": [], + } + for level in self.confidence_parameters["level"]: + level_result = dict() + level_result["detailed"] = self._compute_coverage( + thetas=dml_model.coef, + oracle_thetas=oracle_thetas, + confint=dml_model.confint(level=level), + joint_confint=dml_model.confint(level=level, joint=True), + ) + + for aggregation_method in ["group", "time", "eventstudy"]: + agg_obj = dml_model.aggregate(aggregation=aggregation_method) + agg_obj.aggregated_frameworks.bootstrap(n_rep_boot=2000) + + level_result[aggregation_method] = self._compute_coverage( + thetas=agg_obj.aggregated_frameworks.thetas, + oracle_thetas=self.oracle_values[aggregation_method].values, + confint=agg_obj.aggregated_frameworks.confint(level=level), + joint_confint=agg_obj.aggregated_frameworks.confint(level=level, joint=True), + ) + + # add parameters to the result + for res in level_result.values(): + res.update( + { + "Learner g": learner_g_name, + "Learner m": learner_m_name, + "Score": score, + "In-sample-norm.": in_sample_normalization, + "level": level, + } + ) + for key, res in level_result.items(): + result[key].append(res) + + return result + + def summarize_results(self): + """Summarize the simulation results.""" + self.logger.info("Summarizing simulation results") + + groupby_cols = [ + "Learner g", + "Learner m", + "Score", + "In-sample-norm.", + "DGP", + "level", + ] + aggregation_dict = { + "Coverage": "mean", + "CI Length": "mean", + "Bias": "mean", + "Uniform Coverage": "mean", + "Uniform CI Length": "mean", + "repetition": "count", + } + + result_summary = dict() + for result_name, result_df in self.results.items(): + result_summary[result_name] = result_df.groupby(groupby_cols).agg(aggregation_dict).reset_index() + self.logger.debug(f"Summarized {result_name} results") + + return result_summary + + def _generate_dml_data(self, dgp_params) -> dml.data.DoubleMLPanelData: + """Generate data for the simulation.""" + data = make_did_cs_CS2021(n_obs=dgp_params["n_obs"], dgp_type=dgp_params["DGP"], lambda_t=dgp_params["lambda_t"]) + dml_data = dml.data.DoubleMLPanelData( + data, + y_col="y", + d_cols="d", + id_col="id", + t_col="t", + x_cols=["Z1", "Z2", "Z3", "Z4"], + ) + return dml_data From dab90a95c8972d370e90edd73d241943c93df743 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 12 Jun 2025 09:41:55 +0200 Subject: [PATCH 135/142] add did cs multi simulation scripts --- scripts/did/did_cs_multi.py | 13 ++++++ scripts/did/did_cs_multi_config.yml | 65 +++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 scripts/did/did_cs_multi.py create mode 100644 scripts/did/did_cs_multi_config.yml diff --git a/scripts/did/did_cs_multi.py b/scripts/did/did_cs_multi.py new file mode 100644 index 0000000..c0a6c38 --- /dev/null +++ b/scripts/did/did_cs_multi.py @@ -0,0 +1,13 @@ +from montecover.did import DIDCSMultiCoverageSimulation + +# Create and run simulation with config file +sim = DIDCSMultiCoverageSimulation( + config_file="scripts/did/did_cs_multi_config.yml", + log_level="DEBUG", + log_file="logs/did/did_cs_multi_sim.log", +) +sim.run_simulation() +sim.save_results(output_path="results/did/", file_prefix="did_cs_multi") + +# Save config file for reproducibility +sim.save_config("results/did/did_cs_multi_config.yml") diff --git a/scripts/did/did_cs_multi_config.yml b/scripts/did/did_cs_multi_config.yml new file mode 100644 index 0000000..018557a --- /dev/null +++ b/scripts/did/did_cs_multi_config.yml @@ -0,0 +1,65 @@ +# Simulation parameters for DID Multi Coverage + +simulation_parameters: + repetitions: 10 + max_runtime: 19800 # 5.5 hours in seconds + random_seed: 42 + n_jobs: -2 + +dgp_parameters: + DGP: [1, 4, 6] # Different DGP specifications + n_obs: [2000] # Sample size for each simulation (has to be a list) + lambda_t: [0.5] + +# Define reusable learner configurations +learner_definitions: + linear: &linear + name: "Linear" + + logistic: &logistic + name: "Logistic" + + lgbmr: &lgbmr + name: "LGBM Regr." + params: + n_estimators: 300 # More trees to learn slowly and steadily + learning_rate: 0.03 # Lower learning rate to improve generalization + num_leaves: 7 # Fewer leaves — simpler trees + max_depth: 3 # Shallow trees reduce overfitting + min_child_samples: 20 # Require more samples per leaf + subsample: 0.8 # More row sampling to add randomness + colsample_bytree: 0.8 # More feature sampling + reg_alpha: 0.1 # Add L1 regularization + reg_lambda: 1.0 # Increase L2 regularization + random_state: 42 # Reproducible + + lgbmc: &lgbmc + name: "LGBM Clas." + params: + n_estimators: 300 # More trees to learn slowly and steadily + learning_rate: 0.03 # Lower learning rate to improve generalization + num_leaves: 7 # Fewer leaves — simpler trees + max_depth: 3 # Shallow trees reduce overfitting + min_child_samples: 20 # Require more samples per leaf + subsample: 0.8 # More row sampling to add randomness + colsample_bytree: 0.8 # More feature sampling + reg_alpha: 0.1 # Add L1 regularization + reg_lambda: 1.0 # Increase L2 regularization + random_state: 42 # Reproducible + +dml_parameters: + # ML methods for ml_g and ml_m + learners: + - ml_g: *linear + ml_m: *logistic + - ml_g: *lgbmr + ml_m: *lgbmc + + score: + - observational # Standard DML score + - experimental # Experimental score (no propensity estimation) + + in_sample_normalization: [true, false] + +confidence_parameters: + level: [0.95, 0.90] # Confidence levels From dd71a72f8e952d5f99e5edf733d76a7b6be7fb2a Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 12 Jun 2025 09:42:24 +0200 Subject: [PATCH 136/142] first short did cs multi results --- results/did/did_cs_multi_config.yml | 61 +++++++++++++++++++++++++ results/did/did_cs_multi_detailed.csv | 49 ++++++++++++++++++++ results/did/did_cs_multi_eventstudy.csv | 49 ++++++++++++++++++++ results/did/did_cs_multi_group.csv | 49 ++++++++++++++++++++ results/did/did_cs_multi_metadata.csv | 2 + results/did/did_cs_multi_time.csv | 49 ++++++++++++++++++++ 6 files changed, 259 insertions(+) create mode 100644 results/did/did_cs_multi_config.yml create mode 100644 results/did/did_cs_multi_detailed.csv create mode 100644 results/did/did_cs_multi_eventstudy.csv create mode 100644 results/did/did_cs_multi_group.csv create mode 100644 results/did/did_cs_multi_metadata.csv create mode 100644 results/did/did_cs_multi_time.csv diff --git a/results/did/did_cs_multi_config.yml b/results/did/did_cs_multi_config.yml new file mode 100644 index 0000000..4c7a176 --- /dev/null +++ b/results/did/did_cs_multi_config.yml @@ -0,0 +1,61 @@ +simulation_parameters: + repetitions: 10 + max_runtime: 19800 + random_seed: 42 + n_jobs: -2 +dgp_parameters: + DGP: + - 1 + - 4 + - 6 + n_obs: + - 2000 + lambda_t: + - 0.5 +learner_definitions: + linear: &id001 + name: Linear + logistic: &id002 + name: Logistic + lgbmr: &id003 + name: LGBM Regr. + params: + n_estimators: 300 + learning_rate: 0.03 + num_leaves: 7 + max_depth: 3 + min_child_samples: 20 + subsample: 0.8 + colsample_bytree: 0.8 + reg_alpha: 0.1 + reg_lambda: 1.0 + random_state: 42 + lgbmc: &id004 + name: LGBM Clas. + params: + n_estimators: 300 + learning_rate: 0.03 + num_leaves: 7 + max_depth: 3 + min_child_samples: 20 + subsample: 0.8 + colsample_bytree: 0.8 + reg_alpha: 0.1 + reg_lambda: 1.0 + random_state: 42 +dml_parameters: + learners: + - ml_g: *id001 + ml_m: *id002 + - ml_g: *id003 + ml_m: *id004 + score: + - observational + - experimental + in_sample_normalization: + - true + - false +confidence_parameters: + level: + - 0.95 + - 0.9 diff --git a/results/did/did_cs_multi_detailed.csv b/results/did/did_cs_multi_detailed.csv new file mode 100644 index 0000000..3f0433a --- /dev/null +++ b/results/did/did_cs_multi_detailed.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.7166666666666667,1.7733164955970522,0.6270667186867447,0.1,2.7544168540153207,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.7583333333333333,2.1130369338715296,0.6270667186867447,0.4,3.038799542554651,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.725,1.7477937797150804,0.5602041597791712,0.4,2.7439393147453264,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.8,2.082624742113759,0.5602041597791712,0.4,3.0000419656121324,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.975,1.7579955535330196,0.3275539375261427,1.0,2.7532017355074516,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9916666666666666,2.094780905394161,0.3275539375261427,1.0,3.0087112201608193,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.7583333333333334,1.7780211121083784,0.6436325943754605,0.2,2.7676021703976224,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.8166666666666667,2.118642830209164,0.6436325943754605,0.3,3.0428498324931845,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.75,1.7491245115931342,0.5669760934820833,0.4,2.744787484548024,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.8083333333333333,2.084210406948203,0.5669760934820833,0.5,2.9996532476236077,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.975,1.7622679725735675,0.31703729067888875,1.0,2.7695645411718286,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,1.0,2.099871806681139,0.31703729067888875,1.0,3.023386909461707,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9583333333333334,2.0514570471937414,0.3867718735083896,0.9,3.2264240958527117,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9833333333333332,2.4444618429559775,0.3867718735083896,0.9,3.533486903589104,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.875,2.5413509498564357,0.651176999835073,0.9,4.0086542706028725,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9333333333333333,3.0282064325850335,0.651176999835073,0.9,4.369730369470008,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9416666666666668,2.0022232678074596,0.3671452434766034,1.0,3.1349999971976166,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.3857961763952718,0.3671452434766034,1.0,3.444114186938691,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9666666666666666,2.019516185333502,0.42101406931524626,0.9,3.1622094213810152,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9833333333333334,2.406401958565374,0.42101406931524626,1.0,3.471392157203975,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8916666666666666,2.4980104461788457,0.609694859178484,0.8,3.921343216109116,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.925,2.976563037155776,0.609694859178484,0.9,4.269006211756919,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.975,1.9659141203642527,0.351790775740909,1.0,3.085297737408852,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9916666666666666,2.3425311586867137,0.351790775740909,1.0,3.3812992898189953,10 +Linear,Logistic,experimental,False,1,0.9,0.9083333333333334,0.4156398657486867,0.09746301198430109,0.8,0.6501871822927178,10 +Linear,Logistic,experimental,False,1,0.95,0.925,0.4952654473676904,0.09746301198430109,0.9,0.7165960378309301,10 +Linear,Logistic,experimental,False,4,0.9,0.7666666666666667,2.7945505297249533,0.8728211225298711,0.4,4.3851488481274625,10 +Linear,Logistic,experimental,False,4,0.95,0.825,3.329912340826076,0.8728211225298711,0.5,4.82104914193982,10 +Linear,Logistic,experimental,False,6,0.9,0.9833333333333334,2.9309619862698097,0.46633922352847107,1.0,4.582620115930847,10 +Linear,Logistic,experimental,False,6,0.95,0.9916666666666666,3.4924566168186395,0.46633922352847107,1.0,5.011624635677961,10 +Linear,Logistic,experimental,True,1,0.9,0.9,0.4156868198443614,0.09796066841008202,0.8,0.6452755653073956,10 +Linear,Logistic,experimental,True,1,0.95,0.9333333333333333,0.49532139662356406,0.09796066841008202,0.9,0.7082400730816387,10 +Linear,Logistic,experimental,True,4,0.9,0.775,2.791799780055066,0.8764997664245662,0.4,4.387553318413767,10 +Linear,Logistic,experimental,True,4,0.95,0.8333333333333334,3.326634620428878,0.8764997664245662,0.5,4.791925509710113,10 +Linear,Logistic,experimental,True,6,0.9,0.9833333333333334,2.9313252748018654,0.46603910456037,1.0,4.5903052096126045,10 +Linear,Logistic,experimental,True,6,0.95,0.9916666666666666,3.492889501804367,0.46603910456037,1.0,5.012949733861095,10 +Linear,Logistic,observational,False,1,0.9,0.925,0.44536680216015306,0.09814566635145752,1.0,0.6939388599613096,10 +Linear,Logistic,observational,False,1,0.95,0.975,0.5306872768742898,0.09814566635145752,1.0,0.7629369384791739,10 +Linear,Logistic,observational,False,4,0.9,0.8583333333333334,3.3081199749387666,0.8785057917466201,0.7,5.1432414716372525,10 +Linear,Logistic,observational,False,4,0.95,0.875,3.941868079431738,0.8785057917466201,0.7,5.667520286195628,10 +Linear,Logistic,observational,False,6,0.9,0.9833333333333334,2.9580643141495875,0.4768956065518607,1.0,4.62051840726898,10 +Linear,Logistic,observational,False,6,0.95,1.0,3.5247510323649096,0.4768956065518607,1.0,5.077422972978242,10 +Linear,Logistic,observational,True,1,0.9,0.9333333333333333,0.44497110431101594,0.09947076656191642,1.0,0.6925892772971488,10 +Linear,Logistic,observational,True,1,0.95,0.975,0.5302157738053473,0.09947076656191642,1.0,0.7572367265124303,10 +Linear,Logistic,observational,True,4,0.9,0.85,3.3020145589492635,0.8664130376055239,0.7,5.1521595093075225,10 +Linear,Logistic,observational,True,4,0.95,0.9,3.934593027564516,0.8664130376055239,0.8,5.638033846710763,10 +Linear,Logistic,observational,True,6,0.9,0.9833333333333334,2.955323680846967,0.4613858642305589,1.0,4.631940914902716,10 +Linear,Logistic,observational,True,6,0.95,1.0,3.5214853663628096,0.4613858642305589,1.0,5.077023905391667,10 diff --git a/results/did/did_cs_multi_eventstudy.csv b/results/did/did_cs_multi_eventstudy.csv new file mode 100644 index 0000000..73abd9f --- /dev/null +++ b/results/did/did_cs_multi_eventstudy.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.5333333333333333,1.2118081028607763,0.6527586968414182,0.2,1.728131579919128,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.6333333333333333,1.4439584160341843,0.6527586968414182,0.2,1.9312706731058538,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.7,1.2323629409010297,0.5063530824637252,0.6,1.778098068172597,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.8166666666666667,1.4684510162308455,0.5063530824637252,0.6,1.9547252521289227,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9666666666666666,1.248668302458874,0.24741350275129476,1.0,1.7883111690378903,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9833333333333334,1.487880052884708,0.24741350275129476,1.0,1.9970794024951946,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.5666666666666667,1.2171086357502747,0.6426336079229042,0.1,1.740139701298481,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.65,1.4502743905331072,0.6426336079229042,0.2,1.9427553991318138,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.7,1.2357483360455728,0.5360345080552671,0.5,1.7606640787246317,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.7833333333333333,1.4724849633541763,0.5360345080552671,0.7,1.9840638856314903,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,1.0,1.2503252655695003,0.23723155850810848,1.0,1.811133139153878,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,1.0,1.4898544462090293,0.23723155850810848,1.0,1.980811336670809,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9333333333333333,1.4927206316239496,0.29242135114130446,0.9,2.1465454811020552,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.95,1.7786863396381338,0.29242135114130446,0.9,2.388986162797091,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8666666666666666,1.8495198029207178,0.4071724106193555,0.9,2.6571446657458786,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9166666666666666,2.2038387750870507,0.4071724106193555,1.0,2.9674675387897276,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.95,1.4226225943496058,0.2872255509227587,1.0,2.0510492109966125,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,1.695159376391383,0.2872255509227587,1.0,2.2719501169128278,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9166666666666666,1.4257420397326435,0.2523995676770823,1.0,2.0551075393335703,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9333333333333333,1.6988764248279815,0.2523995676770823,1.0,2.2589447917260204,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8666666666666666,1.78601977107235,0.41479101552511877,0.8,2.5623229828900618,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9166666666666666,2.128173820223794,0.41479101552511877,0.9,2.8508159336146264,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9833333333333334,1.3940304674002326,0.2924074699045633,1.0,2.011389854394899,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9833333333333334,1.6610897557613513,0.2924074699045633,1.0,2.213296255205619,10 +Linear,Logistic,experimental,False,1,0.9,0.9,0.2957667930475026,0.0669353773530522,0.9,0.4230633401734896,10 +Linear,Logistic,experimental,False,1,0.95,0.9666666666666666,0.35242787120845687,0.0669353773530522,1.0,0.4713116917343928,10 +Linear,Logistic,experimental,False,4,0.9,0.7,1.9573574011285004,0.8737941663726427,0.6,2.8152408968634623,10 +Linear,Logistic,experimental,False,4,0.95,0.8,2.3323351988437837,0.8737941663726427,0.7,3.106747513953587,10 +Linear,Logistic,experimental,False,6,0.9,0.9833333333333334,2.0622260563412405,0.33551856092820487,1.0,2.956298751203799,10 +Linear,Logistic,experimental,False,6,0.95,1.0,2.4572939088203416,0.33551856092820487,1.0,3.2806125759102,10 +Linear,Logistic,experimental,True,1,0.9,0.9,0.2957914296347921,0.06759680005161897,0.9,0.42050652007483597,10 +Linear,Logistic,experimental,True,1,0.95,0.95,0.35245722751287106,0.06759680005161897,1.0,0.46822297556660686,10 +Linear,Logistic,experimental,True,4,0.9,0.7333333333333333,1.9548438526345548,0.8789192169597108,0.6,2.793935500109471,10 +Linear,Logistic,experimental,True,4,0.95,0.8166666666666667,2.3293401210807496,0.8789192169597108,0.7,3.1321875701797732,10 +Linear,Logistic,experimental,True,6,0.9,0.9833333333333334,2.0617725457893483,0.33510567391663476,1.0,2.959831730574458,10 +Linear,Logistic,experimental,True,6,0.95,1.0,2.45675351766714,0.33510567391663476,1.0,3.253803917305509,10 +Linear,Logistic,observational,False,1,0.9,0.9666666666666666,0.31667457504423363,0.0632421060086151,1.0,0.44859128947123195,10 +Linear,Logistic,observational,False,1,0.95,1.0,0.3773410300687722,0.0632421060086151,1.0,0.5014140609202705,10 +Linear,Logistic,observational,False,4,0.9,0.8,2.3532865671941043,0.8651602927402255,0.6,3.3621155890131895,10 +Linear,Logistic,observational,False,4,0.95,0.8333333333333334,2.8041138989070786,0.8651602927402255,0.8,3.7526284223901465,10 +Linear,Logistic,observational,False,6,0.9,1.0,2.0784374868679083,0.35674241047148286,1.0,2.978782632645013,10 +Linear,Logistic,observational,False,6,0.95,1.0,2.4766110197471245,0.35674241047148286,1.0,3.2814370904270005,10 +Linear,Logistic,observational,True,1,0.9,0.95,0.3161044356872176,0.0632769797420591,1.0,0.45059245410014326,10 +Linear,Logistic,observational,True,1,0.95,1.0,0.3766616671226654,0.0632769797420591,1.0,0.501620813344146,10 +Linear,Logistic,observational,True,4,0.9,0.8,2.342759052735463,0.8656773769926215,0.6,3.360929376742386,10 +Linear,Logistic,observational,True,4,0.95,0.8333333333333334,2.7915695917130683,0.8656773769926215,0.8,3.725069174297289,10 +Linear,Logistic,observational,True,6,0.9,1.0,2.0791212430728634,0.3594599150127789,1.0,2.9918064863469214,10 +Linear,Logistic,observational,True,6,0.95,1.0,2.477425765517787,0.3594599150127789,1.0,3.3072592627340027,10 diff --git a/results/did/did_cs_multi_group.csv b/results/did/did_cs_multi_group.csv new file mode 100644 index 0000000..97fa67e --- /dev/null +++ b/results/did/did_cs_multi_group.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.6333333333333333,1.9309509683731683,0.6483300186621959,0.1,2.491422645918621,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.6666666666666666,2.3008699934828956,0.6483300186621959,0.2,2.810431947442311,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.6666666666666666,1.9156769483926879,0.6627788424460046,0.4,2.451980036225718,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.7333333333333333,2.2826698761166044,0.6627788424460046,0.5,2.7684090219664688,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9666666666666666,1.9291222599599713,0.3503868380252425,1.0,2.4729109586674007,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9666666666666666,2.298690953008191,0.3503868380252425,1.0,2.818778587864818,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.6333333333333333,1.9387144217977053,0.701094335052589,0.2,2.4861389631011366,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.6666666666666666,2.3101207188109285,0.701094335052589,0.2,2.807086164878547,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.7,1.9210402192004783,0.6609373667534038,0.3,2.4700808527932314,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.7333333333333333,2.289060607456077,0.6609373667534038,0.5,2.7942572911061268,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,1.0,1.9365610813627654,0.3595071736631225,1.0,2.4932401125156365,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,1.0,2.307554855423583,0.3595071736631225,1.0,2.8225564370429765,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,1.0,2.1427757489571753,0.34252631763527386,1.0,2.734711568981914,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,1.0,2.5532747875478945,0.34252631763527386,1.0,3.109090645053052,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8,2.684775648184016,0.6968118835312389,0.8,3.4429041928377573,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.8666666666666666,3.1991075015978283,0.6968118835312389,1.0,3.906658818552317,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9666666666666666,2.1761503004995557,0.3893794928198543,1.0,2.78034686925069,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.5930430185633653,0.3893794928198543,1.0,3.171246897657084,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9666666666666666,2.148540695051566,0.4092369695588465,1.0,2.769098791755392,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,1.0,2.560144144512358,0.4092369695588465,1.0,3.131852684845696,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8666666666666666,2.662060416631827,0.6779811390621286,0.8,3.394628718972476,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.8666666666666666,3.172040633754218,0.6779811390621286,0.8,3.8598644765440704,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,1.0,2.152420786658703,0.36200807488801817,1.0,2.7622158993745622,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,1.0,2.564767558828438,0.36200807488801817,1.0,3.12440670549566,10 +Linear,Logistic,experimental,False,1,0.9,0.8666666666666666,0.37225268468616596,0.09264267695185414,0.8,0.47561717135066156,10 +Linear,Logistic,experimental,False,1,0.95,0.9,0.4435664324037482,0.09264267695185414,0.9,0.5367529935868299,10 +Linear,Logistic,experimental,False,4,0.9,0.7,3.129892914086136,0.9222941217750776,0.3,4.014417918285646,10 +Linear,Logistic,experimental,False,4,0.95,0.7666666666666666,3.7294974376810783,0.9222941217750776,0.5,4.513690687908797,10 +Linear,Logistic,experimental,False,6,0.9,0.9666666666666666,3.267534767507437,0.4080002005390327,1.0,4.218734094532647,10 +Linear,Logistic,experimental,False,6,0.95,1.0,3.893507821979578,0.4080002005390327,1.0,4.744925331873259,10 +Linear,Logistic,experimental,True,1,0.9,0.8666666666666666,0.37227304564673025,0.09254571713304208,0.9,0.4783021827849622,10 +Linear,Logistic,experimental,True,1,0.95,0.9,0.44359069398468326,0.09254571713304208,0.9,0.5402748060670912,10 +Linear,Logistic,experimental,True,4,0.9,0.7,3.1237063671599112,0.934055357567015,0.3,4.021154701918838,10 +Linear,Logistic,experimental,True,4,0.95,0.7666666666666666,3.722125712340058,0.934055357567015,0.3,4.528263874429806,10 +Linear,Logistic,experimental,True,6,0.9,0.9666666666666666,3.270807004620754,0.40375137532349203,1.0,4.1739065630515695,10 +Linear,Logistic,experimental,True,6,0.95,1.0,3.897406932992186,0.40375137532349203,1.0,4.739696061400023,10 +Linear,Logistic,observational,False,1,0.9,0.8666666666666666,0.3964295816602681,0.09570875829615264,0.9,0.5078084954818215,10 +Linear,Logistic,observational,False,1,0.95,0.9333333333333333,0.4723749820222326,0.09570875829615264,0.9,0.5726459093348256,10 +Linear,Logistic,observational,False,4,0.9,0.7666666666666666,3.594064879810521,0.9795328716427715,0.6,4.608367990202868,10 +Linear,Logistic,observational,False,4,0.95,0.8666666666666666,4.2825924490220455,0.9795328716427715,0.8,5.235615285031181,10 +Linear,Logistic,observational,False,6,0.9,0.9666666666666666,3.3043836640455573,0.4290255103074177,1.0,4.250218343417005,10 +Linear,Logistic,observational,False,6,0.95,1.0,3.937415990403423,0.4290255103074177,1.0,4.80936081855212,10 +Linear,Logistic,observational,True,1,0.9,0.8666666666666666,0.39565734499813565,0.09594998341152775,0.9,0.508091918960568,10 +Linear,Logistic,observational,True,1,0.95,0.9666666666666666,0.47145480528399847,0.09594998341152775,0.9,0.5757580649577653,10 +Linear,Logistic,observational,True,4,0.9,0.7666666666666666,3.599015036071073,0.9861438576746245,0.6,4.63541224004802,10 +Linear,Logistic,observational,True,4,0.95,0.8666666666666666,4.288490924016753,0.9861438576746245,0.8,5.218369950853805,10 +Linear,Logistic,observational,True,6,0.9,0.9666666666666666,3.300157826926225,0.42120481152158307,1.0,4.221829642364661,10 +Linear,Logistic,observational,True,6,0.95,1.0,3.932380594899098,0.42120481152158307,1.0,4.794659320752098,10 diff --git a/results/did/did_cs_multi_metadata.csv b/results/did/did_cs_multi_metadata.csv new file mode 100644 index 0000000..8cea1ac --- /dev/null +++ b/results/did/did_cs_multi_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,DIDCSMultiCoverageSimulation,2025-06-12 09:40,15.342682393391927,3.12.3,scripts/did/did_cs_multi_config.yml diff --git a/results/did/did_cs_multi_time.csv b/results/did/did_cs_multi_time.csv new file mode 100644 index 0000000..15f5c80 --- /dev/null +++ b/results/did/did_cs_multi_time.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.6666666666666666,1.6730429651845136,0.7129711715861597,0.5,2.154357179640957,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.7666666666666666,1.9935536528117397,0.7129711715861597,0.6,2.4352665358854915,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.7666666666666666,1.6266865630544778,0.6034125155349818,0.7,2.1042189940178555,10 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.8,1.9383165927238353,0.6034125155349818,0.7,2.3607450903418568,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9666666666666666,1.6692444384867968,0.35326392896761105,1.0,2.1440535782291144,10 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,1.0,1.9890274290798218,0.35326392896761105,1.0,2.4335083487785565,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.6333333333333333,1.680116491392786,0.7313217704895066,0.6,2.157777817635138,10 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.7666666666666666,2.001982279155598,0.7313217704895066,0.7,2.4163033134197542,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.7333333333333333,1.6263263154732126,0.6470375620975342,0.6,2.097887938138064,10 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.7666666666666666,1.937887331254469,0.6470375620975342,0.7,2.363716510660942,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,1.0,1.6704292673907701,0.33095192292586173,1.0,2.149355924981329,10 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,1.0,1.9904392397975534,0.33095192292586173,1.0,2.4300781471985067,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,1.0,1.9471025742726333,0.2752809831111125,1.0,2.495687275142294,10 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,1.0,2.3201158189695725,0.2752809831111125,1.0,2.8314604040533875,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8,2.7469239128126572,0.6934385874721818,0.7,3.56020238828472,10 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9,3.273161726471052,0.6934385874721818,0.8,3.9562825980754317,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9666666666666666,1.9101451451166536,0.3898858282512358,1.0,2.4402136317968104,10 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.2760783259549755,0.3898858282512358,1.0,2.7599554154818278,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,1.0,1.9946990011610375,0.2972891272146645,1.0,2.576059829846608,10 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,1.0,2.376830459692323,0.2972891272146645,1.0,2.890537739276091,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9,2.6448366943262287,0.6604899131313036,0.7,3.4100495261886126,10 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9,3.151517302774757,0.6604899131313036,0.8,3.8285696552022266,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,1.0,1.8750849213428136,0.3250239543646754,1.0,2.419688730161217,10 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,1.0,2.2343014925877416,0.3250239543646754,1.0,2.727044610795285,10 +Linear,Logistic,experimental,False,1,0.9,0.8666666666666666,0.34405308040662097,0.08486038137830379,0.9,0.44241071429198575,10 +Linear,Logistic,experimental,False,1,0.95,0.9333333333333332,0.40996453138315336,0.08486038137830379,0.9,0.49772826797057645,10 +Linear,Logistic,experimental,False,4,0.9,0.8,2.62221639267215,1.0319524300060936,0.7,3.37477546286105,10 +Linear,Logistic,experimental,False,4,0.95,0.8,3.12456355088159,1.0319524300060936,0.8,3.8035224949177717,10 +Linear,Logistic,experimental,False,6,0.9,1.0,2.8224738648380443,0.40642891062611336,1.0,3.643187636464835,10 +Linear,Logistic,experimental,False,6,0.95,1.0,3.363185046830521,0.40642891062611336,1.0,4.074296317545963,10 +Linear,Logistic,experimental,True,1,0.9,0.8666666666666666,0.344266758097833,0.08466342400922112,0.8,0.4415196701533537,10 +Linear,Logistic,experimental,True,1,0.95,0.9333333333333332,0.41021914405641074,0.08466342400922112,0.9,0.4959071849562376,10 +Linear,Logistic,experimental,True,4,0.9,0.8,2.6179228534472916,1.0329454013487624,0.7,3.375378603418805,10 +Linear,Logistic,experimental,True,4,0.95,0.8666666666666666,3.1194474833427845,1.0329454013487624,0.8,3.7901128809732443,10 +Linear,Logistic,experimental,True,6,0.9,1.0,2.8184726726840754,0.42444389584039993,1.0,3.6208269685777497,10 +Linear,Logistic,experimental,True,6,0.95,1.0,3.358417332312642,0.42444389584039993,1.0,4.053263040299958,10 +Linear,Logistic,observational,False,1,0.9,0.9,0.38182309225508815,0.08120182154855413,1.0,0.4900629940393245,10 +Linear,Logistic,observational,False,1,0.95,1.0,0.4549702763963725,0.08120182154855413,1.0,0.5553948760018297,10 +Linear,Logistic,observational,False,4,0.9,0.8666666666666666,3.4268742050185272,1.0192108008598095,0.8,4.409914903812083,10 +Linear,Logistic,observational,False,4,0.95,0.9,4.0833724723785405,1.0192108008598095,0.8,4.948184144134663,10 +Linear,Logistic,observational,False,6,0.9,1.0,2.8569331292111215,0.42094365729095473,1.0,3.6601293333180522,10 +Linear,Logistic,observational,False,6,0.95,1.0,3.404245792904413,0.42094365729095473,1.0,4.135238538607403,10 +Linear,Logistic,observational,True,1,0.9,0.9,0.38169707034335987,0.08346983103094809,1.0,0.4869997198195679,10 +Linear,Logistic,observational,True,1,0.95,1.0,0.45482011202660544,0.08346983103094809,1.0,0.5522406174024808,10 +Linear,Logistic,observational,True,4,0.9,0.8666666666666666,3.4140826739670573,1.0020449419970494,0.8,4.360425984215706,10 +Linear,Logistic,observational,True,4,0.95,0.9,4.06813042302095,1.0020449419970494,0.8,4.961646251136529,10 +Linear,Logistic,observational,True,6,0.9,1.0,2.8409776360267562,0.4020645963900513,1.0,3.6422120857970954,10 +Linear,Logistic,observational,True,6,0.95,1.0,3.385233650131023,0.4020645963900513,1.0,4.10943577112757,10 From 7df926287adb461e64fcc615f64bc16837820366 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 12 Jun 2025 09:43:17 +0200 Subject: [PATCH 137/142] add did cs multi to workflow --- .github/workflows/did_sim.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/did_sim.yml b/.github/workflows/did_sim.yml index 411502f..65fc56e 100644 --- a/.github/workflows/did_sim.yml +++ b/.github/workflows/did_sim.yml @@ -20,6 +20,7 @@ jobs: 'scripts/did/did_pa_atte_coverage.py', 'scripts/did/did_cs_atte_coverage.py', 'scripts/did/did_pa_multi.py', + 'scripts/did/did_cs_multi.py', ] steps: From 1275da0779a3798a23e0749f7dc4d7a6dbbd9137 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Thu, 12 Jun 2025 09:56:39 +0200 Subject: [PATCH 138/142] use deepcopy for theme configuration to prevent unintended modifications --- doc/utils/styling.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/utils/styling.py b/doc/utils/styling.py index e7c34cf..0362df6 100644 --- a/doc/utils/styling.py +++ b/doc/utils/styling.py @@ -8,6 +8,7 @@ import yaml from pathlib import Path from typing import Dict, Any +import copy def _load_theme_config() -> Dict[str, Any]: @@ -87,4 +88,4 @@ def get_theme_config() -> Dict[str, Any]: Returns: Dictionary containing all theme settings """ - return _THEME.copy() + return copy.deepcopy(_THEME) From 197e627cd0c17e423d1703929c81e7fe880ee215 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Fri, 13 Jun 2025 06:30:51 +0200 Subject: [PATCH 139/142] add qmd file for did cs multi --- doc/_website.yml | 1 + doc/did/did_cs_multi.qmd | 322 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 323 insertions(+) create mode 100644 doc/did/did_cs_multi.qmd diff --git a/doc/_website.yml b/doc/_website.yml index e400e91..f262d9d 100644 --- a/doc/_website.yml +++ b/doc/_website.yml @@ -28,6 +28,7 @@ website: - text: "DID" menu: - did/did_multi.qmd + - did/did_cs_multi.qmd - did/did_pa.qmd - did/did_cs.qmd - text: "SSM" diff --git a/doc/did/did_cs_multi.qmd b/doc/did/did_cs_multi.qmd new file mode 100644 index 0000000..fba42d5 --- /dev/null +++ b/doc/did/did_cs_multi.qmd @@ -0,0 +1,322 @@ +--- +title: "DiD for Cross-Sectional Data over Multiple Periods" + +jupyter: python3 +--- + +```{python} +#| echo: false + +import numpy as np +import pandas as pd +from itables import init_notebook_mode +import os +import sys + +doc_dir = os.path.abspath(os.path.join(os.getcwd(), "..")) +if doc_dir not in sys.path: + sys.path.append(doc_dir) + +from utils.style_tables import generate_and_show_styled_table + +init_notebook_mode(all_interactive=True) +``` + +## ATTE Coverage + +The simulations are based on the [make_did_cs_CS2021](https://docs.doubleml.org/dev/api/generated/doubleml.did.datasets.make_did_cs_CS2021.html)-DGP with $2000$ observations. Learners are both set to either boosting or a linear (logistic) model. Due to time constraints we only consider the following DGPs: + + - Type 1: Linear outcome model and treatment assignment + - Type 4: Nonlinear outcome model and treatment assignment + - Type 6: Randomized treatment assignment and nonlinear outcome model + +The non-uniform results (coverage, ci length and bias) refer to averaged values over all $ATTs$ (point-wise confidence intervals). + +::: {.callout-note title="Metadata" collapse="true"} + +```{python} +#| echo: false +metadata_file = '../../results/did/did_cs_multi_metadata.csv' +metadata_df = pd.read_csv(metadata_file) +print(metadata_df.T.to_string(header=False)) +``` + +::: + +```{python} +#| echo: false + +# set up data +df = pd.read_csv("../../results/did/did_cs_multi_detailed.csv", index_col=None) + +assert df["repetition"].nunique() == 1 +n_rep = df["repetition"].unique()[0] + +display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +``` + +### Observational Score + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + + +### Experimental Score + +The results are only valid for the DGP 6, as the experimental score assumes a randomized treatment assignment. + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +## Aggregated Effects + +These simulations test different types of aggregation, as described in [DiD User Guide](https://docs.doubleml.org/dev/guide/models.html#difference-in-differences-models-did). + +The non-uniform results (coverage, ci length and bias) refer to averaged values over all $ATTs$ (point-wise confidence intervals). + +### Group Effects + +```{python} +#| echo: false + +# set up data +df_group = pd.read_csv("../../results/did/did_cs_multi_group.csv", index_col=None) + +assert df_group["repetition"].nunique() == 1 +n_rep_group = df_group["repetition"].unique()[0] + +display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +``` + +#### Observational Score + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_group, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_group, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_group, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_group, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +#### Experimental Score + +The results are only valid for the DGP 6, as the experimental score assumes a randomized treatment assignment. + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_group, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_group, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_group, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_group, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +### Time Effects + +```{python} +#| echo: false + +# set up data +df_time = pd.read_csv("../../results/did/did_cs_multi_time.csv", index_col=None) + +assert df_time["repetition"].nunique() == 1 +n_rep_time = df_time["repetition"].unique()[0] + +display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +``` + +#### Observational Score + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_time, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_time, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_time, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_time, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +#### Experimental Score + +The results are only valid for the DGP 6, as the experimental score assumes a randomized treatment assignment. + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_time, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_time, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_time, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_time, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +### Event Study Aggregation + +```{python} +#| echo: false + +# set up data +df_es = pd.read_csv("../../results/did/did_cs_multi_eventstudy.csv", index_col=None) + +assert df_es["repetition"].nunique() == 1 +n_rep_es = df_es["repetition"].unique()[0] + +display_columns = ["Learner g", "Learner m", "DGP", "In-sample-norm.", "Bias", "CI Length", "Coverage", "Uniform CI Length", "Uniform Coverage"] +``` + +#### Observational Score + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_es, + filters={"level": 0.95, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_es, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_es, + filters={"level": 0.9, "Score": "observational"}, + display_cols=display_columns, + n_rep=n_rep_es, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +#### Experimental Score + +The results are only valid for the DGP 6, as the experimental score assumes a randomized treatment assignment. + + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_es, + filters={"level": 0.95, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_es, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` + +```{python} +#| echo: false +generate_and_show_styled_table( + main_df=df_es, + filters={"level": 0.9, "Score": "experimental"}, + display_cols=display_columns, + n_rep=n_rep_es, + level_col="level", + coverage_highlight_cols=["Coverage", "Uniform Coverage"] +) +``` From e6e17007f30fed01344564df81a4257f85984264 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Fri, 13 Jun 2025 08:32:02 +0200 Subject: [PATCH 140/142] rerun did_cs_multi sim --- results/did/did_cs_multi_config.yml | 2 +- results/did/did_cs_multi_detailed.csv | 96 ++++++++++++------------- results/did/did_cs_multi_eventstudy.csv | 96 ++++++++++++------------- results/did/did_cs_multi_group.csv | 96 ++++++++++++------------- results/did/did_cs_multi_metadata.csv | 2 +- results/did/did_cs_multi_time.csv | 96 ++++++++++++------------- scripts/did/did_cs_multi_config.yml | 2 +- 7 files changed, 195 insertions(+), 195 deletions(-) diff --git a/results/did/did_cs_multi_config.yml b/results/did/did_cs_multi_config.yml index 4c7a176..d469e0b 100644 --- a/results/did/did_cs_multi_config.yml +++ b/results/did/did_cs_multi_config.yml @@ -1,5 +1,5 @@ simulation_parameters: - repetitions: 10 + repetitions: 500 max_runtime: 19800 random_seed: 42 n_jobs: -2 diff --git a/results/did/did_cs_multi_detailed.csv b/results/did/did_cs_multi_detailed.csv index 3f0433a..795dc0d 100644 --- a/results/did/did_cs_multi_detailed.csv +++ b/results/did/did_cs_multi_detailed.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.7166666666666667,1.7733164955970522,0.6270667186867447,0.1,2.7544168540153207,10 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.7583333333333333,2.1130369338715296,0.6270667186867447,0.4,3.038799542554651,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.725,1.7477937797150804,0.5602041597791712,0.4,2.7439393147453264,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.8,2.082624742113759,0.5602041597791712,0.4,3.0000419656121324,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.975,1.7579955535330196,0.3275539375261427,1.0,2.7532017355074516,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9916666666666666,2.094780905394161,0.3275539375261427,1.0,3.0087112201608193,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.7583333333333334,1.7780211121083784,0.6436325943754605,0.2,2.7676021703976224,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.8166666666666667,2.118642830209164,0.6436325943754605,0.3,3.0428498324931845,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.75,1.7491245115931342,0.5669760934820833,0.4,2.744787484548024,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.8083333333333333,2.084210406948203,0.5669760934820833,0.5,2.9996532476236077,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.975,1.7622679725735675,0.31703729067888875,1.0,2.7695645411718286,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,1.0,2.099871806681139,0.31703729067888875,1.0,3.023386909461707,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9583333333333334,2.0514570471937414,0.3867718735083896,0.9,3.2264240958527117,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9833333333333332,2.4444618429559775,0.3867718735083896,0.9,3.533486903589104,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.875,2.5413509498564357,0.651176999835073,0.9,4.0086542706028725,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9333333333333333,3.0282064325850335,0.651176999835073,0.9,4.369730369470008,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9416666666666668,2.0022232678074596,0.3671452434766034,1.0,3.1349999971976166,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.3857961763952718,0.3671452434766034,1.0,3.444114186938691,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9666666666666666,2.019516185333502,0.42101406931524626,0.9,3.1622094213810152,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9833333333333334,2.406401958565374,0.42101406931524626,1.0,3.471392157203975,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8916666666666666,2.4980104461788457,0.609694859178484,0.8,3.921343216109116,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.925,2.976563037155776,0.609694859178484,0.9,4.269006211756919,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.975,1.9659141203642527,0.351790775740909,1.0,3.085297737408852,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9916666666666666,2.3425311586867137,0.351790775740909,1.0,3.3812992898189953,10 -Linear,Logistic,experimental,False,1,0.9,0.9083333333333334,0.4156398657486867,0.09746301198430109,0.8,0.6501871822927178,10 -Linear,Logistic,experimental,False,1,0.95,0.925,0.4952654473676904,0.09746301198430109,0.9,0.7165960378309301,10 -Linear,Logistic,experimental,False,4,0.9,0.7666666666666667,2.7945505297249533,0.8728211225298711,0.4,4.3851488481274625,10 -Linear,Logistic,experimental,False,4,0.95,0.825,3.329912340826076,0.8728211225298711,0.5,4.82104914193982,10 -Linear,Logistic,experimental,False,6,0.9,0.9833333333333334,2.9309619862698097,0.46633922352847107,1.0,4.582620115930847,10 -Linear,Logistic,experimental,False,6,0.95,0.9916666666666666,3.4924566168186395,0.46633922352847107,1.0,5.011624635677961,10 -Linear,Logistic,experimental,True,1,0.9,0.9,0.4156868198443614,0.09796066841008202,0.8,0.6452755653073956,10 -Linear,Logistic,experimental,True,1,0.95,0.9333333333333333,0.49532139662356406,0.09796066841008202,0.9,0.7082400730816387,10 -Linear,Logistic,experimental,True,4,0.9,0.775,2.791799780055066,0.8764997664245662,0.4,4.387553318413767,10 -Linear,Logistic,experimental,True,4,0.95,0.8333333333333334,3.326634620428878,0.8764997664245662,0.5,4.791925509710113,10 -Linear,Logistic,experimental,True,6,0.9,0.9833333333333334,2.9313252748018654,0.46603910456037,1.0,4.5903052096126045,10 -Linear,Logistic,experimental,True,6,0.95,0.9916666666666666,3.492889501804367,0.46603910456037,1.0,5.012949733861095,10 -Linear,Logistic,observational,False,1,0.9,0.925,0.44536680216015306,0.09814566635145752,1.0,0.6939388599613096,10 -Linear,Logistic,observational,False,1,0.95,0.975,0.5306872768742898,0.09814566635145752,1.0,0.7629369384791739,10 -Linear,Logistic,observational,False,4,0.9,0.8583333333333334,3.3081199749387666,0.8785057917466201,0.7,5.1432414716372525,10 -Linear,Logistic,observational,False,4,0.95,0.875,3.941868079431738,0.8785057917466201,0.7,5.667520286195628,10 -Linear,Logistic,observational,False,6,0.9,0.9833333333333334,2.9580643141495875,0.4768956065518607,1.0,4.62051840726898,10 -Linear,Logistic,observational,False,6,0.95,1.0,3.5247510323649096,0.4768956065518607,1.0,5.077422972978242,10 -Linear,Logistic,observational,True,1,0.9,0.9333333333333333,0.44497110431101594,0.09947076656191642,1.0,0.6925892772971488,10 -Linear,Logistic,observational,True,1,0.95,0.975,0.5302157738053473,0.09947076656191642,1.0,0.7572367265124303,10 -Linear,Logistic,observational,True,4,0.9,0.85,3.3020145589492635,0.8664130376055239,0.7,5.1521595093075225,10 -Linear,Logistic,observational,True,4,0.95,0.9,3.934593027564516,0.8664130376055239,0.8,5.638033846710763,10 -Linear,Logistic,observational,True,6,0.9,0.9833333333333334,2.955323680846967,0.4613858642305589,1.0,4.631940914902716,10 -Linear,Logistic,observational,True,6,0.95,1.0,3.5214853663628096,0.4613858642305589,1.0,5.077023905391667,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.7445,1.770325608867807,0.5949971587062639,0.398,2.7648307369564926,500 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.824,2.1094730725193043,0.5949971587062639,0.566,3.034916611141197,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.773,1.766478883435425,0.5692557054828591,0.472,2.773314379428287,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.8455,2.1048894164526817,0.5692557054828591,0.624,3.0389648164538805,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9618333333333333,1.7719758223340252,0.34491539054381054,0.978,2.780855944642299,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9855,2.111439423146251,0.34491539054381054,0.99,3.0466788998860315,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.7488333333333334,1.7704687014862623,0.5945326473164728,0.412,2.762232396348127,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.8228333333333334,2.1096435778907434,0.5945326473164728,0.548,3.029512649083705,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.7753333333333333,1.7663884619807455,0.5717727216970863,0.494,2.774302186004533,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.8461666666666666,2.1047816726439335,0.5717727216970863,0.628,3.040160202574957,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9606666666666667,1.7721766188302754,0.34137474439314713,0.986,2.777950990796601,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9866666666666666,2.111678686929012,0.34137474439314713,0.996,3.044521002012899,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9501666666666666,1.990648327452718,0.4052261056167495,0.976,3.1272474543428164,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.981,2.372003784265803,0.4052261056167495,0.992,3.425556561218648,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9326666666666666,2.6295041141393964,0.5680990688936988,0.942,4.109931474457153,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9701666666666666,3.1332474066187324,0.5680990688936988,0.982,4.507999042258337,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9541666666666666,2.021214888425688,0.4123935257729841,0.974,3.17183347081639,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9835,2.408426088145391,0.4123935257729841,0.99,3.4747764416681246,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9496666666666667,1.9511518959677854,0.4056426955645088,0.98,3.067238579715148,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9818333333333333,2.324940883373038,0.4056426955645088,0.994,3.3568971294243126,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9341666666666666,2.585977302930749,0.5562229964093515,0.954,4.045565581860224,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9745,3.0813820120736044,0.5562229964093515,0.97,4.434188862890503,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9543333333333334,1.9905001066838395,0.40929563062222535,0.988,3.125148883705166,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9835,2.371827168326243,0.40929563062222535,0.994,3.420794663008727,500 +Linear,Logistic,experimental,False,1,0.9,0.9168333333333334,0.41673836812489545,0.09490120305554799,0.92,0.6499646304710539,500 +Linear,Logistic,experimental,False,1,0.95,0.9591666666666666,0.4965743936830481,0.09490120305554799,0.958,0.7135508775059938,500 +Linear,Logistic,experimental,False,4,0.9,0.7525,2.805808333249603,0.9424974705539232,0.342,4.392358230173571,500 +Linear,Logistic,experimental,False,4,0.95,0.8215,3.343326841114613,0.9424974705539232,0.49,4.81356703917665,500 +Linear,Logistic,experimental,False,6,0.9,0.9681666666666666,2.927962952235543,0.5448624818472574,0.992,4.5809829929878605,500 +Linear,Logistic,experimental,False,6,0.95,0.989,3.488883047353698,0.5448624818472574,0.996,5.023039124726024,500 +Linear,Logistic,experimental,True,1,0.9,0.9198333333333334,0.4167745201915361,0.09489757179213576,0.92,0.6493074421900091,500 +Linear,Logistic,experimental,True,1,0.95,0.959,0.49661747152743585,0.09489757179213576,0.952,0.7129847857545065,500 +Linear,Logistic,experimental,True,4,0.9,0.7515,2.806389863604486,0.9438172172038332,0.336,4.394024798505712,500 +Linear,Logistic,experimental,True,4,0.95,0.8215,3.344019777271856,0.9438172172038332,0.496,4.818369602897961,500 +Linear,Logistic,experimental,True,6,0.9,0.9675,2.927774549870841,0.545976377808569,0.99,4.5788635431480404,500 +Linear,Logistic,experimental,True,6,0.95,0.9896666666666666,3.4886585520895808,0.545976377808569,0.998,5.023223313601676,500 +Linear,Logistic,observational,False,1,0.9,0.9445,0.4474147057259759,0.09208439317406426,0.968,0.6963338800760291,500 +Linear,Logistic,observational,False,1,0.95,0.978,0.5331275044830301,0.09208439317406426,0.986,0.7642780321317574,500 +Linear,Logistic,observational,False,4,0.9,0.8395,3.393272580905659,0.9671859927018581,0.682,5.280031123475279,500 +Linear,Logistic,observational,False,4,0.95,0.9018333333333334,4.043333667706703,0.9671859927018581,0.804,5.803033620961812,500 +Linear,Logistic,observational,False,6,0.9,0.9661666666666666,2.9968869470930812,0.5607913346640213,0.992,4.688634179932907,500 +Linear,Logistic,observational,False,6,0.95,0.9886666666666666,3.571011052774927,0.5607913346640213,1.0,5.1435718965101325,500 +Linear,Logistic,observational,True,1,0.9,0.9446666666666667,0.44607501860443266,0.09181865803868633,0.972,0.694040589591067,500 +Linear,Logistic,observational,True,1,0.95,0.9766666666666667,0.5315311688178055,0.09181865803868633,0.982,0.7624234124861663,500 +Linear,Logistic,observational,True,4,0.9,0.8425,3.3996101092641116,0.9626068949383512,0.708,5.289944291369528,500 +Linear,Logistic,observational,True,4,0.95,0.9095,4.050885298520558,0.9626068949383512,0.81,5.812309801411936,500 +Linear,Logistic,observational,True,6,0.9,0.9653333333333334,2.9934246048394693,0.5632386309587609,0.99,4.67988904592181,500 +Linear,Logistic,observational,True,6,0.95,0.9878333333333333,3.5668854175159357,0.5632386309587609,1.0,5.131467888102042,500 diff --git a/results/did/did_cs_multi_eventstudy.csv b/results/did/did_cs_multi_eventstudy.csv index 73abd9f..1b97a50 100644 --- a/results/did/did_cs_multi_eventstudy.csv +++ b/results/did/did_cs_multi_eventstudy.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.5333333333333333,1.2118081028607763,0.6527586968414182,0.2,1.728131579919128,10 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.6333333333333333,1.4439584160341843,0.6527586968414182,0.2,1.9312706731058538,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.7,1.2323629409010297,0.5063530824637252,0.6,1.778098068172597,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.8166666666666667,1.4684510162308455,0.5063530824637252,0.6,1.9547252521289227,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9666666666666666,1.248668302458874,0.24741350275129476,1.0,1.7883111690378903,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9833333333333334,1.487880052884708,0.24741350275129476,1.0,1.9970794024951946,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.5666666666666667,1.2171086357502747,0.6426336079229042,0.1,1.740139701298481,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.65,1.4502743905331072,0.6426336079229042,0.2,1.9427553991318138,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.7,1.2357483360455728,0.5360345080552671,0.5,1.7606640787246317,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.7833333333333333,1.4724849633541763,0.5360345080552671,0.7,1.9840638856314903,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,1.0,1.2503252655695003,0.23723155850810848,1.0,1.811133139153878,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,1.0,1.4898544462090293,0.23723155850810848,1.0,1.980811336670809,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9333333333333333,1.4927206316239496,0.29242135114130446,0.9,2.1465454811020552,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.95,1.7786863396381338,0.29242135114130446,0.9,2.388986162797091,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8666666666666666,1.8495198029207178,0.4071724106193555,0.9,2.6571446657458786,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9166666666666666,2.2038387750870507,0.4071724106193555,1.0,2.9674675387897276,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.95,1.4226225943496058,0.2872255509227587,1.0,2.0510492109966125,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,1.695159376391383,0.2872255509227587,1.0,2.2719501169128278,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9166666666666666,1.4257420397326435,0.2523995676770823,1.0,2.0551075393335703,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9333333333333333,1.6988764248279815,0.2523995676770823,1.0,2.2589447917260204,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8666666666666666,1.78601977107235,0.41479101552511877,0.8,2.5623229828900618,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9166666666666666,2.128173820223794,0.41479101552511877,0.9,2.8508159336146264,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9833333333333334,1.3940304674002326,0.2924074699045633,1.0,2.011389854394899,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9833333333333334,1.6610897557613513,0.2924074699045633,1.0,2.213296255205619,10 -Linear,Logistic,experimental,False,1,0.9,0.9,0.2957667930475026,0.0669353773530522,0.9,0.4230633401734896,10 -Linear,Logistic,experimental,False,1,0.95,0.9666666666666666,0.35242787120845687,0.0669353773530522,1.0,0.4713116917343928,10 -Linear,Logistic,experimental,False,4,0.9,0.7,1.9573574011285004,0.8737941663726427,0.6,2.8152408968634623,10 -Linear,Logistic,experimental,False,4,0.95,0.8,2.3323351988437837,0.8737941663726427,0.7,3.106747513953587,10 -Linear,Logistic,experimental,False,6,0.9,0.9833333333333334,2.0622260563412405,0.33551856092820487,1.0,2.956298751203799,10 -Linear,Logistic,experimental,False,6,0.95,1.0,2.4572939088203416,0.33551856092820487,1.0,3.2806125759102,10 -Linear,Logistic,experimental,True,1,0.9,0.9,0.2957914296347921,0.06759680005161897,0.9,0.42050652007483597,10 -Linear,Logistic,experimental,True,1,0.95,0.95,0.35245722751287106,0.06759680005161897,1.0,0.46822297556660686,10 -Linear,Logistic,experimental,True,4,0.9,0.7333333333333333,1.9548438526345548,0.8789192169597108,0.6,2.793935500109471,10 -Linear,Logistic,experimental,True,4,0.95,0.8166666666666667,2.3293401210807496,0.8789192169597108,0.7,3.1321875701797732,10 -Linear,Logistic,experimental,True,6,0.9,0.9833333333333334,2.0617725457893483,0.33510567391663476,1.0,2.959831730574458,10 -Linear,Logistic,experimental,True,6,0.95,1.0,2.45675351766714,0.33510567391663476,1.0,3.253803917305509,10 -Linear,Logistic,observational,False,1,0.9,0.9666666666666666,0.31667457504423363,0.0632421060086151,1.0,0.44859128947123195,10 -Linear,Logistic,observational,False,1,0.95,1.0,0.3773410300687722,0.0632421060086151,1.0,0.5014140609202705,10 -Linear,Logistic,observational,False,4,0.9,0.8,2.3532865671941043,0.8651602927402255,0.6,3.3621155890131895,10 -Linear,Logistic,observational,False,4,0.95,0.8333333333333334,2.8041138989070786,0.8651602927402255,0.8,3.7526284223901465,10 -Linear,Logistic,observational,False,6,0.9,1.0,2.0784374868679083,0.35674241047148286,1.0,2.978782632645013,10 -Linear,Logistic,observational,False,6,0.95,1.0,2.4766110197471245,0.35674241047148286,1.0,3.2814370904270005,10 -Linear,Logistic,observational,True,1,0.9,0.95,0.3161044356872176,0.0632769797420591,1.0,0.45059245410014326,10 -Linear,Logistic,observational,True,1,0.95,1.0,0.3766616671226654,0.0632769797420591,1.0,0.501620813344146,10 -Linear,Logistic,observational,True,4,0.9,0.8,2.342759052735463,0.8656773769926215,0.6,3.360929376742386,10 -Linear,Logistic,observational,True,4,0.95,0.8333333333333334,2.7915695917130683,0.8656773769926215,0.8,3.725069174297289,10 -Linear,Logistic,observational,True,6,0.9,1.0,2.0791212430728634,0.3594599150127789,1.0,2.9918064863469214,10 -Linear,Logistic,observational,True,6,0.95,1.0,2.477425765517787,0.3594599150127789,1.0,3.3072592627340027,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.623,1.2344028525035762,0.5867917352577009,0.35,1.7693962242178276,500 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.7186666666666667,1.4708817208279752,0.5867917352577009,0.502,1.9609823371949875,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.6716666666666666,1.2457079936515478,0.5587834594489091,0.456,1.787988168603755,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.7693333333333334,1.4843526273737648,0.5587834594489091,0.596,1.9848441118866604,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9553333333333334,1.2548116303893624,0.25441640771793017,0.968,1.799914731144992,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9806666666666666,1.4952002796159412,0.25441640771793017,0.988,1.9964128112202024,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.6173333333333334,1.2342398029059287,0.5878297827043432,0.328,1.7676223235760382,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.7153333333333334,1.4706874352490966,0.5878297827043432,0.482,1.962154166560331,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.665,1.2456282746415375,0.5567609889479388,0.482,1.7890029538815984,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.768,1.4842576363144127,0.5567609889479388,0.61,1.9841482801792536,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9473333333333334,1.2549629324084535,0.2529649046165915,0.978,1.8004004709049248,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9836666666666666,1.4953805670915852,0.2529649046165915,0.992,1.9964711805317528,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.95,1.438086091604987,0.2928300824932225,0.974,2.0655092074851575,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9806666666666666,1.7135852698562943,0.2928300824932225,0.988,2.29250119775212,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9133333333333333,1.8958082010478872,0.43665208441716385,0.934,2.7174153287309672,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9593333333333334,2.258994803407606,0.43665208441716385,0.974,3.018313563700997,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9463333333333334,1.429508949123356,0.296161119189052,0.954,2.054951833185491,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9753333333333334,1.7033649742148993,0.296161119189052,0.986,2.280416092396764,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.95,1.401299278120269,0.2939067762871093,0.976,2.013012735107051,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.985,1.6697510779533535,0.2939067762871093,0.99,2.235222163171953,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.919,1.862906524183341,0.42400027998341316,0.93,2.6738713551739077,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9666666666666667,2.2197900373245583,0.42400027998341316,0.96,2.9647553494845016,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9476666666666667,1.4093623247425004,0.2961286220265989,0.968,2.0231777330879597,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9766666666666667,1.679358790594952,0.2961286220265989,0.99,2.2460491085047685,500 +Linear,Logistic,experimental,False,1,0.9,0.8936666666666666,0.29668129511983965,0.07431255501976836,0.9,0.4234475244785486,500 +Linear,Logistic,experimental,False,1,0.95,0.9456666666666667,0.353517567638704,0.07431255501976836,0.944,0.4706234364546205,500 +Linear,Logistic,experimental,False,4,0.9,0.6223333333333334,1.9676971347315257,0.9611549277615734,0.358,2.821851876593927,500 +Linear,Logistic,experimental,False,4,0.95,0.7223333333333334,2.3446557513474295,0.9611549277615734,0.514,3.1296803439927747,500 +Linear,Logistic,experimental,False,6,0.9,0.9593333333333334,2.0617828042693422,0.4014842496440879,0.976,2.9502179783272156,500 +Linear,Logistic,experimental,False,6,0.95,0.9836666666666666,2.4567657413999964,0.4014842496440879,0.994,3.281559353958586,500 +Linear,Logistic,experimental,True,1,0.9,0.8956666666666666,0.29669741633654045,0.07427451790842504,0.904,0.42300310272980823,500 +Linear,Logistic,experimental,True,1,0.95,0.9466666666666667,0.3535367772532271,0.07427451790842504,0.944,0.4703234973074518,500 +Linear,Logistic,experimental,True,4,0.9,0.6253333333333334,1.968237754015678,0.9612257304593996,0.378,2.8228298488222006,500 +Linear,Logistic,experimental,True,4,0.95,0.7253333333333334,2.34529993895715,0.9612257304593996,0.504,3.131512414726046,500 +Linear,Logistic,experimental,True,6,0.9,0.9626666666666667,2.061499649901614,0.40221977991502417,0.978,2.956723898358197,500 +Linear,Logistic,experimental,True,6,0.95,0.986,2.456428342160502,0.40221977991502417,0.994,3.27621932440078,500 +Linear,Logistic,observational,False,1,0.9,0.9463333333333334,0.3176061939182343,0.06584511870516535,0.976,0.4526647021991571,500 +Linear,Logistic,observational,False,1,0.95,0.9766666666666667,0.37845112242619566,0.06584511870516535,0.992,0.503374033380795,500 +Linear,Logistic,observational,False,4,0.9,0.7153333333333334,2.4038988361616647,0.9742433088378242,0.612,3.4426054640030586,500 +Linear,Logistic,observational,False,4,0.95,0.818,2.8644221371155596,0.9742433088378242,0.742,3.818906934969005,500 +Linear,Logistic,observational,False,6,0.9,0.9583333333333334,2.1093483697182047,0.41187232611430147,0.984,3.023378654122078,500 +Linear,Logistic,observational,False,6,0.95,0.9846666666666666,2.5134436084493803,0.41187232611430147,0.994,3.352228561843766,500 +Linear,Logistic,observational,True,1,0.9,0.9443333333333334,0.3168146024540254,0.06585930633635377,0.974,0.4518084310690513,500 +Linear,Logistic,observational,True,1,0.95,0.9743333333333334,0.37750788301881183,0.06585930633635377,0.994,0.5023115027058873,500 +Linear,Logistic,observational,True,4,0.9,0.7176666666666667,2.41160294711594,0.9692477115042165,0.61,3.4556749332846293,500 +Linear,Logistic,observational,True,4,0.95,0.824,2.873602151528918,0.9692477115042165,0.77,3.831797951807144,500 +Linear,Logistic,observational,True,6,0.9,0.9586666666666667,2.1086877347027313,0.41243280545073824,0.984,3.0221755013295026,500 +Linear,Logistic,observational,True,6,0.95,0.9853333333333334,2.5126564132752702,0.41243280545073824,0.998,3.35521140900093,500 diff --git a/results/did/did_cs_multi_group.csv b/results/did/did_cs_multi_group.csv index 97fa67e..795a81c 100644 --- a/results/did/did_cs_multi_group.csv +++ b/results/did/did_cs_multi_group.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.6333333333333333,1.9309509683731683,0.6483300186621959,0.1,2.491422645918621,10 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.6666666666666666,2.3008699934828956,0.6483300186621959,0.2,2.810431947442311,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.6666666666666666,1.9156769483926879,0.6627788424460046,0.4,2.451980036225718,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.7333333333333333,2.2826698761166044,0.6627788424460046,0.5,2.7684090219664688,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9666666666666666,1.9291222599599713,0.3503868380252425,1.0,2.4729109586674007,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9666666666666666,2.298690953008191,0.3503868380252425,1.0,2.818778587864818,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.6333333333333333,1.9387144217977053,0.701094335052589,0.2,2.4861389631011366,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.6666666666666666,2.3101207188109285,0.701094335052589,0.2,2.807086164878547,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.7,1.9210402192004783,0.6609373667534038,0.3,2.4700808527932314,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.7333333333333333,2.289060607456077,0.6609373667534038,0.5,2.7942572911061268,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,1.0,1.9365610813627654,0.3595071736631225,1.0,2.4932401125156365,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,1.0,2.307554855423583,0.3595071736631225,1.0,2.8225564370429765,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,1.0,2.1427757489571753,0.34252631763527386,1.0,2.734711568981914,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,1.0,2.5532747875478945,0.34252631763527386,1.0,3.109090645053052,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8,2.684775648184016,0.6968118835312389,0.8,3.4429041928377573,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.8666666666666666,3.1991075015978283,0.6968118835312389,1.0,3.906658818552317,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9666666666666666,2.1761503004995557,0.3893794928198543,1.0,2.78034686925069,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.5930430185633653,0.3893794928198543,1.0,3.171246897657084,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9666666666666666,2.148540695051566,0.4092369695588465,1.0,2.769098791755392,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,1.0,2.560144144512358,0.4092369695588465,1.0,3.131852684845696,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8666666666666666,2.662060416631827,0.6779811390621286,0.8,3.394628718972476,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.8666666666666666,3.172040633754218,0.6779811390621286,0.8,3.8598644765440704,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,1.0,2.152420786658703,0.36200807488801817,1.0,2.7622158993745622,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,1.0,2.564767558828438,0.36200807488801817,1.0,3.12440670549566,10 -Linear,Logistic,experimental,False,1,0.9,0.8666666666666666,0.37225268468616596,0.09264267695185414,0.8,0.47561717135066156,10 -Linear,Logistic,experimental,False,1,0.95,0.9,0.4435664324037482,0.09264267695185414,0.9,0.5367529935868299,10 -Linear,Logistic,experimental,False,4,0.9,0.7,3.129892914086136,0.9222941217750776,0.3,4.014417918285646,10 -Linear,Logistic,experimental,False,4,0.95,0.7666666666666666,3.7294974376810783,0.9222941217750776,0.5,4.513690687908797,10 -Linear,Logistic,experimental,False,6,0.9,0.9666666666666666,3.267534767507437,0.4080002005390327,1.0,4.218734094532647,10 -Linear,Logistic,experimental,False,6,0.95,1.0,3.893507821979578,0.4080002005390327,1.0,4.744925331873259,10 -Linear,Logistic,experimental,True,1,0.9,0.8666666666666666,0.37227304564673025,0.09254571713304208,0.9,0.4783021827849622,10 -Linear,Logistic,experimental,True,1,0.95,0.9,0.44359069398468326,0.09254571713304208,0.9,0.5402748060670912,10 -Linear,Logistic,experimental,True,4,0.9,0.7,3.1237063671599112,0.934055357567015,0.3,4.021154701918838,10 -Linear,Logistic,experimental,True,4,0.95,0.7666666666666666,3.722125712340058,0.934055357567015,0.3,4.528263874429806,10 -Linear,Logistic,experimental,True,6,0.9,0.9666666666666666,3.270807004620754,0.40375137532349203,1.0,4.1739065630515695,10 -Linear,Logistic,experimental,True,6,0.95,1.0,3.897406932992186,0.40375137532349203,1.0,4.739696061400023,10 -Linear,Logistic,observational,False,1,0.9,0.8666666666666666,0.3964295816602681,0.09570875829615264,0.9,0.5078084954818215,10 -Linear,Logistic,observational,False,1,0.95,0.9333333333333333,0.4723749820222326,0.09570875829615264,0.9,0.5726459093348256,10 -Linear,Logistic,observational,False,4,0.9,0.7666666666666666,3.594064879810521,0.9795328716427715,0.6,4.608367990202868,10 -Linear,Logistic,observational,False,4,0.95,0.8666666666666666,4.2825924490220455,0.9795328716427715,0.8,5.235615285031181,10 -Linear,Logistic,observational,False,6,0.9,0.9666666666666666,3.3043836640455573,0.4290255103074177,1.0,4.250218343417005,10 -Linear,Logistic,observational,False,6,0.95,1.0,3.937415990403423,0.4290255103074177,1.0,4.80936081855212,10 -Linear,Logistic,observational,True,1,0.9,0.8666666666666666,0.39565734499813565,0.09594998341152775,0.9,0.508091918960568,10 -Linear,Logistic,observational,True,1,0.95,0.9666666666666666,0.47145480528399847,0.09594998341152775,0.9,0.5757580649577653,10 -Linear,Logistic,observational,True,4,0.9,0.7666666666666666,3.599015036071073,0.9861438576746245,0.6,4.63541224004802,10 -Linear,Logistic,observational,True,4,0.95,0.8666666666666666,4.288490924016753,0.9861438576746245,0.8,5.218369950853805,10 -Linear,Logistic,observational,True,6,0.9,0.9666666666666666,3.300157826926225,0.42120481152158307,1.0,4.221829642364661,10 -Linear,Logistic,observational,True,6,0.95,1.0,3.932380594899098,0.42120481152158307,1.0,4.794659320752098,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.648,1.958130612753029,0.6931432900546463,0.336,2.5122538474084704,500 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.7266666666666667,2.333256537321367,0.6931432900546463,0.46,2.837637387247171,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.684,1.9405327407159012,0.656846624632093,0.378,2.4916795872647755,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.7486666666666666,2.312287379438766,0.656846624632093,0.494,2.8099028821210648,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.958,1.9418353648783815,0.37543970576234414,0.968,2.4937112856330335,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9826666666666666,2.313839551864336,0.37543970576234414,0.994,2.817681872392808,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.65,1.9571814998792045,0.6889770027800006,0.336,2.509453326822512,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.7273333333333333,2.3321255995774375,0.6889770027800006,0.426,2.83457592815282,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.6873333333333332,1.9400950244352047,0.6604767279846773,0.382,2.4928028949564713,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.75,2.311765808320488,0.6604767279846773,0.502,2.8123234932785457,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.96,1.9424489320197122,0.3773552808347474,0.972,2.493917731063607,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.984,2.3145706622071662,0.3773552808347474,0.996,2.8163239892073255,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9426666666666667,2.1455761943315403,0.4381141091824277,0.95,2.7514817504646536,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.976,2.5566117240293487,0.4381141091824277,0.984,3.1105932950425177,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.92,2.770826181354666,0.6218240106432057,0.92,3.557591638284541,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9606666666666667,3.3016430361289624,0.6218240106432057,0.962,4.018077865773314,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9513333333333334,2.206974710708492,0.44767634643371434,0.974,2.8329429832963875,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.982,2.6297725687581597,0.44767634643371434,0.988,3.2016185335069935,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.936,2.1203778078700832,0.44909450499809317,0.952,2.720027329156187,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9746666666666667,2.526585994612616,0.44909450499809317,0.978,3.0751075279585267,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9226666666666666,2.7276343103261955,0.601075346222161,0.93,3.5001905789415355,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.966,3.2501767474248435,0.601075346222161,0.96,3.948744210132073,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9493333333333334,2.173939421934124,0.4498220130180585,0.966,2.7918554238706332,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9826666666666666,2.590408594264792,0.4498220130180585,0.992,3.151112383580006,500 +Linear,Logistic,experimental,False,1,0.9,0.9013333333333333,0.37265738853214053,0.08859319616682844,0.904,0.47839941611486514,500 +Linear,Logistic,experimental,False,1,0.95,0.9526666666666667,0.44404866677981547,0.08859319616682844,0.956,0.5406676902427345,500 +Linear,Logistic,experimental,False,4,0.9,0.6673333333333332,3.1336232691639196,1.0895923128095015,0.316,4.02233178605052,500 +Linear,Logistic,experimental,False,4,0.95,0.728,3.7339424299175934,1.0895923128095015,0.394,4.5438248369278265,500 +Linear,Logistic,experimental,False,6,0.9,0.958,3.2599730175255166,0.5961529828509201,0.97,4.184613732542172,500 +Linear,Logistic,experimental,False,6,0.95,0.982,3.8844974411275577,0.5961529828509201,0.99,4.720414550175649,500 +Linear,Logistic,experimental,True,1,0.9,0.9046666666666666,0.3726964218885218,0.08870041349802113,0.9,0.4783660681766364,500 +Linear,Logistic,experimental,True,1,0.95,0.9526666666666667,0.44409517789268865,0.08870041349802113,0.954,0.5410617011776719,500 +Linear,Logistic,experimental,True,4,0.9,0.67,3.134323095972308,1.0902383455706834,0.32,4.0225478373755905,500 +Linear,Logistic,experimental,True,4,0.95,0.7333333333333333,3.734776324993351,1.0902383455706834,0.39,4.5485148620710625,500 +Linear,Logistic,experimental,True,6,0.9,0.9546666666666667,3.259435631958217,0.5970778315125913,0.968,4.184156255097815,500 +Linear,Logistic,experimental,True,6,0.95,0.9813333333333334,3.883857106729127,0.5970778315125913,0.994,4.7239829009315395,500 +Linear,Logistic,observational,False,1,0.9,0.9446666666666667,0.39837191256296084,0.08144967759883086,0.964,0.5123795593054733,500 +Linear,Logistic,observational,False,1,0.95,0.9806666666666666,0.47468941204382226,0.08144967759883086,0.982,0.5784243257010652,500 +Linear,Logistic,observational,False,4,0.9,0.754,3.6857060219439988,1.1215026888858457,0.56,4.722848754761831,500 +Linear,Logistic,observational,False,4,0.95,0.8213333333333334,4.391789605012528,1.1215026888858457,0.692,5.344408749712175,500 +Linear,Logistic,observational,False,6,0.9,0.9606666666666667,3.336166902774549,0.6136791390581188,0.972,4.281255977087202,500 +Linear,Logistic,observational,False,6,0.95,0.9833333333333334,3.9752880552486802,0.6136791390581188,0.988,4.8345238298141755,500 +Linear,Logistic,observational,True,1,0.9,0.946,0.39727633051259076,0.08107017958546997,0.96,0.5105019305400308,500 +Linear,Logistic,observational,True,1,0.95,0.9773333333333334,0.47338394551132973,0.08107017958546997,0.982,0.5760144793290006,500 +Linear,Logistic,observational,True,4,0.9,0.746,3.6837636034756183,1.1142685809512556,0.588,4.723009055885042,500 +Linear,Logistic,observational,True,4,0.95,0.83,4.389475070649987,1.1142685809512556,0.704,5.332966188093874,500 +Linear,Logistic,observational,True,6,0.9,0.9573333333333334,3.3344393970984694,0.6206253517833774,0.97,4.276874358539161,500 +Linear,Logistic,observational,True,6,0.95,0.9826666666666666,3.9732296052731164,0.6206253517833774,0.992,4.832204250841039,500 diff --git a/results/did/did_cs_multi_metadata.csv b/results/did/did_cs_multi_metadata.csv index 8cea1ac..3434afe 100644 --- a/results/did/did_cs_multi_metadata.csv +++ b/results/did/did_cs_multi_metadata.csv @@ -1,2 +1,2 @@ DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.11.dev0,DIDCSMultiCoverageSimulation,2025-06-12 09:40,15.342682393391927,3.12.3,scripts/did/did_cs_multi_config.yml +0.11.dev0,DIDCSMultiCoverageSimulation,2025-06-13 08:24,86.96345181862513,3.12.9,scripts/did/did_cs_multi_config.yml diff --git a/results/did/did_cs_multi_time.csv b/results/did/did_cs_multi_time.csv index 15f5c80..393f4eb 100644 --- a/results/did/did_cs_multi_time.csv +++ b/results/did/did_cs_multi_time.csv @@ -1,49 +1,49 @@ Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.6666666666666666,1.6730429651845136,0.7129711715861597,0.5,2.154357179640957,10 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.7666666666666666,1.9935536528117397,0.7129711715861597,0.6,2.4352665358854915,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.7666666666666666,1.6266865630544778,0.6034125155349818,0.7,2.1042189940178555,10 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.8,1.9383165927238353,0.6034125155349818,0.7,2.3607450903418568,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9666666666666666,1.6692444384867968,0.35326392896761105,1.0,2.1440535782291144,10 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,1.0,1.9890274290798218,0.35326392896761105,1.0,2.4335083487785565,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.6333333333333333,1.680116491392786,0.7313217704895066,0.6,2.157777817635138,10 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.7666666666666666,2.001982279155598,0.7313217704895066,0.7,2.4163033134197542,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.7333333333333333,1.6263263154732126,0.6470375620975342,0.6,2.097887938138064,10 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.7666666666666666,1.937887331254469,0.6470375620975342,0.7,2.363716510660942,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,1.0,1.6704292673907701,0.33095192292586173,1.0,2.149355924981329,10 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,1.0,1.9904392397975534,0.33095192292586173,1.0,2.4300781471985067,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,1.0,1.9471025742726333,0.2752809831111125,1.0,2.495687275142294,10 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,1.0,2.3201158189695725,0.2752809831111125,1.0,2.8314604040533875,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.8,2.7469239128126572,0.6934385874721818,0.7,3.56020238828472,10 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9,3.273161726471052,0.6934385874721818,0.8,3.9562825980754317,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9666666666666666,1.9101451451166536,0.3898858282512358,1.0,2.4402136317968104,10 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,1.0,2.2760783259549755,0.3898858282512358,1.0,2.7599554154818278,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,1.0,1.9946990011610375,0.2972891272146645,1.0,2.576059829846608,10 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,1.0,2.376830459692323,0.2972891272146645,1.0,2.890537739276091,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9,2.6448366943262287,0.6604899131313036,0.7,3.4100495261886126,10 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9,3.151517302774757,0.6604899131313036,0.8,3.8285696552022266,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,1.0,1.8750849213428136,0.3250239543646754,1.0,2.419688730161217,10 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,1.0,2.2343014925877416,0.3250239543646754,1.0,2.727044610795285,10 -Linear,Logistic,experimental,False,1,0.9,0.8666666666666666,0.34405308040662097,0.08486038137830379,0.9,0.44241071429198575,10 -Linear,Logistic,experimental,False,1,0.95,0.9333333333333332,0.40996453138315336,0.08486038137830379,0.9,0.49772826797057645,10 -Linear,Logistic,experimental,False,4,0.9,0.8,2.62221639267215,1.0319524300060936,0.7,3.37477546286105,10 -Linear,Logistic,experimental,False,4,0.95,0.8,3.12456355088159,1.0319524300060936,0.8,3.8035224949177717,10 -Linear,Logistic,experimental,False,6,0.9,1.0,2.8224738648380443,0.40642891062611336,1.0,3.643187636464835,10 -Linear,Logistic,experimental,False,6,0.95,1.0,3.363185046830521,0.40642891062611336,1.0,4.074296317545963,10 -Linear,Logistic,experimental,True,1,0.9,0.8666666666666666,0.344266758097833,0.08466342400922112,0.8,0.4415196701533537,10 -Linear,Logistic,experimental,True,1,0.95,0.9333333333333332,0.41021914405641074,0.08466342400922112,0.9,0.4959071849562376,10 -Linear,Logistic,experimental,True,4,0.9,0.8,2.6179228534472916,1.0329454013487624,0.7,3.375378603418805,10 -Linear,Logistic,experimental,True,4,0.95,0.8666666666666666,3.1194474833427845,1.0329454013487624,0.8,3.7901128809732443,10 -Linear,Logistic,experimental,True,6,0.9,1.0,2.8184726726840754,0.42444389584039993,1.0,3.6208269685777497,10 -Linear,Logistic,experimental,True,6,0.95,1.0,3.358417332312642,0.42444389584039993,1.0,4.053263040299958,10 -Linear,Logistic,observational,False,1,0.9,0.9,0.38182309225508815,0.08120182154855413,1.0,0.4900629940393245,10 -Linear,Logistic,observational,False,1,0.95,1.0,0.4549702763963725,0.08120182154855413,1.0,0.5553948760018297,10 -Linear,Logistic,observational,False,4,0.9,0.8666666666666666,3.4268742050185272,1.0192108008598095,0.8,4.409914903812083,10 -Linear,Logistic,observational,False,4,0.95,0.9,4.0833724723785405,1.0192108008598095,0.8,4.948184144134663,10 -Linear,Logistic,observational,False,6,0.9,1.0,2.8569331292111215,0.42094365729095473,1.0,3.6601293333180522,10 -Linear,Logistic,observational,False,6,0.95,1.0,3.404245792904413,0.42094365729095473,1.0,4.135238538607403,10 -Linear,Logistic,observational,True,1,0.9,0.9,0.38169707034335987,0.08346983103094809,1.0,0.4869997198195679,10 -Linear,Logistic,observational,True,1,0.95,1.0,0.45482011202660544,0.08346983103094809,1.0,0.5522406174024808,10 -Linear,Logistic,observational,True,4,0.9,0.8666666666666666,3.4140826739670573,1.0020449419970494,0.8,4.360425984215706,10 -Linear,Logistic,observational,True,4,0.95,0.9,4.06813042302095,1.0020449419970494,0.8,4.961646251136529,10 -Linear,Logistic,observational,True,6,0.9,1.0,2.8409776360267562,0.4020645963900513,1.0,3.6422120857970954,10 -Linear,Logistic,observational,True,6,0.95,1.0,3.385233650131023,0.4020645963900513,1.0,4.10943577112757,10 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.6846666666666666,1.6852637187978814,0.6568561745562633,0.644,2.166373850978708,500 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.8013333333333333,2.0081155789027143,0.6568561745562633,0.794,2.4432403323739083,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.6946666666666667,1.6572625832981909,0.6444035333046219,0.63,2.1287742018575164,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.8106666666666666,1.97475016801972,0.6444035333046219,0.776,2.4050156056560694,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9606666666666667,1.678145359731322,0.32086557637982427,0.98,2.1561372793012143,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.984,1.9996335309132296,0.32086557637982427,0.992,2.4339888129396257,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.694,1.6853618715300172,0.6617200953838079,0.63,2.164988518441371,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.8013333333333333,2.0082325350967603,0.6617200953838079,0.772,2.4431988690684,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.6793333333333333,1.6570297419818631,0.639660290746131,0.65,2.130950656548393,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.806,1.9744727204787125,0.639660290746131,0.782,2.4054991633398193,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9626666666666667,1.677818276995257,0.31433596219616716,0.988,2.155945941033667,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9906666666666666,1.9992437877943599,0.31433596219616716,1.0,2.4347112974605247,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.952,1.9285517129609813,0.3837221142569943,0.956,2.4751286634818546,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.98,2.298011104326713,0.3837221142569943,0.984,2.7955267219007296,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9206666666666666,2.774724635621781,0.6047701373727594,0.914,3.562841935465964,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.958,3.3062883309039646,0.6047701373727594,0.954,4.026554617243503,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.964,1.9254223403023532,0.37567005141848064,0.97,2.470542968789135,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9873333333333334,2.2942822268116463,0.37567005141848064,0.992,2.7963395465549707,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9586666666666667,1.8968224696755345,0.3916482505280383,0.976,2.4349507643906807,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9846666666666666,2.2602033790208185,0.3916482505280383,0.992,2.753431400136418,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.932,2.7393908833255214,0.5858862962139311,0.94,3.5199757412546693,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9673333333333334,3.2641855681993706,0.5858862962139311,0.966,3.9741224058073636,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9526666666666667,1.8895154847816398,0.3782825026634886,0.976,2.427868448446374,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.984,2.251496569495065,0.3782825026634886,1.0,2.741675687739425,500 +Linear,Logistic,experimental,False,1,0.9,0.8873333333333334,0.3449267364872548,0.08642860984541795,0.898,0.4421340023541829,500 +Linear,Logistic,experimental,False,1,0.95,0.946,0.411005556812322,0.08642860984541795,0.954,0.4995936732494318,500 +Linear,Logistic,experimental,False,4,0.9,0.6606666666666666,2.657325208820743,1.0944897316787332,0.578,3.4170145894791286,500 +Linear,Logistic,experimental,False,4,0.95,0.768,3.1663982856346244,1.0944897316787332,0.718,3.8571460284501917,500 +Linear,Logistic,experimental,False,6,0.9,0.9666666666666667,2.8130006694021406,0.5241010134911126,0.99,3.615745083978043,500 +Linear,Logistic,experimental,False,6,0.95,0.9886666666666666,3.351897038238965,0.5241010134911126,0.996,4.080907435373497,500 +Linear,Logistic,experimental,True,1,0.9,0.8866666666666666,0.34494936823919464,0.08627620913303025,0.892,0.44244261069510993,500 +Linear,Logistic,experimental,True,1,0.95,0.944,0.4110325242080722,0.08627620913303025,0.954,0.4997820751033549,500 +Linear,Logistic,experimental,True,4,0.9,0.662,2.658224241071875,1.0948743949781543,0.564,3.414305214743393,500 +Linear,Logistic,experimental,True,4,0.95,0.7673333333333334,3.167469548635955,1.0948743949781543,0.704,3.8565120655762,500 +Linear,Logistic,experimental,True,6,0.9,0.9653333333333334,2.8124774925935068,0.52557492082057,0.984,3.6161253198306906,500 +Linear,Logistic,experimental,True,6,0.95,0.9913333333333334,3.351273634620754,0.52557492082057,0.994,4.081566943051543,500 +Linear,Logistic,observational,False,1,0.9,0.948,0.3848384213393204,0.08045475266904066,0.972,0.49329329293532265,500 +Linear,Logistic,observational,False,1,0.95,0.9826666666666666,0.4585632626109482,0.08045475266904066,0.984,0.5578459151419344,500 +Linear,Logistic,observational,False,4,0.9,0.7826666666666666,3.561955924053432,1.1426462614848412,0.77,4.570526668350063,500 +Linear,Logistic,observational,False,4,0.95,0.8806666666666666,4.244332268399335,1.1426462614848412,0.858,5.1742268814347625,500 +Linear,Logistic,observational,False,6,0.9,0.9693333333333334,2.8849996002426015,0.542775483007719,0.988,3.7090559830760395,500 +Linear,Logistic,observational,False,6,0.95,0.9893333333333334,3.4376890558753503,0.542775483007719,0.998,4.185426374123738,500 +Linear,Logistic,observational,True,1,0.9,0.9486666666666667,0.38328722165443907,0.07985513409020634,0.976,0.49100462864725225,500 +Linear,Logistic,observational,True,1,0.95,0.9813333333333334,0.4567148941814533,0.07985513409020634,0.984,0.5552786616821493,500 +Linear,Logistic,observational,True,4,0.9,0.7926666666666666,3.574512574056902,1.132495088626377,0.788,4.589451201868081,500 +Linear,Logistic,observational,True,4,0.95,0.8913333333333334,4.25929443972572,1.132495088626377,0.872,5.1765558927503275,500 +Linear,Logistic,observational,True,6,0.9,0.9686666666666667,2.881358739293633,0.5417165951212739,0.984,3.6998331255899966,500 +Linear,Logistic,observational,True,6,0.95,0.9866666666666666,3.4333507024706638,0.5417165951212739,0.996,4.181041617405785,500 diff --git a/scripts/did/did_cs_multi_config.yml b/scripts/did/did_cs_multi_config.yml index 018557a..f1cdc06 100644 --- a/scripts/did/did_cs_multi_config.yml +++ b/scripts/did/did_cs_multi_config.yml @@ -1,7 +1,7 @@ # Simulation parameters for DID Multi Coverage simulation_parameters: - repetitions: 10 + repetitions: 500 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 From 605f2da24e86bfc9c1e6a6a230cb698db2c7a182 Mon Sep 17 00:00:00 2001 From: SvenKlaassen Date: Fri, 13 Jun 2025 09:05:43 +0200 Subject: [PATCH 141/142] update did pa multi naming for consitency --- doc/_website.yml | 2 +- doc/did/{did_multi.qmd => did_pa_multi.qmd} | 10 ++--- doc/index.qmd | 2 + results/did/did_multi_detailed.csv | 49 --------------------- results/did/did_multi_eventstudy.csv | 49 --------------------- results/did/did_multi_group.csv | 49 --------------------- results/did/did_multi_metadata.csv | 2 - results/did/did_multi_time.csv | 49 --------------------- results/did/did_pa_multi_config.yml | 2 +- results/did/did_pa_multi_detailed.csv | 49 +++++++++++++++++++++ results/did/did_pa_multi_eventstudy.csv | 49 +++++++++++++++++++++ results/did/did_pa_multi_group.csv | 49 +++++++++++++++++++++ results/did/did_pa_multi_metadata.csv | 2 + results/did/did_pa_multi_time.csv | 49 +++++++++++++++++++++ scripts/did/did_pa_multi.py | 2 +- scripts/did/did_pa_multi_config.yml | 2 +- 16 files changed, 209 insertions(+), 207 deletions(-) rename doc/did/{did_multi.qmd => did_pa_multi.qmd} (95%) delete mode 100644 results/did/did_multi_detailed.csv delete mode 100644 results/did/did_multi_eventstudy.csv delete mode 100644 results/did/did_multi_group.csv delete mode 100644 results/did/did_multi_metadata.csv delete mode 100644 results/did/did_multi_time.csv create mode 100644 results/did/did_pa_multi_detailed.csv create mode 100644 results/did/did_pa_multi_eventstudy.csv create mode 100644 results/did/did_pa_multi_group.csv create mode 100644 results/did/did_pa_multi_metadata.csv create mode 100644 results/did/did_pa_multi_time.csv diff --git a/doc/_website.yml b/doc/_website.yml index f262d9d..4bf06b8 100644 --- a/doc/_website.yml +++ b/doc/_website.yml @@ -27,7 +27,7 @@ website: - plm/pliv.qmd - text: "DID" menu: - - did/did_multi.qmd + - did/did_pa_multi.qmd - did/did_cs_multi.qmd - did/did_pa.qmd - did/did_cs.qmd diff --git a/doc/did/did_multi.qmd b/doc/did/did_pa_multi.qmd similarity index 95% rename from doc/did/did_multi.qmd rename to doc/did/did_pa_multi.qmd index 2751420..b004299 100644 --- a/doc/did/did_multi.qmd +++ b/doc/did/did_pa_multi.qmd @@ -36,7 +36,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values ```{python} #| echo: false -metadata_file = '../../results/did/did_multi_metadata.csv' +metadata_file = '../../results/did/did_pa_multi_metadata.csv' metadata_df = pd.read_csv(metadata_file) print(metadata_df.T.to_string(header=False)) ``` @@ -47,7 +47,7 @@ print(metadata_df.T.to_string(header=False)) #| echo: false # set up data -df = pd.read_csv("../../results/did/did_multi_detailed.csv", index_col=None) +df = pd.read_csv("../../results/did/did_pa_multi_detailed.csv", index_col=None) assert df["repetition"].nunique() == 1 n_rep = df["repetition"].unique()[0] @@ -122,7 +122,7 @@ The non-uniform results (coverage, ci length and bias) refer to averaged values #| echo: false # set up data -df_group = pd.read_csv("../../results/did/did_multi_group.csv", index_col=None) +df_group = pd.read_csv("../../results/did/did_pa_multi_group.csv", index_col=None) assert df_group["repetition"].nunique() == 1 n_rep_group = df_group["repetition"].unique()[0] @@ -190,7 +190,7 @@ generate_and_show_styled_table( #| echo: false # set up data -df_time = pd.read_csv("../../results/did/did_multi_time.csv", index_col=None) +df_time = pd.read_csv("../../results/did/did_pa_multi_time.csv", index_col=None) assert df_time["repetition"].nunique() == 1 n_rep_time = df_time["repetition"].unique()[0] @@ -258,7 +258,7 @@ generate_and_show_styled_table( #| echo: false # set up data -df_es = pd.read_csv("../../results/did/did_multi_eventstudy.csv", index_col=None) +df_es = pd.read_csv("../../results/did/did_pa_multi_eventstudy.csv", index_col=None) assert df_es["repetition"].nunique() == 1 n_rep_es = df_es["repetition"].unique()[0] diff --git a/doc/index.qmd b/doc/index.qmd index 2302fd0..8196e7f 100644 --- a/doc/index.qmd +++ b/doc/index.qmd @@ -264,3 +264,5 @@ fig.show() ``` ::: + +::: diff --git a/results/did/did_multi_detailed.csv b/results/did/did_multi_detailed.csv deleted file mode 100644 index c996df8..0000000 --- a/results/did/did_multi_detailed.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.34725,0.6632201286426477,0.49011237580369793,0.033,0.9893937609780801,1000 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.4386666666666667,0.7902755264435218,0.49011237580369793,0.079,1.0974315281580984,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.3925,0.6374280121970815,0.4673059259736469,0.072,0.97009187850922,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4734166666666667,0.759542324114714,0.4673059259736469,0.111,1.071000291105895,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9011666666666667,0.6326304449554325,0.1563321623926723,0.888,0.9627064358023116,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9486666666666667,0.7538256701505138,0.1563321623926723,0.955,1.0626523999436193,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3473333333333333,0.663082675494273,0.4905683815649934,0.033,0.9889346057283442,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4349166666666667,0.7901117409151553,0.4905683815649934,0.08,1.0975864011236443,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3943333333333333,0.6375246725440924,0.46800538303488937,0.072,0.9700098655165373,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4765833333333333,0.759657502022201,0.46800538303488937,0.118,1.0708460305597636,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8973333333333333,0.6326541125548435,0.15625780987233984,0.89,0.9621250011958815,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.947,0.7538538718346554,0.15625780987233984,0.952,1.062489694804598,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9435833333333333,0.8381616751048,0.17814054462577147,0.953,1.2839156930486022,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9778333333333333,0.9987312363300253,0.17814054462577147,0.982,1.416218776113961,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.926,1.1565439632042973,0.2473594696190042,0.931,1.738632033036807,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9675,1.3781071320120069,0.2473594696190042,0.965,1.9268759390224799,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.931,0.7998363707192514,0.17526821717897792,0.945,1.2193415272752777,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9684166666666666,0.9530638194478139,0.17526821717897792,0.978,1.3462730296391963,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9301666666666666,0.7578895509440912,0.16579983845899396,0.945,1.163855412725748,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9713333333333334,0.9030811008166856,0.16579983845899396,0.98,1.2816924647051413,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.89675,1.026901361709593,0.2402117312036738,0.865,1.5489489542811425,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.94425,1.2236284442866847,0.2402117312036738,0.922,1.7135671893558606,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9195833333333334,0.7392347349554987,0.16906220777838002,0.931,1.131310154953256,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.962,0.8808525165361331,0.16906220777838002,0.963,1.2473273228458321,1000 -Linear,Logistic,experimental,False,1,0.9,0.86275,0.2948051239305335,0.07900091146011895,0.793,0.45951022758324694,1000 -Linear,Logistic,experimental,False,1,0.95,0.92075,0.35128197177800297,0.07900091146011895,0.871,0.5047371756723105,1000 -Linear,Logistic,experimental,False,4,0.9,0.3095833333333333,0.9746459049539102,0.8123545762455107,0.041,1.4101593649841206,1000 -Linear,Logistic,experimental,False,4,0.95,0.39075,1.1613622270630595,0.8123545762455107,0.071,1.5725658487365672,1000 -Linear,Logistic,experimental,False,6,0.9,0.9036666666666666,0.9838971680839407,0.238720331830627,0.907,1.4193492655675315,1000 -Linear,Logistic,experimental,False,6,0.95,0.9551666666666666,1.172385787001319,0.238720331830627,0.96,1.5835849590579594,1000 -Linear,Logistic,experimental,True,1,0.9,0.8628333333333333,0.2948075666878801,0.07902018736146375,0.796,0.4595632294378891,1000 -Linear,Logistic,experimental,True,1,0.95,0.9198333333333334,0.3512848825029112,0.07902018736146375,0.867,0.5043781347089554,1000 -Linear,Logistic,experimental,True,4,0.9,0.309,0.9745871850206221,0.8120029975685781,0.042,1.4109703744664022,1000 -Linear,Logistic,experimental,True,4,0.95,0.3904166666666667,1.1612922579469427,0.8120029975685781,0.072,1.573528921909118,1000 -Linear,Logistic,experimental,True,6,0.9,0.9026666666666666,0.9840257361416861,0.23855494093764582,0.909,1.4210470533624664,1000 -Linear,Logistic,experimental,True,6,0.95,0.955,1.172538985291194,0.23855494093764582,0.963,1.585082469200275,1000 -Linear,Logistic,observational,False,1,0.9,0.9035,0.3185718084378124,0.0757558873307347,0.903,0.49534769392303246,1000 -Linear,Logistic,observational,False,1,0.95,0.9523333333333334,0.3796017230938245,0.0757558873307347,0.952,0.5441495204164779,1000 -Linear,Logistic,observational,False,4,0.9,0.41975,1.2508957207637406,0.7931627006785289,0.182,1.7859975260538024,1000 -Linear,Logistic,observational,False,4,0.95,0.5270833333333333,1.4905341854984016,0.7931627006785289,0.266,1.9972462513836364,1000 -Linear,Logistic,observational,False,6,0.9,0.8975833333333334,1.0291252957567814,0.2544578718137418,0.89,1.4849517269617925,1000 -Linear,Logistic,observational,False,6,0.95,0.9506666666666667,1.2262784251512802,0.2544578718137418,0.955,1.6571001913426326,1000 -Linear,Logistic,observational,True,1,0.9,0.90125,0.3166209527583751,0.07556902517081551,0.907,0.4925599895610136,1000 -Linear,Logistic,observational,True,1,0.95,0.9506666666666667,0.37727713517421785,0.07556902517081551,0.942,0.5411280924724183,1000 -Linear,Logistic,observational,True,4,0.9,0.416,1.2505883681999757,0.7923942748523936,0.194,1.7849545041218804,1000 -Linear,Logistic,observational,True,4,0.95,0.525,1.49016795232989,0.7923942748523936,0.281,1.996332789038424,1000 -Linear,Logistic,observational,True,6,0.9,0.8970833333333333,1.0227456972598339,0.2535415241660661,0.897,1.475471462269075,1000 -Linear,Logistic,observational,True,6,0.95,0.95025,1.2186766646754759,0.2535415241660661,0.955,1.6467072408407117,1000 diff --git a/results/did/did_multi_eventstudy.csv b/results/did/did_multi_eventstudy.csv deleted file mode 100644 index 2241619..0000000 --- a/results/did/did_multi_eventstudy.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.212,0.6604863947299484,0.5680925390085144,0.03,0.8639202587233566,1000 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.2853333333333333,0.787018081571581,0.5680925390085144,0.073,0.9797059963406656,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.24783333333333332,0.6059094348361568,0.5434696918979384,0.06,0.8130147435733623,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.32,0.7219856227407174,0.5434696918979384,0.102,0.9183163527410149,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.897,0.6023951572598649,0.14911519055090663,0.896,0.80773077576638,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9485,0.7177981027277819,0.14911519055090663,0.944,0.9122884478790374,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.216,0.6603511092788719,0.568539302268738,0.034,0.8638114270473408,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.28983333333333333,0.7868568790138594,0.568539302268738,0.073,0.9802312306197214,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.24733333333333332,0.6060215144180863,0.5437755527978768,0.064,0.8139649562039803,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.3206666666666667,0.7221191737998417,0.5437755527978768,0.105,0.918312219671443,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8961666666666667,0.6024262845726389,0.149332789476576,0.895,0.807525870642016,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9488333333333334,0.7178351932086445,0.149332789476576,0.942,0.9117009348167522,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9585,0.8182729709439571,0.16565056617253612,0.958,1.1056917522246983,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9826666666666666,0.9750323836079928,0.16565056617253612,0.983,1.2457725065304077,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.937,1.1923984653336688,0.2434226455534901,0.929,1.5772729726576005,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9705,1.4208304064151072,0.2434226455534901,0.969,1.7864645790746925,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9405,0.7715719701005695,0.16570390033287308,0.943,1.0366837950276395,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9736666666666667,0.9193847088269498,0.16570390033287308,0.975,1.1696730766341457,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9435,0.7351138303781443,0.15288401708102373,0.953,0.9974445142927548,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9776666666666667,0.8759421558675607,0.15288401708102373,0.98,1.1224659600314153,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8981666666666667,1.048606227423576,0.24125031716387346,0.882,1.3932585328634872,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9471666666666666,1.2494913869775361,0.24125031716387346,0.934,1.5755625535278197,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9265,0.707833153098743,0.1584727972282905,0.932,0.9562892376447345,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9656666666666667,0.8434352239039034,0.1584727972282905,0.971,1.0771546668822336,1000 -Linear,Logistic,experimental,False,1,0.9,0.8333333333333334,0.21008119266299188,0.06279250993648063,0.772,0.2997763455348952,1000 -Linear,Logistic,experimental,False,1,0.95,0.898,0.25032718091263456,0.06279250993648063,0.852,0.3330657871692049,1000 -Linear,Logistic,experimental,False,4,0.9,0.186,0.9725081430802559,0.9487602256636943,0.038,1.254980282567084,1000 -Linear,Logistic,experimental,False,4,0.95,0.2495,1.1588149266764283,0.9487602256636943,0.065,1.4284992957761715,1000 -Linear,Logistic,experimental,False,6,0.9,0.9058333333333334,0.9844631950664593,0.2397840052146586,0.905,1.2664633333872184,1000 -Linear,Logistic,experimental,False,6,0.95,0.9588333333333334,1.1730602497509743,0.2397840052146586,0.958,1.4417094501447543,1000 -Linear,Logistic,experimental,True,1,0.9,0.8348333333333333,0.21008310515619139,0.06274327271440339,0.766,0.2999472120228887,1000 -Linear,Logistic,experimental,True,1,0.95,0.8965,0.2503294597888399,0.06274327271440339,0.851,0.3328788977719515,1000 -Linear,Logistic,experimental,True,4,0.9,0.1855,0.9724386030694512,0.9484794587569109,0.04,1.2546597764324676,1000 -Linear,Logistic,experimental,True,4,0.95,0.24766666666666665,1.158732064642732,0.9484794587569109,0.067,1.4275114494639556,1000 -Linear,Logistic,experimental,True,6,0.9,0.906,0.9845132322822716,0.2399237885684876,0.906,1.2667892152063878,1000 -Linear,Logistic,experimental,True,6,0.95,0.959,1.173119872771085,0.2399237885684876,0.959,1.4415012389600717,1000 -Linear,Logistic,observational,False,1,0.9,0.9121666666666667,0.2263188173897403,0.05316466170010902,0.908,0.3227959863736354,1000 -Linear,Logistic,observational,False,1,0.95,0.9536666666666667,0.26967550415394803,0.05316466170010902,0.964,0.35842709635415104,1000 -Linear,Logistic,observational,False,4,0.9,0.308,1.3046529273340777,0.9246466619438996,0.17,1.658910870414429,1000 -Linear,Logistic,observational,False,4,0.95,0.41483333333333333,1.5545898479968427,0.9246466619438996,0.26,1.8916048826034793,1000 -Linear,Logistic,observational,False,6,0.9,0.8995,1.0353589791850297,0.2578329738577894,0.909,1.3296442260169248,1000 -Linear,Logistic,observational,False,6,0.95,0.9556666666666667,1.2337063170987448,0.2578329738577894,0.954,1.5137160905920766,1000 -Linear,Logistic,observational,True,1,0.9,0.9068333333333334,0.22511549914119275,0.053178118920023186,0.913,0.32092353183996714,1000 -Linear,Logistic,observational,True,1,0.95,0.9531666666666666,0.2682416620232874,0.053178118920023186,0.962,0.3568312746703429,1000 -Linear,Logistic,observational,True,4,0.9,0.3075,1.3070131076837166,0.9238327987989788,0.175,1.658886675275069,1000 -Linear,Logistic,observational,True,4,0.95,0.4135,1.5574021763441892,0.9238327987989788,0.273,1.8945931482242002,1000 -Linear,Logistic,observational,True,6,0.9,0.8951666666666667,1.0276881926550976,0.25674529262721113,0.912,1.3196141537282695,1000 -Linear,Logistic,observational,True,6,0.95,0.9548333333333334,1.2245660111861596,0.25674529262721113,0.955,1.50455977788913,1000 diff --git a/results/did/did_multi_group.csv b/results/did/did_multi_group.csv deleted file mode 100644 index 378a6a5..0000000 --- a/results/did/did_multi_group.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.3273333333333333,0.707420656396312,0.5512047367255486,0.036,0.8797234045148201,1000 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.41,0.8429437037666345,0.5512047367255486,0.074,1.0041771175059788,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.374,0.6782674902962976,0.5244026247767223,0.071,0.8610132839087776,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4453333333333333,0.8082055637552085,0.5244026247767223,0.117,0.976065830250241,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.899,0.671827470630062,0.16624920009099023,0.902,0.8525368328187772,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9473333333333334,0.8005318070155615,0.16624920009099023,0.951,0.966016106037394,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.326,0.7072412761451377,0.5510566287884651,0.038,0.8801404707275715,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4096666666666666,0.8427299590138623,0.5510566287884651,0.07,1.002125974085047,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.36866666666666664,0.6784182431926686,0.5259144954763614,0.072,0.8610207509558818,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4496666666666666,0.8083851969107737,0.5259144954763614,0.119,0.9763798979720331,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.894,0.6718234690242728,0.1657257952040637,0.896,0.8515844126182411,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9476666666666667,0.800527038808167,0.1657257952040637,0.95,0.9665334176962624,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.963,0.8652755981021423,0.17113142201133558,0.969,1.0889358534995506,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.984,1.031039468311053,0.17113142201133558,0.984,1.237297042745351,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9346666666666666,1.2284508258805134,0.24656685966850245,0.941,1.5361413271219306,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.972,1.463789443664172,0.24656685966850245,0.971,1.749648191744939,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9383333333333334,0.8377546803078038,0.1751631649589318,0.953,1.057109034491574,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.975,0.9982462721174428,0.1751631649589318,0.984,1.2014689940380152,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9496666666666667,0.7841947843278112,0.16086506631076952,0.956,0.9891207416675105,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.981,0.9344257196886802,0.16086506631076952,0.982,1.1249345196702958,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9063333333333333,1.0936611276605492,0.24761334359753662,0.893,1.3734409007728312,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9496666666666667,1.3031776119063627,0.24761334359753662,0.957,1.5621218569040163,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.93,0.7753642730061224,0.17208754196605122,0.938,0.9822835747368598,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.968,0.9239035164530885,0.17208754196605122,0.97,1.114292213724501,1000 -Linear,Logistic,experimental,False,1,0.9,0.8386666666666667,0.26406011408190466,0.07484251880343806,0.782,0.3391725273742781,1000 -Linear,Logistic,experimental,False,1,0.95,0.9,0.3146470329480206,0.07484251880343806,0.861,0.38312548180720674,1000 -Linear,Logistic,experimental,False,4,0.9,0.30766666666666664,1.0775081920199379,0.9180199075797375,0.043,1.358394713485805,1000 -Linear,Logistic,experimental,False,4,0.95,0.387,1.2839302019353809,0.9180199075797375,0.075,1.5436882060371362,1000 -Linear,Logistic,experimental,False,6,0.9,0.9006666666666666,1.0862296392061837,0.26426326890215074,0.901,1.3668444179732824,1000 -Linear,Logistic,experimental,False,6,0.95,0.9506666666666667,1.2943224472379558,0.26426326890215074,0.953,1.5536493498793789,1000 -Linear,Logistic,experimental,True,1,0.9,0.8393333333333334,0.26407759152816007,0.07480194343006176,0.78,0.339074181745231,1000 -Linear,Logistic,experimental,True,1,0.95,0.9026666666666666,0.3146678586097337,0.07480194343006176,0.856,0.38322152907222656,1000 -Linear,Logistic,experimental,True,4,0.9,0.30866666666666664,1.0774440156012468,0.9177015030168479,0.042,1.358470637092642,1000 -Linear,Logistic,experimental,True,4,0.95,0.3873333333333333,1.2838537310158835,0.9177015030168479,0.077,1.5429798338746872,1000 -Linear,Logistic,experimental,True,6,0.9,0.9,1.0863837801957064,0.26380863451040953,0.9,1.3672808159070202,1000 -Linear,Logistic,experimental,True,6,0.95,0.9513333333333334,1.2945061175555181,0.26380863451040953,0.954,1.5541073384842106,1000 -Linear,Logistic,observational,False,1,0.9,0.9076666666666666,0.28416293869816867,0.06719907904707288,0.895,0.3651157807139984,1000 -Linear,Logistic,observational,False,1,0.95,0.9483333333333334,0.3386010259294065,0.06719907904707288,0.945,0.41201437318485834,1000 -Linear,Logistic,observational,False,4,0.9,0.401,1.391585982365,0.904387305913916,0.19,1.740406175908275,1000 -Linear,Logistic,observational,False,4,0.95,0.5136666666666666,1.6581769721851722,0.904387305913916,0.283,1.9826656824817435,1000 -Linear,Logistic,observational,False,6,0.9,0.8973333333333333,1.1352802141544187,0.27975950279202133,0.905,1.4266992538777443,1000 -Linear,Logistic,observational,False,6,0.95,0.9503333333333334,1.3527698122461733,0.27975950279202133,0.955,1.6225397076843175,1000 -Linear,Logistic,observational,True,1,0.9,0.903,0.2824293492396861,0.06705110860806944,0.898,0.3627882621194592,1000 -Linear,Logistic,observational,True,1,0.95,0.946,0.33653532667998365,0.06705110860806944,0.942,0.40929988535575634,1000 -Linear,Logistic,observational,True,4,0.9,0.402,1.3915312960755781,0.9034692492203523,0.193,1.7414149632974412,1000 -Linear,Logistic,observational,True,4,0.95,0.5146666666666666,1.6581118094521734,0.9034692492203523,0.286,1.9845340670655314,1000 -Linear,Logistic,observational,True,6,0.9,0.8936666666666666,1.1270129557072197,0.27813843488385187,0.905,1.4156442615210005,1000 -Linear,Logistic,observational,True,6,0.95,0.9483333333333334,1.3429187662066389,0.27813843488385187,0.952,1.6098259360653087,1000 diff --git a/results/did/did_multi_metadata.csv b/results/did/did_multi_metadata.csv deleted file mode 100644 index 28b7a8c..0000000 --- a/results/did/did_multi_metadata.csv +++ /dev/null @@ -1,2 +0,0 @@ -DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File -0.10.0,DIDMultiCoverageSimulation,2025-06-06 08:13,60.66274849573771,3.12.9,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_multi_time.csv b/results/did/did_multi_time.csv deleted file mode 100644 index 166a58b..0000000 --- a/results/did/did_multi_time.csv +++ /dev/null @@ -1,49 +0,0 @@ -Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition -LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.055,0.6712569909941205,0.6346334487258358,0.035,0.7933048784144286,1000 -LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.10733333333333332,0.7998520386021065,0.6346334487258358,0.061,0.9159058461680386,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.075,0.6060202682055259,0.6100618498175898,0.052,0.7251643151081226,1000 -LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.13,0.7221176888459861,0.6100618498175898,0.097,0.8353173376691023,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.901,0.5988208500851633,0.1464689152752021,0.897,0.7188116426660323,1000 -LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9483333333333334,0.7135390530364837,0.1464689152752021,0.95,0.827434201860584,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.054,0.6710988857611525,0.6356662481793647,0.03,0.7928754344366965,1000 -LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.09766666666666665,0.7996636445971279,0.6356662481793647,0.064,0.9157288402316642,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.08,0.6061420688480603,0.611475967305118,0.051,0.7250804471897608,1000 -LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.12766666666666665,0.7222628232632679,0.611475967305118,0.097,0.8356164365834543,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9003333333333333,0.5988274535253045,0.1470455937405394,0.897,0.7193380504386929,1000 -LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9466666666666667,0.7135469215207298,0.1470455937405394,0.939,0.8266210501795132,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9633333333333334,0.8625181197134913,0.1705040132107199,0.972,1.045848740623199,1000 -LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9886666666666666,1.0277537301509225,0.1705040132107199,0.989,1.2001073696975533,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9353333333333333,1.2945843278468319,0.26162576104250007,0.923,1.5341055868187743,1000 -LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.968,1.542592371719069,0.26162576104250007,0.965,1.7716810296642407,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.947,0.7672044714361391,0.16043039243421475,0.948,0.9284201701025314,1000 -LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9763333333333334,0.9141805131802676,0.16043039243421475,0.973,1.067043785578332,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9506666666666667,0.7684651194719102,0.1600966845306246,0.961,0.9322911708810523,1000 -LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.982,0.9156826679658406,0.1600966845306246,0.978,1.0708669848118426,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.887,1.1247146971381123,0.25811288498674895,0.868,1.3337069451804375,1000 -LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9386666666666666,1.3401802222117185,0.25811288498674895,0.915,1.539509702377364,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9233333333333333,0.7013549950930801,0.15406953919220856,0.931,0.8502851669291526,1000 -LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9673333333333334,0.835716022529863,0.15406953919220856,0.967,0.9757420279803587,1000 -Linear,Logistic,experimental,False,1,0.9,0.8113333333333334,0.24421066998125654,0.07335238125159724,0.763,0.31287636754980536,1000 -Linear,Logistic,experimental,False,1,0.95,0.885,0.2909949614731166,0.07335238125159724,0.844,0.35353712763106526,1000 -Linear,Logistic,experimental,False,4,0.9,0.03866666666666666,0.9657093192836849,1.0744747295532333,0.034,1.1073798978939535,1000 -Linear,Logistic,experimental,False,4,0.95,0.069,1.1507136284452841,1.0744747295532333,0.055,1.2858869628367815,1000 -Linear,Logistic,experimental,False,6,0.9,0.9016666666666666,0.9646204823976587,0.23468919497366172,0.901,1.1093098237657892,1000 -Linear,Logistic,experimental,False,6,0.95,0.953,1.1494161992718415,0.23468919497366172,0.957,1.2871233271513411,1000 -Linear,Logistic,experimental,True,1,0.9,0.8133333333333334,0.2442088644035013,0.07330749456217257,0.77,0.3129912931800666,1000 -Linear,Logistic,experimental,True,1,0.95,0.8853333333333334,0.2909928099945208,0.07330749456217257,0.845,0.35370879380082904,1000 -Linear,Logistic,experimental,True,4,0.9,0.040333333333333325,0.965669466190919,1.074178736623636,0.034,1.1079673576193978,1000 -Linear,Logistic,experimental,True,4,0.95,0.07066666666666667,1.1506661405562622,1.074178736623636,0.056,1.2874892975542063,1000 -Linear,Logistic,experimental,True,6,0.9,0.905,0.9646743300945927,0.23461429065167058,0.903,1.1086934199469425,1000 -Linear,Logistic,experimental,True,6,0.95,0.9513333333333334,1.1494803627602588,0.23461429065167058,0.954,1.288778040856994,1000 -Linear,Logistic,observational,False,1,0.9,0.8963333333333334,0.27432665056823285,0.06662446847374676,0.892,0.3514300281214646,1000 -Linear,Logistic,observational,False,1,0.95,0.947,0.3268803657075217,0.06662446847374676,0.94,0.3973633331155568,1000 -Linear,Logistic,observational,False,4,0.9,0.16966666666666666,1.3719614152655681,1.057702662307478,0.138,1.5420603037012326,1000 -Linear,Logistic,observational,False,4,0.95,0.2533333333333333,1.6347928581844855,1.057702662307478,0.227,1.7997355197003797,1000 -Linear,Logistic,observational,False,6,0.9,0.893,1.0148202381932496,0.25145709760552504,0.896,1.1671820785014646,1000 -Linear,Logistic,observational,False,6,0.95,0.952,1.2092328977183877,0.25145709760552504,0.948,1.3556655852353603,1000 -Linear,Logistic,observational,True,1,0.9,0.8956666666666666,0.2722754365826716,0.06632302110410243,0.882,0.34896138602531507,1000 -Linear,Logistic,observational,True,1,0.95,0.945,0.3244361934903646,0.06632302110410243,0.935,0.3940464937357552,1000 -Linear,Logistic,observational,True,4,0.9,0.16866666666666666,1.3721900166602485,1.0557853739176288,0.144,1.5416213892347916,1000 -Linear,Logistic,observational,True,4,0.95,0.258,1.6350652535472388,1.0557853739176288,0.226,1.8003166158280433,1000 -Linear,Logistic,observational,True,6,0.9,0.893,1.0066884879769613,0.25076936355127627,0.887,1.1578970654476302,1000 -Linear,Logistic,observational,True,6,0.95,0.949,1.19954331969512,0.25076936355127627,0.942,1.3460255801756882,1000 diff --git a/results/did/did_pa_multi_config.yml b/results/did/did_pa_multi_config.yml index 7ef23dd..83d9a59 100644 --- a/results/did/did_pa_multi_config.yml +++ b/results/did/did_pa_multi_config.yml @@ -1,5 +1,5 @@ simulation_parameters: - repetitions: 1000 + repetitions: 500 max_runtime: 19800 random_seed: 42 n_jobs: -2 diff --git a/results/did/did_pa_multi_detailed.csv b/results/did/did_pa_multi_detailed.csv new file mode 100644 index 0000000..03365be --- /dev/null +++ b/results/did/did_pa_multi_detailed.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.3673333333333333,0.6622000671680726,0.4760789469976553,0.048,0.9872940132180921,500 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.455,0.7890600482274513,0.4760789469976553,0.09,1.095657479091583,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.3965,0.6378199657300768,0.4732109643228897,0.06,0.9698764406659528,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.47783333333333333,0.760009365555786,0.4732109643228897,0.11,1.070746913970544,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9025,0.6328401432350504,0.14980045984980536,0.894,0.9623147617420064,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9506666666666667,0.7540755410623912,0.14980045984980536,0.954,1.0622145320099126,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.3686666666666667,0.6623492813513598,0.4769578269080368,0.04,0.9884461202448822,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.4578333333333333,0.7892378478932902,0.4769578269080368,0.092,1.097904825887712,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.3965,0.6379252128844956,0.4725155159534973,0.062,0.9695080120086349,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.47883333333333333,0.7601347752753842,0.4725155159534973,0.096,1.071528428469871,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9001666666666667,0.6328979630581827,0.15061501966635568,0.902,0.9622642309184252,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9468333333333334,0.754144437631104,0.15061501966635568,0.948,1.0633435621867606,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.944,0.8484126499519333,0.18581715397253995,0.958,1.2981680901155388,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9781666666666666,1.0109460262527277,0.18581715397253995,0.984,1.4315482130550377,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9281666666666666,1.1736004812411396,0.24580858947268477,0.918,1.764688942768667,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9648333333333333,1.3984312268166166,0.24580858947268477,0.956,1.9550467611394868,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9358333333333334,0.8012781498847246,0.17217182529588215,0.944,1.222603881202094,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9745,0.9547818052866056,0.17217182529588215,0.974,1.3500149303488194,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9335,0.7612042001195903,0.16720500271357613,0.928,1.1687094154271858,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9728333333333333,0.9070307489184465,0.16720500271357613,0.978,1.287704160787801,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.8948333333333334,1.0400365030584322,0.24325349291636317,0.868,1.5686170162912925,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9411666666666666,1.2392799305671278,0.24325349291636317,0.932,1.7357363533233978,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.921,0.73959665400471,0.16444852263415236,0.928,1.1315883372939126,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9616666666666667,0.881283769682401,0.16444852263415236,0.966,1.2475888364019896,500 +Linear,Logistic,experimental,False,1,0.9,0.8523333333333334,0.2946189987996892,0.08120823424066553,0.788,0.4588985695573376,500 +Linear,Logistic,experimental,False,1,0.95,0.9148333333333334,0.35106019000539096,0.08120823424066553,0.838,0.5038888198702418,500 +Linear,Logistic,experimental,False,4,0.9,0.303,0.9760460779046628,0.801904091446656,0.044,1.4120588709374915,500 +Linear,Logistic,experimental,False,4,0.95,0.3858333333333333,1.1630306360391751,0.801904091446656,0.084,1.5751591463324877,500 +Linear,Logistic,experimental,False,6,0.9,0.9053333333333333,0.9839860026189414,0.23896735315283404,0.908,1.4202557795653532,500 +Linear,Logistic,experimental,False,6,0.95,0.9548333333333334,1.17249163987864,0.23896735315283404,0.958,1.5845039985572327,500 +Linear,Logistic,experimental,True,1,0.9,0.8496666666666667,0.29463344342253167,0.08121981681344749,0.778,0.45909731515633667,500 +Linear,Logistic,experimental,True,1,0.95,0.9155,0.351077401835111,0.08121981681344749,0.84,0.5042920585797889,500 +Linear,Logistic,experimental,True,4,0.9,0.306,0.9759323896298842,0.8017723312893467,0.038,1.413106206153663,500 +Linear,Logistic,experimental,True,4,0.95,0.385,1.1628951681042905,0.8017723312893467,0.08,1.5751955097078019,500 +Linear,Logistic,experimental,True,6,0.9,0.9053333333333333,0.9838756962077249,0.239302923434742,0.902,1.4196661784164144,500 +Linear,Logistic,experimental,True,6,0.95,0.9531666666666666,1.1723602016827388,0.239302923434742,0.96,1.5824721580536725,500 +Linear,Logistic,observational,False,1,0.9,0.8971666666666667,0.31851350521257993,0.07770855334930929,0.88,0.49576482769471897,500 +Linear,Logistic,observational,False,1,0.95,0.9501666666666666,0.3795322505159817,0.07770855334930929,0.928,0.5439849562862227,500 +Linear,Logistic,observational,False,4,0.9,0.4216666666666667,1.24911253522529,0.7867195413105588,0.202,1.7850915494563109,500 +Linear,Logistic,observational,False,4,0.95,0.5311666666666667,1.4884093888746475,0.7867195413105588,0.298,1.9965811220360494,500 +Linear,Logistic,observational,False,6,0.9,0.8988333333333334,1.0283136039352265,0.25571834558315537,0.908,1.4829065942058384,500 +Linear,Logistic,observational,False,6,0.95,0.953,1.2253112346908492,0.25571834558315537,0.964,1.6547817994899618,500 +Linear,Logistic,observational,True,1,0.9,0.8981666666666667,0.3164160504010737,0.07747519197762118,0.882,0.4924111949311072,500 +Linear,Logistic,observational,True,1,0.95,0.9475,0.3770329789562555,0.07747519197762118,0.93,0.5411929319181428,500 +Linear,Logistic,observational,True,4,0.9,0.4211666666666667,1.2426528075031174,0.7872815865655027,0.18,1.7778308762859318,500 +Linear,Logistic,observational,True,4,0.95,0.5266666666666666,1.480712148537914,0.7872815865655027,0.304,1.9883615181855132,500 +Linear,Logistic,observational,True,6,0.9,0.8986666666666666,1.0213268010132648,0.2545466751950045,0.902,1.47468329239173,500 +Linear,Logistic,observational,True,6,0.95,0.952,1.216985945516332,0.2545466751950045,0.954,1.6464318066970816,500 diff --git a/results/did/did_pa_multi_eventstudy.csv b/results/did/did_pa_multi_eventstudy.csv new file mode 100644 index 0000000..1b21f54 --- /dev/null +++ b/results/did/did_pa_multi_eventstudy.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.2283333333333333,0.6587040995328192,0.5522372239901979,0.044,0.8605047333386023,500 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.3133333333333333,0.7848943458549469,0.5522372239901979,0.09,0.9778072018001019,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.249,0.6060032559192339,0.5525104645406855,0.048,0.8132771274352789,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.3143333333333333,0.7220974174565562,0.5525104645406855,0.084,0.9185928338492869,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.897,0.6027467480888928,0.1422147849276291,0.906,0.8080325608850351,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9483333333333334,0.7182170490406318,0.1422147849276291,0.94,0.9125249161446136,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.23933333333333331,0.6589685339305245,0.5529268397062738,0.034,0.8610471093710794,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.316,0.78520943887434,0.5529268397062738,0.08,0.9777737838033697,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.24166666666666667,0.606157835216858,0.5522849609818471,0.046,0.8135265003351018,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.3133333333333333,0.7222816100504348,0.5522849609818471,0.086,0.9194321897734152,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.8986666666666666,0.6028976065833622,0.14209512928525467,0.904,0.8084770787989722,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.9536666666666667,0.7183968080240921,0.14209512928525467,0.944,0.9131416082608758,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9593333333333334,0.8331450685574368,0.17680186027028366,0.972,1.1238811170215592,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9836666666666666,0.992753580934838,0.17680186027028366,0.99,1.2675560428429777,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9306666666666666,1.2212757793823452,0.24645513111977768,0.912,1.6164788843207358,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.961,1.4552398484336997,0.24645513111977768,0.954,1.8275978344330392,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.949,0.773488793816433,0.15895185287272048,0.964,1.039059805501273,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9773333333333334,0.9216687451607893,0.15895185287272048,0.978,1.172440550055884,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9503333333333334,0.7366626265166267,0.1546838735092071,0.954,0.9998899983927642,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9793333333333334,0.8777876602948735,0.1546838735092071,0.972,1.1253847911000208,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.894,1.0659193270745397,0.24400925469037812,0.878,1.4176012914565177,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9386666666666666,1.2701212176327616,0.24400925469037812,0.932,1.6011895710715864,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.929,0.7088924236942643,0.1529529479458035,0.922,0.9575952981768475,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9676666666666667,0.8446974226692439,0.1529529479458035,0.964,1.0780717858478737,500 +Linear,Logistic,experimental,False,1,0.9,0.8066666666666666,0.21000404129150896,0.06518921912381406,0.72,0.2997175999884337,500 +Linear,Logistic,experimental,False,1,0.95,0.8743333333333334,0.2502352493832956,0.06518921912381406,0.826,0.33259531990160307,500 +Linear,Logistic,experimental,False,4,0.9,0.18733333333333332,0.9737076191653701,0.9359069321716494,0.046,1.2560167106299942,500 +Linear,Logistic,experimental,False,4,0.95,0.24966666666666665,1.1602441905869794,0.9359069321716494,0.078,1.4300407974756533,500 +Linear,Logistic,experimental,False,6,0.9,0.9033333333333333,0.9849320456939884,0.238799855722236,0.9,1.268040524471122,500 +Linear,Logistic,experimental,False,6,0.95,0.954,1.1736189197317124,0.238799855722236,0.952,1.4422169658618964,500 +Linear,Logistic,experimental,True,1,0.9,0.8056666666666666,0.21001870515867865,0.0651788255038496,0.712,0.29983155338511797,500 +Linear,Logistic,experimental,True,1,0.95,0.875,0.25025272245874486,0.0651788255038496,0.828,0.33303705806938594,500 +Linear,Logistic,experimental,True,4,0.9,0.18733333333333332,0.9735509986703372,0.9357636327849428,0.046,1.2571544126957659,500 +Linear,Logistic,experimental,True,4,0.95,0.24533333333333332,1.1600575657563712,0.9357636327849428,0.07,1.4293605600664439,500 +Linear,Logistic,experimental,True,6,0.9,0.9013333333333333,0.9848219664599364,0.2394113999920333,0.894,1.2656123393584287,500 +Linear,Logistic,experimental,True,6,0.95,0.9516666666666667,1.173487752234099,0.2394113999920333,0.948,1.4411013050595978,500 +Linear,Logistic,observational,False,1,0.9,0.9,0.2262316323769462,0.05514479620759452,0.868,0.3226096040264856,500 +Linear,Logistic,observational,False,1,0.95,0.9456666666666667,0.26957161680356734,0.05514479620759452,0.938,0.35829469003252984,500 +Linear,Logistic,observational,False,4,0.9,0.3143333333333333,1.3036480521122706,0.9181321615807071,0.162,1.6605958923938304,500 +Linear,Logistic,observational,False,4,0.95,0.4136666666666667,1.5533924653170545,0.9181321615807071,0.274,1.8912981546144405,500 +Linear,Logistic,observational,False,6,0.9,0.8973333333333333,1.0343982597104093,0.25858226125551537,0.894,1.327566286989776,500 +Linear,Logistic,observational,False,6,0.95,0.9526666666666667,1.232561549236943,0.25858226125551537,0.95,1.5120978280671449,500 +Linear,Logistic,observational,True,1,0.9,0.8973333333333333,0.2248488438887826,0.054965685359671994,0.864,0.32055024716071057,500 +Linear,Logistic,observational,True,1,0.95,0.944,0.26792392269229237,0.054965685359671994,0.944,0.35608984664695953,500 +Linear,Logistic,observational,True,4,0.9,0.315,1.2959957518029153,0.9185347013069396,0.176,1.6506152551239353,500 +Linear,Logistic,observational,True,4,0.95,0.415,1.5442741870949255,0.9185347013069396,0.27,1.8834083270874074,500 +Linear,Logistic,observational,True,6,0.9,0.8976666666666666,1.0256086410426875,0.2552198325642982,0.898,1.3171396739917884,500 +Linear,Logistic,observational,True,6,0.95,0.9516666666666667,1.2220880726039465,0.2552198325642982,0.95,1.5001030847712007,500 diff --git a/results/did/did_pa_multi_group.csv b/results/did/did_pa_multi_group.csv new file mode 100644 index 0000000..5f21488 --- /dev/null +++ b/results/did/did_pa_multi_group.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.3453333333333333,0.7061203437445056,0.5338039317070226,0.04,0.8782510332132877,500 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.414,0.8413942856759162,0.5338039317070226,0.082,1.00242141790932,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.38266666666666665,0.6789378060682322,0.5300834738006545,0.07,0.8626680965851735,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.4586666666666666,0.8090042942621264,0.5300834738006545,0.1,0.9769404822124568,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.904,0.671760519005158,0.15787429787372864,0.894,0.8515944211885667,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.9526666666666667,0.8004520292338988,0.15787429787372864,0.94,0.9665782875756674,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.336,0.7063220141736366,0.5352392838724863,0.044,0.8791666491424662,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.422,0.841634590813934,0.5352392838724863,0.068,1.0022365497478951,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.386,0.6790558361796843,0.5286816076588884,0.07,0.8622484845396491,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.4633333333333333,0.8091449358145096,0.5286816076588884,0.104,0.9779355790699585,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.9093333333333333,0.6717901642088375,0.15785991984946784,0.892,0.8520313806974089,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.946,0.8004873536728483,0.15785991984946784,0.95,0.9660175472034508,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9553333333333334,0.8759634723754738,0.18292488179652266,0.97,1.1038974123150518,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.988,1.0437748560098636,0.18292488179652266,0.986,1.2543507631992874,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9353333333333333,1.25393645199677,0.250515962227722,0.94,1.5679425502380615,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9713333333333334,1.494157440240192,0.250515962227722,0.972,1.7877154502952064,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9493333333333334,0.8388307882552883,0.1702924604272122,0.956,1.059683094715299,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9773333333333334,0.9995285338251039,0.1702924604272122,0.976,1.2031072528792466,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9513333333333334,0.7861399021677411,0.16271564704380237,0.96,0.9930031807156378,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9786666666666666,0.9367434705508129,0.16271564704380237,0.984,1.1276942507017356,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.9046666666666666,1.1057158916792769,0.24870110692650177,0.902,1.38678453123333,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9486666666666667,1.3175417491959676,0.24870110692650177,0.954,1.5778432342279969,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.9313333333333333,0.7753781852936138,0.16531074136379498,0.946,0.9820944944614727,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.9726666666666667,0.9239200939661141,0.16531074136379498,0.978,1.1150696723460385,500 +Linear,Logistic,experimental,False,1,0.9,0.8273333333333334,0.26380897472313514,0.07651235183723298,0.764,0.3391450778109149,500 +Linear,Logistic,experimental,False,1,0.95,0.89,0.3143477819446344,0.07651235183723298,0.86,0.38221145190836553,500 +Linear,Logistic,experimental,False,4,0.9,0.30266666666666664,1.079363915584256,0.9059563006943179,0.052,1.3590553655028934,500 +Linear,Logistic,experimental,False,4,0.95,0.382,1.2861414329481164,0.9059563006943179,0.082,1.5468325522554665,500 +Linear,Logistic,experimental,False,6,0.9,0.908,1.0862190109211047,0.2644786913841181,0.918,1.3673960998038357,500 +Linear,Logistic,experimental,False,6,0.95,0.9586666666666667,1.2943097828551615,0.2644786913841181,0.96,1.556756668057947,500 +Linear,Logistic,experimental,True,1,0.9,0.828,0.2637980134263197,0.0766285233894392,0.768,0.3386839537931058,500 +Linear,Logistic,experimental,True,1,0.95,0.8906666666666666,0.3143347207538815,0.0766285233894392,0.86,0.3828765812355697,500 +Linear,Logistic,experimental,True,4,0.9,0.304,1.079118204584409,0.9057101368315867,0.052,1.3601845048507253,500 +Linear,Logistic,experimental,True,4,0.95,0.3813333333333333,1.285848650233342,0.9057101368315867,0.08,1.5471926536776797,500 +Linear,Logistic,experimental,True,6,0.9,0.9086666666666666,1.0861705541932378,0.26441199299249185,0.912,1.3670083032848188,500 +Linear,Logistic,experimental,True,6,0.95,0.954,1.2942520431025955,0.26441199299249185,0.96,1.551861252097446,500 +Linear,Logistic,observational,False,1,0.9,0.9033333333333333,0.28400524491310203,0.0687914087907478,0.906,0.364825125167759,500 +Linear,Logistic,observational,False,1,0.95,0.9493333333333334,0.3384131221948419,0.0687914087907478,0.954,0.41166540236207466,500 +Linear,Logistic,observational,False,4,0.9,0.402,1.3928519980132097,0.8965788830797046,0.204,1.7456908682992962,500 +Linear,Logistic,observational,False,4,0.95,0.52,1.6596855228754568,0.8965788830797046,0.32,1.98542725431534,500 +Linear,Logistic,observational,False,6,0.9,0.8973333333333333,1.1329344312687526,0.28201333547394114,0.924,1.422606687890446,500 +Linear,Logistic,observational,False,6,0.95,0.9573333333333334,1.3499746395352878,0.28201333547394114,0.968,1.6193744244245225,500 +Linear,Logistic,observational,True,1,0.9,0.9026666666666666,0.2821845848144727,0.06867681148060421,0.902,0.3621405665817862,500 +Linear,Logistic,observational,True,1,0.95,0.95,0.3362436718784534,0.06867681148060421,0.948,0.4091358145384905,500 +Linear,Logistic,observational,True,4,0.9,0.4033333333333333,1.382242933428948,0.8986180941601967,0.186,1.7319864689480753,500 +Linear,Logistic,observational,True,4,0.95,0.5146666666666666,1.6470440427132675,0.8986180941601967,0.298,1.9706705969890153,500 +Linear,Logistic,observational,True,6,0.9,0.908,1.1253662193074963,0.27896539107985413,0.912,1.413271689719664,500 +Linear,Logistic,observational,True,6,0.95,0.956,1.340956558759967,0.27896539107985413,0.958,1.6086417215587723,500 diff --git a/results/did/did_pa_multi_metadata.csv b/results/did/did_pa_multi_metadata.csv new file mode 100644 index 0000000..1a3d408 --- /dev/null +++ b/results/did/did_pa_multi_metadata.csv @@ -0,0 +1,2 @@ +DoubleML Version,Script,Date,Total Runtime (minutes),Python Version,Config File +0.11.dev0,DIDMultiCoverageSimulation,2025-06-13 08:54,24.26406863530477,3.12.9,scripts/did/did_pa_multi_config.yml diff --git a/results/did/did_pa_multi_time.csv b/results/did/did_pa_multi_time.csv new file mode 100644 index 0000000..5de9bd4 --- /dev/null +++ b/results/did/did_pa_multi_time.csv @@ -0,0 +1,49 @@ +Learner g,Learner m,Score,In-sample-norm.,DGP,level,Coverage,CI Length,Bias,Uniform Coverage,Uniform CI Length,repetition +LGBM Regr.,LGBM Clas.,experimental,False,1,0.9,0.078,0.6692424370363118,0.6128712215451249,0.05,0.790171311463466,500 +LGBM Regr.,LGBM Clas.,experimental,False,1,0.95,0.13466666666666666,0.7974515495023343,0.6128712215451249,0.084,0.9136560537247234,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.9,0.074,0.6062091915221344,0.6249192186691614,0.044,0.7249820763436224,500 +LGBM Regr.,LGBM Clas.,experimental,False,4,0.95,0.116,0.722342804862588,0.6249192186691614,0.092,0.8361639582496219,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.9,0.9073333333333333,0.599044242636866,0.14008945998182312,0.906,0.7191589886705783,500 +LGBM Regr.,LGBM Clas.,experimental,False,6,0.95,0.956,0.7138052416800065,0.14008945998182312,0.944,0.8277825992127831,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.9,0.08266666666666665,0.6696150159796451,0.6156067342388867,0.042,0.791731909415232,500 +LGBM Regr.,LGBM Clas.,experimental,True,1,0.95,0.13466666666666666,0.7978955046958943,0.6156067342388867,0.088,0.915527967488749,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.9,0.07266666666666666,0.6063313580429187,0.6229335321737121,0.048,0.7263381757517958,500 +LGBM Regr.,LGBM Clas.,experimental,True,4,0.95,0.11666666666666665,0.7224883752506945,0.6229335321737121,0.08,0.8363885915780758,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.9,0.91,0.5991634560721969,0.1412786905584327,0.904,0.7194455787684115,500 +LGBM Regr.,LGBM Clas.,experimental,True,6,0.95,0.954,0.7139472932497593,0.1412786905584327,0.956,0.8287810641013134,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.9,0.9526666666666667,0.8790712653242123,0.18826349561304626,0.968,1.0635292264065768,500 +LGBM Regr.,LGBM Clas.,observational,False,1,0.95,0.9853333333333334,1.0474780197146027,0.18826349561304626,0.992,1.2228579250647753,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.9,0.9353333333333333,1.3269252174372335,0.26178211241085814,0.928,1.5701620021658818,500 +LGBM Regr.,LGBM Clas.,observational,False,4,0.95,0.9666666666666667,1.5811289185500799,0.26178211241085814,0.96,1.8101418808788674,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.9,0.9533333333333334,0.7694077871880038,0.155760065723021,0.968,0.9317467276936701,500 +LGBM Regr.,LGBM Clas.,observational,False,6,0.95,0.9853333333333334,0.9168059258306492,0.155760065723021,0.986,1.070456368054135,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.9,0.9573333333333334,0.7713377451893,0.16339158562782916,0.96,0.9369168763484825,500 +LGBM Regr.,LGBM Clas.,observational,True,1,0.95,0.9826666666666666,0.9191056126308821,0.16339158562782916,0.984,1.074393848207727,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.9,0.89,1.1451904937521304,0.26297336131398186,0.868,1.3572001851162259,500 +LGBM Regr.,LGBM Clas.,observational,True,4,0.95,0.9386666666666666,1.364578638739894,0.26297336131398186,0.92,1.567125347231284,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.9,0.946,0.7018901783436629,0.14653434182967903,0.946,0.8487679999150168,500 +LGBM Regr.,LGBM Clas.,observational,True,6,0.95,0.978,0.8363537327060658,0.14653434182967903,0.976,0.9760935044639452,500 +Linear,Logistic,experimental,False,1,0.9,0.7953333333333333,0.24405181357972996,0.07605161668436612,0.726,0.31285765298747464,500 +Linear,Logistic,experimental,False,1,0.95,0.8626666666666666,0.29080567239559374,0.07605161668436612,0.82,0.3535441044205644,500 +Linear,Logistic,experimental,False,4,0.9,0.04,0.9668363884575001,1.0600853196453421,0.032,1.107680731461651,500 +Linear,Logistic,experimental,False,4,0.95,0.06933333333333333,1.1520566141994981,1.0600853196453421,0.058,1.2882352455188046,500 +Linear,Logistic,experimental,False,6,0.9,0.9126666666666666,0.9650429626258434,0.23526932641417123,0.914,1.1100456562874579,500 +Linear,Logistic,experimental,False,6,0.95,0.9513333333333334,1.149919615513782,0.23526932641417123,0.948,1.2887467043073448,500 +Linear,Logistic,experimental,True,1,0.9,0.7973333333333333,0.24405353188120116,0.07602557863080843,0.732,0.3126886691789105,500 +Linear,Logistic,experimental,True,1,0.95,0.8593333333333334,0.29080771987808274,0.07602557863080843,0.818,0.3535552665568589,500 +Linear,Logistic,experimental,True,4,0.9,0.041333333333333326,0.9667071224747424,1.0601977183113478,0.034,1.10968249152393,500 +Linear,Logistic,experimental,True,4,0.95,0.07066666666666667,1.1519025842806776,1.0601977183113478,0.054,1.2887777719835505,500 +Linear,Logistic,experimental,True,6,0.9,0.9093333333333333,0.9649936655742097,0.23538050665454452,0.922,1.1093549725922547,500 +Linear,Logistic,experimental,True,6,0.95,0.9513333333333334,1.1498608744536882,0.23538050665454452,0.948,1.287941663582221,500 +Linear,Logistic,observational,False,1,0.9,0.89,0.2744673956918025,0.06807514734567709,0.884,0.35184020083028195,500 +Linear,Logistic,observational,False,1,0.95,0.9433333333333334,0.3270480738662758,0.06807514734567709,0.932,0.39746810181615344,500 +Linear,Logistic,observational,False,4,0.9,0.18066666666666667,1.372715206976075,1.051508566974799,0.156,1.544299564377621,500 +Linear,Logistic,observational,False,4,0.95,0.25533333333333336,1.6356910564072515,1.051508566974799,0.216,1.8014374703838525,500 +Linear,Logistic,observational,False,6,0.9,0.8986666666666666,1.0120400522734778,0.2513420400041841,0.902,1.1637402258830514,500 +Linear,Logistic,observational,False,6,0.95,0.95,1.2059201018660433,0.2513420400041841,0.952,1.354296135095299,500 +Linear,Logistic,observational,True,1,0.9,0.8886666666666666,0.2719876029928796,0.06788546810358119,0.886,0.34872586132705413,500 +Linear,Logistic,observational,True,1,0.95,0.942,0.3240932186138835,0.06788546810358119,0.94,0.3941489528436907,500 +Linear,Logistic,observational,True,4,0.9,0.17666666666666667,1.3599704742520904,1.0529815437473877,0.146,1.531580058039442,500 +Linear,Logistic,observational,True,4,0.95,0.252,1.6205047706962885,1.0529815437473877,0.21,1.7831373237480377,500 +Linear,Logistic,observational,True,6,0.9,0.904,1.0055529300121109,0.2509111677982569,0.904,1.1587145925499964,500 +Linear,Logistic,observational,True,6,0.95,0.9533333333333334,1.1981902189225062,0.2509111677982569,0.952,1.34594676137346,500 diff --git a/scripts/did/did_pa_multi.py b/scripts/did/did_pa_multi.py index 5e8f0c3..5e90ee9 100644 --- a/scripts/did/did_pa_multi.py +++ b/scripts/did/did_pa_multi.py @@ -7,7 +7,7 @@ log_file="logs/did/did_pa_multi_sim.log", ) sim.run_simulation() -sim.save_results(output_path="results/did/", file_prefix="did_multi") +sim.save_results(output_path="results/did/", file_prefix="did_pa_multi") # Save config file for reproducibility sim.save_config("results/did/did_pa_multi_config.yml") diff --git a/scripts/did/did_pa_multi_config.yml b/scripts/did/did_pa_multi_config.yml index ad33a5d..2031a60 100644 --- a/scripts/did/did_pa_multi_config.yml +++ b/scripts/did/did_pa_multi_config.yml @@ -1,7 +1,7 @@ # Simulation parameters for DID Multi Coverage simulation_parameters: - repetitions: 1000 + repetitions: 500 max_runtime: 19800 # 5.5 hours in seconds random_seed: 42 n_jobs: -2 From 163e9f6269d22a2c801705a3b985c87ba1b3cde1 Mon Sep 17 00:00:00 2001 From: Sven Klaassen <47529404+SvenKlaassen@users.noreply.github.com> Date: Fri, 13 Jun 2025 09:15:40 +0200 Subject: [PATCH 142/142] Update monte-cover/src/montecover/did/did_cs_multi.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- monte-cover/src/montecover/did/did_cs_multi.py | 1 - 1 file changed, 1 deletion(-) diff --git a/monte-cover/src/montecover/did/did_cs_multi.py b/monte-cover/src/montecover/did/did_cs_multi.py index 4adc0fb..ea11cd2 100644 --- a/monte-cover/src/montecover/did/did_cs_multi.py +++ b/monte-cover/src/montecover/did/did_cs_multi.py @@ -35,7 +35,6 @@ def __init__( def _process_config_parameters(self): """Process simulation-specific parameters from config""" # Process ML models in parameter grid - # Process ML models in parameter grid assert "learners" in self.dml_parameters, "No learners specified in the config file" required_learners = ["ml_g", "ml_m"]