DDML-R专题:401(k)养老金对储蓄的影响
数据来源
本案例数据来源于美国1991年收入与项目参与调查(Survey of Income and Program Participation, SIPP),经DoubleML官方预处理后可通过fetch_401k()函数获取。
该数据最早在以下研究中被分析:
Chernozhukov et al. (2018): "Double/debiased machine learning for treatment and structural parameters", The Econometrics Journal, 21: C1-C68. Chernozhukov et al. (2020): 论文补充材料中提供了原始数据处理方法。
研究背景
401(k)计划是由雇主赞助的养老金账户。本研究旨在估计401(k) eligibility和参与对家庭累积资产的因果效应。 由于养老金参与是家庭自我选择的结果(存在储蓄偏好差异),直接比较参与者与非参与者会产生选择偏差,导致估计结果向上偏误。
识别策略
我们利用401(k) eligibility(是否有资格参与)作为处理变量。根据Chernozhukov等人的论证,在控制收入等协变量后,eligibility可以视为外生随机分配。
数据说明
分析代码
0、加载包
library(DoubleML)library(mlr3)library(mlr3learners)library(data.table)library(ggplot2)lgr::get_logger("mlr3")$set_threshold("warn")1. 数据加载与探索
data = fetch_401k(return_type = "data.table")print(dim(data)) # 数据维度print(names(data)) # 变量名2. 创建数据对象
dml_data = DoubleMLData$new( data, y_col = "net_tfa", d_cols = "e401", x_cols = c("age", "inc", "educ", "fsize", "marr","twoearn", "db", "pira", "hown"))3. 定义多个学习器(用于比较)
learners_rf = list( ml_l = lrn("regr.ranger", num.trees = 500, max.depth = 7, min.node.size = 3), ml_m = lrn("classif.ranger", num.trees = 500, max.depth = 5, min.node.size = 7))learners_lasso = list( ml_l = lrn("regr.cv_glmnet", s = "lambda.min"), ml_m = lrn("classif.cv_glmnet", s = "lambda.min"))learners_xgb = list( ml_l = lrn("regr.xgboost", objective = "reg:squarederror", eta = 0.1, nrounds = 50), ml_m = lrn("classif.xgboost", objective = "binary:logistic", eta = 0.1, nrounds = 50))4. 估计并比较不同学习器
results = list()# 随机森林set.seed(123)dml_rf = DoubleMLPLR$new(dml_data, ml_l = learners_rf$ml_l, ml_m = learners_rf$ml_m)dml_rf$fit()results$rf = list(coef = dml_rf$coef, se = dml_rf$se)# Lassoset.seed(123)dml_lasso = DoubleMLPLR$new(dml_data, ml_l = learners_lasso$ml_l, ml_m = learners_lasso$ml_m)dml_lasso$fit()results$lasso = list(coef = dml_lasso$coef, se = dml_lasso$se)# XGBoostset.seed(123)dml_xgb = DoubleMLPLR$new(dml_data, ml_l = learners_xgb$ml_l, ml_m = learners_xgb$ml_m)dml_xgb$fit()results$xgb = list(coef = dml_xgb$coef, se = dml_xgb$se)5. 汇总结果
cat("\n========== 估计结果汇总 ==========\n")cat("学习器 估计值 标准误\n")cat("随机森林 ", results$rf$coef, " ", results$rf$se, "\n")cat("Lasso ", results$lasso$coef, " ", results$lasso$se, "\n")cat("XGBoost ", results$xgb$coef, " ", results$xgb$se, "\n")6. 置信区间 - 使用 $confint() 方法
# 6. 置信区间 - 使用 $confint() 方法cat("\n========== 95%置信区间 ==========\n")dml_rf$confint()dml_lasso$confint()dml_xgb$confint()得到以下结果:



结果解读得到以下结果:
所有三种学习方法都得到类似的估计结果,表明估计对机器学习方法的设定是稳健的。 401(k) eligibility使家庭净资产平均增加约9,000美元。


夜雨聆风