适用于ologit的Stata esttab命令rename选项替代方案
解决esttab混合OLS与有序logit时无法合并变量名的问题
我明白你遇到的困扰:当两个模型都是OLS时,rename()选项能轻松把x1和x2合并显示为同一行的x,但混合有序logit模型时就失效了。这是因为esttab对不同类型模型的变量元数据处理逻辑不同,不会自动将重命名后的跨模型变量视为同一行内容。下面给你几个可行的解决方案:
方案1:用临时变量统一变量名(最推荐)
这是最简单且不易出错的方法——估计模型前,先把x1和x2通过临时变量重命名为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
这个方法直接修改存储模型的内部变量名,让两个模型的自变量名统一为x,esttab就能正常合并显示了。
方案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




