全部版块 我的主页
› 论坛 › 数据科学与人工智能 › 数据分析与数据科学 › 数据分析与数据挖掘
160 2
2026-10-29
DoubleML 官方文档与 401(k) 案例代码:PLR、PLIV、IRM、IIVM 四个模型的 Python 与 R Notebook、数据集与交叉拟合

 

同样一批家庭,有 401(k) 参保资格的比没有资格的多出 19,559 美元净金融资产;把收入、年龄、教育、家庭规模这些混淆因素控制住之后,这个差额降到 5,722 美元。差额从 19,559 掉到 5,722,差的正是"是否参保"这件事本身不是随机的——储蓄偏好强的人既更愿意参保,本来也存得更多。DoubleML 的官方示例就是拿这组数据把这件事从头到尾做一遍。

 

这套文档站收录了什么

 

DoubleML 是双重/去偏机器学习(double/debiased machine learning)框架的一个面向对象实现,依据的是 Chernozhukov 等人 2018 年的论文,由同一批作者同时维护 Python 与 R 两个包。文档站按用途分成几块:

 

| 板块 | 内容 |

 

| - | - |

 

| 安装说明 | Python 的 pip、conda、whl、源码构建四种装法,R 的 CRAN 与 GitHub 开发版两种装法,以及可选依赖 |

 

| 入门示例 | 用部分线性回归模拟数据走一遍建模、拟合、看结果 |

 

| 工作流 | 从问题表述到稳健性检验的七个步骤,每步都用 401(k) 数据示范 |

 

| 用户指南 | 十个章节,覆盖原理、数据后端、模型、异质性处理效应、得分函数、算法、学习器与调参、方差估计、样本分割与交叉拟合、敏感性分析 |

 

| 示例库 | Python 与 R 两套 Notebook,含 401(k) 养老金、DID、面板、分位数、政策树等 |

 

| API 参考 | Python 与 R 两份,按数据类、模型类、数据集、工具类、得分混合类分节 |

 

两个包的版本与许可不同:Python 包 PyPI 上当前为 0.11.4(2026 年 8 月上传),要求 Python 3.10 及以上,仓库 LICENSE 文件为 BSD 三条款许可,版权署名 2019—2023;R 包在 CRAN 上为 1.0.2(2025 年 4 月发布),许可标注为 MIT + file LICENSE。

 

四个模型分别处理什么问题

 

| 模型 | 对应类 | 目标参数 | 适用情形 |

 

| - | - | - | - |

 

| 部分线性回归 PLR | DoubleMLPLR | 处理变量的线性系数 | 结果对协变量的关系交给机器学习,处理效应保持线性 |

 

| 部分线性 IV 回归 PLIV | DoubleMLPLIV | 内生处理变量的系数 | 处理变量内生,需要工具变量 |

 

| 交互回归 IRM | DoubleMLIRM | ATE,允许异质性 | 二值处理,想让协变量同时进入结果方程与处理方程 |

 

| 交互 IV 模型 IIVM | DoubleMLIIVM | LATE | 处理变量与工具变量都是二值,识别依从者平均处理效应 |

 

PLR 的形式是结果变量等于处理变量乘待估系数,加上协变量的未知函数与误差项;PLIV 在此之上再引入工具变量方程;IRM 让协变量以更一般的方式进入结果方程,因而允许处理效应随个体变化;IIVM 的目标参数是两个条件均值之差的比值,即局部平均处理效应 LATE。

 

文档还收录了另外几类模型:DID(含多期 DID 的 DoubleMLDIDMulti)、断点回归 RDD、样本选择 SSM、面板固定效应的 DoubleMLPLPR,以及二值结果的部分逻辑回归 DoubleMLLPLR。

 

401(k) 示例里的完整数字

 

数据来自 1991 年收入和项目参与调查(SIPP),共 9,915 个家庭观测,所有变量对应 1990 年。结果变量是净金融资产 net_tfa,等于个人退休账户余额、401(k) 余额、支票账户、储蓄债券、其他生息账户与生息资产、股票和共同基金之和,减去非抵押债务。9,915 个家庭中有 3,682 个具备参保资格,其中有 2,594 个实际参保。

 

未控制混淆因素时,资格对应的无条件平均预测效应为 19,559.34 美元,参保对应的为 27,371.58 美元。文档随后给出四种机器学习方法在 PLR、IRM、IIVM 三个模型下的估计值与 95% 置信区间:

 

| 模型 | lasso | 随机森林 | 决策树 | XGBoost |

 

| - | - | - | - | - |

 

| PLR(基础设定) | 5,722.46 [3,016.58, 8,428.35] | — | — | — |

 

| PLR(弹性设定) | 8,974.79 [6,379.16, 11,570.42] | 8,909.63 [6,318.91, 11,500.36] | 8,260.06 [5,616.81, 10,903.32] | 8,336.66 [5,610.30, 11,063.02] |

 

| IRM | 7,763.89 [5,131.59, 10,396.19] | 8,102.44 [5,905.81, 10,299.08] | 8,059.69 [5,770.76, 10,348.62] | 8,989.44 [6,654.38, 11,324.50] |

 

