{"id":29864357,"url":"https://github.com/jordandeklerk/didpy","last_synced_at":"2025-07-30T08:14:54.325Z","repository":{"id":291698271,"uuid":"978478263","full_name":"jordandeklerk/didpy","owner":"jordandeklerk","description":"Python package implementing modern DiD estimators with diagnostic tools and sensitivity analysis.","archived":false,"fork":false,"pushed_at":"2025-07-25T02:21:19.000Z","size":7289,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-25T07:01:17.647Z","etag":null,"topics":["bootstrap-estimator","causal-inference","difference-in-differences","influence-functions","inverse-probability-weighting","propensity-scores"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jordandeklerk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-06T03:47:36.000Z","updated_at":"2025-07-25T02:21:23.000Z","dependencies_parsed_at":"2025-05-17T02:35:21.939Z","dependency_job_id":"208e34e7-99a7-40d8-aeeb-710fbce572d4","html_url":"https://github.com/jordandeklerk/didpy","commit_stats":null,"previous_names":["jordandeklerk/drdidsynth","jordandeklerk/dr-synthdid","jordandeklerk/pydid","jordandeklerk/didpy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jordandeklerk/didpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jordandeklerk%2Fdidpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jordandeklerk%2Fdidpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jordandeklerk%2Fdidpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jordandeklerk%2Fdidpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jordandeklerk","download_url":"https://codeload.github.com/jordandeklerk/didpy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jordandeklerk%2Fdidpy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267834811,"owners_count":24151642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap-estimator","causal-inference","difference-in-differences","influence-functions","inverse-probability-weighting","propensity-scores"],"created_at":"2025-07-30T08:14:53.786Z","updated_at":"2025-07-30T08:14:54.304Z","avatar_url":"https://github.com/jordandeklerk.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"docs/source/_static/didpy-light.png#gh-light-mode-only\" width=\"250\" align=\"left\" alt=\"didpy logo\"\u003e\u003c/img\u003e\n\u003cimg src=\"docs/source/_static/didpy-dark.png#gh-dark-mode-only\" width=\"250\" align=\"left\" alt=\"didpy logo\"\u003e\u003c/img\u003e\n\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)\n[![Build Status](https://github.com/jordandeklerk/didpy/actions/workflows/test.yml/badge.svg)](https://github.com/jordandeklerk/didpy/actions/workflows/test.yml)\n[![Code Coverage](https://codecov.io/gh/jordandeklerk/didpy/branch/main/graph/badge.svg)](https://codecov.io/gh/jordandeklerk/didpy)\n[![Last commit](https://img.shields.io/github/last-commit/jordandeklerk/didpy)](https://github.com/jordandeklerk/didpy/graphs/commit-activity)\n[![Commit activity](https://img.shields.io/github/commit-activity/m/jordandeklerk/didpy)](https://github.com/jordandeklerk/didpy/graphs/commit-activity)\n[![Python version](https://img.shields.io/badge/3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue?logo=python\u0026logoColor=white)](https://www.python.org/)\n\n\n__didpy__ is a unified Python implementation of modern difference-in-differences (DiD) methodologies, bringing together the fragmented landscape of DiD estimators into a single, coherent framework. This package consolidates methods from leading econometric research and various R packages into one comprehensive Python library with a consistent API.\n\n\u003e [!WARNING]\n\u003e This package is currently in active development with core estimators and some sensitivity analysis implemented. The API is subject to change.\n\nEach subpackage below is designed as a self-contained module with its own estimators, inference procedures, and visualization tools, while sharing common infrastructure for data handling and computation. This architecture choice aims to allow researchers to use exactly the methods they need while benefiting from a unified interface and consistent design principles across all DiD approaches.\n\n| Module | Status | Description | Reference |\n|:-------|:-------|:------------|:----------|\n| [`didpy.did`](https://github.com/jordandeklerk/didpy/tree/main/didpy/did) |✅| Multiple time periods and variation in treatment timing with group-time effects and flexible aggregation schemes | [Callaway \u0026 Sant'Anna (2021)](https://arxiv.org/pdf/1803.09015) |\n| [`didpy.drdid`](https://github.com/jordandeklerk/didpy/tree/main/didpy/drdid) |✅| Doubly robust difference-in-differences estimators for panel and repeated cross-section data with improved efficiency and robustness | [Sant'Anna \u0026 Zhao (2020)](https://arxiv.org/pdf/1812.01723) |\n| [`didpy.didhonest`](https://github.com/jordandeklerk/didpy/tree/main/didpy/didhonest) |✅| Sensitivity analysis for violations of parallel trends with multiple restriction types | [Rambachan \u0026 Roth (2023)](https://academic.oup.com/restud/article-abstract/90/5/2555/7039335?redirectedFrom=fulltext) |\n| [`didpy.didcont`](https://github.com/jordandeklerk/didpy/tree/main/didpy/didcont) |⏳| Continuous treatment DiD for dose-response relationships and non-binary treatments | [Callaway et al. (2024)](https://arxiv.org/pdf/2107.02637) |\n| [`didpy.didinter`](https://github.com/jordandeklerk/didpy/tree/main/didpy/didinter) |⏳| Intertemporal DiD for treatment effects where the treatment may be non-binary, non-absorbing, and the outcome may be affected by treatment lags | [Chaisemartin \u0026 D'Haultfœuille (2024)](https://arxiv.org/pdf/2007.04267) |\n| [`didpy.didml`](https://github.com/jordandeklerk/didpy/tree/main/didpy/didml) |⏳| Modern machine learning approaches to DiD for estimation of time-varying conditional average treatment effects on the treated (CATT) | [Hatamyar et al. (2023)](https://arxiv.org/pdf/2310.11962) |\n| [`didpy.didbacon`](https://github.com/jordandeklerk/didpy/tree/main/didpy/didbacon) |⏳| Goodman-Bacon decomposition to understand two-way fixed effects estimates as weighted averages of all possible 2x2 DiD comparisons | [Goodman-Bacon (2019)](https://cdn.vanderbilt.edu/vu-my/wp-content/uploads/sites/2318/2019/07/29170757/ddtiming_7_29_2019.pdf) |\n| [`didpy.drdidweak`](https://github.com/jordandeklerk/didpy/tree/main/didpy/drdidweak) |⏳| New class of doubly robust estimators for treatment effect estimands that is also robust against weak covariate overlap | [Ma et al. (2023)](https://arxiv.org/pdf/2304.08974) |\n| [`didpy.didcomp`](https://github.com/jordandeklerk/didpy/tree/main/didpy/didcomp) |⏳| DiD setups with repeated cross-sectional data and potential compositional changes across time periods | [Sant'Anna \u0026 Xu (2025)](https://arxiv.org/pdf/2304.13925) |\n| [`didpy.didlocal`](https://github.com/jordandeklerk/didpy/tree/main/didpy/didlocal) |⏳| Local projections DiD to address possible biases arising from negative weighting | [Dube et al. (2025)](https://www.nber.org/system/files/working_papers/w31184/w31184.pdf) |\n| [`didpy.did2s`](https://github.com/jordandeklerk/didpy/tree/main/didpy/did2s) |⏳| Two-stage DiD for estimating TWFE models while avoiding issues with staggered treatment adoption | [Gardner (2021)](https://jrgcmu.github.io/2sdd_current.pdf) |\n| [`didpy.functional`](https://github.com/jordandeklerk/didpy/tree/main/didpy/functional) |⏳| Specification tests for functional form assumptions in DiD models | [Roth \u0026 Sant'Anna (2023)](https://arxiv.org/pdf/2010.04814) |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjordandeklerk%2Fdidpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjordandeklerk%2Fdidpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjordandeklerk%2Fdidpy/lists"}