Stata中estpost结合ttest时reverse选项无法使用的解决求助
解决Stata estpost ttest不支持reverse选项的问题
针对estpost不兼容ttest的reverse选项的问题,这里提供3种可行的解决思路,适配批量变量处理需求:
方法1:手动反转分组变量(最直接)
核心思路是通过生成反向分组变量,让ttest默认的对比顺序等价于reverse选项的效果。原reverse是将默认的「组1 - 组0」反转成「组0 - 组1」,我们直接生成一个取值反转的分组变量即可:
sysuse auto,clear local varlist mpg price weight * 生成各组描述统计 eststo foreign: quietly estpost summarize `varlist' if foreign==0 eststo domestic: quietly estpost summarize `varlist' if foreign==1 * 生成反向分组变量(0变1,1变0) gen foreign_rev = 1 - foreign * 基于反转后的分组执行ttest,结果等价于加了reverse选项 eststo diff: quietly estpost ttest `varlist', by(foreign_rev) unequal esttab foreign domestic diff, se star(* 0.1 ** 0.05 *** 0.01)
方法2:修改estpost存储的结果矩阵
estpost执行ttest后,会将均值差、标准误、t值等结果存在e()矩阵中。我们可以手动对这些矩阵取反,实现reverse的效果:
sysuse auto,clear local varlist mpg price weight eststo foreign: quietly estpost summarize `varlist' if foreign==0 eststo domestic: quietly estpost summarize `varlist' if foreign==1 * 先执行不带reverse的estpost ttest eststo diff_temp: quietly estpost ttest `varlist', by(foreign) unequal * 提取并反转结果矩阵:均值差和t值取反,标准误、p值不变 estimates restore diff_temp matrix b_rev = -e(b) // 反转均值差 matrix t_rev = -e(t) // 反转t值 * 标准误和p值无需修改 matrix se_rev = e(se) matrix p_rev = e(p) * 将修改后的矩阵存回当前估计结果 estadd matrix b = b_rev estadd matrix se = se_rev estadd matrix t = t_rev estadd matrix p = p_rev * 存储修改后的结果 eststo diff: estimates store diff_temp esttab foreign domestic diff, se star(* 0.1 ** 0.05 *** 0.01)
方法3:批量提取ttest(reverse)结果并整合到esttab
如果需要批量处理大量变量,可以直接循环执行带reverse的ttest,提取统计量后通过esttab的addstat参数插入表格:
sysuse auto,clear local varlist mpg price weight eststo foreign: quietly estpost summarize `varlist' if foreign==0 eststo domestic: quietly estpost summarize `varlist' if foreign==1 * 循环提取每个变量的reverse版ttest统计量 local addstat_content foreach var of local varlist { quietly ttest `var', by(foreign) unequal reverse * 拼接addstat需要的内容:统计量标签 + 对应值 local addstat_content `"`addstat_content' "Mean Diff (`var')" `r(mu_1)-r(mu_2)', "Std Err (`var')" `r(se)', "t-value (`var')" `r(t)', "P-value (`var')" `r(p)', "' } * 生成包含自定义统计量的表格 esttab foreign domestic, addstat(`addstat_content') star(* 0.1 ** 0.05 *** 0.01)
内容的提问来源于stack exchange,提问作者Christopher
相关产品推荐
相关产品推荐

