模型和结果表

先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。

areg

吸收一个类别变量的回归

Stata

areg y x, absorb(id)

R 包:fixest

fixest::feols(y ~ x | id, data = data)

与 Stata 有差异 须匹配 fixest 协方差小样本校正和单例组处理;公式相同不能保证标准误或保留观测一致。

avplots

偏回归图

Stata

avplots

R 包:car

car::avPlots(fit)

bootstrap

自助法标准误

Stata

bootstrap, reps(500): regress y x

R 包:sandwich

lmtest::coeftest(fit, vcov = sandwich::vcovBS(fit, R = 500))

与 Stata 有差异 R 代码为已有拟合估计协方差;重抽样单位、中心化和 t 或正态推断须匹配 Stata bootstrap/jackknife 前缀选项。

cluster

K 均值聚类

Stata

cluster kmeans x1 x2, k(3)

R 包:stats

kmeans(na.omit(select(data, x1, x2)), centers = 3)

与 Stata 有差异 R 默认 Hartigan-Wong k 均值和随机初始中心;Stata 初值和迭代默认不同。比较聚类须控制初始中心。

csdid

多期(交错)双重差分

Stata

csdid y, ivar(id) time(year) gvar(first_treat)

R 包:did

did::att_gt(yname = "y", tname = "year", idname = "id", gname = "first_treat", data = data)

与 Stata 有差异 须匹配对照组、预期效应和估计方法;csdid 与 att_gt() 的默认值、聚合和推断不保证一致。

didregress

双重差分(Stata 17 及以上)

Stata

didregress (y) (treated), group(id) time(year)

R 包:fixest

fixest::feols(y ~ treated | id + year, data = data)

与 Stata 有差异 仅 TWFE 系数不含 didregress 默认组聚类标准误和诊断;须指定聚类并核对 DID 设计。

estat

Breusch-Pagan 异方差检验

Stata

estat hettest

R 包:lmtest

lmtest::bptest(fit, ~ fitted(fit), studentize = FALSE)

这些选项与 Stata 默认的以拟合值为基础的检验一致。

信息准则

Stata

estat ic

R 包:stats

c(AIC = AIC(fit), BIC = BIC(fit))

与 Stata 有差异 须比较相同估计样本和似然常数;R 类别和 Stata 对尺度参数或似然项的计数可能不同。

遗漏变量 RESET 检验

Stata

estat ovtest

R 包:lmtest

lmtest::resettest(fit, power = 2:4)

方差协方差矩阵

Stata

estat vce

R 包:stats

vcov(fit)

estimates

保存模型结果

Stata

estimates store m1

R 包:stats

m1 <- lm(y ~ x, data = data)

模型结果是普通的对象,可以用不同的名字保存任意多个。

并列比较多个模型

Stata

estimates table m1 m2

R 包:modelsummary

modelsummary::modelsummary(list(m1, m2), output = "markdown")

eststo

保存模型用于制表

Stata

eststo m1: regress y x

R 包:stats

m1 <- lm(y ~ x, data = data)

esttab

回归结果表

Stata

esttab m1 m2

R 包:modelsummary

modelsummary::modelsummary(list(m1, m2))

etable

最近一个模型的结果表(Stata 17 及以上)

Stata

etable

R 包:modelsummary

modelsummary::modelsummary(fit)

glm

广义线性模型

Stata

glm y x, family(binomial)

R 包:stats

glm(y ~ x, family = binomial, data = data)

heckman

Heckman 样本选择模型

Stata

heckman y x, select(s = z)

R 包:sampleSelection

sampleSelection::selection(s ~ z, y ~ x, data = data)

ivreg2

带稳健标准误的工具变量回归

Stata

ivreg2 y x1 (x2 = z), robust

R 包:fixest

fixest::feols(y ~ x1 | x2 ~ z, data = data, vcov = "hetero")

与 Stata 有差异 fixest::fitstat(fit, ~ ivf + ivwald) 报告第一阶段统计量。 须匹配 fixest 协方差小样本校正和单例组处理;公式相同不能保证标准误或保留观测一致。

ivregress

工具变量回归(两阶段最小二乘)

Stata

ivregress 2sls y x1 (x2 = z)

R 包:fixest

fixest::feols(y ~ x1 | x2 ~ z, data = data)

与 Stata 有差异 须匹配 fixest 协方差小样本校正和单例组处理;公式相同不能保证标准误或保留观测一致。

jackknife

刀切法标准误

Stata

jackknife: regress y x

R 包:sandwich

lmtest::coeftest(fit, vcov = sandwich::vcovJK(fit))

与 Stata 有差异 R 代码为已有拟合估计协方差;重抽样单位、中心化和 t 或正态推断须匹配 Stata bootstrap/jackknife 前缀选项。

lincom

