如何用nlcom还原的原始参数替换esttab表格中的转换参数?
解决Stata中替换回归参数并合并结果的方法
要实现将nl估计的转换参数替换为nlcom还原的原始参数,且不新增结果列,核心是手动修改估计结果的系数向量(e(b))和方差矩阵(e(V)),具体步骤如下:
1. 运行基础回归并保存原始估计信息
先执行nl回归,同时保存初始的系数和方差矩阵:
sysuse auto, clear est clear // 运行非线性回归,用转换参数lna nl (price = exp({lna}) * length + {c}), nolog // 保存原始系数和方差矩阵 matrix b_orig = e(b) matrix V_orig = e(V) // 按需保存其他统计量,比如样本量、R²等 scalar N_orig = e(N) scalar r2_orig = e(r2)
2. 用nlcom计算还原后的参数
执行nlcom计算原始参数,但不使用post选项,避免新增结果:
// 计算还原后的参数a=exp(lna),不post nlcom a: exp(_b[lna:_cons]) // 保存nlcom得到的系数和方差 matrix b_nlcom = e(b) matrix V_nlcom = e(V)
3. 修改系数向量和方差矩阵
将原始矩阵中的lna参数替换为nlcom得到的a,同时修改矩阵的列名/行名:
// 替换系数向量 matrix b_new = b_orig // 定位lna的位置并替换为a的系数 matrix b_new[1, coln(b_new, "lna:_cons")] = b_nlcom[1, "a:_cons"] // 修改列名为原始参数名a matrix colnames b_new = "a:_cons" "c:_cons" // 替换方差矩阵 matrix V_new = V_orig // 替换lna对应的方差项为a的方差 matrix V_new[coln(V_new, "lna:_cons"), coln(V_new, "lna:_cons")] = V_nlcom[coln(V_nlcom, "a:_cons"), coln(V_nlcom, "a:_cons")] // 修改方差矩阵的行列名为原始参数名 matrix colnames V_new = "a:_cons" "c:_cons" matrix rownames V_new = "a:_cons" "c:_cons"
4. 赋值回估计结果并保存
将修改后的矩阵赋值回e(b)和e(V),同时还原之前保存的其他统计量,最后保存修改后的估计结果:
// 将新的系数和方差矩阵写入ereturn ereturn post b_new V_new, esample(`e(sample)') // 还原其他统计量 ereturn scalar N = N_orig ereturn scalar r2 = r2_orig // 保存修改后的估计结果 estimates store modifiedReg
5. 输出结果
用esttab输出修改后的结果,此时列中显示的就是还原后的参数57.20,而非转换参数4.047:
esttab modifiedReg, se star(* 0.1 ** 0.05 *** 0.01)
关键说明
- 必须手动修改
e(b)和e(V):因为nlcom, post会生成新的估计结果集,无法直接替换原回归的参数;通过修改这两个核心矩阵,能直接更新原回归的结果展示。 - 需保留必要统计量:除了系数和方差,样本量、R²等统计量需要手动还原,否则输出表格会缺失这些信息。
内容的提问来源于stack exchange,提问作者bonifaz
相关产品推荐
相关产品推荐

