You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

适用于ologit的Stata esttab命令rename选项替代方案

解决esttab混合OLS与有序logit时无法合并变量名的问题

我明白你遇到的困扰:当两个模型都是OLS时,rename()选项能轻松把x1x2合并显示为同一行的x,但混合有序logit模型时就失效了。这是因为esttab对不同类型模型的变量元数据处理逻辑不同,不会自动将重命名后的跨模型变量视为同一行内容。下面给你几个可行的解决方案:

方案1:用临时变量统一变量名(最推荐)

这是最简单且不易出错的方法——估计模型前,先把x1x2通过临时变量重命名为x,这样两个存储的模型里自变量名完全一致,esttab会自动对齐到同一行:

* 清空之前存储的模型
eststo clear

* 估计OLS模型:临时变量替换x1为x
tempvar x
gen `x' = x1
eststo model1: qui reg y `x'
drop `x'  // 用完就删,不污染原数据

* 估计有序logit模型:临时变量替换x2为x
gen `x' = x2
eststo model2: qui ologit y `x'
drop `x'

* 导出到LaTeX,无需额外rename,变量名默认就是x
esttab model1 model2, se star(* 0.1 ** 0.05 *** 0.01) tex

导出的LaTeX表格里,x会作为唯一的自变量行,左右分别对应OLS和有序logit的系数,完全符合你的需求。

方案2:直接修改存储模型的变量名

如果你不想动原数据或用临时变量,可以直接修改已存储模型中的变量名,借助estimates modify命令实现:

eststo clear

* 先估计原始模型
eststo model1: qui reg y x1
eststo model2: qui ologit y x2

* 把model2里的x2改名为x
estimates modify model2: rename x2 x
* 把model1里的x1改名为x
estimates modify model1: rename x1 x

* 导出到LaTeX
esttab model1 model2, se star(* 0.1 ** 0.05 *** 0.01) tex

这个方法直接修改存储模型的内部变量名,让两个模型的自变量名统一为xesttab就能正常合并显示了。

方案3:手动构建系数矩阵(灵活定制)

如果需要高度定制输出格式,可以手动提取系数和标准误,构建自定义矩阵后再导出:

eststo clear

* 估计两个模型
eststo model1: qui reg y x1
eststo model2: qui ologit y x2

* 提取系数并构建矩阵
matrix b_ols = e(b)[1, "x1"]
matrix b_ologit = e(b)[1, "x2"]
matrix b = (b_ols, b_ologit)
matrix colnames b = "OLS" "Ordered Logit"
matrix rownames b = "x"

* 提取标准误并构建矩阵
matrix se_ols = sqrt(diag(e(V)))[1, "x1"]
matrix se_ologit = sqrt(diag(e(V)))[1, "x2"]
matrix se = (se_ols, se_ologit)
matrix colnames se = "OLS" "Ordered Logit"
matrix rownames se = "x"

* 导出自定义矩阵到LaTeX
esttab matrix(b), se(se) star(* 0.1 ** 0.05 *** 0.01) tex title("Regression Results")

这种方法适合复杂定制场景,但步骤相对繁琐。

小提醒

有序logit的系数是对数比数比(log-odds ratio),和OLS的边际效应含义完全不同,建议在表格中添加脚注或标注说明两者的差异,避免读者误解~

内容的提问来源于stack exchange,提问作者No Zurl

火山引擎 最新活动