系数的线性组合

Stata

lincom x1 - x2

R 包:marginaleffects

marginaleffects::hypotheses(fit, "x1 - x2 = 0")

与 Stata 有差异 hypotheses() 使用 R 模型协方差和默认自由度;Stata 可能使用不同 t、F 或正态参照分布。

logistic

以优势比报告的 logit 模型

Stata

logistic y x

R 包:broom

broom::tidy(glm(y ~ x, family = binomial, data = data), exponentiate = TRUE, conf.int = TRUE)

与 Stata 有差异 broom 置信区间依赖模型;即使优势比相同,glm 剖面似然区间仍可能不同于 Stata 默认 Wald 区间。

logit

Logit 模型

Stata

logit y x1 x2

R 包:stats

glm(y ~ x1 + x2, family = binomial, data = data)
另有 1 个示例及替代实现

优势比

Stata

logit y x, or

R 包:broom

broom::tidy(glm(y ~ x, family = binomial, data = data), exponentiate = TRUE)

与 Stata 有差异 broom 置信区间依赖模型;即使优势比相同,glm 剖面似然区间仍可能不同于 Stata 默认 Wald 区间。

lrtest

似然比检验

Stata

lrtest m1 m2

R 包:lmtest

lmtest::lrtest(m1, m2)

与 Stata 有差异 须比较相同估计样本和似然常数;R 类别和 Stata 对尺度参数或似然项的计数可能不同。

margins

分组的预测边际

Stata

margins group

R 包:marginaleffects

marginaleffects::avg_predictions(fit, by = "group")

与 Stata 有差异 by = “group” 在观测组内平均;margins group 将全样本设为各水平后平均。该 Stata 目标须使用反事实预测。

平均边际效应

Stata

margins, dydx(*)

R 包:marginaleffects

marginaleffects::avg_slopes(fit)

与 Stata 有差异 avg_slopes() 平均模型导数;因子离散变化、权重和协方差须匹配 margins 及模型上下文。

marginsplot

绘制预测边际

Stata

marginsplot

R 包:marginaleffects

marginaleffects::plot_predictions(fit, condition = "x")

melogit

多层 logit 模型

Stata

melogit y x || id:

R 包:lme4

lme4::glmer(y ~ x + (1 | id), data = data, family = binomial)

与 Stata 有差异 glmer() 默认 Laplace 积分(nAGQ = 1);melogit 默认自适应求积,可能改变估计和似然。

mi

在多个插补数据上估计并合并结果

Stata

mi estimate: regress y x

R 包:mice

mice::pool(with(imp, lm(y ~ x)))

与 Stata 有差异 Rubin 合并仍需匹配与 mi estimate 的完整数据自由度和小样本校正。

多重插补

Stata

mi impute chained (regress) x1 x2 = y

R 包:mice

imp <- mice::mice(data, m = 20)

与 Stata 有差异 mice() 按 R 列类型选择方法,常用预测均值匹配;默认并非指定的链式线性回归。须明确方法、预测矩阵和 m。

mixed

多层(混合)线性模型

Stata

mixed y x || id:

R 包:lme4

lme4::lmer(y ~ x + (1 | id), data = data)

与 Stata 有差异 lme4 不报告 p 值;lmerTest::lmer() 会加上。 lmer() 默认 REML,Stata mixed 默认 ML。ML 须设 REML = FALSE,固定效应 p 值还需另选方法。

mlogit

多项 logit 模型

Stata

mlogit y x1 x2

R 包:nnet

nnet::multinom(y ~ x1 + x2, data = data)

与 Stata 有差异 multinom() 的多分类 y 须为因子;结果参照类别和优化器默认值可能与 Stata mlogit 不同。

nbreg

负二项模型

Stata

nbreg y x

R 包:MASS

MASS::glm.nb(y ~ x, data = data)

与 Stata 有差异 fixest::fenegbin() 可以加入固定效应。 glm.nb() 与默认 nbreg 同为 NB2,但 theta 为 Stata alpha 倒数,似然或优化报告规则不同。

nlcom

系数的非线性组合

Stata

nlcom _b[x1] / _b[x2]

R 包:marginaleffects

marginaleffects::hypotheses(fit, "x1 / x2 = 0")

与 Stata 有差异 标准误使用 delta 方法,与 Stata 一致。 hypotheses() 使用 R 模型协方差和默认自由度;Stata 可能使用不同 t、F 或正态参照分布。

oaxaca

Blinder-Oaxaca 分解

Stata

oaxaca y x1 x2, by(group)

R 包:oaxaca

oaxaca::oaxaca(y ~ x1 + x2 | group, data = data)

与 Stata 有差异 oaxaca() 报告多个参照权重分解;须明确选择 Stata oaxaca 使用的参照系数及方差方法。

