因果推断

先查看各命令展开的示例,再按需展开其他选项及 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 cohort

R 包: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, allhorizons

R 包: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) dripw

R 包: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) reg

R 包: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) stdipw

R 包: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)

固定流程;请明确调整示例列名。针对处理组总体的预处理权重;须统一归一化、高阶矩和优化容差,不含结局标准误。

熵平衡处理与对照协变量:至2阶矩

Stata

ebalance treat x z, targets(2)

R 包:WeightIt

WeightIt::weightit(treat ~ x + z, data = data, method = "ebal", estimand = "ATT", moments = 2)

固定流程;请明确调整示例列名。针对处理组总体的预处理权重;须统一归一化、高阶矩和优化容差,不含结局标准误。

estat

工具变量弱相关和内生性诊断

Stata

estat endogenous

R 包:AER

summary(AER::ivreg(y ~ x + w | z + w, data = data), diagnostics = TRUE)$diagnostics

与 Stata 有差异 固定流程;请明确调整示例列名。Wu-Hausman检验依赖模型假设;恰好识别模型不能做过度识别检验。

另有 1 个示例及替代实现

第一阶段工具变量相关性回归

Stata

estat firststage

R 包:stats

summary(stats::lm(x ~ z + w, data = data))

固定流程;请明确调整示例列名。展示完整第一阶段回归;排除工具变量联合F检验可能需要嵌套比较。

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) robust

R 包: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) small

R 包: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) small

R 包: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), att

R 包: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默认核匹配;仅匹配预处理。

另有 1 个示例及替代实现

分类协变量的精确匹配

Stata

kmatch em treat category (y), att

R 包:MatchIt

MatchIt::matchit(treat ~ category, data = data, method = "exact", estimand = "ATT")

固定流程;请明确调整示例列名。精确匹配预处理;目标估计量和分层归一化均已明确。

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) noreplacement

R 包:MatchIt

MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "glm", link = "logit", replace = FALSE, estimand = "ATT")

固定流程;请明确调整示例列名。返回匹配预处理,不返回psmatch2结局估计及方差;须明确放回、并列值和匹配顺序。

有放回Mahalanobis匹配

Stata

psmatch2 treat, outcome(y) mahalanobis(x z) neighbor(1)

R 包:MatchIt

MatchIt::matchit(treat ~ x + z, data = data, method = "nearest", distance = "mahalanobis", replace = TRUE, estimand = "ATT")

固定流程;请明确调整示例列名。仅匹配预处理;协方差归一化和并列处理可能不同于psmatch2。

pstest

匹配前后标准化协变量平衡

Stata

pstest x z, both

R 包:cobalt

cobalt::bal.tab(match, un = TRUE)

固定流程;请明确调整示例列名。psmatch2配套命令;须选择相同标准化分母。cobalt平衡表不复现pstest所有t检验和总体汇总量。

rdbwdensity

密度断点检验带宽选择

Stata

rdbwdensity x

R 包: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 x

R 包: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 x

R 包: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 summarize

R 包: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) , atet

R 包:WeightIt

WeightIt::weightit(treat ~ x + z, data = data, method = "glm", estimand = "ATT")

固定流程;请明确调整示例列名。仅计算权重,不计算处理效应或标准误;ATO和ATC属于替代目标总体。

ATT目标的归一化逆概率加权点效应

Stata

teffects ipw (y) (treat x z) , atet

R 包: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), atet

R 包: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) atet

R 包: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) atet

R 包: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) atet

R 包: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), atet

R 包: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

按处理状态汇总倾向得分重叠

Stata

teoverlap

R 包:stats

{ ps <- stats::fitted(stats::glm(treat ~ x + z, data, family = stats::binomial())); lapply(split(ps, data$treat), function(v) stats::quantile(v, c(0, .05, .5, .95, 1))) }

固定流程;请明确调整示例列名。仅提供数值重叠诊断,不绘制密度或自动修剪样本。

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不能替代现代队列特异估计;协方差有限样本约定可能不同。