模型与估计

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

betareg

使用cloglog均值连接拟合贝塔回归

Stata

betareg share x, link(cloglog)

R 包:betareg

betareg::betareg(share~x,data=data,link="cloglog",type="ML",link.phi="log")

与 Stata 有差异 采用常规ML及精度参数的log链接,匹配Stata的slink(log)。不指定link.phi=“log”时,betareg在恒等尺度报告常数phi,Stata则报告ln(phi)。响应须严格位于(0,1)内。

使用logit均值连接拟合贝塔回归

Stata

betareg share x, link(logit)

R 包:betareg

betareg::betareg(share~x,data=data,link="logit",type="ML",link.phi="log")

与 Stata 有差异 采用常规ML及精度参数的log链接,匹配Stata的slink(log)。不指定link.phi=“log”时,betareg在恒等尺度报告常数phi,Stata则报告ln(phi)。响应须严格位于(0,1)内。

使用probit均值连接拟合贝塔回归

Stata

betareg share x, link(probit)

R 包:betareg

betareg::betareg(share~x,data=data,link="probit",type="ML",link.phi="log")

与 Stata 有差异 采用常规ML及精度参数的log链接,匹配Stata的slink(log)。不指定link.phi=“log”时,betareg在恒等尺度报告常数phi,Stata则报告ln(phi)。响应须严格位于(0,1)内。

使用协变量建模贝塔回归精度参数

Stata

betareg share x, scale(z) slink(log)

R 包:betareg

betareg::betareg(share~x|z,data=data,link="logit",link.phi="log",type="ML")

与 Stata 有差异 对精度参数使用对数连接;数值比较前需统一Stata的scale连接参数化。

binreg

拟合优势比尺度二项回归

Stata

binreg b i.g, or

R 包:stats

stats::glm(b ~ factor(g),data=data,family=stats::binomial(link="logit"))

与 Stata 有差异 风险比和风险差模型可能出现边界或收敛问题,需检查拟合概率。

拟合风险差尺度二项回归

Stata

binreg b i.g, rd

R 包:stats

stats::glm(b ~ factor(g),data=data,family=stats::binomial(link="identity"))

与 Stata 有差异 风险比和风险差模型可能出现边界或收敛问题,需检查拟合概率。

拟合风险比尺度二项回归

Stata

binreg b i.g, rr

R 包:stats

stats::glm(b ~ factor(g),data=data,family=stats::binomial(link="log"))

与 Stata 有差异 风险比和风险差模型可能出现边界或收敛问题,需检查拟合概率。

boxcox

剖面估计Box-Cox响应变换参数

Stata

boxcox y x z, model(lhsonly)

R 包:MASS

MASS::boxcox(y ~ x+z,data=data,lambda=seq(-1,1,by=0.1),plotit=FALSE)

对响应变换参数进行网格剖面估计;不覆盖Stata全部解释变量变换模型。

bsqreg

使用自助法估计分位数回归推断

Stata

bsqreg y x z, reps(99)

R 包:quantreg

{ fit <- quantreg::rq(y~x+z,data=data,tau=0.5); summary(fit,se="boot",R=99) }

与 Stata 有差异 用99次自助重复进行分位数回归推断。R与Stata的随机流及重抽样实现不同,因此自助标准误不完全相同。

cloglog

拟合cloglog回归

Stata

cloglog b x z

R 包:stats

stats::glm(b ~ x + z,data=data,family=stats::binomial(link="cloglog"))

与 Stata 有差异 R采用互补log-log链接。须统一事件类别和完整样本;GLM结果对象和收敛容差不同于Stata的cloglog。

拟合无截距cloglog模型

Stata

cloglog b x z, noconstant

R 包:stats

stats::glm(b ~ x + z - 1,data=data,family=stats::binomial(link="cloglog"))

与 Stata 有差异 R采用互补log-log链接。须统一事件类别和完整样本;GLM结果对象和收敛容差不同于Stata的cloglog。

cnsreg

在两个系数相等的约束下拟合最小二乘回归

Stata

constraint define 1 x = z
cnsreg y x z, constraints(1)

R 包:stats

{ fit <- stats::lm(y~I(x+z),data=data); c(intercept=unname(stats::coef(fit)[1]),x=unname(stats::coef(fit)[2]),z=unname(stats::coef(fit)[2])) }

固定流程。先在Stata中定义constraint 1 x = z;重参数化施加此固定线性约束,协方差报告需进行对应系数变换。

constraint

把线性等式约束表示为矩阵

Stata

constraint define 1 x = z

R 包:stats

