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 1cbdc3f4..a86186c2 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 327962cf..681070b7 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 63f5f55b..dcd0d4cb 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 9c6921eb..231d6ecc 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 973a5b4d..9c0990d6 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 af1ef7f3..a4d1ad50 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 533a6c68..e79bee98 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 e5a74744..ae59bca1 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 628f882c..24f7c5cc 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 00000000..460677b3 --- /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 67f9f12b..47c274c1 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 1cebe4ee..11c7caff 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 4d261c12..69fe054d 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 71f156cd..fd2a3df2 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 0cfed2e0..1ed80a0e 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 28119d17..c613bd22 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 58f6121c..3915d9a5 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 245d29e3..6214313c 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 0425f326..ce71d21e 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 5ddece86..141c7b52 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 1f235561..65320fe1 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 a7ec8f21..43dec1f7 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 424e0439..c3a03846 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 0a0dbcce..d65c3760 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 6efa2891..a244f2dd 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 855afa3d..15e14f09 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 71cd93cf..8dcd30c0 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 f6afd081..ed281b27 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 0d52537e..0314d84c 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 957f0feb..e24cf23b 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 2c4e601e..fa6aeb6a 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 ac7f1c3b..c47dc3ef 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 2accaaba..1f7cde51 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 9be682bc..25c3e77b 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 144597a1..eef92e74 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 f06a03e4..5e8f0c3a 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 4a166d94..10b4e71e 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 05620e00..52a2fd95 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 3f5f7aec..692e9e9d 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 82e7fa7e..318bded5 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 d29fa778..b53600c9 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 8b847436..53d38bcf 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 aeda6b1a..10b5f0de 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 9843de13..85e5dfca 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 aafd9151..45881727 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 ab1152ae..796053c9 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 2a6a7270..480bef97 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 8aa0e561..ac073d22 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 ebbacfe3..fa57b3ed 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 6cc43290..ee250157 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 09e25312..660779d6 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 e2067bc1..f32bb8d0 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 ab715d77..f0dec11a 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 34e73dc6..7557435d 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 5fee83d4..00090408 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 7c996696..6709ccd6 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 f9773faf..20b49ff2 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 bff96f94..1f33a5ef 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 460677b3..73b4dc19 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 00000000..3f5750cb --- /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 31300f55..226716ad 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 3f5750cb..5d734661 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 6c4d2a94..65d87f2f 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 226716ad..a5ba0415 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 57be8975..f62fbaff 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 8f5490db..0f0c105d 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 11c7caff..94b8c120 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 4beb1519..d6c79d3e 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 1ffa2227..65a18713 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 3afb9b90..f0a807d2 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 7e083f5e..4a74fb78 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 90055cca..eab72ec2 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 fc5131e2..2751420e 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 7435731f..94f16ed8 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 94b8c120..5c3587ab 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 d6c79d3e..e400e910 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 9e1787a9..3b8607a0 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 c74277ba..00f4184b 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 a62fff55..01fae214 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 e9c4c498..52b5abb1 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 d4e6f36e..c552771a 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 19749427..afce285f 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 357e36c3..9869e3e5 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 57e1dd3c..215c4551 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 a5ba0415..0c75a05e 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 f861d2bb..6e48f626 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 00000000..2170119e --- /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 c47dc3ef..5ec5c1d0 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 00000000..f8b957d5 --- /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 00000000..95b94182 --- /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 65d87f2f..04f2dcdb 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 2170119e..2eff4a38 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 6e48f626..a717507c 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 00000000..bb18063b --- /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 00000000..75d133f1 --- /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 00000000..17e8c937 --- /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 0f0c105d..6857ab77 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 00000000..d9882654 --- /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 de92fa2b..6b2255d4 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 00000000..f369a734 --- /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 6857ab77..e381fa9e 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 bb18063b..af73d4fa 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 2eff4a38..c1e8f9e5 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 5ec5c1d0..cfd96309 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 af73d4fa..89aedacf 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 a717507c..68d22912 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 00000000..90ac0d3c --- /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 89aedacf..2f2bfd59 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 95b94182..40df7c26 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 00000000..f9f1f14f --- /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 00000000..ca60d7d4 --- /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 17e8c937..9c23466b 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 f62fbaff..ece025e7 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 00000000..c701676b --- /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 2050685f..a88c46dc 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 00000000..c55eeb8e --- /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 00000000..d9882654 --- /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 7ac96f58..c6800646 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 00000000..4f9538e3 --- /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 ca60d7d4..32804159 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 00000000..b73dee4a --- /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 0c75a05e..94cc46de 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 cfd96309..358aaf14 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 f32bb8d0..9d4a1ef5 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 c1e8f9e5..862772a2 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 358aaf14..cdd3376f 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 40df7c26..937851a0 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 937851a0..6da5fb0e 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 2f2bfd59..b46ec670 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 9c23466b..81eaee45 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 90ac0d3c..71d47a35 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 32804159..05194b1c 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 e24cf23b..3edfca8e 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 68d22912..167b36d8 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 00000000..69a33f3c --- /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 7557435d..2f53b984 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 00000000..cebfe1a6 --- /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 00000000..7557435d --- /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 94cc46de..99f1df53 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 cebfe1a6..1d348f33 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 a49f572d..00000000 --- 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 9869e3e5..547bf243 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 215c4551..dd4c0668 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 3edfca8e..1695e2e6 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 c701676b..9863dcf7 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 a88c46dc..b7699ebc 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 c55eeb8e..ef55f3b6 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 af73b185..d504ba65 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 db544064..310ec3e5 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 16eb5fba..548bb9f3 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 00000000..f575860b --- /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 00000000..796ebb1c --- /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 fa762a22..1257058d 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 d9882654..20ce7445 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 c6800646..f5e512df 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 4f9538e3..833a5687 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 d9882654..20ce7445 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 6b2255d4..7e72d5d2 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 f369a734..0f19bf87 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 6da5fb0e..975025fd 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 231d6ecc..22a91bc4 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 9c0990d6..20c61bfd 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 7e72d5d2..90e8c35e 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 0f19bf87..ef66b209 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 f5e512df..bf7168b9 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 833a5687..f90c6c23 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 310ec3e5..6049e487 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 548bb9f3..9eb81ce1 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 796ebb1c..434f4525 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 1257058d..d9b40471 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 b7699ebc..dabc3383 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 ef55f3b6..ea4b643b 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 fa6aeb6a..eb849347 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 67eead13..c89ef8d5 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 00000000..50efadb2 --- /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 00000000..5faaab77 --- /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 b73dee4a..dfadbbf0 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 00000000..3520881f --- /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 00000000..2192ac01 --- /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 00000000..3fec90e4 --- /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 00000000..830515ab --- /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 2192ac01..560c913d 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 5faaab77..b01caa00 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 dfadbbf0..838cb431 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 199220d3..411502ff 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 e79bee98..ea490ee5 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 4a74fb78..dce518d5 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 00000000..57d0a43e --- /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 558f06e8..f9b942e5 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 00000000..375d001f --- /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 00000000..d8b09c0e --- /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 ebec18a2..71a7b182 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 00000000..1bee1531 --- /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 5a18477e..961444bc 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 19aa007a..c055b9e9 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 33849097..0792d642 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 2977684b..24986392 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 d6d461b8..de75e59c 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 191c4eb5..67772b0c 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 333f7747..8a5c3031 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 fa871580..ed4e23a2 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 b01caa00..8c36d80c 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 830515ab..2e9cdc7e 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 d8b09c0e..1c010bd3 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 71a7b182..a9a6dea8 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 1bee1531..0c28df11 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 0792d642..ab7ab8bd 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 24986392..1c294b6d 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 de75e59c..e3035bca 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 67772b0c..86381a7f 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 8a5c3031..3dda54d5 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 00000000..e632c1bc --- /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 00000000..09b3f83a --- /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 01fae214..8d151288 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 00000000..7518278b --- /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 9ed9b191..462edd77 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 00000000..74da4df5 --- /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 00000000..7b127bd9 --- /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 00000000..ca96ddcf --- /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 e632c1bc..adc75ec1 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 00000000..17b6ad53 --- /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 00000000..c1206fec --- /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 4208c4b4..ab738e05 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 00000000..13efdf0d --- /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 00000000..97fc0f3c --- /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 00000000..3143ef10 --- /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 17b6ad53..64f72d33 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 adc75ec1..32c31963 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 00000000..73d5b972 --- /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 00000000..c1206fec --- /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 788025e4..000353f7 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 00000000..1556fdcf --- /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 00000000..6d265b38 --- /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 00000000..c09f2251 --- /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 32c31963..215381ac 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 00000000..4dbb449e --- /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 ca96ddcf..6a7a3f5b 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 00000000..829ba0e6 --- /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 00000000..2a3ba63a --- /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 8d151288..1fb79e8b 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 7518278b..d19a50a0 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 462edd77..69935e24 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 74da4df5..75d3d5fb 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 00000000..2d3c69a3 --- /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 52554880..082860b6 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 00000000..92114f43 --- /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 215381ac..6b0319f8 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 00000000..09ca0043 --- /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 b53600c9..d3651b62 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 00000000..c0d29d23 --- /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 00000000..b53600c9 --- /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 6b0319f8..e8b399ab 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 00000000..47ec91f3 --- /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 10b5f0de..f28d9c96 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 00000000..53d2fc63 --- /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 00000000..10b5f0de --- /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 dcd0d4cb..5d26a1b0 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 1fb79e8b..f30fe755 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 6e107706..00000000 --- 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 00000000..74143aae --- /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 00000000..4a63af01 --- /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 327aa8c1..d859488a 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 c0d29d23..c051ac09 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 77374838..00000000 --- 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 00000000..bf06bc63 --- /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 00000000..075e58ba --- /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 2fc4ba53..e0ae81fa 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 53d2fc63..e6df9c4c 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 e8b399ab..d23563e4 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 00000000..a2b2366f --- /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 a2b2366f..b887b7db 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 d23563e4..e4686f68 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 00000000..4b19debf --- /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 a86186c2..31ee1cbd 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 3b8607a0..376f0831 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 00000000..28213368 --- /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 00000000..511907a8 --- /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 00000000..e26657c5 --- /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 00000000..e7102c57 --- /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 00000000..5f311014 --- /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 00000000..c3529678 --- /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 00000000..601c4469 --- /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 00000000..77e80505 --- /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 00000000..e9411a56 --- /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 00000000..9250404e --- /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 00000000..acaf8cfc --- /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 77e80505..5bc012d8 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 e9411a56..40be90e5 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 9250404e..4e630ec8 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 acaf8cfc..f463b040 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 00000000..86d02b5a --- /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 00000000..ef86363e --- /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 00000000..8c82f29a --- /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 00000000..d22c31c5 --- /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 00000000..ca857513 --- /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 00000000..26099157 --- /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 00000000..ca857513 --- /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 ae59bca1..cdef61cc 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 65a18713..a396fa4a 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 f0a807d2..8eff76b9 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 00000000..6c5f9261 --- /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 00000000..91f8e898 --- /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 00000000..b21daf8e --- /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 00000000..6c5f9261 --- /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 00000000..3fe82607 --- /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 00000000..f8e47b82 --- /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 e4686f68..57050aeb 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 00000000..19180c09 --- /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 00000000..86b66f3d --- /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 00000000..f935dc33 --- /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 00000000..2195294c --- /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 00000000..f3531b48 --- /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 00000000..220aeab1 --- /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 00000000..ba717e49 --- /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 00000000..61237c09 --- /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 00000000..fcc566f7 --- /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 a4d1ad50..8304a937 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 afce285f..4b60ccc9 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 00000000..4c2e5671 --- /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 00000000..53192437 --- /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 00000000..5157d7e0 --- /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 00000000..c54c59b9 --- /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 00000000..63df2360 --- /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 00000000..81556c05 --- /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 00000000..5f9e93b4 --- /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 00000000..85abd3f0 --- /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 00000000..b4f076b9 --- /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 00000000..1ef72ffc --- /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 00000000..904a0160 --- /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 00000000..59ce7773 --- /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 00000000..e106878b --- /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 00000000..2723ea41 --- /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 00000000..ccb611e4 --- /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 10b4e71e..00000000 --- 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 52a2fd95..00000000 --- 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 692e9e9d..00000000 --- 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 318bded5..00000000 --- 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 b53600c9..00000000 --- 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 53d38bcf..00000000 --- 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 10b5f0de..00000000 --- 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 85e5dfca..00000000 --- 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 45881727..00000000 --- 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 796053c9..00000000 --- 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 480bef97..00000000 --- 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 ac073d22..00000000 --- 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 fa57b3ed..00000000 --- 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 ee250157..00000000 --- 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 f0dec11a..00000000 --- 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 7557435d..00000000 --- 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 00090408..00000000 --- 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 6709ccd6..00000000 --- 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 20b49ff2..00000000 --- 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 1f33a5ef..00000000 --- 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 53cf347b..00000000 --- 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 c055b9e9..00000000 --- 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 ab7ab8bd..00000000 --- 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 1c294b6d..00000000 --- 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 e3035bca..00000000 --- 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 86381a7f..00000000 --- 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 3dda54d5..00000000 --- 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 9119e34e..00000000 --- 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 961444bc..00000000 --- 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 ed4e23a2..00000000 --- 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 8276aac2..00000000 --- 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 0cb88dc6..00000000 --- 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 5f311014..00000000 --- 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 c3529678..00000000 --- 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 601c4469..00000000 --- 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 5bc012d8..00000000 --- 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 40be90e5..00000000 --- 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 4e630ec8..00000000 --- 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 f463b040..00000000 --- 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 4c2e5671..00000000 --- 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 53192437..00000000 --- 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 5157d7e0..00000000 --- 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 f14d35e1..00000000 --- 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 f94d6bbe..00000000 --- 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 321647fb..00000000 --- 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 7abdfa26..00000000 --- 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 c54c59b9..00000000 --- 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 63df2360..00000000 --- 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 c234ac08..00000000 --- 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 e737bef1..00000000 --- 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 e830e1b5..00000000 --- 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 3531ab7d..00000000 --- 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 2c98fb59..00000000 --- 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 1e26249b..00000000 --- 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 d19a50a0..00000000 --- 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 69935e24..00000000 --- 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 5ed7ac7f..00000000 --- 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 75d3d5fb..00000000 --- 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 74143aae..00000000 --- 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 4a63af01..00000000 --- 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 d859488a..00000000 --- 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 2d3c69a3..00000000 --- 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 082860b6..00000000 --- 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 99c4deff..00000000 --- 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 92114f43..00000000 --- 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 bf06bc63..00000000 --- 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 075e58ba..00000000 --- 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 e0ae81fa..00000000 --- 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 c1206fec..00000000 --- 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 000353f7..00000000 --- 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 771f45ff..00000000 --- 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 1556fdcf..00000000 --- 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 c1206fec..00000000 --- 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 ab738e05..00000000 --- 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 00fc71ac..00000000 --- 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 13efdf0d..00000000 --- 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 81556c05..00000000 --- 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 5f9e93b4..00000000 --- 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 85abd3f0..00000000 --- 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 d5633356..00000000 --- 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 524d87a8..00000000 --- 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 2e788da4..00000000 --- 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 53aaefaf..00000000 --- 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 b4f076b9..00000000 --- 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 1ef72ffc..00000000 --- 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 904a0160..00000000 --- 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 59ce7773..00000000 --- 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 e106878b..00000000 --- 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 4074d694..00000000 --- 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 e7b946ac..00000000 --- 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 ab976226..00000000 --- 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 c1c85e91..00000000 --- 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 2723ea41..00000000 --- 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 ccb611e4..00000000 --- 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 1bb3c807..00000000 --- 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 1653aa75..00000000 --- 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 7ba36c80..00000000 --- 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 cd143b64..00000000 --- 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 9863dcf7..00000000 --- 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 dabc3383..00000000 --- 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 7b97bb63..00000000 --- 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 ea4b643b..00000000 --- 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 d504ba65..00000000 --- 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 6049e487..00000000 --- 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 f2342052..00000000 --- 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 9eb81ce1..00000000 --- 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 f575860b..00000000 --- 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 434f4525..00000000 --- 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 d9b40471..00000000 --- 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 20ce7445..00000000 --- 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 bf7168b9..00000000 --- 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 fe8d34a1..00000000 --- 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 f90c6c23..00000000 --- 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 20ce7445..00000000 --- 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 90e8c35e..00000000 --- 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 334d6bac..00000000 --- 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 ef66b209..00000000 --- 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 1c010bd3..00000000 --- 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 a9a6dea8..00000000 --- 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 6c9e78aa..00000000 --- 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 0c28df11..00000000 --- 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 57d0a43e..00000000 --- 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 f9b942e5..00000000 --- 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 586a02d9..00000000 --- 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 375d001f..00000000 --- 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 6c5f9261..00000000 --- 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 91f8e898..00000000 --- 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 b21daf8e..00000000 --- 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 6c5f9261..00000000 --- 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 3fe82607..00000000 --- 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 f8e47b82..00000000 --- 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 57050aeb..6c097267 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 00000000..2f1ac1f7 --- /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 00000000..c6b7942f --- /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 00000000..07a7185f --- /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 681070b7..a8dcc980 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 00f4184b..7dd53c28 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 a8dcc980..b7cb7870 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 00000000..262ed8d0 --- /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 00000000..174966ef --- /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 00000000..136e8e0b --- /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 262ed8d0..d5491113 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 174966ef..dcd3993e 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 136e8e0b..0ab74ee7 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 07a7185f..b81c8566 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 00000000..74143aae --- /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 00000000..f538604d --- /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 00000000..e47f1376 --- /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 00000000..bf06bc63 --- /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 00000000..d592177d --- /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 00000000..06469e73 --- /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 00000000..aa9f3051 --- /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 00000000..40be90e5 --- /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 00000000..d672bd20 --- /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 00000000..10c6d4cb --- /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 00000000..5f311014 --- /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 00000000..cb1bc37e --- /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 00000000..443288cb --- /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 00000000..c1206fec --- /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 00000000..30f5e71f --- /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 00000000..b66fe1e2 --- /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 00000000..c1206fec --- /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 00000000..14cd1609 --- /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 00000000..4bd0baf3 --- /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 00000000..4c25ee7c --- /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 00000000..8fddf73f --- /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 00000000..5157d7e0 --- /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 00000000..b17f3f47 --- /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 00000000..6db12aed --- /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 00000000..fa7c0a3c --- /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 00000000..ba4fa63c --- /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 00000000..85abd3f0 --- /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 00000000..2e1488a9 --- /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 00000000..47bab20d --- /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 00000000..ff0b3acb --- /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 00000000..3cb5336c --- /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 00000000..e106878b --- /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 00000000..710de75c --- /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 00000000..bf12575b --- /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 00000000..d19a50a0 --- /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 00000000..46ebf4ce --- /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 00000000..03c57996 --- /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 00000000..2d3c69a3 --- /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 00000000..5b682314 --- /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 00000000..876cac0d --- /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 00000000..20ce7445 --- /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 00000000..c95af2f8 --- /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 00000000..be41517c --- /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 00000000..20ce7445 --- /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 00000000..df0c44bf --- /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 00000000..c820b6d7 --- /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 00000000..d504ba65 --- /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 00000000..751fcac6 --- /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 00000000..c6aa9c18 --- /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 00000000..f575860b --- /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 00000000..cd2031e7 --- /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 00000000..24030fe1 --- /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 cdef61cc..071a5563 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 00000000..57d0a43e --- /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 00000000..e6fe699d --- /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 00000000..4c44c960 --- /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 00000000..9863dcf7 --- /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 00000000..1a876b31 --- /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 00000000..18f9cba9 --- /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 00000000..6c5f9261 --- /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 00000000..9a3d2258 --- /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 00000000..0eab540d --- /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 00000000..1c010bd3 --- /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 00000000..a6c0a42d --- /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 00000000..ca7af26c --- /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 00000000..6c5f9261 --- /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 00000000..aa8edb2d --- /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 00000000..b659c07b --- /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 00000000..57940d80 --- /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 00000000..3777945e --- /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 00000000..759e756c --- /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 00000000..6ec764b8 --- /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 00000000..b56b0191 --- /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 00000000..72961df3 --- /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 00000000..9119e34e --- /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 00000000..1f17571a --- /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 00000000..53cf347b --- /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 00000000..08604a2a --- /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 57940d80..924bb008 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 3777945e..d0cc9a1c 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 759e756c..93cf706f 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 6ec764b8..eddd880c 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 b56b0191..c2b076e9 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 72961df3..ed4e23a2 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 924bb008..c996df8c 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 d0cc9a1c..22416195 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 93cf706f..378a6a58 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 eddd880c..28b7a8cf 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 c2b076e9..166a58b4 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 ed4e23a2..7ef23dd6 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 c89ef8d5..ad33a5d5 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 f30fe755..a25087c1 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 52b5abb1..df2d3c67 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 c552771a..9224fae3 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 04f2dcdb..eb3b455d 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 99f1df53..f9e93043 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 ece025e7..15810255 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 e381fa9e..d32bd4ef 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 dce518d5..31cdddb8 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 3915d9a5..0928c0f5 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 5d734661..24ed8f59 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 00000000..626952dc --- /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 00000000..2115026e --- /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 0928c0f5..2302fd07 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 24ed8f59..f932fe99 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 626952dc..e7c34cf4 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 2115026e..3e98bed3 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 2ddf50c7..951e1214 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 5aecac30..e14a6ddb 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 00000000..4adc0fbd --- /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 00000000..c0a6c380 --- /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 00000000..018557a0 --- /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 00000000..4c7a1761 --- /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 00000000..3f0433a5 --- /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 00000000..73abd9f9 --- /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 00000000..97fa67eb --- /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 00000000..8cea1ac0 --- /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 00000000..15f5c80e --- /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 411502ff..65fc56e6 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 e7c34cf4..0362df67 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 e400e910..f262d9d1 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 00000000..fba42d58 --- /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 4c7a1761..d469e0b4 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 3f0433a5..795dc0d0 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 73abd9f9..1b97a500 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 97fa67eb..795a81c7 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 8cea1ac0..3434afe7 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 15f5c80e..393f4eb2 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 018557a0..f1cdc060 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 f262d9d1..4bf06b85 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 2751420e..b004299f 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 2302fd07..8196e7f7 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 c996df8c..00000000 --- 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 22416195..00000000 --- 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 378a6a58..00000000 --- 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 28b7a8cf..00000000 --- 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 166a58b4..00000000 --- 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 7ef23dd6..83d9a598 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 00000000..03365be5 --- /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 00000000..1b21f545 --- /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 00000000..5f214888 --- /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 00000000..1a3d408e --- /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 00000000..5de9bd41 --- /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 5e8f0c3a..5e90ee97 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 ad33a5d5..2031a60b 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 4adc0fbd..ea11cd25 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"]