因果推断
先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
boottest
施加原假设的野生聚类自助法:rademacher权重
Stata
boottest treat, cluster(group) reps(199) weighttype(rademacher) seed(128)R 包:fwildclusterboot
fwildclusterboot::boottest(fit, param = "treat", clustid = "group", B = 199, type = "rademacher", impose_null = TRUE, conf_int = FALSE, engine = "R-lean")与 Stata 有差异 固定流程;请明确调整示例列名。较少重复次数仅供可执行示范;须统一自助法类型、聚类和有限样本修正。软件首次报告随机种子行为变更警告;R及dqrng随机数均已设种子。 fwildclusterboot 0.13 改变了随机数种子机制,不应预期相同种子与旧版本结果完全一致。
施加原假设的野生聚类自助法:webb权重
Stata
boottest treat, cluster(group) reps(199) weighttype(webb) seed(128)R 包:fwildclusterboot
fwildclusterboot::boottest(fit, param = "treat", clustid = "group", B = 199, type = "webb", impose_null = TRUE, conf_int = FALSE, engine = "R-lean")与 Stata 有差异 固定流程;请明确调整示例列名。较少重复次数仅供可执行示范;须统一自助法类型、聚类和有限样本修正。软件首次报告随机种子行为变更警告;R及dqrng随机数均已设种子。 fwildclusterboot 0.13 改变了随机数种子机制,不应预期相同种子与旧版本结果完全一致。
cem
分类协变量的粗化精确匹配
Stata
cem category, treatment(treat)R 包:MatchIt
MatchIt::matchit(treat ~ category, data = transform(data, category = as.integer(category) - 1L), method = "cem", estimand = "ATT", cutpoints = list(category = 0))固定流程;请明确调整示例列名。仅进行匹配预处理;分类水平不需要连续切点。连续变量须明确统一切点和目标估计量,不能依赖不同软件默认值。
did_imputation
所有处理观察的平均插补处理效应
Stata
did_imputation y id time cohortR 包:stats
{ baseline <- stats::lm(y ~ factor(id) + factor(time) + x, data = data, subset = treated == 0); effects <- data$y - stats::predict(baseline, newdata = data); mean(effects[data$treated == 1]) }固定流程;请明确调整示例列名。仅点估计流程;未处理结局模型、权重及受支持的处理观察须明确选择。
按事件时间汇总未处理结果插补效应
Stata
did_imputation y id time cohort, allhorizonsR 包:stats
{ untreated <- data$treated == 0; baseline <- stats::lm(y ~ factor(id) + factor(time) + x, data = data, subset = untreated); effects <- data$y - stats::predict(baseline, newdata = data); keep <- data$treated == 1; stats::aggregate(effects[keep], list(horizon = data$time[keep] - data$cohort[keep]), mean) }固定流程;请明确调整示例列名。仅使用未处理观察学习个体和时间效应的点估计示例。Stata的从未处理队列应设缺失,本例R使用范围外标记;不复现影响函数方差、自动样本或前趋势检验。
drdid
两期面板双重稳健DiD ATT点估计
Stata
drdid y x, ivar(id) time(time) treatment(treated) dripwR 包:stats
{ ps <- stats::fitted(stats::glm(treated ~ x, data = data, family = stats::binomial())); m0 <- stats::predict(stats::lm(dy ~ x, data = data, subset = treated == 0), data); weighted.mean(data$dy - m0, data$treated) - weighted.mean(data$dy - m0, (1 - data$treated) * ps / (1 - ps)) }固定流程;请明确调整示例列名。宽数据的dripw点估计:Logistic倾向模型加对照组结局变化OLS。Stata使用长数据;不含影响函数方差或改进drimp估计量。
面板结果回归DiD ATT点估计
Stata
drdid y x, ivar(id) time(time) treatment(treated) regR 包:stats
{ m0 <- stats::predict(stats::lm(dy ~ x, data = data, subset = treated == 0), data); mean((data$dy - m0)[data$treated == 1]) }固定流程;请明确调整示例列名。两期宽数据回归调整流程;要求条件平行趋势和无预期,不计算标准误。
稳定逆概率加权DiD ATT
Stata
drdid y x, ivar(id) time(time) treatment(treated) stdipwR 包:stats
{ ps <- stats::fitted(stats::glm(treated ~ x, data = data, family = stats::binomial())); mean(data$dy[data$treated == 1]) - weighted.mean(data$dy, (1 - data$treated) * ps / (1 - ps)) }固定流程;请明确调整示例列名。两期宽数据点估计,不含影响函数方差,未实现重复截面估计。
ebalance
熵平衡处理与对照协变量:至1阶矩
Stata
ebalance treat x z, targets(1)R 包:WeightIt
WeightIt::weightit(treat ~ x + z, data = data, method = "ebal", estimand = "ATT", moments = 1)固定流程;请明确调整示例列名。针对处理组总体的预处理权重;须统一归一化、高阶矩和优化容差,不含结局标准误。
estat
工具变量弱相关和内生性诊断
Stata
estat endogenousR 包:AER
summary(AER::ivreg(y ~ x + w | z + w, data = data), diagnostics = TRUE)$diagnostics与 Stata 有差异 固定流程;请明确调整示例列名。Wu-Hausman检验依赖模型假设;恰好识别模型不能做过度识别检验。
eventstudyinteract
汇总队列交互的处理后效应
Stata
eventstudyinteract y lead3 lead2 lag0 lag1 lag2, absorb(id time) cohort(cohort) control_cohort(never)R 包:fixest
{ fit <- fixest::feols(y ~ sunab(cohort, time, ref.p = -1) | id + time, data = data, vcov = ~id, nthreads = 1); stats::aggregate(fit, agg = "ATT") }固定流程;请明确调整示例列名。ATT汇总为R后估计步骤;须匹配事件时间及队列权重,不能直接等权平均系数。
Sun-Abraham队列交互事件研究估计
Stata
eventstudyinteract y lead3 lead2 lag0 lag1 lag2, absorb(id time) cohort(cohort) control_cohort(never) covariates(x) vce(cluster id)R 包:fixest
fixest::feols(y ~ sunab(cohort, time, ref.p = -1) + x | id + time, data = data, vcov = ~id, nthreads = 1)与 Stata 有差异 固定流程;请明确调整示例列名。使用从未处理队列为对照,事件时间-1为参考;须统一期限支持、队列份额汇总和协方差约定。
gencohort
构造首次处理队列并标记从未处理者
Stata
gencohort cohort, group(id) time(time) treat(treated)R 包:stats
transform(data, cohort = ave(ifelse(treated == 1, time, Inf), id, FUN = function(v) { first <- min(v); rep(if(is.infinite(first)) 0 else first, length(v)) }))与 Stata 有差异 固定流程;请明确调整示例列名。以零表示从未处理队列;要求处理一旦开始便持续且个体时间组合唯一。插补估计量可能要求用缺失表示从未处理时间。
ivreghdfe
双重吸收固定效应工具变量
Stata
ivreghdfe y z (x = instrument), absorb(id time)R 包:fixest
fixest::feols(y ~ z | id + time | x ~ instrument, data = data, vcov = "iid", nthreads = 1)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;推断比较前须统一单例处理、协方差修正和吸收效应自由度。
聚类稳健吸收效应工具变量
Stata
ivreghdfe y z (x = instrument), absorb(id time) cluster(id)R 包:fixest
fixest::feols(y ~ z | id + time | x ~ instrument, data = data, vcov = ~id, nthreads = 1)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;推断比较前须统一单例处理、协方差修正和吸收效应自由度。
异方差稳健吸收效应工具变量
Stata
ivreghdfe y z (x = instrument), absorb(id time) robustR 包:fixest
fixest::feols(y ~ z | id + time | x ~ instrument, data = data, vcov = "hetero", nthreads = 1)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;推断比较前须统一单例处理、协方差修正和吸收效应自由度。
个体固定效应工具变量
Stata
ivreghdfe y z (x = instrument), absorb(id)R 包:fixest
fixest::feols(y ~ z | id | x ~ instrument, data = data, vcov = "iid", nthreads = 1)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;推断比较前须统一单例处理、协方差修正和吸收效应自由度。
ivregress
公式式工具变量回归
Stata
ivregress 2sls y w (x = z)R 包:AER
AER::ivreg(y ~ x + w | z + w, data = data)与 Stata 有差异 固定流程;请明确调整示例列名。使用公式竖线分隔结构解释变量和工具变量。
另有 5 个示例及替代实现
聚类稳健两阶段最小二乘
Stata
ivregress 2sls y w (x = z), vce(cluster cluster)R 包:estimatr
estimatr::iv_robust(y ~ x + w | z + w, data = data, clusters = cluster, se_type = "stata")与 Stata 有差异 固定流程;请明确调整示例列名。已明确采用小聚类参考自由度。
两阶段最小二乘协方差:HC2
Stata
ivregress 2sls y w (x = z), vce(robust)R 包:estimatr
estimatr::iv_robust(y ~ x + w | z + w, data = data, se_type = "HC2")与 Stata 有差异 固定流程;请明确调整示例列名。HC修正不同;estimatr的stata选项在非聚类IV中对应HC1。
两阶段最小二乘协方差:HC3
Stata
ivregress 2sls y w (x = z), vce(robust)R 包:estimatr
estimatr::iv_robust(y ~ x + w | z + w, data = data, se_type = "HC3")与 Stata 有差异 固定流程;请明确调整示例列名。HC修正不同;estimatr的stata选项在非聚类IV中对应HC1。
两阶段最小二乘协方差:HC1
Stata
ivregress 2sls y w (x = z), vce(robust) smallR 包:estimatr
estimatr::iv_robust(y ~ x + w | z + w, data = data, se_type = "HC1")与 Stata 有差异 Stata的small请求N/(N-K)的HC1修正及t分布推断。无聚类IV中,estimatr的se_type=“stata”是HC1的别名。不指定small时,ivregress vce(robust)采用HC0和正态参考分布,默认推断不同。
两阶段最小二乘协方差:stata
Stata
ivregress 2sls y w (x = z), vce(robust) smallR 包:estimatr
estimatr::iv_robust(y ~ x + w | z + w, data = data, se_type = "stata")与 Stata 有差异 Stata的small请求N/(N-K)的HC1修正及t分布推断。无聚类IV中,estimatr的se_type=“stata”是HC1的别名。不指定small时,ivregress vce(robust)采用HC0和正态参考分布,默认推断不同。
kmatch
熵平衡处理与对照协变量:至1阶矩
Stata
kmatch eb treat x z (y), att targets(1)R 包:WeightIt
WeightIt::weightit(treat ~ x + z, data = data, method = "ebal", estimand = "ATT", moments = 1)固定流程;请明确调整示例列名。针对处理组总体的预处理权重;须统一归一化、高阶矩和优化容差,不含结局标准误。
熵平衡处理与对照协变量:至2阶矩
Stata
kmatch eb treat x z (y), att targets(2)R 包:WeightIt
WeightIt::weightit(treat ~ x + z, data = data, method = "ebal", estimand = "ATT", moments = 2)固定流程;请明确调整示例列名。针对处理组总体的预处理权重;须统一归一化、高阶矩和优化容差,不含结局标准误。
处理组目标的逆概率加权
Stata
kmatch ipw treat x z (y), attR 包:WeightIt
WeightIt::weightit(treat ~ x + z, data = data, method = "glm", estimand = "ATT")固定流程;请明确调整示例列名。仅提供权重;结局对比和倾向估计方差须另行估计。
多变量Mahalanobis匹配
Stata
kmatch md treat x z (y), att nn(1)R 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "mahalanobis", replace = TRUE, estimand = "ATT")固定流程;请明确调整示例列名。明确采用最近邻,替代kmatch默认核匹配;仅匹配预处理。
倾向得分最近邻匹配
Stata
kmatch ps treat x z (y), att nn(1)R 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", replace = TRUE, estimand = "ATT")固定流程;请明确调整示例列名。明确采用最近邻,替代kmatch默认核匹配;仅匹配预处理。
psmatch2
倾向得分匹配后的ATT点对比
Stata
psmatch2 treat x z, outcome(y) logit neighbor(1)R 包:MatchIt
{ match <- MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", replace = TRUE, estimand = "ATT"); matched <- MatchIt::match_data(match); with(matched, weighted.mean(y[treat == 1], weights[treat == 1]) - weighted.mean(y[treat == 0], weights[treat == 0])) }固定流程;请明确调整示例列名。仅点对比,不估计方差;匹配并列值和顺序可能不同。
倾向得分最近邻匹配:有放回
Stata
psmatch2 treat x z, outcome(y) logit neighbor(1) R 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", link = "logit", replace = TRUE, estimand = "ATT")固定流程;请明确调整示例列名。返回匹配预处理,不返回psmatch2结局估计及方差;须明确放回、并列值和匹配顺序。
绝对卡尺倾向得分匹配
Stata
psmatch2 treat x z, outcome(y) logit neighbor(1) caliper(.1)R 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", link = "logit", replace = TRUE, caliper = .1, std.caliper = FALSE, estimand = "ATT")固定流程;请明确调整示例列名。使用概率尺度绝对卡尺;MatchIt默认标准化卡尺,必须显式关闭。结局估计另行进行。
倾向得分最近邻匹配:无放回
Stata
psmatch2 treat x z, outcome(y) logit neighbor(1) noreplacementR 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", link = "logit", replace = FALSE, estimand = "ATT")固定流程;请明确调整示例列名。返回匹配预处理,不返回psmatch2结局估计及方差;须明确放回、并列值和匹配顺序。
pstest
rdbwdensity
密度断点检验带宽选择
Stata
rdbwdensity xR 包:rddensity
rddensity::rdbwdensity(x)与 Stata 有差异 固定流程;请明确调整示例列名。带宽优化针对密度估计,而非处理效应估计。
rdbwselect
断点带宽选择:cerrd
Stata
rdbwselect y x, bwselect(cerrd)R 包:rdrobust
rdrobust::rdbwselect(y, x, bwselect = "cerrd")与 Stata 有差异 固定流程;请明确调整示例列名。rdrobust官方配套命令;各带宽选择方法对应不同优化目标。
断点带宽选择:certwo
Stata
rdbwselect y x, bwselect(certwo)R 包:rdrobust
rdrobust::rdbwselect(y, x, bwselect = "certwo")与 Stata 有差异 固定流程;请明确调整示例列名。rdrobust官方配套命令;各带宽选择方法对应不同优化目标。
断点带宽选择:mserd
Stata
rdbwselect y x, bwselect(mserd)R 包:rdrobust
rdrobust::rdbwselect(y, x, bwselect = "mserd")与 Stata 有差异 固定流程;请明确调整示例列名。rdrobust官方配套命令;各带宽选择方法对应不同优化目标。
断点带宽选择:msetwo
Stata
rdbwselect y x, bwselect(msetwo)R 包:rdrobust
rdrobust::rdbwselect(y, x, bwselect = "msetwo")与 Stata 有差异 固定流程;请明确调整示例列名。rdrobust官方配套命令;各带宽选择方法对应不同优化目标。
rddensity
处理阈值处密度连续性
Stata
rddensity xR 包:rddensity
rddensity::rddensity(x)与 Stata 有差异 固定流程;请明确调整示例列名。仅检验密度连续性,不能检验全部断点识别假设。
固定带宽密度连续性
Stata
rddensity x, h(.4 .4)R 包:rddensity
rddensity::rddensity(x, h = c(.4, .4))与 Stata 有差异 固定流程;请明确调整示例列名。仅检验密度连续性,不能检验全部断点识别假设。
三次局部多项式密度断点
Stata
rddensity x, p(3)R 包:rddensity
rddensity::rddensity(x, p = 3)与 Stata 有差异 固定流程;请明确调整示例列名。仅检验密度连续性,不能检验全部断点识别假设。
rdrobust
精确局部线性断点回归
Stata
rdrobust y xR 包:rdrobust
rdrobust::rdrobust(y, x)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
另有 10 个示例及替代实现
覆盖误差最优断点带宽
Stata
rdrobust y x, bwselect(cerrd)R 包:rdrobust
rdrobust::rdrobust(y, x, bwselect = "cerrd")与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
两侧分别选择MSE最优带宽
Stata
rdrobust y x, bwselect(msetwo)R 包:rdrobust
rdrobust::rdrobust(y, x, bwselect = "msetwo")与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
聚类稳健断点推断
Stata
rdrobust y x, cluster(cluster)R 包:rdrobust
rdrobust::rdrobust(y, x, cluster = cluster)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
协变量调整断点回归
Stata
rdrobust y x, covs(z)R 包:rdrobust
rdrobust::rdrobust(y, x, covs = z)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
模糊断点回归
Stata
rdrobust y x, fuzzy(treat)R 包:rdrobust
rdrobust::rdrobust(y, x, fuzzy = treat)与 Stata 有差异 固定流程;请明确调整示例列名。要求排除限制、处理概率断点及适当单调性假设。
固定对称带宽断点回归
Stata
rdrobust y x, h(.4)R 包:rdrobust
rdrobust::rdrobust(y, x, h = .4)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
Epanechnikov核断点回归
Stata
rdrobust y x, kernel(epanechnikov)R 包:rdrobust
rdrobust::rdrobust(y, x, kernel = "epanechnikov")与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
均匀核断点回归
Stata
rdrobust y x, kernel(uniform)R 包:rdrobust
rdrobust::rdrobust(y, x, kernel = "uniform")与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
90%置信区间断点回归
Stata
rdrobust y x, level(90)R 包:rdrobust
rdrobust::rdrobust(y, x, level = 90)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
局部二次断点回归
Stata
rdrobust y x, p(2)R 包:rdrobust
rdrobust::rdrobust(y, x, p = 2)与 Stata 有差异 固定流程;请明确调整示例列名。用户编写的Stata命令;须统一版本、带宽、核和方差设置,不声称示例数值完全一致。
tebalance
加权前后协变量平衡
Stata
tebalance summarizeR 包:cobalt
cobalt::bal.tab(w, un = TRUE)与 Stata 有差异 固定流程;请明确调整示例列名。须统一标准化分母和二元变量尺度。
teffects
增广逆概率加权ATE点估计
Stata
teffects aipw (y x z) (treat x z)R 包:stats
{ ps <- stats::fitted(stats::glm(treat ~ x + z, data, family = stats::binomial())); m0 <- stats::predict(stats::lm(y ~ x + z, data, subset = treat == 0), data); m1 <- stats::predict(stats::lm(y ~ x + z, data, subset = treat == 1), data); mean(m1 - m0 + data$treat * (data$y - m1) / ps - (1 - data$treat) * (data$y - m0) / (1 - ps)) }与 Stata 有差异 固定流程;请明确调整示例列名。不计算标准误;双重稳健仍要求重叠性及因果识别假设。
另有 13 个示例及替代实现
倾向得分权重目标:ATC
Stata
teffects ipw (y) (treat x z) R 包:WeightIt
WeightIt::weightit(treat ~ x + z, data = data, method = "glm", estimand = "ATC")固定流程;请明确调整示例列名。仅计算权重,不计算处理效应或标准误;ATO和ATC属于替代目标总体。
倾向得分权重目标:ATE
Stata
teffects ipw (y) (treat x z) R 包:WeightIt
WeightIt::weightit(treat ~ x + z, data = data, method = "glm", estimand = "ATE")固定流程;请明确调整示例列名。仅计算权重,不计算处理效应或标准误;ATO和ATC属于替代目标总体。
倾向得分权重目标:ATO
Stata
teffects ipw (y) (treat x z) R 包:WeightIt
WeightIt::weightit(treat ~ x + z, data = data, method = "glm", estimand = "ATO")固定流程;请明确调整示例列名。仅计算权重,不计算处理效应或标准误;ATO和ATC属于替代目标总体。
ATE目标的归一化逆概率加权点效应
Stata
teffects ipw (y) (treat x z) R 包:WeightIt
{ w <- WeightIt::weightit(treat ~ x + z, data = data, method = "glm", estimand = "ATE")$weights; weighted.mean(data$y[data$treat == 1], w[data$treat == 1]) - weighted.mean(data$y[data$treat == 0], w[data$treat == 0]) }与 Stata 有差异 固定流程;请明确调整示例列名。仅点估计;无结局权重要求条件可交换性和重叠性,未量化估计权重的不确定性。
倾向得分权重目标:ATT
Stata
teffects ipw (y) (treat x z) , atetR 包:WeightIt
WeightIt::weightit(treat ~ x + z, data = data, method = "glm", estimand = "ATT")固定流程;请明确调整示例列名。仅计算权重,不计算处理效应或标准误;ATO和ATC属于替代目标总体。
ATT目标的归一化逆概率加权点效应
Stata
teffects ipw (y) (treat x z) , atetR 包:WeightIt
{ w <- WeightIt::weightit(treat ~ x + z, data = data, method = "glm", estimand = "ATT")$weights; weighted.mean(data$y[data$treat == 1], w[data$treat == 1]) - weighted.mean(data$y[data$treat == 0], w[data$treat == 0]) }与 Stata 有差异 固定流程;请明确调整示例列名。仅点估计;无结局权重要求条件可交换性和重叠性,未量化估计权重的不确定性。
逆概率加权结果回归ATE
Stata
teffects ipwra (y x z) (treat x z)R 包:stats
{ ps <- stats::fitted(stats::glm(treat ~ x + z, data, family = stats::binomial())); data$w <- ifelse(data$treat == 1, 1 / ps, 1 / (1 - ps)); m0 <- stats::predict(stats::lm(y ~ x + z, data, subset = treat == 0, weights = w), data); m1 <- stats::predict(stats::lm(y ~ x + z, data, subset = treat == 1, weights = w), data); mean(m1 - m0) }与 Stata 有差异 固定流程;请明确调整示例列名。仅点估计;Stata同时计算估计方程方差。
Mahalanobis最近邻预处理
Stata
teffects nnmatch (y x z) (treat), atetR 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "mahalanobis", replace = TRUE, estimand = "ATT")与teffects一样使用放回匹配。MatchIt返回预处理权重和匹配关系,不返回处理效应估计;并列处理、距离约定、偏差修正及Abadie-Imbens标准误须另行统一。
有放回倾向得分匹配
Stata
teffects psmatch (y) (treat x z), nneighbor(1) atetR 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", ratio = 1, replace = TRUE, estimand = "ATT")固定流程;请明确调整示例列名。仅匹配预处理,不复现teffects偏差修正或Abadie-Imbens标准误。
一对一最近倾向得分匹配
Stata
teffects psmatch (y) (treat x z), nneighbor(1) atetR 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", ratio = 1, replace = TRUE, estimand = "ATT")与teffects一样使用放回匹配。MatchIt返回预处理权重和匹配关系,不返回处理效应估计;并列处理、距离约定、偏差修正及Abadie-Imbens标准误须另行统一。
一对二最近倾向得分匹配
Stata
teffects psmatch (y) (treat x z), nneighbor(2) atetR 包:MatchIt
MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", ratio = 2, replace = TRUE, estimand = "ATT")与teffects一样使用放回匹配。MatchIt返回预处理权重和匹配关系,不返回处理效应估计;并列处理、距离约定、偏差修正及Abadie-Imbens标准误须另行统一。
回归调整平均处理效应
Stata
teffects ra (y x z) (treat)R 包:stats
{ fit0 <- stats::lm(y ~ x + z, data, subset = treat == 0); fit1 <- stats::lm(y ~ x + z, data, subset = treat == 1); mean(stats::predict(fit1, data) - stats::predict(fit0, data)) }与 Stata 有差异 固定流程;请明确调整示例列名。在潜在结局模型正确时进行g计算点估计;仅拟合模型不能建立因果识别。
处理组的回归调整效应
Stata
teffects ra (y x z) (treat), atetR 包:stats
{ fit0 <- stats::lm(y ~ x + z, data, subset = treat == 0); fit1 <- stats::lm(y ~ x + z, data, subset = treat == 1); treated <- data[data$treat == 1, ]; mean(stats::predict(fit1, treated) - stats::predict(fit0, treated)) }与 Stata 有差异 固定流程;请明确调整示例列名。在处理组协变量分布上平均反事实差异。
teoverlap
xtdidregress
个体和时期固定效应面板双重差分
Stata
xtdidregress (y x) (treated), group(id) time(time)R 包:fixest
fixest::feols(y ~ treated + x | id + time, data = data, vcov = ~id, nthreads = 1)与 Stata 有差异 固定流程;请明确调整示例列名。示例为平行趋势和无预期下的两组同质效应设计。处理错时且效应异质时,TWFE不能替代现代队列特异估计;协方差有限样本约定可能不同。