| IIVM(LATE) | 12,955.59 [9,699.44, 16,211.75] | 12,002.71 [8,810.68, 15,194.75] | 10,967.29 [7,533.70, 14,400.88] | 13,312.77 [10,035.01, 16,590.53] |

 

两种设定的差别在协变量怎么进:基础设定直接放进九个原始变量,弹性设定再对年龄、收入、受教育年限、家庭规模各加一个二次正交多项式。IRM 与 IIVM 的示例统一设了 0.01 的裁剪阈值,交叉拟合折数统一设为 3。四个方法跑出来的结果彼此接近,文档据此说明结论对学习器选择不敏感。

 

数据来源与变量口径

 

示例用 fetch_401K(Python)/fetch_401k(R)直接取数。Python 端返回 14 列:nifa、net_tfa、tw、age、inc、fsize、educ、db、marr、twoearn、e401、p401、pira、hown,其中 4 列为 float32、10 列为 int8,整表约 251.9 KB;R 端返回 12 个变量,不含 nifa 与 tw。

 

控制变量是年龄、收入、受教育年限、家庭规模、婚姻状况、双职工状态、既定给付型养老金、个人退休账户参与、住房自有九个。

 

文档站另有第二个真实数据集 fetch_bonus,对应宾夕法尼亚州再就业奖金实验;需要说明的是,示例库里该数据集对应的说明页目前只有取数代码,正文描述部分仍是占位文本,还没有写完。除两个加载器外,API 参考还列出十四组合成数据生成函数,分别对应 IRM、IIVM、异质性处理效应、离散处理、混淆 IRM、样本选择、PLR(Chernozhukov 等 2018 图一与 Turrell 2018 博客两版)、逻辑 PLR、面板 PLR、PLIV(Chernozhukov、Hansen、Spindler 2015 与 Chiang 等 2021 多向聚类两版)、混淆 PLR,以及 DID(Sant'Anna 与 Zhao 2020、Callaway 与 Sant'Anna 2021 的面板版与重复截面版)和 RDD,方便在没有真实数据时先验证设定。

 

交叉拟合与样本分割怎么设

 

样本分割与交叉拟合是这套方法的核心。四个主要模型都通过 n_folds 与 n_rep 两个参数指定:前者是折数,后者是重复次数。需要固定或复用同一套划分时,用 draw_sample_splitting 参数和同名方法,以及 set_sample_splitting 方法;draw_sample_splitting 控制是否重新抽取划分,apply_cross_fitting 控制是否做交叉拟合。

 

文档给出五种用法:K 折交叉拟合、K 折重复 M 次的交叉拟合、外部提供划分、只分割不做交叉拟合、完全不做样本分割。

 

敏感性分析

 

用户指南第十章是遗漏变量偏误的敏感性分析,依据 Chernozhukov 等人 2022 年的论文。做法是把目标参数写成矩条件的形式,引入 Riesz 表示元,用结果回归的方差与 Riesz 表示元二阶矩构造偏差上界,再用 cf_
y、cf_
d、rho 三个量解释"遗漏变量能解释多少结果变异、多少处理变异、两者相关多强"。

 

文档说明当前敏感性分析仅适用于线性模型。

 

版本、安装条件与许可

 

Python 包 PyPI 当前版本 0.11.4,要求 Python 3.10 及以上,安装命令为 pip install -U DoubleML 或 conda install -c conda-forge doubleml;断点回归模块用到的 rdrobust 依赖在 conda-forge 上没有,需要时通过 pip install doubleml[rdd] 单独安装,开发依赖为 pip install doubleml[dev]。

 

R 包从 CRAN 装 install.packages("DoubleML"),开发版用 remotes::install_github("DoubleML/doubleml-for-r")。

 

许可按出处分别写明:Python 包的仓库 LICENSE 文件为 BSD 三条款许可(Copyright 2019-2023),再分发源码须保留版权声明、条件清单与免责声明,二进制形式再分发须在文档或其他随附材料中复制同样的内容,且未经书面许可不得以版权持有人或贡献者名义为衍生品背书;R 包按 CRAN 标注的 MIT + file LICENSE 写明,许可全文见其仓库 LICENSE 文件。

 

文档站页脚版权归 Bach、Chernozhukov、Klaassen、Kurz 与 Spindler(2023),站点由 Sphinx 8.1.3 与 PyData Sphinx Theme 0.15.4 生成。文档页脚版权归 Bach、Chernozhukov、Klaassen、Kurz 与 Spindler(2023),站点由 Sphinx 8.1.3 与 PyData Sphinx Theme 0.15.4 生成。

 

────────────────
回复本帖即可查看以下内容

 

下面是帖子的相关资料的获取以及相关的内容说明,回复后即可见,内容包含:DoubleML 文档站各分站与章节入口、Python 与 R 两份 API 参考、401(k) 养老金案例的网页版与 Notebook 文件、两个数据集加载器说明,以及两个包的版本、安装命令、依赖条件与许可原文出处。


游客,如果您要查看本帖隐藏内容请回复
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2026-10-29 15:31:08
先收藏,回头慢慢研究
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2026-11-1 13:17:39
谢谢分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群