全部版块 我的主页
› 论坛 › 计量经济学与统计论坛 五区 › 计量经济学与统计软件 › Stata专版
89 3
2026-11-13
psacalc2.ado:支持 reghdfe 的 Oster 敏感性分析命令,634 行源码怎么用

 

Oster(2017)的系数稳定性检验,在 Stata 里一直靠 Emily Oster 的 psacalc 实现,由 SSC 提供。SSC 那一版(2020 年 10 月 22 日)支持 regress、areg 与 xtreg,但不认 reghdfe。而做多维固定效应的实证研究,reghdfe 几乎是默认工具,于是这条链断在了最常用的地方。

 

这个仓库就是一个补丁:作者 Arthur Howard Morris 复制了 SSC 版的 psacalc.ado,改名 psacalc2,让它认 reghdfe。仓库里只有两个文件,一是说明,二是 634 行的 psacalc2.ado。

 

补的缺口在哪

 

psacalc 的核心是拿"不受控"与"受控"两个回归的系数与 R,反推遗漏变量要有多强才能把结果解释掉。它需要从回归结果里读出控制变量与固定效应的信息。reghdfe 把这些信息放在不同的返回项里:吸收掉的固定效应在 e(absvars),聚类变量在 e(clustvar),还要额外的 residuals 选项才能支持 predict。补丁做的就是这几处适配。

 

作者在说明里写清了前提:他的修改建立在一个假设上,即 areg 与 reghdfe 算出的 R 可以互相比较;他同时提醒,任何估计软件都该先验证它确实按你以为的方式在算。这句话不是客套,Oster 方法对 R 的口径很敏感。

 

安装与调用

 

两个文件(psacalc2.ado 与 README.md)里,真正要装的是 ado。把它放到 Stata 的 ado 路径下(个人 ado 目录即可),命令名就是 psacalc2。

 

语法是 psacalc2 后接类型与处理变量,再跟选项:

 

psacalc2 delta x1

 

psacalc2 beta x1, rmax(1.
3) delta
(2)

 

它必须在一次线性回归之后运行,或者在选项里用 model() 指定完整回归。如果之前没有估计结果,会直接报"Previous estimation results not found"。

 

四个选项

 

mcontrol() 指定"不相关控制变量",也就是你不想当作受控变量、而是当作冗余项处理的那几个。这在 Oster 方法里对应"只保留部分控制变量"的用法。

 

mcontrolFE() 是补丁新增的,允许把 reghdfe 吸收掉的固定效应整体当作冗余项,这样处理效应与选择程度就只基于固定效应来算。

 

rmax() 是最大可能 R,默认 1.0。代码里卡了两道:超过 1 直接报 The maximum possible R-squared is 1,低于受控回归的 R 也会报错。所以实务中要先把受控 R 读出来,再决定给多大的上限。

 

delta() 与 beta() 分别对应两种提问方式下的输入,默认值分别是 1 与 0。

 

两种问法,两种输出

 

第一种是 delta 型:给定 rmax 与 delta,报告系数边界估计。输出叫"Bound Estimate",给出一个 delta 值,配两张输入表:不受控与受控回归的系数与 R,以及 R_max、Delta、冗余控制变量三项。

 

第二种是 beta 型:给定 delta 与 rmax,反推在此选择强度下的系数,并给出与受控系数的平方差以及偏误方向。输出表有三行:Beta、Alt. sol.
1、Alt. sol. 2,后两行是备选解。原因在代码里:当 delta 不等于 1 时,方程是三次的,解可能不止一个(代码调用 dnot1cubsol 解三次方程),所以命令会返回多个根,并用 r(root_count) 告诉你解的数量。

 

返回项可以直接在后续计算里用:r(beta)、r(dist)、r(altsol1)、r(altdist1)、r(altsol2)、r(altdist2)、r(root_count)、r(delta)。

 

它会拦下哪些操作

 

代码里有十余处显式报错,等于一份使用约束清单:

 

变量给多了(超过两个)会报 Too many variables;之前没有估计结果报 301;模型没有常数项、既无控制变量也无被当作控制的固定效应、不是线性回归(例如跑完 logit 再用)、xtreg 只允许 fe 与 be、rmax 大于
1、rmax 小于受控 R、类型不是 beta 或 delta、指定的处理变量不在模型里或不是自变量、mcontrol 里列了与模型无关的控制变量、把处理变量本身写进 mcontrol。

 

这些错误的措辞都挺直白,照着改基本能定位问题。真正需要留意的是"不是线性回归"与"xtreg 只允许 fe 与 be"这两条,它们决定了这个方法只能用在设定干净的线性模型上。

 

它明确不做的事

 

README 的未来工作里写着:让 psacalc 把 reghdfe 吸收的固定效应当冗余项。而代码里的 mcontrolFE 已经能处理一部分,两处表述不完全一致,用之前最好自己跑一遍验证结果是否符合预期。

 

方法层面也有边界。Oster 方法本身依赖"可观测与不可观测选择成比例"的假设,delta 与 rmax 的取值带有研究者判断,结果应作为稳健性证据,而不是点估计的替代。

 

用之前要知道的三件事

 


第一,运行需要合法的 Stata 授权。这是本批材料里唯一需要在软件上付费的一环,仓库本身免费,但没有 Stata 就跑不起来;如果你所在机构已有授权,直接用即可。

 


第二,仓库没有 LICENSE 文件,README 也没写许可条款,而它本身是对 SSC 版 psacalc 的修改版,原作者是 Emily Oster。这意味着可以读、可以自己下载使用,但整包再分发或写进商业培训材料并不合适。

 


第三,方法引用与代码引用要分开写:方法引 Oster(2017)发表在 Journal of Business Economics and Statistics 的那篇,代码引这个仓库与 SSC 的 psacalc,并注明你用的是修改版 psacalc2。

 

────────────────

仓库与 ado 文件的直达地址、完整语法与六个选项、返回项与报错清单原文、Oster 原文 DOI 与 SSC 安装方式,回复本帖即可见。


游客,如果您要查看本帖隐藏内容请回复

把经管之家装进你常用的 AI 智能体中

一键快捷安装经管之家 MCP/技能,让 AI 帮你查教程、找数据、读论坛帖子。

检索、阅读公开帖子不收费,安装可申请领取:3 通用积分+100 论坛币+3 元论坛资金

请点击查看安装教程与福利 →

说明: AI 算力按所用平台规则计算;附件按原帖条件获取;福利领取条件以活动页面为准。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
5 小时前
reghdfe之后终于能直接跑了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

3 小时前
reghdfe之后终于能直接跑了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

半小时前
支持一下
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群