ologit

有序 logit 模型

Stata

ologit y x1 x2

R 包:MASS

MASS::polr(factor(y) ~ x1 + x2, data = data, Hess = TRUE)

与 Stata 有差异 Hess = TRUE 使 summary() 能显示标准误。 polr() 使用有序因子水平和阈值参数化;须明确水平顺序并核对与 Stata 的切点符号规则。

oprobit

有序 probit 模型

Stata

oprobit y x1 x2

R 包:MASS

MASS::polr(factor(y) ~ x1 + x2, data = data, method = "probit", Hess = TRUE)

与 Stata 有差异 polr() 使用有序因子水平和阈值参数化;须明确水平顺序并核对与 Stata 的切点符号规则。

outreg2

把回归结果表导出到 Word

Stata

outreg2 using table.doc

R 包:modelsummary

modelsummary::modelsummary(list(m1, m2), output = "table.docx")

poisson

泊松模型

Stata

poisson y x1 x2

R 包:stats

glm(y ~ x1 + x2, family = poisson, data = data)

ppmlhdfe

带固定效应的泊松模型

Stata

ppmlhdfe y x, absorb(id year)

R 包:fixest

fixest::fepois(y ~ x | id + year, data = data)

与 Stata 有差异 泊松固定效应系数目标一致,但分离或单例组删除和协方差校正可能不同;须核对保留样本和不确定性。

predict

预测值

Stata

predict yhat

R 包:stats

mutate(data, yhat = predict(fit, newdata = data))

与 Stata 有差异 residuals(fit) 给出模型所用个案的残差。 predict() 依赖 R 模型;响应或链接尺度、残差定义及预测样本须匹配 Stata 估计后上下文。

另有 2 个示例及替代实现

预测概率

Stata

predict p, pr

R 包:stats

mutate(data, p = predict(fit, newdata = data, type = "response"))

与 Stata 有差异 predict() 依赖 R 模型;响应或链接尺度、残差定义及预测样本须匹配 Stata 估计后上下文。

每行的残差

Stata

predict r, residuals

R 包:stats

mutate(data, r = y - predict(fit, newdata = data))

与 Stata 有差异 predict() 依赖 R 模型;响应或链接尺度、残差定义及预测样本须匹配 Stata 估计后上下文。

probit

Probit 模型

Stata

probit y x1 x2

R 包:stats

glm(y ~ x1 + x2, family = binomial(link = "probit"), data = data)

putdocx

把表格写入 Word

Stata

putdocx begin

R 包:flextable

flextable::save_as_docx(flextable::flextable(results), path = "results.docx")

officer 可以生成完整的 Word 文档。

putexcel

把结果写入 Excel

Stata

putexcel set results.xlsx

R 包:writexl

writexl::write_xlsx(results, "results.xlsx")

openxlsx2 可以精确控制单元格格式。

qreg

中位数(分位数)回归

Stata

qreg y x

R 包:quantreg

quantreg::rq(y ~ x, tau = 0.5, data = data)

与 Stata 有差异 rq() 默认标准误方法取决于样本量,可能不同于 Stata qreg;须明确协方差和推断方法。

rdrobust

断点回归

Stata

rdrobust y x, c(0)

R 包:rdrobust

rdrobust::rdrobust(data$y, data$x, c = 0)

与 Stata 有差异 R 和 Stata 实现使用相同估计器;有限样本输出还须匹配版本、带宽、质量点和方差设置。

reghdfe

高维固定效应

Stata

reghdfe y x, absorb(id year)

R 包:fixest

fixest::feols(y ~ x | id + year, data = data)

与 Stata 有差异 须匹配 fixest 协方差小样本校正和单例组处理;公式相同不能保证标准误或保留观测一致。

regress

线性回归

Stata

regress y x1 x2

R 包:stats

fit <- lm(y ~ x1 + x2, data = data)

summary(fit) 显示系数表;broom::tidy(fit) 以数据表形式返回。

另有 5 个示例及替代实现

因子变量和交互项

Stata

regress y i.group c.x1##c.x2

R 包:stats

lm(y ~ factor(group) + x1 * x2, data = data)

与 Stata 有差异 factor() 相当于 i.;x1 * x2 相当于 c.x1##c.x2,x1:x2 相当于 c.x1#c.x2。 factor() 按 R 水平顺序选择参照;Stata i.group 使用数值基准水平。应明确因子水平和对比编码。

指定参照组

Stata

regress y ib3.group

R 包:stats

lm(y ~ relevel(factor(group), ref = "3"), data = data)

使用抽样权重的回归

Stata

regress y x [pweight = wt]

R 包:fixest

fixest::feols(y ~ x, data = data, weights = ~wt, vcov = "hetero")

