diff --git a/.devcontainer/Dockerfile.dev b/.devcontainer/Dockerfile.dev
new file mode 100644
index 00000000..c5583ebb
--- /dev/null
+++ b/.devcontainer/Dockerfile.dev
@@ -0,0 +1,73 @@
+FROM ubuntu:24.04
+
+# Set non-interactive mode to avoid prompts
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Update package list and install dependencies
+RUN apt-get update && \
+ apt-get install -y \
+ software-properties-common \
+ graphviz \
+ wget \
+ dirmngr \
+ gnupg \
+ apt-transport-https \
+ ca-certificates \
+ git \
+ cmake
+
+# Install locale packages
+RUN apt-get update && \
+ apt-get install -y locales && \
+ locale-gen en_US.UTF-8 && \
+ update-locale LANG=en_US.UTF-8
+
+# Set environment variables for locale
+ENV LANG=en_US.UTF-8
+ENV LANGUAGE=en_US:en
+ENV LC_ALL=en_US.UTF-8
+
+# Install Python 3.12
+RUN add-apt-repository ppa:deadsnakes/ppa && \
+ apt-get update && \
+ apt-get install -y python3.12 python3.12-venv python3.12-dev python3-pip python3-full && \
+ apt-get clean && rm -rf /var/lib/apt/lists/*
+
+# Set Python 3.12 as the default for both python and python3
+RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1 && \
+ update-alternatives --install /usr/bin/python python /usr/bin/python3.12 1
+
+# Add R repository and install R
+RUN wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc && \
+ add-apt-repository 'deb https://cloud.r-project.org/bin/linux/ubuntu noble-cran40/' && \
+ apt-get update && \
+ apt-get install -y r-base r-base-dev zlib1g-dev libicu-dev pandoc make libcurl4-openssl-dev libssl-dev
+
+# Install Python packages
+COPY requirements.txt /tmp/requirements.txt
+RUN python -m venv /opt/venv && \
+ /opt/venv/bin/python -m pip install --upgrade pip && \
+ /opt/venv/bin/pip install -r /tmp/requirements.txt
+
+# Set the virtual environment as the default Python environment
+ENV PATH="/opt/venv/bin:$PATH"
+
+# Check out the repo containing the Python package DoubleML (dev)
+RUN git clone https://github.com/DoubleML/doubleml-for-py.git /doubleml-for-py
+WORKDIR /doubleml-for-py
+RUN /opt/venv/bin/pip uninstall -y DoubleML && \
+ /opt/venv/bin/pip install -e .[rdd]
+
+# Create a directory for R user libraries and set the default R user library path
+RUN mkdir -p /usr/local/lib/R/site-library
+ENV R_LIBS_USER=/usr/local/lib/R/site-library
+
+# Install R packages and Jupyter kernel
+RUN Rscript -e "install.packages('remotes')" && \
+ Rscript -e "remotes::install_github('DoubleML/doubleml-for-r', dependencies = TRUE)" && \
+ Rscript -e "install.packages(c('ggplot2', 'IRkernel', 'xgboost', 'hdm', 'reshape2', 'gridExtra', 'igraph', 'mlr3filters', 'mlr3measures', 'did', dependencies=TRUE))" && \
+ Rscript -e "IRkernel::installspec()"
+
+# Set the working directory
+WORKDIR /workspace
+
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 00000000..b2900011
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,46 @@
+{
+ "name": "DoubleML Documentation Development",
+ "dockerFile": "Dockerfile.dev", // Path to your Dockerfile
+ "context": "..", // Context for the build (root of your project)
+ "workspaceFolder": "/workspace", // Folder inside the container for your project
+ // Customizations for VS Code
+ "customizations": {
+ "vscode": {
+ "extensions": [
+ "ms-python.python", // Python extension for VS Code
+ "ms-azuretools.vscode-docker", // Docker integration for VS Code
+ "njpwerner.autodocstring", // Optional: Auto-generate docstrings
+ "ms-python.black-formatter", // Optional: Black formatter
+ "streetsidesoftware.code-spell-checker", // Optional: Spell checker
+ "github.copilot" // Add GitHub Copilot extension
+ "GitHub.github-vscode-theme", // GitHub theme
+ "github.vscode-github-actions" // GitHub Actions extension
+ "ms-toolsai.jupyter", // Jupyter extension
+ "charliermarsh.ruff" // Ruff extension
+ ],
+ "settings": {
+ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", // Poetry virtual environment path
+ "editor.formatOnSave": true, // Auto-format code when saving
+ "editor.codeActionsOnSave": {
+ "source.organizeImports": true // Auto-organize imports on save
+ },
+ "python.linting.enabled": true, // Enable linting
+ "python.linting.flake8Enabled": false, // Disable Flake8 for linting
+ "python.linting.ruffEnabled": true, // Enable Ruff for linting
+ "python.formatting.provider": "black", // Use Black for formatting
+ "python.testing.pytestEnabled": false, // Enable Pytest for testing
+ "python.testing.pytestArgs": [],
+ "python.testing.unittestEnabled": false,
+ "files.exclude": {
+ "**/__pycache__": true, // Hide __pycache__ directories
+ "**/*.pyc": true, // Hide .pyc files
+ "**/.DS_Store": true // Hide .DS_Store files (macOS)
+ }
+ }
+ }
+ },
+ "mounts": [
+ "source=${localWorkspaceFolder},target=/workspace,type=bind" // Mount your local workspace into the container
+ ],
+ "remoteUser": "root" // Set the user inside the container
+}
\ No newline at end of file
diff --git a/.devcontainer/guide.md b/.devcontainer/guide.md
new file mode 100644
index 00000000..d508dfd2
--- /dev/null
+++ b/.devcontainer/guide.md
@@ -0,0 +1,64 @@
+# Build Documentation with Development Container
+
+This guide shows how to use WSL2 (Windows Subsystem for Linux), Docker Desktop, Visual Studio Code (VS Code), and how to work with Development Containers in VS Code on a Windows machine.
+
+Requirements:
+ - [VS Code](https://code.visualstudio.com/)
+ - [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install)
+ - [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/)
+
+## Verify installations & Setup
+
+You can verify the installations in a terminal:
+
+ ```bash
+ code --version
+ wsl --version
+ docker --version
+ ```
+
+### Configure Docker to Use WSL2
+
+ See [Docker Desktop Documentation](https://docs.docker.com/desktop/features/wsl/#turn-on-docker-desktop-wsl-2).
+ - Open Docker Desktop.
+ - Go to **Settings > General** and make sure **Use the WSL 2 based engine** is checked.
+ - Under **Settings > Resources > WSL Integration**, ensure that your desired Linux distribution(s) are selected for integration with Docker.
+
+### Install Extensions
+
+ - Open Visual Studio Code.
+ - Press `Ctrl+Shift+X` to open the Extensions view.
+ - Search and install (includes WSL and Dev Containers Extensions):
+ - [Remote Development Extension Pack](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack)
+
+ VS Code Documentations:
+ - [Developing in WSL](https://code.visualstudio.com/docs/remote/wsl)
+ - [Developing inside a Container](https://code.visualstudio.com/docs/devcontainers/containers)
+
+
+## Build & Open the Development Container
+
+ - Open the project `doubleml-docs` in VS code:
+
+ ```bash
+ code .
+ ```
+
+ - Open the Command Palette (`Ctrl+Shift+P`).
+ - Type `Remote-Containers: Reopen Folder in Container`.
+ - VS Code will build the new container(this may take some time) and open the project in it.
+
+
+## Build the documentation
+
+You can build the documentation via
+
+ ```bash
+ cd doc
+ make html
+ ```
+
+ Open the directory in WSL with
+ ```bash
+ explorer.exe .
+ ```
\ No newline at end of file
diff --git a/.github/workflows/deploy_docu_dev.yml b/.github/workflows/deploy_docu_dev.yml
index 3a70eb72..35f8631e 100644
--- a/.github/workflows/deploy_docu_dev.yml
+++ b/.github/workflows/deploy_docu_dev.yml
@@ -76,7 +76,7 @@ jobs:
- name: Build docu with sphinx
run: |
- make -C doc html # build docu
+ make -C doc html
- name: Deploy to dev
uses: JamesIves/github-pages-deploy-action@v4
diff --git a/.github/workflows/deploy_docu_stable.yml b/.github/workflows/deploy_docu_stable.yml
index 9260259b..d2c25664 100644
--- a/.github/workflows/deploy_docu_stable.yml
+++ b/.github/workflows/deploy_docu_stable.yml
@@ -65,7 +65,7 @@ jobs:
- name: Build docu with sphinx
run: |
- make -C doc html # build docu
+ make -C doc html
- name: Deploy to stable
uses: JamesIves/github-pages-deploy-action@v4
diff --git a/.github/workflows/test_build_docu_dev.yml b/.github/workflows/test_build_docu_dev.yml
index 33d6f972..ef5989de 100644
--- a/.github/workflows/test_build_docu_dev.yml
+++ b/.github/workflows/test_build_docu_dev.yml
@@ -20,6 +20,10 @@ on:
description: 'Branch in https://github.com/DoubleML/doubleml-for-r'
required: true
default: 'main'
+ nbsphinx-execute:
+ description: 'Execute notebooks with nbsphinx'
+ required: false
+ default: 'auto'
schedule:
- cron: "0 9 * * 1,3,5"
@@ -113,7 +117,7 @@ jobs:
- name: Build docu with sphinx
run: |
- make -C doc html # build docu
+ make -C doc html NBSPHINX_EXECUTE=${{ github.event.inputs.nbsphinx-execute || 'auto' }}
- name: Check for broken links / URLs
run: |
diff --git a/.github/workflows/test_build_docu_released.yml b/.github/workflows/test_build_docu_released.yml
index 518fe29c..9d621880 100644
--- a/.github/workflows/test_build_docu_released.yml
+++ b/.github/workflows/test_build_docu_released.yml
@@ -11,6 +11,11 @@ on:
- main
- dev
workflow_dispatch:
+ inputs:
+ nbsphinx-execute:
+ description: 'Execute notebooks with nbsphinx'
+ required: false
+ default: 'auto'
schedule:
- cron: "0 9 * * 1,3,5"
@@ -74,9 +79,10 @@ jobs:
- name: Build docu with sphinx
run: |
- make -C doc html # build docu
+ make -C doc html NBSPHINX_EXECUTE=${{ github.event.inputs.nbsphinx-execute || 'auto' }}
- name: Check for broken links / URLs
+
run: |
make -C doc linkcheck
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 13566b81..00000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/.idea/doubleml-docs.iml b/.idea/doubleml-docs.iml
deleted file mode 100644
index 039314de..00000000
--- a/.idea/doubleml-docs.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
deleted file mode 100644
index 105ce2da..00000000
--- a/.idea/inspectionProfiles/profiles_settings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 84a450c8..00000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 71901565..00000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/rGraphicsSettings.xml b/.idea/rGraphicsSettings.xml
deleted file mode 100644
index bcc5a04c..00000000
--- a/.idea/rGraphicsSettings.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/rSettings.xml b/.idea/rSettings.xml
deleted file mode 100644
index e3f0605a..00000000
--- a/.idea/rSettings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7f..00000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/doc/.gitignore b/doc/.gitignore
index e35d8850..e17e9bdf 100644
--- a/doc/.gitignore
+++ b/doc/.gitignore
@@ -1 +1,4 @@
_build
+
+# Ignore generated API documentation
+api/generated/
\ No newline at end of file
diff --git a/doc/Makefile b/doc/Makefile
index d4bb2cbb..9c168ec5 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -7,6 +7,11 @@ SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
+NBSPHINX_EXECUTE = auto
+
+# Add NBSPHINX_EXECUTE to SPHINXOPTS
+SPHINXOPTS += -D nbsphinx_execute=$(NBSPHINX_EXECUTE)
+
# Put it first so that "make" without argument is like "make help".
help:
diff --git a/doc/_static/switcher.json b/doc/_static/switcher.json
new file mode 100644
index 00000000..e2188147
--- /dev/null
+++ b/doc/_static/switcher.json
@@ -0,0 +1,13 @@
+[
+ {
+ "name": "dev",
+ "version": "dev",
+ "url": "https://docs.doubleml.org/dev/"
+ },
+ {
+ "name": "stable",
+ "version": "stable",
+ "url": "https://docs.doubleml.org/stable/",
+ "preferred": true
+ }
+]
\ No newline at end of file
diff --git a/doc/api/api.rst b/doc/api/api.rst
index 5844055a..3a428cca 100644
--- a/doc/api/api.rst
+++ b/doc/api/api.rst
@@ -1,125 +1,22 @@
.. _python_api:
-API reference
-=============
-
-Double machine learning data class
-----------------------------------
-
-.. currentmodule:: doubleml
-
-.. autosummary::
- :toctree: generated/
- :template: class.rst
-
- DoubleMLData
- DoubleMLClusterData
-
-Double machine learning models
-------------------------------
-
-.. currentmodule:: doubleml
-
-.. autosummary::
- :toctree: generated/
- :template: class.rst
-
- DoubleMLPLR
- DoubleMLPLIV
- DoubleMLIRM
- DoubleMLAPO
- DoubleMLAPOS
- DoubleMLIIVM
- DoubleMLDID
- DoubleMLDIDCS
- DoubleMLSSM
- DoubleMLPQ
- DoubleMLLPQ
- DoubleMLCVAR
- DoubleMLQTE
-
-Other models
-------------------------------
-.. currentmodule:: doubleml
-
-.. autosummary::
- :toctree: generated/
- :template: class.rst
-
- rdd.RDFlex
-
-Datasets module
----------------
-
+:parenttoc: True
-Dataset loaders
-~~~~~~~~~~~~~~~
-
-.. currentmodule:: doubleml
-
-.. autosummary::
- :toctree: generated/
-
- datasets.fetch_401K
- datasets.fetch_bonus
-
-Dataset generators
-~~~~~~~~~~~~~~~~~~
-
-.. currentmodule:: doubleml
-
-.. autosummary::
- :toctree: generated/
-
- datasets.make_plr_CCDDHNR2018
- datasets.make_pliv_CHS2015
- datasets.make_irm_data
- datasets.make_iivm_data
- datasets.make_plr_turrell2018
- datasets.make_pliv_multiway_cluster_CKMS2021
- datasets.make_did_SZ2020
- datasets.make_ssm_data
- datasets.make_confounded_plr_data
- datasets.make_confounded_irm_data
- datasets.make_heterogeneous_data
- datasets.make_irm_data_discrete_treatments
- rdd.datasets.make_simple_rdd_data
-
-Utility classes and functions
------------------------------
-
-Utility classes
-~~~~~~~~~~~~~~~
-
-.. currentmodule:: doubleml
-
-.. autosummary::
- :toctree: generated/
- :template: class.rst
-
- utils.DMLDummyRegressor
- utils.DMLDummyClassifier
- utils.DoubleMLBLP
- utils.DoubleMLPolicyTree
-
-Utility functions
-~~~~~~~~~~~~~~~~~
+API Reference
+=============
-.. currentmodule:: doubleml
+.. toctree::
+ :maxdepth: 2
+ :numbered:
-.. autosummary::
- :toctree: generated/
+ DoubleML Data Class
+ DoubleML Models
+ Other Models
+ Datasets
+ Utility Classes and Functions
+ Score Mixin Classes for DoubleML Models
- utils.gain_statistics
-Score mixin classes for double machine learning models
-------------------------------------------------------
-.. currentmodule:: doubleml
-.. autosummary::
- :toctree: generated/
- :template: class.rst
- double_ml_score_mixins.LinearScoreMixin
- double_ml_score_mixins.NonLinearScoreMixin
diff --git a/doc/api/data_class.rst b/doc/api/data_class.rst
new file mode 100644
index 00000000..312bc2f4
--- /dev/null
+++ b/doc/api/data_class.rst
@@ -0,0 +1,13 @@
+.. _api_data_class:
+
+DoubleML Data Class
+----------------------------------
+
+.. currentmodule:: doubleml
+
+.. autosummary::
+ :toctree: generated/
+ :template: class.rst
+
+ DoubleMLData
+ DoubleMLClusterData
diff --git a/doc/api/datasets.rst b/doc/api/datasets.rst
new file mode 100644
index 00000000..5e1497d9
--- /dev/null
+++ b/doc/api/datasets.rst
@@ -0,0 +1,37 @@
+.. _api_datasets:
+
+Datasets
+---------
+
+Dataset Loaders
+~~~~~~~~~~~~~~~
+
+.. currentmodule:: doubleml
+
+.. autosummary::
+ :toctree: generated/
+
+ datasets.fetch_401K
+ datasets.fetch_bonus
+
+Dataset Generators
+~~~~~~~~~~~~~~~~~~
+
+.. currentmodule:: doubleml
+
+.. autosummary::
+ :toctree: generated/
+
+ datasets.make_plr_CCDDHNR2018
+ datasets.make_pliv_CHS2015
+ datasets.make_irm_data
+ datasets.make_iivm_data
+ datasets.make_plr_turrell2018
+ datasets.make_pliv_multiway_cluster_CKMS2021
+ datasets.make_did_SZ2020
+ datasets.make_ssm_data
+ datasets.make_confounded_plr_data
+ datasets.make_confounded_irm_data
+ datasets.make_heterogeneous_data
+ datasets.make_irm_data_discrete_treatments
+ rdd.datasets.make_simple_rdd_data
\ No newline at end of file
diff --git a/doc/api/dml_models.rst b/doc/api/dml_models.rst
new file mode 100644
index 00000000..84f5b8cb
--- /dev/null
+++ b/doc/api/dml_models.rst
@@ -0,0 +1,24 @@
+.. _api_dml_models:
+
+DoubleML Models
+------------------------------
+
+.. currentmodule:: doubleml
+
+.. autosummary::
+ :toctree: generated/
+ :template: class.rst
+
+ DoubleMLPLR
+ DoubleMLPLIV
+ DoubleMLIRM
+ DoubleMLAPO
+ DoubleMLAPOS
+ DoubleMLIIVM
+ DoubleMLDID
+ DoubleMLDIDCS
+ DoubleMLSSM
+ DoubleMLPQ
+ DoubleMLLPQ
+ DoubleMLCVAR
+ DoubleMLQTE
\ No newline at end of file
diff --git a/doc/api/mixins.rst b/doc/api/mixins.rst
new file mode 100644
index 00000000..bd61fb5d
--- /dev/null
+++ b/doc/api/mixins.rst
@@ -0,0 +1,13 @@
+.. _api_mixins:
+
+Score Mixin Classes for DoubleML Models
+---------------------------------------
+
+.. currentmodule:: doubleml
+
+.. autosummary::
+ :toctree: generated/
+ :template: class.rst
+
+ double_ml_score_mixins.LinearScoreMixin
+ double_ml_score_mixins.NonLinearScoreMixin
diff --git a/doc/api/other_models.rst b/doc/api/other_models.rst
new file mode 100644
index 00000000..2595dd30
--- /dev/null
+++ b/doc/api/other_models.rst
@@ -0,0 +1,11 @@
+.. _api_other_models:
+
+Other models
+------------------------------
+.. currentmodule:: doubleml
+
+.. autosummary::
+ :toctree: generated/
+ :template: class.rst
+
+ rdd.RDFlex
diff --git a/doc/api/utility.rst b/doc/api/utility.rst
new file mode 100644
index 00000000..28367bde
--- /dev/null
+++ b/doc/api/utility.rst
@@ -0,0 +1,30 @@
+.. _api_utility:
+
+Utility Classes and Functions
+-----------------------------
+
+Utility Classes
+~~~~~~~~~~~~~~~
+
+.. currentmodule:: doubleml
+
+.. autosummary::
+ :toctree: generated/
+ :template: class.rst
+
+ utils.DMLDummyRegressor
+ utils.DMLDummyClassifier
+ utils.DoubleMLBLP
+ utils.DoubleMLPolicyTree
+ utils.GlobalRegressor
+ utils.GlobalClassifier
+
+Utility Functions
+~~~~~~~~~~~~~~~~~
+
+.. currentmodule:: doubleml
+
+.. autosummary::
+ :toctree: generated/
+
+ utils.gain_statistics
\ No newline at end of file
diff --git a/doc/conf.py b/doc/conf.py
index 90686507..560e98e8 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -12,8 +12,10 @@
#
import os
import sys
-sys.path.insert(0, os.path.abspath('..'))
+import doubleml
+
+sys.path.insert(0, os.path.abspath('..'))
# -- Project information -----------------------------------------------------
@@ -66,29 +68,79 @@
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
-#
html_theme = 'pydata_sphinx_theme'
+# version for the switcher
+if "dev" in doubleml.__version__:
+ version = "dev"
+else:
+ version = "stable"
+
html_theme_options = {
- 'github_url': 'https://github.com/DoubleML/doubleml-for-py',
- 'navigation_with_keys': False,
+ "navigation_with_keys": False,
+ "navbar_start": ["navbar-logo"],
+ "navbar_center": ["navbar-nav"],
+ "navbar_persistent": ["search-field"],
+ "navbar_end": ["theme-switcher", "navbar-icon-links", "version-switcher"],
+ "show_nav_level": 2,
+ "collapse_navigation": True,
+ "navigation_depth": 4,
+ "show_toc_level": 2,
+ "navbar_align": "left",
+ "logo": {
+ "text": project,
+ "image_light": "img/logo.png",
+ "image_dark": "img/logo_dark.png",
+ },
"header_links_before_dropdown": 6,
+ "use_edit_page_button": True,
+ "secondary_sidebar_items": ["page-toc", "edit-this-page", "sourcelink"],
+ "icon_links": [
+ {
+ "name": "GitHub",
+ "url": "https://github.com/DoubleML/doubleml-for-py",
+ "icon": "fa-brands fa-square-github",
+ "type": "fontawesome",
+ },
+ {
+ "name": "PyPI",
+ "url": "https://pypi.org/project/DoubleML/",
+ "icon": "fa-solid fa-cube",
+ "type": "fontawesome",
+ },
+ ],
+ "switcher": {
+ "json_url": "https://docs.doubleml.org/dev/_static/switcher.json",
+ "version_match": version,
+ },
+ "show_version_warning_banner": True,
+ "check_switcher": False,
+ "announcement": "Interested to learn more? We offer DoubleML Trainings!",
}
-# html_logo = '../img/logo.png'
html_extra_path = ['../img/logo.png', '../img/logo_dark.png']
html_favicon = '../img/favicon.ico'
-html_sidebars = {'**': ['logo.html',
- 'search-field.html',
- 'sidebar-nav-bs.html'],
- 'workflow/workflow': ['logo.html',
- 'search-field.html',
- 'sidebar-nav-bs.html',
- 'sidebar-doubleml-workflow.html'],
- 'guide/guide': ['logo.html',
- 'search-field.html',
- 'sidebar-nav-bs.html']}
+html_sidebars = {
+ '**': [
+ 'logo.html',
+ 'search-field.html',
+ 'sidebar-nav-bs.html',
+ ],
+ 'index': [],
+ 'intro/install': [],
+ 'intro/intro': [],
+ 'workflow/workflow': [],
+ 'literature/literature': [],
+ 'release/release': [],
+}
+
+html_context = {
+ "github_user": "DoubleML",
+ "github_repo": "doubleml-docs",
+ "github_version": "dev",
+ "doc_path": "doc",
+}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
@@ -212,4 +264,4 @@
jupyter_sphinx_linenos = False
# option to disable the execution of notebooks
-nbsphinx_execute = "auto" # "auto" | "always" | "never"
+nbsphinx_execute = os.getenv("NBSPHINX_EXECUTE", "auto") # Default is "auto"
diff --git a/doc/examples/py_double_ml_cate.ipynb b/doc/examples/py_double_ml_cate.ipynb
index 62b7966b..ffaa14bf 100644
--- a/doc/examples/py_double_ml_cate.ipynb
+++ b/doc/examples/py_double_ml_cate.ipynb
@@ -33,7 +33,7 @@
"\n",
"We define a data generating process to create synthetic data to compare the estimates to the true effect. The data generating process is based on the Monte Carlo simulation from [Oprescu et al. (2019)](http://proceedings.mlr.press/v97/oprescu19a.html).\n",
"\n",
- "The documentation of the data generating process can be found [here](https://docs.doubleml.org/dev/api/api.html#dataset-generators)."
+ "The documentation of the data generating process can be found [here](https://docs.doubleml.org/dev/api/datasets.html#dataset-generators)."
]
},
{
diff --git a/doc/examples/py_double_ml_cate_plr.ipynb b/doc/examples/py_double_ml_cate_plr.ipynb
index 62beab2e..ef9dccd3 100644
--- a/doc/examples/py_double_ml_cate_plr.ipynb
+++ b/doc/examples/py_double_ml_cate_plr.ipynb
@@ -30,7 +30,7 @@
"\n",
"We define a data generating process to create synthetic data to compare the estimates to the true effect. The data generating process is based on the Monte Carlo simulation from [Oprescu et al. (2019)](http://proceedings.mlr.press/v97/oprescu19a.html).\n",
"\n",
- "The documentation of the data generating process can be found [here](https://docs.doubleml.org/dev/api/api.html#dataset-generators)."
+ "The documentation of the data generating process can be found [here](https://docs.doubleml.org/dev/api/datasets.html#dataset-generators)."
]
},
{
diff --git a/doc/examples/py_double_ml_gate.ipynb b/doc/examples/py_double_ml_gate.ipynb
index 382a6476..adf83167 100644
--- a/doc/examples/py_double_ml_gate.ipynb
+++ b/doc/examples/py_double_ml_gate.ipynb
@@ -33,7 +33,7 @@
"\n",
"We define a data generating process to create synthetic data to compare the estimates to the true effect. The data generating process is based on the Monte Carlo simulation from [Oprescu et al. (2019)](http://proceedings.mlr.press/v97/oprescu19a.html).\n",
"\n",
- "The documentation of the data generating process can be found [here](https://docs.doubleml.org/dev/api/api.html#dataset-generators). In this example the true effect depends only the first covariate $X_0$ and takes the following form\n",
+ "The documentation of the data generating process can be found [here](https://docs.doubleml.org/dev/api/datasets.html#dataset-generators). In this example the true effect depends only the first covariate $X_0$ and takes the following form\n",
"\n",
"$$\n",
"\\theta_0(X) = \\exp(2X_0) + 3\\sin(4X_0).\n",
diff --git a/doc/examples/py_double_ml_gate_plr.ipynb b/doc/examples/py_double_ml_gate_plr.ipynb
index d399768a..b8308fc8 100644
--- a/doc/examples/py_double_ml_gate_plr.ipynb
+++ b/doc/examples/py_double_ml_gate_plr.ipynb
@@ -30,7 +30,7 @@
"\n",
"We define a data generating process to create synthetic data to compare the estimates to the true effect. The data generating process is based on the Monte Carlo simulation from [Oprescu et al. (2019)](http://proceedings.mlr.press/v97/oprescu19a.html).\n",
"\n",
- "The documentation of the data generating process can be found [here](https://docs.doubleml.org/dev/api/api.html#dataset-generators). In this example the true effect depends only the first covariate $X_0$ and takes the following form\n",
+ "The documentation of the data generating process can be found [here](https://docs.doubleml.org/dev/api/datasets.html#dataset-generators). In this example the true effect depends only the first covariate $X_0$ and takes the following form\n",
"\n",
"$$\n",
"\\theta_0(X) = \\exp(2X_0) + 3\\sin(4X_0).\n",
diff --git a/doc/examples/py_double_ml_pension.ipynb b/doc/examples/py_double_ml_pension.ipynb
index b713ae1a..251baf7b 100644
--- a/doc/examples/py_double_ml_pension.ipynb
+++ b/doc/examples/py_double_ml_pension.ipynb
@@ -94,23 +94,6 @@
"data = fetch_401K(return_type='DataFrame')"
]
},
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "853ba4be",
- "metadata": {},
- "outputs": [],
- "source": [
- "# Temporary fix for https://github.com/DoubleML/doubleml-docs/issues/45 / https://github.com/scikit-learn/scikit-learn/issues/21997\n",
- "# Can be removed when scikit-learn version 1.2.0 is released\n",
- "dtypes = data.dtypes\n",
- "dtypes['nifa'] = 'float64'\n",
- "dtypes['net_tfa'] = 'float64'\n",
- "dtypes['tw'] = 'float64'\n",
- "dtypes['inc'] = 'float64'\n",
- "data = data.astype(dtypes)"
- ]
- },
{
"cell_type": "code",
"execution_count": null,
@@ -1179,7 +1162,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.2"
+ "version": "3.12.4"
},
"vscode": {
"interpreter": {
diff --git a/doc/examples/py_double_ml_rdflex.ipynb b/doc/examples/py_double_ml_rdflex.ipynb
index d01b17ac..c7b5edb3 100644
--- a/doc/examples/py_double_ml_rdflex.ipynb
+++ b/doc/examples/py_double_ml_rdflex.ipynb
@@ -232,7 +232,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "It is visible that the flexible adjustment decreases the standard error in the estimation and therefore provides tighter confidence intervals. For coverage simulations, see the [DoubleML Coverage Repository](https://docs.doubleml.org/doubleml-coverage/dev/rdd/rdd.html).\n",
+ "It is visible that the flexible adjustment decreases the standard error in the estimation and therefore provides tighter confidence intervals. For coverage simulations, see the [DoubleML Coverage Repository](https://docs.doubleml.org/doubleml-coverage/rdd/rdd.html).\n",
"\n",
"`RDFlex` uses an iterative fitting approach to determine a preliminary bandwidth selections for the local adjustments. The default number of iterations is `n_iterations=2`, according to [Noack, Olma and Rothe (2024)](https://arxiv.org/abs/2107.07942)."
]
diff --git a/doc/guide/guide.rst b/doc/guide/guide.rst
index 10f0a830..2c2566cb 100644
--- a/doc/guide/guide.rst
+++ b/doc/guide/guide.rst
@@ -2,7 +2,7 @@
:parenttoc: True
-User guide
+User Guide
==========
.. toctree::
diff --git a/doc/guide/heterogeneity.rst b/doc/guide/heterogeneity.rst
index 12db4f71..a7cfcd85 100644
--- a/doc/guide/heterogeneity.rst
+++ b/doc/guide/heterogeneity.rst
@@ -345,7 +345,7 @@ Estimation is conducted via its ``fit()`` method:
np.random.seed(3141)
ml_g = RandomForestClassifier(n_estimators=100, max_features=20, max_depth=10, min_samples_leaf=2)
ml_m = RandomForestClassifier(n_estimators=100, max_features=20, max_depth=10, min_samples_leaf=2)
- data = make_iivm_data(theta=0.5, n_obs=1000, dim_x=20, return_type='DataFrame')
+ data = make_iivm_data(theta=0.5, n_obs=2000, dim_x=20, return_type='DataFrame')
obj_dml_data = dml.DoubleMLData(data, 'y', 'd', z_cols='z')
dml_lpq_obj = dml.DoubleMLLPQ(obj_dml_data, ml_g, ml_m, treatment=1, quantile=0.5)
dml_lpq_obj.fit().summary
diff --git a/doc/guide/sensitivity/apo_sensitivity.rst b/doc/guide/sensitivity/apo_sensitivity.rst
index ff227228..ce49927d 100644
--- a/doc/guide/sensitivity/apo_sensitivity.rst
+++ b/doc/guide/sensitivity/apo_sensitivity.rst
@@ -14,6 +14,7 @@ This implies the following representations
\alpha(W) &= \frac{1\lbrace D = d\rbrace }{m(X)}\cdot\mathbb{E}[\omega(Y,D,X)|X].
.. note::
+
In the :ref:`irm-model` the form and interpretation of ``cf_y`` only depends on the conditional expectation :math:`\mathbb{E}[Y|D,X]`.
- ``cf_y`` has the interpretation as the *nonparametric partial* :math:`R^2` *of* :math:`A` *with* :math:`Y` *given* :math:`(D,X)`
@@ -37,6 +38,7 @@ This implies the following representations
\frac{\mathbb{E}\left[\frac{1}{P(D=d|X,A)}\mathbb{E}[\omega(Y,D,X)|X,A]^2\right] - \mathbb{E}\left[\frac{1}{P(D=d|X)}\mathbb{E}[\omega(Y,D,X)|X]^2\right]}{\mathbb{E}\left[\frac{1}{P(D=d|X,A)}\mathbb{E}[\omega(Y,D,X)|X,A]^2\right]}
which has a interpretation as the *relative weighted change in inverse propensity weights*.
+
The ``nuisance_elements`` are then computed with plug-in versions according to the general :ref:`sensitivity_implementation`.
The default weights are set to one
@@ -50,4 +52,4 @@ whereas
\bar{\omega}(X) := \mathbb{E}[\omega(Y,D,X)|X],
-have to be supplied for weights which depend on :math:`Y` or :math:`D`.
\ No newline at end of file
+have to be supplied for weights which depend on :math:`Y` or :math:`D`.
diff --git a/doc/guide/sensitivity/implementation.rst b/doc/guide/sensitivity/implementation.rst
index 725314d7..459df56b 100644
--- a/doc/guide/sensitivity/implementation.rst
+++ b/doc/guide/sensitivity/implementation.rst
@@ -92,7 +92,7 @@ The robustness value $RVa$ defined analogous, but additionally incorporates stat
To obtain a more complete overview over the sensitivity one can call the ``sensitivity_plot()`` method. The methods creates a contour plot, which calculates estimate of the upper or lower bound for :math:`\theta`
(based on the null hypothesis) for each combination of ``cf_y`` and ``cf_d`` in a grid of values.
-.. figure:: ../_static/sensitivity_example_nb.png
+.. figure:: /_static/sensitivity_example_nb.png
:alt: Contour plot
:figclass: captioned-image
diff --git a/doc/guide/sensitivity/irm_sensitivity.rst b/doc/guide/sensitivity/irm_sensitivity.rst
index cda81463..126a51a0 100644
--- a/doc/guide/sensitivity/irm_sensitivity.rst
+++ b/doc/guide/sensitivity/irm_sensitivity.rst
@@ -15,6 +15,7 @@ This implies the following representations
.. note::
+
In the :ref:`irm-model` with for the ATE (weights equal to :math:`1`), the form and interpretation of ``cf_y`` is the same as in the :ref:`plr-model`.
- ``cf_y`` has the interpretation as the *nonparametric partial* :math:`R^2` *of* :math:`A` *with* :math:`Y` *given* :math:`(D,X)`
@@ -50,6 +51,7 @@ This implies the following representations
\frac{\mathbb{E}\left[\frac{\mathbb{E}[\omega(Y,D,X)|X,A]^2}{P(D=1|X,A)(1-P(D=1|X,A))}\right] - \mathbb{E}\left[\frac{\mathbb{E}[\omega(Y,D,X)|X]^2}{P(D=1|X)(1-P(D=1|X))}\right]}{\mathbb{E}\left[\frac{\mathbb{E}[\omega(Y,D,X)|X,A]^2}{P(D=1|X,A)(1-P(D=1|X,A))}\right]}
which has a interpretation as the *relative weighted gain in average conditional precision*.
+
The ``nuisance_elements`` are then computed with plug-in versions according to the general :ref:`sensitivity_implementation`.
For ``score='ATE'``, the weights are set to one
@@ -67,4 +69,4 @@ such that
.. math::
- \mathbb{E}[\omega(Y,D,X)|X] = \frac{m(X)}{\mathbb{E}[D]}.
\ No newline at end of file
+ \mathbb{E}[\omega(Y,D,X)|X] = \frac{m(X)}{\mathbb{E}[D]}.
diff --git a/doc/guide/sim_inf.rst b/doc/guide/sim_inf.rst
deleted file mode 100644
index 1cdf507e..00000000
--- a/doc/guide/sim_inf.rst
+++ /dev/null
@@ -1,139 +0,0 @@
-.. _sim_inf:
-
-Confidence bands and multiplier bootstrap for valid simultaneous inference
----------------------------------------------------------------------------
-
-:ref:`DoubleML ` provides methods to perform valid simultaneous inference for multiple treatment variables.
-As an example, consider a PLR with :math:`p_1` causal parameters of interest :math:`\theta_{0,1}, \ldots, \theta_{0,p_1}` associated with
-treatment variables :math:`D_1, \ldots, D_{p_1}`. Inference on multiple target coefficients can be performed by iteratively applying the DML inference procedure over the target variables of
-interests: Each of the coefficients of interest, :math:`\theta_{0,j}`, with :math:`j \in \lbrace 1, \ldots, p_1 \rbrace`, solves a corresponding moment condition
-
-.. math::
-
- \mathbb{E}[ \psi_j(W; \theta_{0,j}, \eta_{0,j})] = 0.
-
-Analogously to the case with a single parameter of interest, the PLR model with multiple treatment variables includes two regression steps to achieve orthogonality.
-First, the main regression is given by
-
-.. math::
-
- Y = D_j \theta_{0,j} + g_{0,j}([D_k, X]) + \zeta_j, \quad \mathbb{E}(\zeta_j | D, X) = 0,
-
-with :math:`[D_k, X]` being a matrix comprising the confounders, :math:`X`, and all remaining treatment variables
-:math:`D_k` with :math:`k \in \lbrace 1, \ldots, p_1\rbrace \setminus j`, by default.
-Second, the relationship between the treatment variable :math:`D_j` and the remaining explanatory variables is determined by the equation
-
-.. math::
-
- D_j = m_{0,j}([D_k, X]) + V_j, \quad \mathbb{E}(V_j | D_k, X) = 0,
-
-For further details, we refer to Belloni et al. (2018). Simultaneous inference can be based on a multiplier bootstrap procedure introduced in Chernozhukov et al. (2013, 2014).
-Alternatively, traditional correction approaches, for example the Bonferroni correction, can be used to adjust p-values.
-
-Multiplier bootstrap and joint confidence intervals
-+++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-The ``bootstrap()`` method provides an implementation of a multiplier bootstrap for double machine learning models.
-For :math:`b=1, \ldots, B` weights :math:`\xi_{i, b}` are generated according to a normal (Gaussian) bootstrap, wild
-bootstrap or exponential bootstrap.
-The number of bootstrap samples is provided as input ``n_rep_boot`` and for ``method`` one can choose ``'Bayes'``,
-``'normal'`` or ``'wild'``.
-Based on the estimates of the standard errors :math:`\hat{\sigma}_j`
-and :math:`\hat{J}_{0,j} = \mathbb{E}_N(\psi_{a,j}(W; \eta_{0,j}))`
-that are obtained from DML, we construct bootstrap coefficients
-:math:`\theta^{*,b}_j` and bootstrap t-statistics :math:`t^{*,b}_j`
-for :math:`j=1, \ldots, p_1`
-
-.. math::
-
- \theta^{*,b}_{j} &= \frac{1}{\sqrt{N} \hat{J}_{0,j}}\sum_{k=1}^{K} \sum_{i \in I_k} \xi_{i}^b \cdot \psi_j(W_i; \tilde{\theta}_{0,j}, \hat{\eta}_{0,j;k}),
-
- t^{*,b}_{j} &= \frac{1}{\sqrt{N} \hat{J}_{0,j} \hat{\sigma}_{j}} \sum_{k=1}^{K} \sum_{i \in I_k} \xi_{i}^b \cdot \psi_j(W_i; \tilde{\theta}_{0,j}, \hat{\eta}_{0,j;k}).
-
-The output of the multiplier bootstrap can be used to determine the constant, :math:`c_{1-\alpha}` that is required for the construction of a
-simultaneous :math:`(1-\alpha)` confidence band
-
-.. math::
-
- \left[\tilde\theta_{0,j} \pm c_{1-\alpha} \cdot \hat\sigma_j/\sqrt{N} \right].
-
-To demonstrate the bootstrap, we simulate data from a sparse partially linear regression model.
-Then we estimate the PLR model and perform the multiplier bootstrap.
-Joint confidence intervals based on the multiplier bootstrap are then obtained by setting the option ``joint``
-when calling the method ``confint``.
-
-Moreover, a multiple hypotheses testing adjustment of p-values from a high-dimensional model can be obtained with
-the method ``p_adjust``. :ref:`DoubleML ` performs a version of the Romano-Wolf stepdown adjustment,
-which is based on the multiplier bootstrap, by default. Alternatively, ``p_adjust`` allows users to apply traditional corrections
-via the option ``method``.
-
-.. tab-set::
-
- .. tab-item:: Python
- :sync: py
-
- .. ipython:: python
-
- import doubleml as dml
- import numpy as np
- from sklearn.base import clone
- from sklearn.linear_model import LassoCV
-
- # Simulate data
- np.random.seed(1234)
- n_obs = 500
- n_vars = 100
- X = np.random.normal(size=(n_obs, n_vars))
- theta = np.array([3., 3., 3.])
- y = np.dot(X[:, :3], theta) + np.random.standard_normal(size=(n_obs,))
-
- dml_data = dml.DoubleMLData.from_arrays(X[:, 10:], y, X[:, :10])
-
- learner = LassoCV()
- ml_l = clone(learner)
- ml_m = clone(learner)
- dml_plr = dml.DoubleMLPLR(dml_data, ml_l, ml_m)
-
- print(dml_plr.fit().bootstrap().confint(joint=True))
- print(dml_plr.p_adjust())
- print(dml_plr.p_adjust(method='bonferroni'))
-
- .. tab-item:: R
- :sync: r
-
- .. jupyter-execute::
-
- library(DoubleML)
- library(mlr3)
- library(mlr3learners)
- library(data.table)
- lgr::get_logger("mlr3")$set_threshold("warn")
-
- set.seed(3141)
- n_obs = 500
- n_vars = 100
- theta = rep(3, 3)
- X = matrix(stats::rnorm(n_obs * n_vars), nrow = n_obs, ncol = n_vars)
- y = X[, 1:3, drop = FALSE] %*% theta + stats::rnorm(n_obs)
- dml_data = double_ml_data_from_matrix(X = X[, 11:n_vars], y = y, d = X[,1:10])
-
- learner = lrn("regr.cv_glmnet", s="lambda.min")
- ml_l = learner$clone()
- ml_m = learner$clone()
- dml_plr = DoubleMLPLR$new(dml_data, ml_l, ml_m)
-
- dml_plr$fit()
- dml_plr$bootstrap()
- dml_plr$confint(joint=TRUE)
- dml_plr$p_adjust()
- dml_plr$p_adjust(method="bonferroni")
-
-
-References
-++++++++++
-
-* Belloni, A., Chernozhukov, V., Chetverikov, D., Wei, Y. (2018), Uniformly valid post-regularization confidence regions for many functional parameters in z-estimation framework. The Annals of Statistics, 46 (6B): 3643-75, `doi: 10.1214/17-AOS1671 `_.
-
-* Chernozhukov, V., Chetverikov, D., Kato, K. (2013). Gaussian approximations and multiplier bootstrap for maxima of sums of high-dimensional random vectors. The Annals of Statistics 41 (6): 2786-2819, `doi: 10.1214/13-AOS1161 `_.
-
-* Chernozhukov, V., Chetverikov, D., Kato, K. (2014), Gaussian approximation of suprema of empirical processes. The Annals of Statistics 42 (4): 1564-97, `doi: 10.1214/14-AOS1230 `_.
diff --git a/doc/index.rst b/doc/index.rst
index 7d1a5f50..e54b41a3 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -126,9 +126,9 @@ ecosystem `_ (Lang et a
:hidden:
Install
- Getting started
+ Getting Started
Workflow
- User guide
+ User Guide
Examples
Python API
R API
diff --git a/doc/intro/intro.rst b/doc/intro/intro.rst
index 9828c189..b87397d1 100644
--- a/doc/intro/intro.rst
+++ b/doc/intro/intro.rst
@@ -2,7 +2,7 @@
.. _intro:
-Getting started
+Getting Started
===============
The purpose of the following case-studies is to demonstrate the core functionalities of
diff --git a/doc/literature/literature.rst b/doc/literature/literature.rst
index 5bbb0e74..03c18ec1 100644
--- a/doc/literature/literature.rst
+++ b/doc/literature/literature.rst
@@ -1,6 +1,6 @@
:parenttoc: True
-Double machine learning literature
+Double Machine Learning Literature
==================================
.. grid:: 1
diff --git a/doc/release/release.rst b/doc/release/release.rst
index c6b4d5d9..5123ebb9 100644
--- a/doc/release/release.rst
+++ b/doc/release/release.rst
@@ -1,6 +1,6 @@
:parenttoc: True
-Release notes
+Release Notes
=============
.. tab-set::
@@ -12,23 +12,23 @@ Release notes
:open:
- Fix / adapted unit tests which failed in the release of 0.9.2 to conda-forge
- `#208 `_
+ `Docs #208 `_
.. dropdown:: DoubleML 0.9.2
:class-title: sd-bg-primary sd-font-weight-bold
:open:
- Make `rdrobust` optional for conda. Create `pyproject.toml` and remove `setup.py` for packaging
- `#285 `_
- `#286 `_
+ `Py #285 `_
+ `Py #286 `_
- Maintenance package
- `#284 `_
+ `Py #284 `_
- Maintenance doccumentation
- `#205 `_
- `#206 `_
- `#207 `_
+ `Docs #205 `_
+ `Docs #206 `_
+ `Docs #207 `_
.. dropdown:: DoubleML 0.9.1
:class-title: sd-bg-primary sd-font-weight-bold
@@ -37,202 +37,202 @@ Release notes
- **Release highlight:** Regression Discontinuity Designs with Flexible Covariate Adjustment
via ``RDFlex`` class (in cooperation with `Claudia Noack `_
and `Tomasz Olma `_; see `their paper `_)
- `#276 `_
+ `Py #276 `_
- Add ``cov_type=HC0`` and enable key-worded arguments to ``DoubleMLBLP``
- `#270 `_
- `#271 `_
+ `Py #270 `_
+ `Py #271 `_
- Update User Guide and Example Gallery
- `#204 `_
+ `Docs #204 `_
- Add AutoML example for tuning DoubleML estimators
- `#199 `_
+ `Docs #199 `_
- Maintenance package
- `#268 `_
- `#278 `_
- `#279 `_
- `#281 `_
- `#282 `_
+ `Py #268 `_
+ `Py #278 `_
+ `Py #279 `_
+ `Py #281 `_
+ `Py #282 `_
- Maintenance documentation
- `#201 `_
- `#203 `_
+ `Docs #201 `_
+ `Docs #203 `_
.. dropdown:: DoubleML 0.9.0
:class-title: sd-bg-primary sd-font-weight-bold
- **Release highlight:** Average potential outcomes for multiple discrete treatments
via ``DoubleMLAPO`` and ``DoubleMLAPOS`` classes (proposed by `Apoorva Lal `_)
- `#245 `_
- `#250 `_
+ `Py #245 `_
+ `Py #250 `_
- Update User Guide and Example Gallery
- `#188 `_
- `#195 `_
+ `Docs #188 `_
+ `Docs #195 `_
- Add sensitivity analysis to ``DoubleMLFramework``
- `#249 `_
+ `Py #249 `_
- Maintenance package
- `#264 `_
- `#265 `_
- `#266 `_
+ `Py #264 `_
+ `Py #265 `_
+ `Py #266 `_
- Maintenance documentation
- `#182 `_
- `#184 `_
- `#186 `_
- `#193 `_
- `#194 `_
- `#196 `_
- `#197 `_
+ `Docs #182 `_
+ `Docs #184 `_
+ `Docs #186 `_
+ `Docs #193 `_
+ `Docs #194 `_
+ `Docs #196 `_
+ `Docs #197 `_
.. dropdown:: DoubleML 0.8.2
:class-title: sd-bg-primary sd-font-weight-bold
- **API Update**: Change nuisance evaluation for classifiers.
The corresponding properties are renamed ``nuisance_loss`` instead of ``rmses``.
- `#254 `_
- `#184 `_
+ `Py #254 `_
+ `Docs #184 `_
- Add new example on sensitivity analysis
- `#190 `_
+ `Docs #190 `_
- Add a new example on DiD with DoubleML in R
- `#178 `_
+ `Docs #178 `_
- Enable ``set_sample_splitting`` for cluster data
- `#255 `_
+ `Py #255 `_
- Update the ``make_confounded_irm_data`` data generating process
- `#263 `_
+ `Py #263 `_
- Maintenance package
- `#264 `_
+ `Py #264 `_
- Maintenance documentation
- `#177 `_
- `#180 `_
- `#181 `_
- `#187 `_
- `#189 `_
+ `Docs #177 `_
+ `Docs #180 `_
+ `Docs #181 `_
+ `Docs #187 `_
+ `Docs #189 `_
.. dropdown:: DoubleML 0.8.1
:class-title: sd-bg-primary sd-font-weight-bold
- Increment package requirements and update workflows for python 3.9 (add tests for python 3.12)
- `#247 `_
- `#175 `_
+ `Py #247 `_
+ `Docs #175 `_
- Additional example for ranking treatment effects (by `Apoorva Lal `_)
- `#173 `_
- `#174 `_
+ `Docs #173 `_
+ `Docs #174 `_
- Maintenance documentation
- `#172 `_
+ `Docs #172 `_
.. dropdown:: DoubleML 0.8.0
:class-title: sd-bg-primary sd-font-weight-bold
- **Release highlight:** Sample-selections models as ``DoubleMLSMM`` class (by `Michaela Kecskésová `_)
- `#231 `_
- `#235 `_
- `#171 `_
+ `Py #231 `_
+ `Py #235 `_
+ `Docs #171 `_
- **API change:** Remove options ``apply_crossfitting`` and ``dml_procedure`` from the ``DoubleML`` class
- `#227 `_
- `#166 `_
+ `Py #227 `_
+ `Docs #166 `_
- Restructure the package to improve readability and maintainability
- `#225 `_
+ `Py #225 `_
- Add a ``DoubleMLFramework`` class to combine multiple DoubleML models (aggregation of estimates, boostrap and CI-procedures)
- `#226 `_
- `#169 `_
+ `Py #226 `_
+ `Docs #169 `_
- Enable the use of external predictions for short models in benchmarks (by `Lucien `_)
- `#238 `_
- `#239 `_
+ `Py #238 `_
+ `Py #239 `_
- Add the ``gain_statistics`` to ``utils`` to sensitivity analysis
- `#229 `_
+ `Py #229 `_
- Maintenance documentation
- `#162 `_
- `#163 `_
- `#164 `_
- `#165 `_
- `#167 `_
- `#168 `_
+ `Docs #162 `_
+ `Docs #163 `_
+ `Docs #164 `_
+ `Docs #165 `_
+ `Docs #167 `_
+ `Docs #168 `_
- Maintenance package
- `#225 `_
- `#229 `_
- `#246 `_
+ `Py #225 `_
+ `Py #229 `_
+ `Py #246 `_
.. dropdown:: DoubleML 0.7.1
:class-title: sd-bg-primary sd-font-weight-bold
- **Release highlight:** Add weights to ``DoubleMLIRM`` class to extend sensitivity to GATEs etc.
- `#220 `_
- `#229 `_
- `#155 `_
- `#161 `_
+ `Py #220 `_
+ `Py #229 `_
+ `Docs #155 `_
+ `Docs #161 `_
- Extend GATE and CATE estimation to the ``DoubleMLPLR`` class
- `#220 `_
- `#155 `_
+ `Py #220 `_
+ `Docs #155 `_
- Enable the use of external predictions for ``DoubleML`` classes
- `#221 `_
- `#159 `_
+ `Py #221 `_
+ `Docs #159 `_
- Implementing utility classes and functions (gain statistics and dummy learners)
- `#221 `_
- `#222 `_
- `#229 `_
- `#161 `_
+ `Py #221 `_
+ `Py #222 `_
+ `Py #229 `_
+ `Docs #161 `_
- Extend example Gallery
- `#153 `_
- `#158 `_
- `#161 `_
+ `Docs #153 `_
+ `Docs #158 `_
+ `Docs #161 `_
- Maintenance documentation
- `#157 `_
- `#160 `_
+ `Docs #157 `_
+ `Docs #160 `_
- Maintenance package
- `#223 `_
- `#224 `_
+ `Py #223 `_
+ `Py #224 `_
.. dropdown:: DoubleML 0.7.0
:class-title: sd-bg-primary sd-font-weight-bold
- **Release highlight:** Benchmarking for Sensitivity Analysis (omitted variable bias)
- `#211 `_
+ `Py #211 `_
- Policy tree estimation for the ``DoubleMLIRM`` class
- `#212 `_
+ `Py #212 `_
- Extending sensitivity and policy tree documentation in User Guide and Example Gallery
- `#148 `_
- `#150 `_
+ `Docs #148 `_
+ `Docs #150 `_
- The package requirements are set to python 3.8 or higher
- `#211 `_
+ `Py #211 `_
- Maintenance documentation
- `#149 `_
+ `Docs #149 `_
- Maintenance package
- `#213 `_
+ `Py #213 `_
.. dropdown:: DoubleML 0.6.3
:class-title: sd-bg-primary sd-font-weight-bold
- Fix install requirements for 0.6.2
- `#208 `_
+ `Py #208 `_
.. dropdown:: DoubleML 0.6.2
:class-title: sd-bg-primary sd-font-weight-bold
- **Release highlight:** Sensitivity Analysis (omitted variable bias) for
- `#201 `_
+ `Py #201 `_
- ``DoubleMLPLR``
- ``DoubleMLIRM``
@@ -240,46 +240,46 @@ Release notes
- ``DoubleMLDIDCS``
- Updated documentation
- `#144 `_
- `#141 `_
+ `Docs #144 `_
+ `Docs #141 `_
- Extend the guide with sensitivity and add further examples
- `#142 `_
+ `Docs #142 `_
- Maintenance package
- `#202 `_
- `#206 `_
+ `Py #202 `_
+ `Py #206 `_
- Maintenance documentation
- `#137 `_
- `#138 `_
- `#140 `_
- `#143 `_
- `#145 `_
- `#146 `_
+ `Docs #137 `_
+ `Docs #138 `_
+ `Docs #140 `_
+ `Docs #143 `_
+ `Docs #145 `_
+ `Docs #146 `_
.. dropdown:: DoubleML 0.6.1
:class-title: sd-bg-primary sd-font-weight-bold
- **Release highlight:** Difference-in-differences models for ATTE estimation
- `#200 `_
- `#194 `_
+ `Py #200 `_
+ `Py #194 `_
- Panel data ``DoubleMLDID``
- Repeated cross sections ``DoubleMLDIDCS``
- Add a potential time variable to ``DoubleMLData`` (until now only used in ``DoubleMLDIDCS``)
- `#200 `_
+ `Py #200 `_
- Extend the guide in the documentation and add further examples
- `#132 `_
- `#133