L <- matrix(c(0,1,-1),nrow=1,dimnames=list(NULL,c("intercept","x","z")))

固定流程:L beta = 0表示x与z系数相等;拟合程序需实际施加约束。

eivreg

按已知解释变量信度校正简单回归斜率

Stata

eivreg y x, reliability(x 0.8)

R 包:stats

{ slope <- stats::cov(data$x,data$y)/(0.8*stats::var(data$x)); c(intercept=mean(data$y)-slope*mean(data$x),x=slope) }

仅适用于单个存在经典独立测量误差且信度已知的解释变量;仅计算系数,不提供EIV标准误。

fracreg

使用三明治推断拟合分数logit回归

Stata

fracreg logit share x

R 包:sandwich

{ fit <- stats::glm(share ~ x,data=data,family=stats::quasibinomial(link="logit")); lmtest::coeftest(fit,vcov.=sandwich::vcovHC(fit,type="HC0"),df=Inf) }

与 Stata 有差异 准二项拟合避免非整数成功次数警告;此例显式使用三明治推断,小样本校正可能不同。

使用三明治推断拟合分数probit回归

Stata

fracreg probit share x

R 包:sandwich

{ fit <- stats::glm(share ~ x,data=data,family=stats::quasibinomial(link="probit")); lmtest::coeftest(fit,vcov.=sandwich::vcovHC(fit,type="HC0"),df=Inf) }

与 Stata 有差异 准二项拟合避免非整数成功次数警告;此例显式使用三明治推断,小样本校正可能不同。

glm

拟合二项互补对数对数连接模型

Stata

glm b x z, family(binomial) link(cloglog)

R 包:stats