与 Stata 有差异 若有分层和聚类等完整的抽样设计,请查看 svyset。 须匹配 fixest 协方差小样本校正和单例组处理;公式相同不能保证标准误或保留观测一致。

异方差稳健标准误

Stata

regress y x1 x2, robust

R 包:fixest

fixest::feols(y ~ x1 + x2, data = data, vcov = "hetero")

与 Stata 有差异 须匹配 fixest 协方差小样本校正和单例组处理;公式相同不能保证标准误或保留观测一致。

聚类标准误

Stata

regress y x1 x2, vce(cluster id)

R 包:fixest

fixest::feols(y ~ x1 + x2, data = data, cluster = ~id)

与 Stata 有差异 须匹配 fixest 协方差小样本校正和单例组处理;公式相同不能保证标准误或保留观测一致。

rreg

稳健回归

Stata

rreg y x

R 包:MASS

MASS::rlm(y ~ x, data = data)

与 Stata 有差异 rlm() 使用 Huber M 估计;Stata 的 rreg 结合了 Huber 和 biweight 权重,因此估计值可能略有不同。 rlm() 默认 Huber M 估计;rreg 筛异常值并结合 Huber 与双权迭代,估计和推断都可能不同。

rvfplot

残差对拟合值图

Stata

rvfplot

R 包:stats

plot(fit, which = 1)

sem

结构方程模型

Stata

sem (y <- x1 x2)

R 包:lavaan

lavaan::sem("y ~ x1 + x2", data = data)

与 Stata 有差异 lavaan 默认将观测外生预测变量视为固定;须匹配与 Stata sem 的 fixed.x 和缺失数据似然设置。

synth

合成控制法

Stata

synth y x1 x2, trunit(1) trperiod(2000)

R 包:Synth

Synth::synth(data.prep.obj = prep)

需要先用 Synth::dataprep() 从面板数据生成 prep;tidysynth 提供更简洁的接口。

teffects

逆概率加权

Stata

teffects ipw (y) (t x1 x2)

R 包:WeightIt

WeightIt::weightit(t ~ x1 + x2, data = data, method = "glm")

倾向得分匹配

Stata

teffects psmatch (y) (t x1 x2)

R 包:MatchIt

MatchIt::matchit(t ~ x1 + x2, data = data, method = "nearest")

在匹配后的数据上估计效应,例如 lm(y ~ t, data = MatchIt::match.data(m), weights = weights)。

test

检验系数的假设

Stata

test x1 = x2

R 包:marginaleffects

marginaleffects::hypotheses(fit, "x1 = x2")

与 Stata 有差异 hypotheses() 使用 R 模型协方差和默认自由度;Stata 可能使用不同 t、F 或正态参照分布。

tobit

Tobit 删失回归

Stata

tobit y x, ll(0)

R 包:AER

AER::tobit(y ~ x, left = 0, data = data)

vif

方差膨胀因子

Stata

vif

R 包:car

car::vif(fit)

与 Stata 有差异 car::vif() 对多自由度项给出广义 VIF;Stata estat vif 给出回归列 VIF,因此因子项表格不同。

xtabond

动态面板(Arellano-Bond)

Stata

xtabond y x

R 包:plm

plm::pgmm(y ~ lag(y, 1) + x | lag(y, 2:99), data = data, index = c("id", "year"))

与 Stata 有差异 pgmm() 须匹配变换、滞后工具、压缩和一步或两步选择;仅公式不能复现 xtabond 默认工具或标准误。

xtlogit

条件(固定效应)logit 模型

Stata

xtlogit y x, fe

R 包:survival

survival::clogit(y ~ x + strata(id), data = data)

与 Stata 有差异 fixest::feglm(y ~ x | id, family = binomial) 更快,但估计的是非条件固定效应。 clogit() 对应条件固定效应 logit;精确似然、权重和协方差须匹配 xtlogit, fe,而非含虚拟变量的无条件 logit。

xtpoisson

固定效应泊松模型

Stata

xtpoisson y x, fe

R 包:fixest

fixest::fepois(y ~ x | id, data = data)

与 Stata 有差异 泊松固定效应系数目标一致,但分离或单例组删除和协方差校正可能不同;须核对保留样本和不确定性。

xtreg

面板固定效应模型

Stata

xtreg y x, fe

R 包:fixest

fixest::feols(y ~ x | id, data = data)

与 Stata 有差异 须匹配 fixest 协方差小样本校正和单例组处理;公式相同不能保证标准误或保留观测一致。

另有 1 个示例及替代实现

面板随机效应模型

Stata

xtreg y x, re

R 包:plm

plm::plm(y ~ x, data = data, index = c("id", "year"), model = "random")

与 Stata 有差异 plm 和 xtreg, re 默认方差分量估计法不同;比较结果前须匹配 random.method 和面板样本。