stats::glm(b ~ x + z, data=data, family=stats::binomial(link="cloglog"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

另有 12 个示例及替代实现

拟合二项logit连接模型

Stata

glm b x z, family(binomial) link(logit)

R 包:stats

stats::glm(b ~ x + z, data=data, family=stats::binomial())

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合二项probit连接模型

Stata

glm b x z, family(binomial) link(probit)

R 包:stats

stats::glm(b ~ x + z, data=data, family=stats::binomial(link="probit"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合泊松对数连接广义线性模型

Stata

glm count x z, family(poisson) link(log)

R 包:stats

stats::glm(count ~ x + z, data=data, family=stats::poisson())

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合泊松恒等连接模型

Stata

glm count x, family(poisson) link(identity)

R 包:stats

stats::glm(count ~ x, data=data, family=stats::poisson(link="identity"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合成功次数与试验次数形式的分组二项模型

Stata

glm events x, family(binomial trials) link(logit)

R 包:stats

stats::glm(cbind(events,trials-events) ~ x,data=data,family=stats::binomial())

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

为正值结果拟合伽马对数连接模型

Stata

glm y x z, family(gamma) link(log)

R 包:stats

stats::glm(y ~ x + z, data=data, family=stats::Gamma(link="log"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合高斯恒等连接广义线性模型

Stata

glm y x z, family(gaussian) link(identity)

R 包:stats

stats::glm(y ~ x + z, data=data, family=stats::gaussian())

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合高斯对数连接广义线性模型

Stata

glm y x z, family(gaussian) link(log)

R 包:stats

stats::glm(y ~ x + z, data=data, family=stats::gaussian(link="log"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合伽马恒等连接模型

Stata

glm y x, family(gamma) link(identity)

R 包:stats

stats::glm(y ~ x, data=data, family=stats::Gamma(link="identity"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合伽马倒数连接模型

Stata

glm y x, family(gamma) link(inverse)

R 包:stats

stats::glm(y ~ x, data=data, family=stats::Gamma(link="inverse"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合逆高斯恒等连接模型

Stata

glm y x, family(igaussian) link(identity)

R 包:stats

stats::glm(y ~ x, data=data, family=stats::inverse.gaussian(link="identity"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

拟合逆高斯对数连接模型

Stata

glm y x, family(igaussian) link(log)

R 包:stats

stats::glm(y ~ x, data=data, family=stats::inverse.gaussian(link="log"))

与 Stata 有差异 显式指定分布族和链接。即使拟合均值一致,R与Stata的离散参数缩放和检验参考分布也可能不同;比较标准误前须统一样本和尺度选项。

hetregress

拟合带乘性异方差的正态均值模型

Stata

hetregress y x, het(z)

R 包:nlme

nlme::gls(y~x,data=data,weights=nlme::varExp(form=~z),method="ML")

与 Stata 有差异 nlme将标准差建模为exp(thetaz),因此Stata对数方差模型中z的系数为2theta。

intreg

对区间取值结果拟合正态回归

Stata

intreg lower upper x z

R 包:survival

survival::survreg(survival::Surv(lower,upper,type="interval2")~x+z,data=data,dist="gaussian")

与 Stata 有差异 将survreg用作截面结果的高斯区间似然计算工具,不赋予事件时间解释。

iqreg

估计四分位距的回归系数

Stata

iqreg y x z, quantiles(25 75)

R 包:quantreg

{ fit <- quantreg::rq(y ~ x+z,data=data,tau=c(0.25,0.75)); stats::coef(fit)[,2]-stats::coef(fit)[,1] }

仅计算系数;标准误需对两个分位数模型联合重抽样。

logistic

报告逻辑回归优势比

Stata

logistic b x z

R 包:stats

{ fit <- stats::glm(b ~ x+z,data=data,family=stats::binomial()); exp(stats::coef(fit)) }

与 Stata 有差异 将二项logit系数取指数得到优势比。仅返回点估计,不含Stata的logistic所打印的置信区间和检验。

logit

拟合logit回归

Stata

logit b x z

R 包:stats

stats::glm(b ~ x + z,data=data,family=stats::binomial(link="logit"))

与 Stata 有差异 R使用logit链接的二项GLM,返回对数优势尺度系数。须统一二元编码和完整样本;Stata的迭代诊断及结果存储结构不同。

另有 1 个示例及替代实现

拟合无截距logit模型

Stata

logit b x z, noconstant

R 包:stats

stats::glm(b ~ x + z - 1,data=data,family=stats::binomial(link="logit"))

与 Stata 有差异 R使用logit链接的二项GLM,返回对数优势尺度系数。须统一二元编码和完整样本;Stata的迭代诊断及结果存储结构不同。

mlexp

最大化显式定义的正态似然

Stata

mlexp (lnnormalden(y,{mu},exp({lnsigma})))

R 包:stats

stats::optim(c(mu=mean(data$y),log_sigma=log(stats::sd(data$y))),function(par) -sum(stats::dnorm(data$y,mean=par[1],sd=exp(par[2]),log=TRUE)),method="BFGS",hessian=TRUE)

与 Stata 有差异 R对log sigma优化以确保正值;使用exp()变换回标准差。

mlogit

指定参照结果类别拟合多项logit模型

Stata

mlogit g x z, baseoutcome(4)

R 包:nnet

nnet::multinom(stats::relevel(factor(g), ref = "4") ~ x+z,data=data,trace=FALSE)

与 Stata 有差异 将结果类别4重设为R因子的首个水平,匹配baseoutcome(4)。系数标签和优化准则不同;须保留相同观测和类别支持。

nbreg

拟合NB2负二项回归

Stata

nbreg count x z

R 包:MASS

MASS::glm.nb(count ~ x+z,data=data)

与 Stata 有差异 两者均采用NB2方差mu+alpha*mu^2;MASS的theta等于1/alpha。

nl

拟合非线性饱和响应曲线

Stata

nl (y = {a=1} + {b=2}*x/({c=1}+x))

R 包:stats

stats::nls(y ~ a+b*x/(c+x),data=data,start=list(a=1,b=2,c=1))

与 Stata 有差异 从给定初值拟合所示非线性均值函数。nls与Stata的nl使用不同收敛控制,可能得到不同局部解。

拟合非线性指数均值曲线

Stata

nl (y = {a=2}*exp({b=0.2}*x))

R 包:stats

stats::nls(y ~ a*exp(b*x),data=data,start=list(a=2,b=0.2))

与 Stata 有差异 从给定初值拟合所示非线性均值函数。nls与Stata的nl使用不同收敛控制,可能得到不同局部解。

ologit

拟合有序logit回归

Stata

ologit y x z

R 包:MASS

MASS::polr(y ~ x+z,data=data,method="logistic",Hess=TRUE)

与 Stata 有差异 MASS使用累积连接截距;比较软件结果时需核对切点和斜率的符号约定。

oprobit

拟合有序probit回归

Stata

oprobit y x z

R 包:MASS

MASS::polr(y ~ x+z,data=data,method="probit",Hess=TRUE)

与 Stata 有差异 MASS使用累积连接截距;比较软件结果时需核对切点和斜率的符号约定。

poisson

通过暴露量拟合泊松发生率

Stata

poisson count x z, exposure(exposure)

R 包:stats

stats::glm(count ~ x+z+offset(log(exposure)),data=data,family=stats::poisson())

与 Stata 有差异 所示曝光量以对数offset显式纳入,曝光量必须为正。R返回glm对象或指数化系数,而非Stata估计表;须统一过度离散和稳健方差选项。

另有 2 个示例及替代实现

报告泊松发生率比

Stata

poisson count x z, irr

R 包:stats

{ fit <- stats::glm(count~x+z,data=data,family=stats::poisson()); exp(stats::coef(fit)) }

与 Stata 有差异 所示曝光量以对数offset显式纳入,曝光量必须为正。R返回glm对象或指数化系数,而非Stata估计表;须统一过度离散和稳健方差选项。

拟合无截距泊松回归

Stata

poisson count x z, noconstant

R 包:stats

stats::glm(count ~ x+z-1,data=data,family=stats::poisson())

与 Stata 有差异 所示曝光量以对数offset显式纳入,曝光量必须为正。R返回glm对象或指数化系数,而非Stata估计表;须统一过度离散和稳健方差选项。

probit

拟合probit回归

Stata

probit b x z

R 包:stats

stats::glm(b ~ x + z,data=data,family=stats::binomial(link="probit"))

与 Stata 有差异 R使用probit链接的二项GLM。须统一二元编码和完整样本;GLM结果对象和收敛容差不同于Stata的probit。

另有 1 个示例及替代实现

拟合无截距probit模型

Stata

probit b x z, noconstant

R 包:stats

stats::glm(b ~ x + z - 1,data=data,family=stats::binomial(link="probit"))

与 Stata 有差异 R使用probit链接的二项GLM。须统一二元编码和完整样本;GLM结果对象和收敛容差不同于Stata的probit。

qreg

拟合条件第25百分位回归

Stata

qreg y x z, quantile(25)

R 包:quantreg

quantreg::rq(y ~ x+z,data=data,tau=0.25)

与 Stata 有差异 拟合所选条件分位数。rq与Stata的qreg使用不同的优化程序和默认协方差估计;系数一致不代表标准误对应。

另有 1 个示例及替代实现

拟合条件第75百分位回归

Stata

qreg y x z, quantile(75)

R 包:quantreg

quantreg::rq(y ~ x+z,data=data,tau=0.75)

与 Stata 有差异 拟合所选条件分位数。rq与Stata的qreg使用不同的优化程序和默认协方差估计;系数一致不代表标准误对应。

regress

拟合二次项回归

Stata

regress y c.x##c.x

R 包:stats

stats::lm(y ~ x + I(x^2), data=data)

与 Stata 有差异 OLS系数对应要求使用相同的完整观测样本、因子对比和权重。R返回lm对象,其结构不同于Stata的系数表和存储估计。

另有 11 个示例及替代实现

加入两个连续主效应及交互项

Stata

regress y c.x##c.z

R 包:stats

stats::lm(y ~ x * z, data=data)

与 Stata 有差异 OLS系数对应要求使用相同的完整观测样本、因子对比和权重。R返回lm对象,其结构不同于Stata的系数表和存储估计。

拟合不同组的线性斜率

Stata

regress y c.x##i.g

R 包:stats

stats::lm(y ~ x * factor(g), data=data)

与 Stata 有差异 OLS系数对应要求使用相同的完整观测样本、因子对比和权重。R返回lm对象,其结构不同于Stata的系数表和存储估计。

在线性回归中控制分类变量

Stata

regress y i.g c.x

R 包:stats

stats::lm(y ~ factor(g) + x, data=data)

与 Stata 有差异 OLS系数对应要求使用相同的完整观测样本、因子对比和权重。R返回lm对象,其结构不同于Stata的系数表和存储估计。

拟合分析权重最小二乘回归

Stata

regress y x [aweight=w]

R 包:stats

stats::lm(y ~ x, data=data, weights=w)

与 Stata 有差异 权重与方差的倒数成比例。比较软件结果前需核对权重尺度和残差自由度。

在指定子样本中拟合线性回归

Stata

regress y x z if b == 1

R 包:stats

stats::lm(y ~ x + z, data=data, subset=b == 1)

与 Stata 有差异 OLS系数对应要求使用相同的完整观测样本、因子对比和权重。R返回lm对象,其结构不同于Stata的系数表和存储估计。

报告标准化线性回归系数

Stata

regress y x z, beta

R 包:stats

{ fit <- stats::lm(y ~ x + z, data=data); stats::coef(fit)[c("x","z")] * vapply(data[c("x","z")], stats::sd, numeric(1)) / stats::sd(data$y) }

与 Stata 有差异 OLS系数对应要求使用相同的完整观测样本、因子对比和权重。R返回lm对象,其结构不同于Stata的系数表和存储估计。

拟合无截距线性回归

Stata

regress y x z, noconstant

R 包:stats

stats::lm(y ~ x + z - 1, data=data)

与 Stata 有差异 OLS系数对应要求使用相同的完整观测样本、因子对比和权重。R返回lm对象,其结构不同于Stata的系数表和存储估计。

使用单向聚类标准误和聚类自由度

Stata

regress y x z, vce(cluster g)

R 包:sandwich

{ fit <- stats::lm(y ~ x + z, data = data, subset = !is.na(g)); lmtest::coeftest(fit, vcov. = sandwich::vcovCL(fit, cluster = ~g, type = "HC1"), df = length(unique(stats::expand.model.frame(fit, ~g)$g)) - 1L) }

与 Stata 有差异 演示样本只有三个聚类;实际推断需要足够多的独立聚类。

报告HC2异方差稳健线性回归推断

Stata

regress y x z, vce(hc2)

R 包:sandwich

{ fit <- stats::lm(y~x+z,data=data); lmtest::coeftest(fit, vcov.=sandwich::vcovHC(fit,type="HC2")) }

与 Stata 有差异 系数仍为最小二乘估计;此例显式选择协方差校正类型。

报告HC3异方差稳健线性回归推断

Stata

regress y x z, vce(hc3)

R 包:sandwich

{ fit <- stats::lm(y~x+z,data=data); lmtest::coeftest(fit, vcov.=sandwich::vcovHC(fit,type="HC3")) }

与 Stata 有差异 系数仍为最小二乘估计;此例显式选择协方差校正类型。

报告HC1异方差稳健线性回归推断

Stata

regress y x z, vce(robust)

R 包:sandwich

{ fit <- stats::lm(y~x+z,data=data); lmtest::coeftest(fit, vcov.=sandwich::vcovHC(fit,type="HC1")) }

与 Stata 有差异 系数仍为最小二乘估计;此例显式选择协方差校正类型。

rreg

拟合抗异常值双权重回归

Stata

rreg y x z

R 包:MASS

MASS::rlm(y ~ x+z,data=data,psi=MASS::psi.bisquare,init="lts",maxit=100)

工作流程对应:Stata的rreg使用自己的筛选和迭代顺序,系数不保证相同。

sqreg

同时拟合多个条件分位数

Stata

sqreg y x z, quantiles(25 50 75)

R 包:quantreg

quantreg::rq(y ~ x+z,data=data,tau=c(0.25,0.5,0.75))

此例拟合系数;Stata的sqreg还自助估计联合协方差,联合推断需使用共享重抽样。

tobit

拟合左删失正态Tobit模型

Stata

tobit y x z, ll(0)

R 包:AER

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

与 Stata 有差异 使用显式左和或右删失界限。AER返回基于survreg的高斯删失模型;尺度参数报告和系数表推断不同于Stata。

另有 2 个示例及替代实现

拟合双界限删失正态模型

Stata

tobit y x z, ll(0) ul(2)

R 包:AER

AER::tobit(y~x+z,data=data,left=0,right=2)

与 Stata 有差异 使用显式左和或右删失界限。AER返回基于survreg的高斯删失模型;尺度参数报告和系数表推断不同于Stata。

拟合右删失正态Tobit模型

Stata

tobit y x z, ul(2)

R 包:AER

AER::tobit(y~x+z,data=data,left=-Inf,right=2)

与 Stata 有差异 使用显式左和或右删失界限。AER返回基于survreg的高斯删失模型;尺度参数报告和系数表推断不同于Stata。

zinb

拟合零膨胀NB2计数模型

Stata

zinb count x, inflate(z)

R 包:pscl

pscl::zeroinfl(count~x|z,data=data,dist="negbin",link="logit")

与 Stata 有差异 NB2部分中的负二项theta参数等于Stata alpha的倒数。

zip

拟合采用logit零膨胀部分的零膨胀泊松模型

Stata

zip count x, inflate(z)

R 包:pscl

pscl::zeroinfl(count~x|z,data=data,dist="poisson",link="logit")

与 Stata 有差异 拟合所示零膨胀Poisson模型,分别指定计数和膨胀方程。须统一膨胀链接、offset和完整样本;优化程序及系数标签不同。

拟合采用probit零膨胀部分的零膨胀泊松模型

Stata

zip count x, inflate(z) probit

R 包:pscl

pscl::zeroinfl(count~x|z,data=data,dist="poisson",link="probit")

与 Stata 有差异 拟合所示零膨胀Poisson模型,分别指定计数和膨胀方程。须统一膨胀链接、offset和完整样本;优化程序及系数标签不同。